SlideShare a Scribd company logo
1 of 64
Download to read offline
Полнота тестирования ПО
Software Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) NP 2014 147 / 320
Quiz
Марат Ахин (СПбГПУ) NP 2014 148 / 320
Recap
Марат Ахин (СПбГПУ) NP 2014 149 / 320
Проблемы тестирования Проблемы тестирования
Проблемы тестирования
What’s up, Doc? (с)
Проблема тестовых входных данных
Проблема наблюдаемости
Проблема «останова»
Проблема тестового оракула
Марат Ахин (СПбГПУ) NP 2014 150 / 320
Проблема «останова»
Содержание
1 Проблема «останова»
Проблема «останова» в тестировании
Тестовое покрытие
Покрытие потока управления
Покрытие потока данных
Мутационное тестирование
Оценка тестового покрытия
Марат Ахин (СПбГПУ) NP 2014 151 / 320
Проблема «останова» Проблема «останова» в тестировании
Проблема «останова» в тестировании
Проблема останова
По заданному алгоритму и входным данным определить, завершится
ли за конечное время его выполнение
При чем здесь тестирование?!
Марат Ахин (СПбГПУ) NP 2014 152 / 320
Проблема «останова» Проблема «останова» в тестировании
Проблема «останова» в тестировании
Алгоритм ⇔ процесс тестирования
Входные данные ⇔ тестируемая программа
В подавляющем большинстве случаев процесс тестирования является
бесконечным
Марат Ахин (СПбГПУ) NP 2014 153 / 320
Проблема «останова» Проблема «останова» в тестировании
Проблема «останова» в тестировании
Мы не можем позволить себе тестировать бесконечное время
Слишком долго
Слишком дорого
Слишком странно
Что же делать?
Марат Ахин (СПбГПУ) NP 2014 154 / 320
Проблема «останова» Проблема «останова» в тестировании
Проблема «останова» в тестировании
Останавливать процесс тестирования «вручную»
Когда?
У нас кончилось время и/или деньги на тестирование
Мы протестировали ПО достаточно хорошо
Марат Ахин (СПбГПУ) NP 2014 155 / 320
Проблема «останова» Проблема «останова» в тестировании
Проблема «останова» в тестировании
Проблема «останова» в тестировании
По заданному набору тестов и программе определить, протестировали
ли мы ее достаточно хорошо
Что такое – достаточно хорошо?
Марат Ахин (СПбГПУ) NP 2014 156 / 320
Проблема «останова» Тестовое покрытие
Тестовое покрытие
Мы протестировали программу достаточно хорошо, когда мы
нашли большую часть ошибок в программе
Чтобы найти ошибку, необходимо обеспечить выполнение трех
основных свойств
Обеспечение достижимости (reachability) и порчи (corruption)
требует, чтобы мы выполнили определенный участок кода с
определенными входными данными
Качество тестирования можно оценить через тестовое покрытие
Марат Ахин (СПбГПУ) NP 2014 157 / 320
Проблема «останова» Тестовое покрытие
Виды тестового покрытия
Выделяют два основных вида покрытия
Покрытие потока управления
Покрытие потока данных
Они работают с такими понятиями, как граф потока
управления (CFG) и граф потока данных (DFG)
Надеюсь, что все знают, что такое CFG и DFG?
Марат Ахин (СПбГПУ) NP 2014 158 / 320
Проблема «останова» Покрытие потока управления
Покрытие потока управления
Как мы можем покрыть данный
CFG?
По узлам
По дугам
По условиям
По путям
...
Марат Ахин (СПбГПУ) NP 2014 159 / 320
Проблема «останова» Покрытие потока управления
Покрытие операторов программы
Каждый узел CFG был пройден в
процессе тестирования хотя бы один раз
Самый слабый способ оценки тестового
покрытия
Сколько тестов требуется для того, чтобы
обеспечить полное покрытие операторов
программы для следующего примера?
Марат Ахин (СПбГПУ) NP 2014 160 / 320
Проблема «останова» Покрытие потока управления
Покрытие ветвлений программы
Каждая ветка программы была пройдена
хотя бы один раз
Несколько более сильный способ оценки
покрытия
Сколько тестов требуется для того, чтобы
обеспечить полное покрытие ветвлений
программы для следующего примера?
Марат Ахин (СПбГПУ) NP 2014 161 / 320
Проблема «останова» Покрытие потока управления
Покрытие ветвлений программы
Как соотносятся между собой покрытия
операторов и ветвлений?
1 Никак
2 Покрытие операторов включает покрытие
ветвлений
3 Покрытие ветвлений включает покрытие
операторов
Марат Ахин (СПбГПУ) NP 2014 162 / 320
Проблема «останова» Покрытие потока управления
Покрытие ветвлений программы
Никак
Почему покрытие ветвлений не включает
в себя покрытие операторов?
Потому что в программе может
присутствовать «мертвый код»
Потому что в программе могут вообще
отсутствовать ветвления
Марат Ахин (СПбГПУ) NP 2014 163 / 320
Проблема «останова» Покрытие потока управления
Покрытие условий программы
Каждое ветвление может выполняться по различным причинам
При покрытии условий программы мы требуем, чтобы все условия
ветвлений хотя бы один раз приняли значение true и false
1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) {
2 ...
3 }
Как соотносятся между собой покрытия ветвлений и условий?
Марат Ахин (СПбГПУ) NP 2014 164 / 320
Проблема «останова» Покрытие потока управления
Покрытие условий программы
Никак
Разные комбинации условий могут приводить к выбору одного и
того же ветвления
1 if (req. isLocalhost () || cfg.isDebug () || cfg.isDevMode ()) {
2 ...
3 }
Марат Ахин (СПбГПУ) NP 2014 165 / 320
Проблема «останова» Покрытие потока управления
Покрытие ветвлений и условий программы
Комбинация соответствующих покрытий
Полностью их покрывает
Можно ли предложить что-то более сильное?
1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) {
2 ...
3 }
Марат Ахин (СПбГПУ) NP 2014 166 / 320
Проблема «останова» Покрытие потока управления
Модифицированное покрытие ветвлений и условий
Также известное как MC/DC
Является одним из обязательных условий при тестировании ПО
на уровень A в рамках DO-178B
Чем оно отличается от обычного покрытия ветвлений и условий
программы?
1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) {
2 ...
3 }
Марат Ахин (СПбГПУ) NP 2014 167 / 320
Проблема «останова» Покрытие потока управления
Модифицированное покрытие ветвлений и условий
Каждое условие независимо повлияло на выполнение программы
Как это проверить?
Изменить одно условие и проверить, изменилось ли ветвление
1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) {
2 ...
3 }
Марат Ахин (СПбГПУ) NP 2014 168 / 320
Проблема «останова» Покрытие потока управления
Полное покрытие условий программы
Полный перебор всех возможных комбинаций условий всех
возможных ветвлений
Сколько вариантов необходимо перебрать, чтобы получить полное
комбинационное покрытие для следующего примера?
1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) {
2 ...
3 }
Марат Ахин (СПбГПУ) NP 2014 169 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
Мы требуем, чтобы все возможные пути программы были
выполнены хотя бы один раз
Как данное покрытие соотносится с полным покрытием условий?
Обычно считается самым сильным типом покрытия потока
управления
Его можно было бы использовать, если бы не...
Циклы и рекурсия
Марат Ахин (СПбГПУ) NP 2014 170 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
Мы требуем, чтобы все возможные пути программы были
выполнены хотя бы один раз
Как данное покрытие соотносится с полным покрытием условий?
Обычно считается самым сильным типом покрытия потока
управления
Его можно было бы использовать, если бы не...
Циклы и рекурсия
Марат Ахин (СПбГПУ) NP 2014 170 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
Мы требуем, чтобы все возможные пути программы были
выполнены хотя бы один раз
Как данное покрытие соотносится с полным покрытием условий?
Обычно считается самым сильным типом покрытия потока
управления
Его можно было бы использовать, если бы не...
Циклы и рекурсия
Марат Ахин (СПбГПУ) NP 2014 170 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
450 возможных путей
Марат Ахин (СПбГПУ) NP 2014 171 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
450 возможных путей
Марат Ахин (СПбГПУ) NP 2014 171 / 320
Проблема «останова» Покрытие потока управления
Покрытие путей программы
Для борьбы с этим используют несколько подходов
Один из вариантов
Требуем, чтобы тело цикла было выполнено
0
1
k
max
Объясните, почему выбраны именно эти варианты
Марат Ахин (СПбГПУ) NP 2014 172 / 320
Проблема «останова» Покрытие потока данных
Покрытие потока данных
Что еще можно сделать?
Можно вспомнить о том, что программы работают не просто так
Основная цель работы любой программы – работа с данными
С этой точки зрения для тестирования представляет интерес
анализ таких путей выполнения программы, на которых активно
работают с данными
Сперва вспомним несколько определений
Марат Ахин (СПбГПУ) NP 2014 173 / 320
Проблема «останова» Покрытие потока данных
Определения и использования переменных
Определение переменной (Def)
Оператор программы, в котором значение переменной v может быть
изменено
v = 42
f(&v, ...)
scanf(fmt, &v)
Использование переменной (Use)
Оператор программы, в котором значение переменной v влияет на
выполнение программы тем или иным способом
q = v + 2
g(v, ...)
if (v != NULL) ...
Марат Ахин (СПбГПУ) NP 2014 174 / 320
Проблема «останова» Покрытие потока данных
Определения и использования переменных
Def-Use Chain
Пара (d, u) операторов программы, для которой выполняются
следующие условия
d – определение переменной v
u – использование переменной v
между d и u существует хотя бы один путь, на котором
переменная v не переопределяется
Рассмотрим данные определения на примере
Марат Ахин (СПбГПУ) NP 2014 175 / 320
Проблема «останова» Покрытие потока данных
Пример
Марат Ахин (СПбГПУ) NP 2014 176 / 320
Проблема «останова» Покрытие потока данных
Покрытие потока данных
Какие варианты покрытий можно предложить с использованием этих
понятий?
Покрытие всех определений
Для каждой интересующей нас переменной v должна быть
протестирована хотя бы одна Def-Use Chain от каждого
определения v до хотя бы одного использования v
Марат Ахин (СПбГПУ) NP 2014 177 / 320
Проблема «останова» Покрытие потока данных
All-Def Coverage
Рассмотрим следующие тесты
1 → 2 → 3 → 4 → 5 → 6
Марат Ахин (СПбГПУ) NP 2014 178 / 320
Проблема «останова» Покрытие потока данных
Покрытие потока данных
Покрытие всех использований
Для каждой интересующей нас переменной v должна быть
протестирована хотя бы одна Def-Use Chain от каждого
определения v до каждого использования v
Является ли All-Use более сильным критерием по сравнению с All-Def?
Марат Ахин (СПбГПУ) NP 2014 179 / 320
Проблема «останова» Покрытие потока данных
All-Use Coverage
Рассмотрим следующие тесты
1 → 2 → 3 → 4 → 5 → 6
1 → 2 → 3 → 4 → 6
1 → 3 → 4 → 5 → 6
Марат Ахин (СПбГПУ) NP 2014 180 / 320
Проблема «останова» Покрытие потока данных
Покрытие потока данных
Покрытие всех Def-Use Chain
Для каждой интересующей нас переменной v должны быть
протестированы все возможные Def-Use Chain от каждого
определения v до каждого использования v
Как соотносится All-Def-Use-Chain с покрытием всех путей программы?
Марат Ахин (СПбГПУ) NP 2014 181 / 320
Проблема «останова» Покрытие потока данных
Пример
Марат Ахин (СПбГПУ) NP 2014 182 / 320
Проблема «останова» Покрытие потока данных
Пример
Марат Ахин (СПбГПУ) NP 2014 183 / 320
Проблема «останова» Покрытие потока данных
Пример
Марат Ахин (СПбГПУ) NP 2014 184 / 320
Проблема «останова» Покрытие потока данных
Пример
Марат Ахин (СПбГПУ) NP 2014 185 / 320
Проблема «останова» Мутационное тестирование
Другой способ оценки полноты
Какими способами можно управлять выполнением кода?
Изменением входных данных
Изменением самого исходного кода
Как можно оценить полноту тестирования, изменяя исходный код?
Марат Ахин (СПбГПУ) NP 2014 186 / 320
Проблема «останова» Мутационное тестирование
Идеальный тест
Идеальный тест работает только на тестируемой программе
При любом изменений он перестает проходить
В этом заключается основная идея мутационного тестирования
Марат Ахин (СПбГПУ) NP 2014 187 / 320
Проблема «останова» Мутационное тестирование
Мутационное тестирование
Исходная программа подвергается мутации, в результате
получается набор из N мутантов
После этого имеющиеся тесты запускаются на этих мутантах
Если тест не проходит на мутанте, то говорят, что тест «убивает»
этого мутанта
Доля «убитых» мутантов показывает, насколько полно данный
набор тестов покрывает нашу программу
Марат Ахин (СПбГПУ) NP 2014 188 / 320
Проблема «останова» Мутационное тестирование
Как сделать мутанта?
Что можно сделать с исходным кодом?
Добавить новый код
Удалить старый код
Изменить существующий код
Набор синтаксических трансформаций, изменяющих исходный код
Марат Ахин (СПбГПУ) NP 2014 189 / 320
Проблема «останова» Мутационное тестирование
Как сделать мутанта?
1 int sumCollection (final @NotNull Collection <Integer > c) {
2 int sum = 0;
3 for (int i : c) {
4 sum += i;
5 }
6 return sum;
7 }
Как можно мутировать данный фрагмент кода?
Марат Ахин (СПбГПУ) NP 2014 190 / 320
Проблема «останова» Мутационное тестирование
Как сделать мутанта?
Некоторые мутанты будут синтаксически некорректны
Другие мутанты будут семантически некорректны
Оставшиеся мутанты подходят для использования в мутационном
тестировании
Какие проблемы есть у мутационного тестирования?
Марат Ахин (СПбГПУ) NP 2014 191 / 320
Проблема «останова» Мутационное тестирование
Недостатки мутационного тестирования
Данный вид тестирования практически невозможно выполнять
вручную
Количество необходимых для оценки покрытия мутантов
пропорционально объему анализируемого ПО
Даже для небольшой программы получение достаточного числа
мутантов вручную является практически невозможным
Сильно возрастают затраты на проведение тестирования
Вместо одного запуска каждого теста требуется выполнить N
запусков
Кроме того, дополнительное время тратится на генерацию
мутантов
Марат Ахин (СПбГПУ) NP 2014 192 / 320
Проблема «останова» Мутационное тестирование
Мутационное тестирование
Марат Ахин (СПбГПУ) NP 2014 193 / 320
Проблема «останова» Мутационное тестирование
Мутационное тестирование
Марат Ахин (СПбГПУ) NP 2014 194 / 320
Проблема «останова» Мутационное тестирование
Мутационное тестирование
Марат Ахин (СПбГПУ) NP 2014 195 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
Мы же уже поговорили об оценке тестового покрытия?
Оценка тестового покрытия
программы
Оценка самого тестового
покрытия
Who observes the observer? c
Марат Ахин (СПбГПУ) NP 2014 196 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
Какая проблема есть у покрытия потока управления?
Чувствительность к изменениям в исходном коде
Марат Ахин (СПбГПУ) NP 2014 197 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
Какая проблема есть у покрытия потока управления?
Чувствительность к изменениям в исходном коде
Марат Ахин (СПбГПУ) NP 2014 197 / 320
Проблема «останова» Оценка тестового покрытия
Нестабильность тестового покрытия
1 ...
2 if (a && b && c) {
3 ...
4 }
1 bool cond = a && b && c;
2 if (cond) {
3 ...
4 }
Что будет с покрытием MC/DC?
Марат Ахин (СПбГПУ) NP 2014 198 / 320
Проблема «останова» Оценка тестового покрытия
Нестабильность тестового покрытия
Чем сильнее влияют изменения в программе на тестовое
покрытие, тем более нестабильным (fragile) является тестовое
покрытие
Чем более нестабильным является тестовое покрытие, тем менее
адекватно оно оценивает качество тестирования
Что же делать?
Марат Ахин (СПбГПУ) NP 2014 199 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
The whole is more than the sum of its parts c
Можно применить мутационное тестирование для оценки
тестового покрытия
Ограничить набор трансформаций
Посмотреть на изменение тестового покрытия для мутантов
...
PROFIT!
Марат Ахин (СПбГПУ) NP 2014 200 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
Какая проблема есть у мутационного тестирования?
Эквивалентные мутанты
Марат Ахин (СПбГПУ) NP 2014 201 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
Какая проблема есть у мутационного тестирования?
Эквивалентные мутанты
Марат Ахин (СПбГПУ) NP 2014 201 / 320
Проблема «останова» Оценка тестового покрытия
Эквивалентные мутанты
1 int sumCollection (final @NotNull Collection <Integer > c) {
2 int sum = 0;
3 for (int i : c) {
4 sum += i;
5 }
6 return sum;
7 }
Почему эквивалентные мутанты – это плохо?
Марат Ахин (СПбГПУ) NP 2014 202 / 320
Проблема «останова» Оценка тестового покрытия
Эквивалентные мутанты
Эквивалентные мутанты «зашумляют» итоговую оценку качества
тестирования
Из-за шума снижается адекватность оценки
Что же делать?
Марат Ахин (СПбГПУ) NP 2014 203 / 320
Проблема «останова» Оценка тестового покрытия
Оценка тестового покрытия
The whole is more than the sum of its parts c
Можно применить тестовое покрытие для оценки мутационного
тестирования
Для каждого мутанта записывается трасса его выполнения
У эквивалентных мутантов будут похожие трассы выполнения
...
PROFIT!
Марат Ахин (СПбГПУ) NP 2014 204 / 320
W.I.L.T. What I Learned Today?
W.I.L.T.
Марат Ахин (СПбГПУ) NP 2014 205 / 320

More Related Content

What's hot

Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
API design in java project
API design in java projectAPI design in java project
API design in java projectchashnikov
 
КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияIosif Itkin
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияSQALab
 
Дефекты при тестировании ПО
Дефекты при тестировании ПОДефекты при тестировании ПО
Дефекты при тестировании ПОSergey Chuburov
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Vyacheslav Lyalkin
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММITMO University
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...ScrumTrek
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"MskDotNet Community
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDДмитрий Овечкин
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Dmytro Mindra
 
20120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture0420120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture04Computer Science Club
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Yulia Tsisyk
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019GoQA
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Tatyanazaxarova
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программTatyanazaxarova
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0AlexeyParhomenko
 

What's hot (20)

Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
API design in java project
API design in java projectAPI design in java project
API design in java project
 
КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного ОбеспеченияКГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
КГТУ Лекция 1: Обеспечение Качества Программного Обеспечения
 
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решенияИлья Фомин - Проблемы автоматизируемости тестирования и их решения
Илья Фомин - Проблемы автоматизируемости тестирования и их решения
 
Дефекты при тестировании ПО
Дефекты при тестировании ПОДефекты при тестировании ПО
Дефекты при тестировании ПО
 
Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)Разработка через тестирование (TDD и BDD)
Разработка через тестирование (TDD и BDD)
 
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
ПРИМЕНЕНИЕ ГЕНЕТИЧЕСКИХ АЛГОРИТМОВ К ГЕНЕРАЦИИ ТЕСТОВ ДЛЯ АВТОМАТНЫХ ПРОГРАММ
 
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
Кирилл Черятов. Эволюция системы логирования интеграционного ПО. Сокращаем вр...
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
быстрое тестирование
быстрое тестированиебыстрое тестирование
быстрое тестирование
 
Андрей Кирпичев "Гибкая модульность инструментами АОП"
Андрей Кирпичев  "Гибкая модульность инструментами АОП"Андрей Кирпичев  "Гибкая модульность инструментами АОП"
Андрей Кирпичев "Гибкая модульность инструментами АОП"
 
Testing of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDDTesting of Embedded SW – Alternative to Classic TDD
Testing of Embedded SW – Alternative to Classic TDD
 
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
Тестируем код с Visual Studio 2012 - XP Days Ukraine 2012
 
20120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture0420120309 formal semantics shilov_lecture04
20120309 formal semantics shilov_lecture04
 
Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"Илья Фофанов "Обработка ошибок в C#"
Илья Фофанов "Обработка ошибок в C#"
 
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів»  Lviv QA Day 2019
ОЛЕКСАНДР ЄПІШЕВ «Мутаційне тестування: тести для тестів» Lviv QA Day 2019
 
Что такое "Parallel Lint"?
Что такое "Parallel Lint"?Что такое "Parallel Lint"?
Что такое "Parallel Lint"?
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Тестирование параллельных программ
Тестирование параллельных программТестирование параллельных программ
Тестирование параллельных программ
 
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
Рефакторинг и второе рождение проекта на примере Zend Framework 2.0
 

Similar to Полнота тестирования ПО

20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1Michael Karpov
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16guest1ba51d
 
Linkmeup v076(2019-06).3
Linkmeup v076(2019-06).3Linkmeup v076(2019-06).3
Linkmeup v076(2019-06).3eucariot
 
Спецкурс 2014, занятие 3. Абстракции, именование, документирование
Спецкурс 2014, занятие 3. Абстракции, именование, документированиеСпецкурс 2014, занятие 3. Абстракции, именование, документирование
Спецкурс 2014, занятие 3. Абстракции, именование, документирование7bits
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Yandex
 
Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Technopark
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flashguestb0af15
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011etyumentcev
 
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИblagodarenko
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейCisco Russia
 
Компонентная среда разработки инструментария нагрузочного тестирования
Компонентная среда разработки инструментария нагрузочного тестированияКомпонентная среда разработки инструментария нагрузочного тестирования
Компонентная среда разработки инструментария нагрузочного тестированияSQALab
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияRuslan Shevchenko
 
Практические аспекты нагрузочного тестирования
Практические аспекты нагрузочного тестированияПрактические аспекты нагрузочного тестирования
Практические аспекты нагрузочного тестированияAlexey Kachalin
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesAliaksandr Ikhelis
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовSQALab
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.7bits
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программTatyanazaxarova
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Mikhail Kurnosov
 
Методы обхода Web Application Firewall
Методы обхода Web Application FirewallМетоды обхода Web Application Firewall
Методы обхода Web Application FirewallDmitry Evteev
 

Similar to Полнота тестирования ПО (20)

20090720 hpc exercise1
20090720 hpc exercise120090720 hpc exercise1
20090720 hpc exercise1
 
Predzazhita 2009 v16
Predzazhita 2009 v16Predzazhita 2009 v16
Predzazhita 2009 v16
 
Linkmeup v076(2019-06).3
Linkmeup v076(2019-06).3Linkmeup v076(2019-06).3
Linkmeup v076(2019-06).3
 
Спецкурс 2014, занятие 3. Абстракции, именование, документирование
Спецкурс 2014, занятие 3. Абстракции, именование, документированиеСпецкурс 2014, занятие 3. Абстракции, именование, документирование
Спецкурс 2014, занятие 3. Абстракции, именование, документирование
 
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
Использование шаблонов и RTTI для конфигурации симулятора флеш-накопителя - Г...
 
Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2Тестирование осень 2013 лекция 2
Тестирование осень 2013 лекция 2
 
Client Side Autotesting Flash
Client Side Autotesting FlashClient Side Autotesting Flash
Client Side Autotesting Flash
 
ук 03.007.02 2011
ук 03.007.02 2011ук 03.007.02 2011
ук 03.007.02 2011
 
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
ВЫБОР ТОЧКИ ВНЕДРЕНИЯ ДЛЯ ФАЗЗИНГА В ПАМЯТИ
 
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностейПакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
Пакетное ядро мобильного оператора: ASR5k, поиски устранение неисправностей
 
Компонентная среда разработки инструментария нагрузочного тестирования
Компонентная среда разработки инструментария нагрузочного тестированияКомпонентная среда разработки инструментария нагрузочного тестирования
Компонентная среда разработки инструментария нагрузочного тестирования
 
анализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестированияанализ кода: от проверки стиля до автоматического тестирования
анализ кода: от проверки стиля до автоматического тестирования
 
Практические аспекты нагрузочного тестирования
Практические аспекты нагрузочного тестированияПрактические аспекты нагрузочного тестирования
Практические аспекты нагрузочного тестирования
 
Open Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practicesOpen Source Testing Framework: real project example and best practices
Open Source Testing Framework: real project example and best practices
 
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментовРеализация тестового фреймворка на основе OPEN-SOURCE инструментов
Реализация тестового фреймворка на основе OPEN-SOURCE инструментов
 
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
Спецкурс-2015. Занятие 03. Абстракции, именование, документирование.
 
Отладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программОтладка и оптимизация многопоточных OpenMP-программ
Отладка и оптимизация многопоточных OpenMP-программ
 
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
Лекция 6: Многопоточное программирование: часть 2 (Speedup, Amdahl's law, POS...
 
Методы обхода Web Application Firewall
Методы обхода Web Application FirewallМетоды обхода Web Application Firewall
Методы обхода Web Application Firewall
 
пр 15.docx
пр 15.docxпр 15.docx
пр 15.docx
 

Полнота тестирования ПО

  • 1. Полнота тестирования ПО Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) NP 2014 147 / 320
  • 4. Проблемы тестирования Проблемы тестирования Проблемы тестирования What’s up, Doc? (с) Проблема тестовых входных данных Проблема наблюдаемости Проблема «останова» Проблема тестового оракула Марат Ахин (СПбГПУ) NP 2014 150 / 320
  • 5. Проблема «останова» Содержание 1 Проблема «останова» Проблема «останова» в тестировании Тестовое покрытие Покрытие потока управления Покрытие потока данных Мутационное тестирование Оценка тестового покрытия Марат Ахин (СПбГПУ) NP 2014 151 / 320
  • 6. Проблема «останова» Проблема «останова» в тестировании Проблема «останова» в тестировании Проблема останова По заданному алгоритму и входным данным определить, завершится ли за конечное время его выполнение При чем здесь тестирование?! Марат Ахин (СПбГПУ) NP 2014 152 / 320
  • 7. Проблема «останова» Проблема «останова» в тестировании Проблема «останова» в тестировании Алгоритм ⇔ процесс тестирования Входные данные ⇔ тестируемая программа В подавляющем большинстве случаев процесс тестирования является бесконечным Марат Ахин (СПбГПУ) NP 2014 153 / 320
  • 8. Проблема «останова» Проблема «останова» в тестировании Проблема «останова» в тестировании Мы не можем позволить себе тестировать бесконечное время Слишком долго Слишком дорого Слишком странно Что же делать? Марат Ахин (СПбГПУ) NP 2014 154 / 320
  • 9. Проблема «останова» Проблема «останова» в тестировании Проблема «останова» в тестировании Останавливать процесс тестирования «вручную» Когда? У нас кончилось время и/или деньги на тестирование Мы протестировали ПО достаточно хорошо Марат Ахин (СПбГПУ) NP 2014 155 / 320
  • 10. Проблема «останова» Проблема «останова» в тестировании Проблема «останова» в тестировании Проблема «останова» в тестировании По заданному набору тестов и программе определить, протестировали ли мы ее достаточно хорошо Что такое – достаточно хорошо? Марат Ахин (СПбГПУ) NP 2014 156 / 320
  • 11. Проблема «останова» Тестовое покрытие Тестовое покрытие Мы протестировали программу достаточно хорошо, когда мы нашли большую часть ошибок в программе Чтобы найти ошибку, необходимо обеспечить выполнение трех основных свойств Обеспечение достижимости (reachability) и порчи (corruption) требует, чтобы мы выполнили определенный участок кода с определенными входными данными Качество тестирования можно оценить через тестовое покрытие Марат Ахин (СПбГПУ) NP 2014 157 / 320
  • 12. Проблема «останова» Тестовое покрытие Виды тестового покрытия Выделяют два основных вида покрытия Покрытие потока управления Покрытие потока данных Они работают с такими понятиями, как граф потока управления (CFG) и граф потока данных (DFG) Надеюсь, что все знают, что такое CFG и DFG? Марат Ахин (СПбГПУ) NP 2014 158 / 320
  • 13. Проблема «останова» Покрытие потока управления Покрытие потока управления Как мы можем покрыть данный CFG? По узлам По дугам По условиям По путям ... Марат Ахин (СПбГПУ) NP 2014 159 / 320
  • 14. Проблема «останова» Покрытие потока управления Покрытие операторов программы Каждый узел CFG был пройден в процессе тестирования хотя бы один раз Самый слабый способ оценки тестового покрытия Сколько тестов требуется для того, чтобы обеспечить полное покрытие операторов программы для следующего примера? Марат Ахин (СПбГПУ) NP 2014 160 / 320
  • 15. Проблема «останова» Покрытие потока управления Покрытие ветвлений программы Каждая ветка программы была пройдена хотя бы один раз Несколько более сильный способ оценки покрытия Сколько тестов требуется для того, чтобы обеспечить полное покрытие ветвлений программы для следующего примера? Марат Ахин (СПбГПУ) NP 2014 161 / 320
  • 16. Проблема «останова» Покрытие потока управления Покрытие ветвлений программы Как соотносятся между собой покрытия операторов и ветвлений? 1 Никак 2 Покрытие операторов включает покрытие ветвлений 3 Покрытие ветвлений включает покрытие операторов Марат Ахин (СПбГПУ) NP 2014 162 / 320
  • 17. Проблема «останова» Покрытие потока управления Покрытие ветвлений программы Никак Почему покрытие ветвлений не включает в себя покрытие операторов? Потому что в программе может присутствовать «мертвый код» Потому что в программе могут вообще отсутствовать ветвления Марат Ахин (СПбГПУ) NP 2014 163 / 320
  • 18. Проблема «останова» Покрытие потока управления Покрытие условий программы Каждое ветвление может выполняться по различным причинам При покрытии условий программы мы требуем, чтобы все условия ветвлений хотя бы один раз приняли значение true и false 1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) { 2 ... 3 } Как соотносятся между собой покрытия ветвлений и условий? Марат Ахин (СПбГПУ) NP 2014 164 / 320
  • 19. Проблема «останова» Покрытие потока управления Покрытие условий программы Никак Разные комбинации условий могут приводить к выбору одного и того же ветвления 1 if (req. isLocalhost () || cfg.isDebug () || cfg.isDevMode ()) { 2 ... 3 } Марат Ахин (СПбГПУ) NP 2014 165 / 320
  • 20. Проблема «останова» Покрытие потока управления Покрытие ветвлений и условий программы Комбинация соответствующих покрытий Полностью их покрывает Можно ли предложить что-то более сильное? 1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) { 2 ... 3 } Марат Ахин (СПбГПУ) NP 2014 166 / 320
  • 21. Проблема «останова» Покрытие потока управления Модифицированное покрытие ветвлений и условий Также известное как MC/DC Является одним из обязательных условий при тестировании ПО на уровень A в рамках DO-178B Чем оно отличается от обычного покрытия ветвлений и условий программы? 1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) { 2 ... 3 } Марат Ахин (СПбГПУ) NP 2014 167 / 320
  • 22. Проблема «останова» Покрытие потока управления Модифицированное покрытие ветвлений и условий Каждое условие независимо повлияло на выполнение программы Как это проверить? Изменить одно условие и проверить, изменилось ли ветвление 1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) { 2 ... 3 } Марат Ахин (СПбГПУ) NP 2014 168 / 320
  • 23. Проблема «останова» Покрытие потока управления Полное покрытие условий программы Полный перебор всех возможных комбинаций условий всех возможных ветвлений Сколько вариантов необходимо перебрать, чтобы получить полное комбинационное покрытие для следующего примера? 1 if (req.isSsl () && (cfg.SslEnabled () || cfg.isDebug ())) { 2 ... 3 } Марат Ахин (СПбГПУ) NP 2014 169 / 320
  • 24. Проблема «останова» Покрытие потока управления Покрытие путей программы Мы требуем, чтобы все возможные пути программы были выполнены хотя бы один раз Как данное покрытие соотносится с полным покрытием условий? Обычно считается самым сильным типом покрытия потока управления Его можно было бы использовать, если бы не... Циклы и рекурсия Марат Ахин (СПбГПУ) NP 2014 170 / 320
  • 25. Проблема «останова» Покрытие потока управления Покрытие путей программы Мы требуем, чтобы все возможные пути программы были выполнены хотя бы один раз Как данное покрытие соотносится с полным покрытием условий? Обычно считается самым сильным типом покрытия потока управления Его можно было бы использовать, если бы не... Циклы и рекурсия Марат Ахин (СПбГПУ) NP 2014 170 / 320
  • 26. Проблема «останова» Покрытие потока управления Покрытие путей программы Мы требуем, чтобы все возможные пути программы были выполнены хотя бы один раз Как данное покрытие соотносится с полным покрытием условий? Обычно считается самым сильным типом покрытия потока управления Его можно было бы использовать, если бы не... Циклы и рекурсия Марат Ахин (СПбГПУ) NP 2014 170 / 320
  • 27. Проблема «останова» Покрытие потока управления Покрытие путей программы 450 возможных путей Марат Ахин (СПбГПУ) NP 2014 171 / 320
  • 28. Проблема «останова» Покрытие потока управления Покрытие путей программы 450 возможных путей Марат Ахин (СПбГПУ) NP 2014 171 / 320
  • 29. Проблема «останова» Покрытие потока управления Покрытие путей программы Для борьбы с этим используют несколько подходов Один из вариантов Требуем, чтобы тело цикла было выполнено 0 1 k max Объясните, почему выбраны именно эти варианты Марат Ахин (СПбГПУ) NP 2014 172 / 320
  • 30. Проблема «останова» Покрытие потока данных Покрытие потока данных Что еще можно сделать? Можно вспомнить о том, что программы работают не просто так Основная цель работы любой программы – работа с данными С этой точки зрения для тестирования представляет интерес анализ таких путей выполнения программы, на которых активно работают с данными Сперва вспомним несколько определений Марат Ахин (СПбГПУ) NP 2014 173 / 320
  • 31. Проблема «останова» Покрытие потока данных Определения и использования переменных Определение переменной (Def) Оператор программы, в котором значение переменной v может быть изменено v = 42 f(&v, ...) scanf(fmt, &v) Использование переменной (Use) Оператор программы, в котором значение переменной v влияет на выполнение программы тем или иным способом q = v + 2 g(v, ...) if (v != NULL) ... Марат Ахин (СПбГПУ) NP 2014 174 / 320
  • 32. Проблема «останова» Покрытие потока данных Определения и использования переменных Def-Use Chain Пара (d, u) операторов программы, для которой выполняются следующие условия d – определение переменной v u – использование переменной v между d и u существует хотя бы один путь, на котором переменная v не переопределяется Рассмотрим данные определения на примере Марат Ахин (СПбГПУ) NP 2014 175 / 320
  • 33. Проблема «останова» Покрытие потока данных Пример Марат Ахин (СПбГПУ) NP 2014 176 / 320
  • 34. Проблема «останова» Покрытие потока данных Покрытие потока данных Какие варианты покрытий можно предложить с использованием этих понятий? Покрытие всех определений Для каждой интересующей нас переменной v должна быть протестирована хотя бы одна Def-Use Chain от каждого определения v до хотя бы одного использования v Марат Ахин (СПбГПУ) NP 2014 177 / 320
  • 35. Проблема «останова» Покрытие потока данных All-Def Coverage Рассмотрим следующие тесты 1 → 2 → 3 → 4 → 5 → 6 Марат Ахин (СПбГПУ) NP 2014 178 / 320
  • 36. Проблема «останова» Покрытие потока данных Покрытие потока данных Покрытие всех использований Для каждой интересующей нас переменной v должна быть протестирована хотя бы одна Def-Use Chain от каждого определения v до каждого использования v Является ли All-Use более сильным критерием по сравнению с All-Def? Марат Ахин (СПбГПУ) NP 2014 179 / 320
  • 37. Проблема «останова» Покрытие потока данных All-Use Coverage Рассмотрим следующие тесты 1 → 2 → 3 → 4 → 5 → 6 1 → 2 → 3 → 4 → 6 1 → 3 → 4 → 5 → 6 Марат Ахин (СПбГПУ) NP 2014 180 / 320
  • 38. Проблема «останова» Покрытие потока данных Покрытие потока данных Покрытие всех Def-Use Chain Для каждой интересующей нас переменной v должны быть протестированы все возможные Def-Use Chain от каждого определения v до каждого использования v Как соотносится All-Def-Use-Chain с покрытием всех путей программы? Марат Ахин (СПбГПУ) NP 2014 181 / 320
  • 39. Проблема «останова» Покрытие потока данных Пример Марат Ахин (СПбГПУ) NP 2014 182 / 320
  • 40. Проблема «останова» Покрытие потока данных Пример Марат Ахин (СПбГПУ) NP 2014 183 / 320
  • 41. Проблема «останова» Покрытие потока данных Пример Марат Ахин (СПбГПУ) NP 2014 184 / 320
  • 42. Проблема «останова» Покрытие потока данных Пример Марат Ахин (СПбГПУ) NP 2014 185 / 320
  • 43. Проблема «останова» Мутационное тестирование Другой способ оценки полноты Какими способами можно управлять выполнением кода? Изменением входных данных Изменением самого исходного кода Как можно оценить полноту тестирования, изменяя исходный код? Марат Ахин (СПбГПУ) NP 2014 186 / 320
  • 44. Проблема «останова» Мутационное тестирование Идеальный тест Идеальный тест работает только на тестируемой программе При любом изменений он перестает проходить В этом заключается основная идея мутационного тестирования Марат Ахин (СПбГПУ) NP 2014 187 / 320
  • 45. Проблема «останова» Мутационное тестирование Мутационное тестирование Исходная программа подвергается мутации, в результате получается набор из N мутантов После этого имеющиеся тесты запускаются на этих мутантах Если тест не проходит на мутанте, то говорят, что тест «убивает» этого мутанта Доля «убитых» мутантов показывает, насколько полно данный набор тестов покрывает нашу программу Марат Ахин (СПбГПУ) NP 2014 188 / 320
  • 46. Проблема «останова» Мутационное тестирование Как сделать мутанта? Что можно сделать с исходным кодом? Добавить новый код Удалить старый код Изменить существующий код Набор синтаксических трансформаций, изменяющих исходный код Марат Ахин (СПбГПУ) NP 2014 189 / 320
  • 47. Проблема «останова» Мутационное тестирование Как сделать мутанта? 1 int sumCollection (final @NotNull Collection <Integer > c) { 2 int sum = 0; 3 for (int i : c) { 4 sum += i; 5 } 6 return sum; 7 } Как можно мутировать данный фрагмент кода? Марат Ахин (СПбГПУ) NP 2014 190 / 320
  • 48. Проблема «останова» Мутационное тестирование Как сделать мутанта? Некоторые мутанты будут синтаксически некорректны Другие мутанты будут семантически некорректны Оставшиеся мутанты подходят для использования в мутационном тестировании Какие проблемы есть у мутационного тестирования? Марат Ахин (СПбГПУ) NP 2014 191 / 320
  • 49. Проблема «останова» Мутационное тестирование Недостатки мутационного тестирования Данный вид тестирования практически невозможно выполнять вручную Количество необходимых для оценки покрытия мутантов пропорционально объему анализируемого ПО Даже для небольшой программы получение достаточного числа мутантов вручную является практически невозможным Сильно возрастают затраты на проведение тестирования Вместо одного запуска каждого теста требуется выполнить N запусков Кроме того, дополнительное время тратится на генерацию мутантов Марат Ахин (СПбГПУ) NP 2014 192 / 320
  • 50. Проблема «останова» Мутационное тестирование Мутационное тестирование Марат Ахин (СПбГПУ) NP 2014 193 / 320
  • 51. Проблема «останова» Мутационное тестирование Мутационное тестирование Марат Ахин (СПбГПУ) NP 2014 194 / 320
  • 52. Проблема «останова» Мутационное тестирование Мутационное тестирование Марат Ахин (СПбГПУ) NP 2014 195 / 320
  • 53. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия Мы же уже поговорили об оценке тестового покрытия? Оценка тестового покрытия программы Оценка самого тестового покрытия Who observes the observer? c Марат Ахин (СПбГПУ) NP 2014 196 / 320
  • 54. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия Какая проблема есть у покрытия потока управления? Чувствительность к изменениям в исходном коде Марат Ахин (СПбГПУ) NP 2014 197 / 320
  • 55. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия Какая проблема есть у покрытия потока управления? Чувствительность к изменениям в исходном коде Марат Ахин (СПбГПУ) NP 2014 197 / 320
  • 56. Проблема «останова» Оценка тестового покрытия Нестабильность тестового покрытия 1 ... 2 if (a && b && c) { 3 ... 4 } 1 bool cond = a && b && c; 2 if (cond) { 3 ... 4 } Что будет с покрытием MC/DC? Марат Ахин (СПбГПУ) NP 2014 198 / 320
  • 57. Проблема «останова» Оценка тестового покрытия Нестабильность тестового покрытия Чем сильнее влияют изменения в программе на тестовое покрытие, тем более нестабильным (fragile) является тестовое покрытие Чем более нестабильным является тестовое покрытие, тем менее адекватно оно оценивает качество тестирования Что же делать? Марат Ахин (СПбГПУ) NP 2014 199 / 320
  • 58. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия The whole is more than the sum of its parts c Можно применить мутационное тестирование для оценки тестового покрытия Ограничить набор трансформаций Посмотреть на изменение тестового покрытия для мутантов ... PROFIT! Марат Ахин (СПбГПУ) NP 2014 200 / 320
  • 59. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия Какая проблема есть у мутационного тестирования? Эквивалентные мутанты Марат Ахин (СПбГПУ) NP 2014 201 / 320
  • 60. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия Какая проблема есть у мутационного тестирования? Эквивалентные мутанты Марат Ахин (СПбГПУ) NP 2014 201 / 320
  • 61. Проблема «останова» Оценка тестового покрытия Эквивалентные мутанты 1 int sumCollection (final @NotNull Collection <Integer > c) { 2 int sum = 0; 3 for (int i : c) { 4 sum += i; 5 } 6 return sum; 7 } Почему эквивалентные мутанты – это плохо? Марат Ахин (СПбГПУ) NP 2014 202 / 320
  • 62. Проблема «останова» Оценка тестового покрытия Эквивалентные мутанты Эквивалентные мутанты «зашумляют» итоговую оценку качества тестирования Из-за шума снижается адекватность оценки Что же делать? Марат Ахин (СПбГПУ) NP 2014 203 / 320
  • 63. Проблема «останова» Оценка тестового покрытия Оценка тестового покрытия The whole is more than the sum of its parts c Можно применить тестовое покрытие для оценки мутационного тестирования Для каждого мутанта записывается трасса его выполнения У эквивалентных мутантов будут похожие трассы выполнения ... PROFIT! Марат Ахин (СПбГПУ) NP 2014 204 / 320
  • 64. W.I.L.T. What I Learned Today? W.I.L.T. Марат Ахин (СПбГПУ) NP 2014 205 / 320