- •Качество и надежность программного обеспечения
- •Лекция 1. Введение. Основные стандарты и термины по качеству программного обеспечения. Метрики и критерии качества программных продуктов. Составляющие качества программных продуктов.
- •Общие термины
- •Лекция 2. Классификация видов сложности программных продуктов. Метрические характеристики программ по м.Холстеду
- •Оценивание качества разработки программ на основе метрик Холстеда. Измеримые свойства алгоритмов
- •Длина программы
- •4. Объем программы
- •Потенциальный объем V*
- •Лекция 3. Уровень программ. Интеллектуальное содержание программы.
- •1. Уровень программы
- •2. Вывод уравнения уровня программы
- •3. Определение интеллектуального содержания программ
- •Лекция 4. Работа в программировании. Уровни языков программирования. Метрика числа ошибок в программе.
- •5 S 20 в сек
- •Значение уровня языка
- •Лекция 5. Метрики структурной сложности программ.
- •Где pi – количество вершин ветвления в I-том маршруте без учета последней вершины
- •M5 1 – 3 – 4 – 6 – 8 – 14 независимые
- •Лекция 6. Методы и средства измерения характеристик программ. Аппаратные измерительные мониторы.
- •Лекция 7. Программные измерительные мониторы.
- •Лекция 8. Понятие корректности программ.
- •II. Эталоны и методы проверки корректности.
- •Лекция 9. Аналитическая проверка корректности программ. Верификация программ.
- •Invk (x1, … , xn),
- •Invt1 (x1, … , xn): p ; invt2 (x1, … , xn): q ; invt3 (x1, … , xn) ; … ,
- •U: invr(x1, … , xn) u0
- •Лекция 10. Тестирование программных продуктов
- •1. Основные понятия процесса тестирования
- •2. Объекты тестирования
- •3. Категории тестов для различных объектов тестирования
- •Лекция 11. Виды, критерии и методы тестирования. Методы структурного тестирования программ
- •1. Тестирование на основе потока управления
- •2. Тестирование на основе потока данных
- •Лекция 12. Методы функционального тестирование программных продуктов
- •1. Метод эквивалентного разбиения
- •1.1. Выделение классов эквивалентности
- •1.2. Построение теста
- •2. Анализ граничных значений
- •3. Метод функциональных диаграмм
- •4. Метод, основанный на предположении об ошибке
- •Лекция 13. Основные показатели надежности программного обеспечения (по). Математические модели оценки надежности по.
- •13.1. Основные показатели надежности программного обеспечения (по).
- •13.2. Математические модели оценки надежности по.
- •Модель Джелинского-Моранды.
- •Модель Шика-Уолвертона.
- •Лекция 14. Модели, основанные на методе "посева" и разметки ошибок, и модели на основе учета структуры входных данных
- •Модель Нельсона. Применение последовательного анализа Вальда для снижения количества прогонов программы.
- •Лекция 15. Методы повышения надежности программ и оценка эффективности их применения.
- •15.1 Влияние избыточности на повышение надежности программ
- •Эффективность применения избыточности для повышения надежности комплексов программ
- •Влияние оперативного контроля и восстановления на производительность эвм.
- •Методы программного восстановления
- •Методы обеспечения надежности комплексов программ при сопровождении
- •Литература
3. Категории тестов для различных объектов тестирования
На разных этапах ЖЦ программного обеспечения для каждой категории объектов тестирования ставятся свои задачи тестирования и, соответственно, применяются свои виды тестирования и категории тестов. Каждая категория имеет специфическое, частное назначение для выявления ошибок определенного класса.
Для описанных выше объектов тестирования выделяются следующие категории тестов:
На этапе тестирования спецификаций:
полноты и согласованности функций программных компонент;
согласованности интерфейса в спецификациях программных компонент.
На этапе тестирования программных модулей:
структуры программного модуля;
вычислений и преобразований данных программным модулем;
полноты функций, выполняемых модулем.
На этапе тестирования функциональных групп программ:
структуры группы программ;
межмодульного интерфейса в группе программ;
выполнения ограничений по использованию памяти и длительности исполнения группы программ;
полноты решения функциональных задач группой программ.
На этапе тестирования комплекса программ при отладке:
полноты решения функциональных задач комплексом программ для типовых исходных данных;
функционирования программ в критических ситуациях по условиям и логике решения задач;
корректности использования ресурсов памяти и производительности вычислительной системы;
параллельного (одновременного) исполнения различных программ;
эффективности защиты от искажения входных данных;
определения надежности комплекса программ;
оценки эффективности защиты от сбоев аппаратуры и не выявленных ошибок программ.
На этапе тестирования комплекса программ при испытаниях:
испытаний на соответствие комплекса программ техническому заданию;
удобства эксплуатации и взаимодействия человека с комплексом программ;
удобства установки и подготовки рабочей версии;
работы комплекса программ при конфигурациях оборудования;
корректности документации;
удобства сопровождения и модификации программ.
Тестирование при сопровождении комплекса программ осуществляется с использованием практически всех выше перечисленных категорий тестов, характерных для разработки и испытаний комплекса программ. С этой позиции сопровождение является повторением процесса создания программ или его отдельных этапов. Однако при. сопровождении редко применяется вся совокупность систематизированных категорий тестов.
Применение перечисленных выше категорий тестов зависит от класса разрабатываемых программ. Организация и эффективное проведение обширного систематического тестирования требуют больших затрат и высокой квалификации специалистов, которые в области тестируемых программ должны иметь квалификацию не ниже, чем их разработчики.
Одним из общих принципов тестирования ПО является проведение работ по тестированию в течение всего ЖЦ.
Лекция 11. Виды, критерии и методы тестирования. Методы структурного тестирования программ
Остановимся более подробно на критериях и методах тестирования программных модулей и групп программ, решающих законченные функциональные задачи.
При этом будут рассматриваться следующие виды тестирования:
модульное – проверка корректности структуры модулей и их основных конструктивных компонент (циклов, блоков, разветвлений), функций и данных (входных и выходных);
интеграционное – проверка корректности управляющих и информационных связей между модулями. При проведении интеграционного тестирования важным является порядок сбора модулей в единую программу. Существует два основных подхода к комбинированию модулей:
пошаговое – каждый модуль подключается к набору ранее оттестированных модулей (сверху вниз или снизу вверх);
монолитное – все модули одновременно объединяются в программу;
системное – проверка соответствия интегрированной в единое целое программной системы спецификациям с учетом среды и режима выполнения;
Модульное и интеграционное тестирование основаны на структурных методах (принцип "белого ящика"). При применении этих методов существенно используются знания о структуре программы вне зависимости от того, является ли она отдельным модулем или группой модулей. При структурном тестировании всегда существует модель, отражающая логику работы программы и критерий проведения тестирования, причем количество необходимых тестов при этом ограничено.
При проведении системного тестирования используется методология функционального тестирования (принцип "черного ящика), в которой для построения тестов не используется информация о структуре программы, а используются ее функциональные спецификации.
При функциональном тестировании средних и больших программных проектов трудно предложить правила, ограничивающие необходимый объем тестирования, т. к. системное тестирование включает в себя множество категорий тестов, в том числе тесты для проверки:
функциональности программы;
работы на предельных объемах;
работы на предельных нагрузках;
удобства эксплуатации программы;
защиты от несанкционированного доступа;
производительности;
требований к памяти;
конфигураций оборудования;
совместимости;
удобства инсталляции;
надежности;
восстановления при сбоях;
документации на программу.
Деление методов тестирования на функциональные и структурные производится в зависимости от источника тестовых данных. Как правило, структурное и функциональное тестирование хорошо сочетаются, так что для каждого структурного теста существует его точная функциональная интерпретация.
Остановимся более подробно на этих методах тестирования.
Методы структурного тестирование программ
При структурном тестировании учитываются внутренние механизмы работы модуля или группы программ. Тестирование но принципу "белого ящика" характеризуется степенью, в какой тесты выполняют или покрывают логику программы (исходный текст). Элементами, которые должны быть покрыты при прохождении тестов, являются вершины, дуги, маршруты, условия, комбинации условий управляющего графа программы. В настоящее время неплохо себя зарекомендовали критерии структурного тестирования, для которых требуемые элементы определяются на основе потока данных, т. е. информационного графа программы.