Слайд 1Тестирование и отладка ПС.
Отвагин Алексей Владимирович, доцент каф. ЭВМ,
к.т.н., а. 505-5
Слайд 208/13/2019
Содержание
Основные определения
Тестирование на базе спецификаций
Тестирование с выполнением программ
Слайд 308/13/2019
Основные определения
Отладка ПС – деятельность, направленная на обнаружение и исправление
ошибок в ПС с использованием спецификаций и процессов выполнения его
программ
Тестирование ПС – процесс выполнения программ на некотором наборе данных, для которого заранее известен результат применения или правила поведения этих программ
Тест - набор данных для тестирования
Отладка = Тестирование + Поиск ошибок + Устранение
Слайд 408/13/2019
Обзор тестирования
Аналитическое
Пошаговая детализация
Сосредоточена на основной цели ПС, игнорируя детали
Анализ стоимость-производительности
Метрики
Система
раннего предупреждения – основана на метриках
Стоимость, длительность разработки, прибыль, размер,
качество
Автоматизированное
Онлайн проверки
Версии
Документирование вариаций
Преимущества
Производительность, скорость, простота, эффективность
Слайд 508/13/2019
Необходимость тестирования
Почему тестирование столь важно?
Позволяет устранить ошибки на ранних стадиях
Интегрируется
во все фазы
Промежуточное тестирование
Окончательное тестирование
Слайд 608/13/2019
Дополнительные определения
Тестирование исполняемого кода
Запуск тестов на работающей программе
Тестирование спецификаций
Тщательный анализ
кода или документов
Верификация
Определение, насколько корректно завершена фаза
Валидация
Определение степени соответствия продукта
требованиям
Слайд 708/13/2019
Тестирование на базе спецификаций
Основные принципы
Не тестировать собственную работу
Использовать команды тестеров
Два
типа тестирования
проходы
инспекции
Отличия типов
Проходы имеют меньше этапов
Инспекции сохраняют детальные отчеты, используемые
в последующем
Слайд 808/13/2019
Проходы
Группы 4-6 человек под руководством инженера по качеству
Разработчики спецификаций, клиенты,
программисты
Опытные специалисты
Каждый участник группы
Создает список проверенных элементов
Создает список ошибочных элементов
Интерактивно
взаимодействует с другими
Производительность зависит от квалификации
Слайд 908/13/2019
Инспекции
Процесс из 5 стадий
Общий устный обзор – пояснение и раздача
документов
Подготовка – участники разбираются в деталях представленных документов и анализируют
результаты прошлых инспекций
Инспекция
Каждый участник тщательно проверяет документы
Создание ежедневного отчета о найденных ошибках
Переработка – ответственные за ошибки разработчики устраняют недочеты
Завершение – проверка корректности отчета об инспекции
Если изменено более 10% документов, проводится новая инспекция
Слайд 1008/13/2019
Статистика ошибок
Накапливается по степени серьезности и разновидности ошибок
Метрики
Плотность ошибок (ошибок
/ стр. или ошибок / строк кода)
Степень серьезности (критическая/серьезная/важная/незначительная)
Скорость поиска
ошибок (ошибок / час)
Использование статистики
Помогает оценить результаты инспекции
Концентрирует внимание на проблемах
Сравнение с предыдущим продуктом на той же стадии
непропорциональное количество ошибок в модуле
непропорциональное количество ошибок определенного типа
Слайд 1108/13/2019
Преимущества и недостатки аналитического тестирования
Преимущества
Успешно определяет ошибки
Ошибки выявляются на ранних
стадиях
Недостатки
Сложно применить в системах запутанной архитектуры
Эффективно применять в ООП –
небольшие изолированные модули
Требует обновления документации из предыдущей фазы
Слайд 1208/13/2019
Тестирование на базе выполнения кода
Тестируемые свойства:
Соответствие результатов спецификации
Надежность
Производительность
Точность
Слайд 1308/13/2019
Проектирование набора тестов
Набор тестов должен обнаруживать максимум ошибок
Набор тестов должен
быть минимален (сокращать время тестирования)
Слайд 1408/13/2019
Модель процесса тестирования
Слайд 1508/13/2019
Стратегии тестирования
Тесты, основанные на спецификациях (black-box)
Тесты, основанные на структуре кода
(white-box)
Оптимальная стратегия (40% - black box, 60% - white box)
Слайд 1608/13/2019
Стратегии тестирования
Тесты, основанные на спецификациях (black-box)
Тесты, основанные на структуре кода
(white-box)
Оптимальная стратегия (40% - black box, 60% - white box)
Слайд 1708/13/2019
Тестирование по спецификации
Основано на данных (логические или математические отношения между
входом и выходом)
Применяется для тестирования модуля и обнаружения ошибок кодирования
Использует
граничное тестирование
Слайд 1808/13/2019
Пример для тестирования
Программа вычисляет сумму кредита в зависимости от возраста
Ввод:
пол [м,ж], возраст [18-55], зарплата [0-10000]
Вывод: сумма возможного кредита
Кредит =
зарплата * множитель
Слайд 1908/13/2019
Программа, реализующая пример
int Кредит (int муж, int возраст, int зарплата)
{
if (муж)
{
return ((18
(31<= возраст <40)?(1.55* зарплата):
(1.30* зарплата))
}
else
{
return ((18<= возраст <30)?(1.75* зарплата):
(31<= возраст <40)?(1.50* зарплата):(1.35* зарплата))
}
}
Слайд 2008/13/2019
Тестирование примера
Каждый тест = комбинация ввода + ожидаемый вывод
Полное тестирование
требует перебора всех комбинаций
Нужно выбрать комбинации:
по покрываемым ошибкам
по типу ввода
(граничное, реальное, запредельное значения)
Слайд 2108/13/2019
Тестирование значений входов
Применяется для каждой переменной x, изменяемой в пределах
[a;b]
Количество тестов для n входов = 4n+1
Слайд 2208/13/2019
Расширенное тестирование значений входов
Применяется для каждой переменной x, изменяемой в
пределах [a;b] и за пределами диапазона
Количество тестов для n входов
= 6n+1
a
b
x
Слайд 2308/13/2019
Надежное тестирование значений входов (worst case)
Применяется для каждой переменной x,
изменяемой в пределах [a;b] и за пределами диапазона, а также
для комбинаций переменных
Количество тестов для n входов = 5n
Слайд 2408/13/2019
Применимость граничного тестирования
Требует независимых входов
Требует количественного выражения переменных
Легко применимо для
поиска ошибок, связанных с неправильным значением переменной
Слайд 2508/13/2019
Эквивалентное разделение домена
Для каждой переменной x, изменяемой в пределах [a;b]
диапазон делится на Sx поддиапазонов
Переменные должны быть независимы
Слабый вариант: количество
тестов = MAX(Sx)
Слайд 2608/13/2019
Эквивалентное разделение домена
Для каждой переменной x, изменяемой в пределах [a;b]
диапазон делится на Sx поддиапазонов
Строгий нормальный вариант:
количество тестов = Πx
sx (произведение числа поддиапазонов)
Слайд 2708/13/2019
Эквивалентное разделение домена
Тестирование за пределами диапазонов
Слабый надежный вариант: количество тестов
= Maxx sx + Σx 2
Слайд 2808/13/2019
Эквивалентное разделение домена
Тестирование за пределами диапазонов везде
Строгий надежный вариант: количество
тестов = Πx (sx+2)
Слайд 2908/13/2019
Применимость разделения домена
Большее покрытие при меньшем объеме тестов
Требует независимых переменных
Требует
числовых значений переменных
Может комбинироваться с граничным тестированием
Слайд 3008/13/2019
Случайное тестирование
Входные комбинации генерируются случайным образом
Может быть достаточно эффективным
Обычно применяется
в комбинации с систематическим
Слайд 3108/13/2019
Тестирование по структуре кода (white-box testing)
Предполагает исследование логики алгоритма
Направлено на
проверку всех возможных логических путей выполнения
Требует высокой квалификации тестировщика
Слайд 3208/13/2019
Пример тестирования – задача определения типа треугольника
вход: a,b,c: [1,..]
выход: тип
равносторонний/равнобедрен-ный/произвольный/ошибка
требования: формулируются математически
тесты: комбинация входов и ожидаемый выход
структура теста: каждый
тест – путь в программе
String Triangle (int a, int b, int c){
int IsATriangle;
{
if ((a IsATriangle = 1;
else IsATriangle = 0;
if (IsATriangle)
{
if ((a==b) && (b==c))
return “Равносторонний”;
else {
if ((a!=b) && (a!=c) && (b!=c))
return “Произвольный”;
else return “Равнобедренный”;
}
}
else return “Ошибка”;
}
Слайд 3308/13/2019
Граф программы
5. IsATriangle = 1
7. IsATriangle?
9. ((a==b) && (b==c))?
10. “Равносторонний”
13.
“Произвольный”
14. “Равнобедренный”
16. end
4. ((a
(a!=c) && (b!=c))?
6. IsATriangle = 0
15. “Ошибка”
3. begin
Слайд 3408/13/2019
Представление теста
Каждый тест представляет путь в графе, например a=b=c=1: “Равносторонний”
Покрывает:
узлы
ребра
Полное
покрытие не всегда достижимо
Слайд 3508/13/2019
Создание тестов
Создается матрица покрытия вершин графа
В строке – путь, в
столбцах – номера вершин
Базис графа программы = множество путей
таких, что:
количество = число дуг – число вершин +2
Все строки в матрице независимы
Слайд 3608/13/2019
Создание тестов
Создать новый путь p’ из базового:
Изменить (еще не тронутый)
переход
Свободно выбирать следующий узел
Слайд 3708/13/2019
Создание тестов
Создать новый путь p’ из базового:
Изменить (еще не тронутый)
переход
Свободно выбирать следующий узел
Слайд 3808/13/2019
Создание тестов
Создать новый путь p’ из базового:
Изменить (еще не тронутый)
переход
Свободно выбирать следующий узел
Слайд 3908/13/2019
Критерий полноты покрытия
Операторы: выполняется каждый узел графа
Условия: выполняется переход по
каждой дуге
Циклы:
Цикл не выполняется ни разу
Цикл выполняется определенное количество итераций
Цикл
выполняется до конца
Слайд 4008/13/2019
Недостижимые пути
Определяют «мертвый код», который никогда не сработает
Соответствуют ошибке в
логике алгоритма
Выявляются только при тестировании white-box
Слайд 4108/13/2019
Характеристика тестирования по структуре кода
Обеспечивает максимальное покрытие
Ограничено по количеству тестов
Выявляет
многие ошибки