- •Качество и надежность программного обеспечения
- •Лекция 1. Введение. Основные стандарты и термины по качеству программного обеспечения. Метрики и критерии качества программных продуктов. Составляющие качества программных продуктов.
- •Цели и задачи курса, его связь с другими дисциплинами учебного плана.
- •ГосТы . Основные понятия и ключевые слова по качеству и надежности пп.
- •Общие термины
- •Общие характеристики качества программного средства
- •Лекция 2. Классификация видов сложности программных продуктов. Метрические характеристики программ по м.Холстеду
- •Оценивание качества разработки программ на основе метрик Холстеда. Измеримые свойства алгоритмов
- •Длина программы
- •4. Объем программы
- •Потенциальный объем V*
- •Лекция 3. Уровень программ. Интеллектуальное содержание программы.
- •1. Уровень программы
- •2. Вывод уравнения уровня программы
- •3. Определение интеллектуального содержания программ
- •Лекция 4. Работа в программировании. Уровни языков программирования. Метрика числа ошибок в программе.
- •Значение уровня языка
- •Лекция 5. Метрики структурной сложности программ.
- •Лекция 6. Методы и средства измерения характеристик программ. Аппаратные измерительные мониторы.
- •Лекция 7. Программные измерительные мониторы.
- •Лекция 8. Понятие корректности программ.
- •II. Эталоны и методы проверки корректности.
- •Лекция 9. Аналитическая проверка корректности программ. Верификация программ.
- •Лекция 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 Влияние избыточности на повышение надежности программ
- •Эффективность применения избыточности для повышения надежности комплексов программ
- •Влияние оперативного контроля и восстановления на производительность эвм.
- •Методы программного восстановления
- •Методы обеспечения надежности комплексов программ при сопровождении
- •Литература
Покрытие ветвей
Покрытие решений может быть реализовано двумя тестами, покрывающими либо пути ace и abd, либо пути acd и abe. Если выбрать второе покрытие, то входами двух тестов являются: A=3; B=0; X=3 (путь acd) и A=2; B=1; X=1 (путь
abe). Эти тесты также недостаточны. Например, если выбрано первое покрытие (путь acd),путь, где X не изменяется, будет проверен с вероятностью 50%. Если во втором условии имеется ошибка (например, X<1 вместо X>1), то эта ошибка тестами не будет обнаружена!
Покрытие условий
В программе имеются 4 условия: A > 1, B = 0, A = 2 и X > 1. Следовательно, требуется достаточное число тестов, чтобы реализовать ситуации, где A>1, A1, B=0 и B0 (первое условие) и A=2, A2, X>1, X1 (второе условие). Тесты, удовлетворяющие критерию покрытия условий, и соответствующие им пути:
A=2; B=0; X=4 (путь ace);
A=1; B=1; X=1 (путь abd)
Критерий покрытия условий обычно лучше критерия покрытия решений, поскольку оно может вызвать выполнение решений в условиях, не реализуемых при покрытии решений.
С другой стороны, критерий покрытия условий может не удовлетворять критерию покрытия решений. Для рассмотренного примера предложенные тесты покрытия условий покрывают результаты всех решений, но это случайное совпадение. Например, два альтернативных теста: A=1, B= 0, X=3 и
A=2, B=1, X=1 покрывают результаты всех условий, но только два из четырех результатов решений (оба они покрывают путь abe и, следовательно, не выполняют результат истина первого решения и результат ложь второго решения).
Комбинаторное покрытие условий
По этому критерию должны быть покрыты тестами следующие 8 комбинаций:
(1) A > 1, B = 0 (5) A = 2, X >1
(2) A > 1, B 0 (6) A = 2, X 1
(3) A < 1, B = 0 (7) A 2, X >1
(4) A < 1, B 0 (8) A 2, X 1
Следует обратить внимание, что комбинации (5) – (8) представляют собой значения второго оператора if. Поскольку X может быть изменено до выполнения этого оператора, значения, необходимые для его проверки, следует восстановить исходя из логики программы с тем, чтобы найти соответствующие входные значения.
Для того, чтобы протестировать эти комбинации, необязательно использовать все восемь тестов. Фактически они могут быть покрыты четырьмя тестами:
A=2, B=0, X=4 покрывает 1,5
A=2, B=1, X=1 покрывает 2,6
A=1, B=0, X=2 покрывает 3,7
A=2, B=0, X=4 покрывает 4,8
2. Тестирование на основе потока данных
Первоначально анализ потока данных использовался при статическом тестировании программ для выявления ссылок на неинициализированные переменные и избыточных присваиваний.
В настоящее время используется несколько стратегий тестирования на основе потока данных:
тестирование всех взаимосвязей, включающих в себя ссылку (использование) и определение переменной, на которую указывает ссылка, т.е. должны покрываться дуги информационного графа программы. Недостаток стратегии заключается в том, что она не гарантирует покрытие решений;
стратегия требуемых пар, при которой тестируются пары (вершина, дуга). Использование переменной в предикате дублируется в соответствии с числом выходов решения, и каждая из таких взаимосвязей должна быть протестирована. При этом определение переменной производится в вершине управляющего графа программы, а использование – как на дугах, исходящих из решений, так и в вычислительных вершинах.