64
Полнота тестирования ПО Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) NP 2014 147 / 320

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

Embed Size (px)

Citation preview

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

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

Марат Ахин

Санкт-Петербургский государственный политехнический университет

2014

Марат Ахин (СПбГПУ) NP 2014 147 / 320

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

Quiz

Марат Ахин (СПбГПУ) NP 2014 148 / 320

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

Recap

Марат Ахин (СПбГПУ) NP 2014 149 / 320

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

Проблемы тестирования Проблемы тестирования

Проблемы тестирования

What’s up, Doc? (с)

Проблема тестовых входных данныхПроблема наблюдаемостиПроблема «останова»Проблема тестового оракула

Марат Ахин (СПбГПУ) NP 2014 150 / 320

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

Проблема «останова»

Содержание

1 Проблема «останова»Проблема «останова» в тестированииТестовое покрытиеПокрытие потока управленияПокрытие потока данныхМутационное тестированиеОценка тестового покрытия

Марат Ахин (СПбГПУ) NP 2014 151 / 320

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

Проблема «останова» Проблема «останова» в тестировании

Проблема «останова» в тестировании

Проблема остановаПо заданному алгоритму и входным данным определить, завершится

ли за конечное время его выполнение

При чем здесь тестирование?!

Марат Ахин (СПбГПУ) NP 2014 152 / 320

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

Проблема «останова» Проблема «останова» в тестировании

Проблема «останова» в тестировании

Алгоритм ⇔ процесс тестированияВходные данные ⇔ тестируемая программа

В подавляющем большинстве случаев процесс тестирования являетсябесконечным

Марат Ахин (СПбГПУ) NP 2014 153 / 320

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

Проблема «останова» Проблема «останова» в тестировании

Проблема «останова» в тестировании

Мы не можем позволить себе тестировать бесконечное времяСлишком долгоСлишком дорогоСлишком странно

Что же делать?

Марат Ахин (СПбГПУ) NP 2014 154 / 320

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

Проблема «останова» Проблема «останова» в тестировании

Проблема «останова» в тестировании

Останавливать процесс тестирования «вручную»

Когда?У нас кончилось время и/или деньги на тестированиеМы протестировали ПО достаточно хорошо

Марат Ахин (СПбГПУ) NP 2014 155 / 320

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

Проблема «останова» Проблема «останова» в тестировании

Проблема «останова» в тестировании

Проблема «останова» в тестированииПо заданному набору тестов и программе определить, протестировали

ли мы ее достаточно хорошо

Что такое – достаточно хорошо?

Марат Ахин (СПбГПУ) NP 2014 156 / 320

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

Проблема «останова» Тестовое покрытие

Тестовое покрытие

Мы протестировали программу достаточно хорошо, когда мынашли большую часть ошибок в программеЧтобы найти ошибку, необходимо обеспечить выполнение трехосновных свойствОбеспечение достижимости (reachability) и порчи (corruption)требует, чтобы мы выполнили определенный участок кода сопределенными входными данными

Качество тестирования можно оценить через тестовое покрытие

Марат Ахин (СПбГПУ) NP 2014 157 / 320

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

Проблема «останова» Тестовое покрытие

Виды тестового покрытия

Выделяют два основных вида покрытияПокрытие потока управленияПокрытие потока данных

Они работают с такими понятиями, как граф потокауправления (CFG) и граф потока данных (DFG)

Надеюсь, что все знают, что такое CFG и DFG?

Марат Ахин (СПбГПУ) NP 2014 158 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие потока управления

Как мы можем покрыть данныйCFG?

По узламПо дугамПо условиямПо путям...

Марат Ахин (СПбГПУ) NP 2014 159 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие операторов программы

Каждый узел CFG был пройден впроцессе тестирования хотя бы один разСамый слабый способ оценки тестовогопокрытия

Сколько тестов требуется для того, чтобыобеспечить полное покрытие операторовпрограммы для следующего примера?

Марат Ахин (СПбГПУ) NP 2014 160 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие ветвлений программы

Каждая ветка программы была пройденахотя бы один разНесколько более сильный способ оценкипокрытия

Сколько тестов требуется для того, чтобыобеспечить полное покрытие ветвленийпрограммы для следующего примера?

Марат Ахин (СПбГПУ) NP 2014 161 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие ветвлений программы

Как соотносятся между собой покрытияоператоров и ветвлений?

1 Никак2 Покрытие операторов включает покрытие

ветвлений3 Покрытие ветвлений включает покрытие

операторов

Марат Ахин (СПбГПУ) NP 2014 162 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие ветвлений программы

Никак

Почему покрытие ветвлений не включаетв себя покрытие операторов?

Потому что в программе можетприсутствовать «мертвый код»Потому что в программе могут вообщеотсутствовать ветвления

Марат Ахин (СПбГПУ) NP 2014 163 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие условий программы

Каждое ветвление может выполняться по различным причинамПри покрытии условий программы мы требуем, чтобы все условияветвлений хотя бы один раз приняли значение true и false

1 if (req.isSsl() && (cfg.SslEnabled () || cfg.isDebug ())) {2 ...3 }

Как соотносятся между собой покрытия ветвлений и условий?

Марат Ахин (СПбГПУ) NP 2014 164 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие условий программы

Никак

Разные комбинации условий могут приводить к выбору одного итого же ветвления

1 if (req.isLocalhost () || cfg.isDebug () || cfg.isDevMode ()) {2 ...3 }

Марат Ахин (СПбГПУ) NP 2014 165 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие ветвлений и условий программы

Комбинация соответствующих покрытийПолностью их покрывает

Можно ли предложить что-то более сильное?

1 if (req.isSsl() && (cfg.SslEnabled () || cfg.isDebug ())) {2 ...3 }

Марат Ахин (СПбГПУ) NP 2014 166 / 320

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

Проблема «останова» Покрытие потока управления

Модифицированное покрытие ветвлений и условий

Также известное как MC/DCЯвляется одним из обязательных условий при тестировании ПОна уровень A в рамках DO-178B

Чем оно отличается от обычного покрытия ветвлений и условийпрограммы?

1 if (req.isSsl() && (cfg.SslEnabled () || cfg.isDebug ())) {2 ...3 }

Марат Ахин (СПбГПУ) NP 2014 167 / 320

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

Проблема «останова» Покрытие потока управления

Модифицированное покрытие ветвлений и условий

Каждое условие независимо повлияло на выполнение программы

Как это проверить?Изменить одно условие и проверить, изменилось ли ветвление

1 if (req.isSsl() && (cfg.SslEnabled () || cfg.isDebug ())) {2 ...3 }

Марат Ахин (СПбГПУ) NP 2014 168 / 320

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

Проблема «останова» Покрытие потока управления

Полное покрытие условий программы

Полный перебор всех возможных комбинаций условий всехвозможных ветвлений

Сколько вариантов необходимо перебрать, чтобы получить полноекомбинационное покрытие для следующего примера?

1 if (req.isSsl() && (cfg.SslEnabled () || cfg.isDebug ())) {2 ...3 }

Марат Ахин (СПбГПУ) NP 2014 169 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

Мы требуем, чтобы все возможные пути программы быливыполнены хотя бы один раз

Как данное покрытие соотносится с полным покрытием условий?

Обычно считается самым сильным типом покрытия потокауправленияЕго можно было бы использовать, если бы не...

Циклы и рекурсия

Марат Ахин (СПбГПУ) NP 2014 170 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

Мы требуем, чтобы все возможные пути программы быливыполнены хотя бы один раз

Как данное покрытие соотносится с полным покрытием условий?

Обычно считается самым сильным типом покрытия потокауправленияЕго можно было бы использовать, если бы не...

Циклы и рекурсия

Марат Ахин (СПбГПУ) NP 2014 170 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

Мы требуем, чтобы все возможные пути программы быливыполнены хотя бы один раз

Как данное покрытие соотносится с полным покрытием условий?

Обычно считается самым сильным типом покрытия потокауправленияЕго можно было бы использовать, если бы не...

Циклы и рекурсия

Марат Ахин (СПбГПУ) NP 2014 170 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

450 возможных путей

Марат Ахин (СПбГПУ) NP 2014 171 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

450 возможных путей

Марат Ахин (СПбГПУ) NP 2014 171 / 320

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

Проблема «останова» Покрытие потока управления

Покрытие путей программы

Для борьбы с этим используют несколько подходов

Один из вариантовТребуем, чтобы тело цикла было выполнено

01kmax

Объясните, почему выбраны именно эти варианты

Марат Ахин (СПбГПУ) NP 2014 172 / 320

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

Проблема «останова» Покрытие потока данных

Покрытие потока данных

Что еще можно сделать?

Можно вспомнить о том, что программы работают не просто такОсновная цель работы любой программы – работа с данными

С этой точки зрения для тестирования представляет интересанализ таких путей выполнения программы, на которых активноработают с данными

Сперва вспомним несколько определений

Марат Ахин (СПбГПУ) NP 2014 173 / 320

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

Проблема «останова» Покрытие потока данных

Определения и использования переменныхОпределение переменной (Def)

Оператор программы, в котором значение переменной v может бытьизменено

v = 42

f(&v, ...)

scanf(fmt, &v)

Использование переменной (Use)

Оператор программы, в котором значение переменной v влияет навыполнение программы тем или иным способом

q = v + 2

g(v, ...)

if (v != NULL) ...

Марат Ахин (СПбГПУ) NP 2014 174 / 320

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

Проблема «останова» Покрытие потока данных

Определения и использования переменных

Def-Use ChainПара (d , u) операторов программы, для которой выполняютсяследующие условия

d – определение переменной v

u – использование переменной v

между d и u существует хотя бы один путь, на которомпеременная v не переопределяется

Рассмотрим данные определения на примере

Марат Ахин (СПбГПУ) NP 2014 175 / 320

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

Проблема «останова» Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) NP 2014 176 / 320

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

Проблема «останова» Покрытие потока данных

Покрытие потока данных

Какие варианты покрытий можно предложить с использованием этихпонятий?

Покрытие всех определенийДля каждой интересующей нас переменной v должна бытьпротестирована хотя бы одна Def-Use Chain от каждогоопределения v до хотя бы одного использования v

Марат Ахин (СПбГПУ) NP 2014 177 / 320

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

Проблема «останова» Покрытие потока данных

All-Def Coverage

Рассмотрим следующие тесты1 → 2 → 3 → 4 → 5 → 6

Марат Ахин (СПбГПУ) NP 2014 178 / 320

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

Проблема «останова» Покрытие потока данных

Покрытие потока данных

Покрытие всех использованийДля каждой интересующей нас переменной v должна бытьпротестирована хотя бы одна Def-Use Chain от каждогоопределения v до каждого использования v

Является ли All-Use более сильным критерием по сравнению с All-Def?

Марат Ахин (СПбГПУ) NP 2014 179 / 320

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

Проблема «останова» Покрытие потока данных

All-Use Coverage

Рассмотрим следующие тесты1 → 2 → 3 → 4 → 5 → 61 → 2 → 3 → 4 → 61 → 3 → 4 → 5 → 6

Марат Ахин (СПбГПУ) NP 2014 180 / 320

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

Проблема «останова» Покрытие потока данных

Покрытие потока данных

Покрытие всех Def-Use ChainДля каждой интересующей нас переменной v должны бытьпротестированы все возможные Def-Use Chain от каждогоопределения v до каждого использования v

Как соотносится All-Def-Use-Chain с покрытием всех путей программы?

Марат Ахин (СПбГПУ) NP 2014 181 / 320

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

Проблема «останова» Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) NP 2014 182 / 320

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

Проблема «останова» Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) NP 2014 183 / 320

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

Проблема «останова» Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) NP 2014 184 / 320

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

Проблема «останова» Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) NP 2014 185 / 320

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

Проблема «останова» Мутационное тестирование

Другой способ оценки полноты

Какими способами можно управлять выполнением кода?Изменением входных данныхИзменением самого исходного кода

Как можно оценить полноту тестирования, изменяя исходный код?

Марат Ахин (СПбГПУ) NP 2014 186 / 320

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

Проблема «останова» Мутационное тестирование

Идеальный тест

Идеальный тест работает только на тестируемой программеПри любом изменений он перестает проходить

В этом заключается основная идея мутационного тестирования

Марат Ахин (СПбГПУ) NP 2014 187 / 320

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

Проблема «останова» Мутационное тестирование

Мутационное тестирование

Исходная программа подвергается мутации, в результатеполучается набор из N мутантовПосле этого имеющиеся тесты запускаются на этих мутантахЕсли тест не проходит на мутанте, то говорят, что тест «убивает»этого мутантаДоля «убитых» мутантов показывает, насколько полно данныйнабор тестов покрывает нашу программу

Марат Ахин (СПбГПУ) NP 2014 188 / 320

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

Проблема «останова» Мутационное тестирование

Как сделать мутанта?

Что можно сделать с исходным кодом?Добавить новый кодУдалить старый кодИзменить существующий код

Набор синтаксических трансформаций, изменяющих исходный код

Марат Ахин (СПбГПУ) NP 2014 189 / 320

Page 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

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

Проблема «останова» Мутационное тестирование

Как сделать мутанта?

Некоторые мутанты будут синтаксически некорректныДругие мутанты будут семантически некорректныОставшиеся мутанты подходят для использования в мутационномтестировании

Какие проблемы есть у мутационного тестирования?

Марат Ахин (СПбГПУ) NP 2014 191 / 320

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

Проблема «останова» Мутационное тестирование

Недостатки мутационного тестирования

Данный вид тестирования практически невозможно выполнятьвручную

Количество необходимых для оценки покрытия мутантовпропорционально объему анализируемого ПОДаже для небольшой программы получение достаточного числамутантов вручную является практически невозможным

Сильно возрастают затраты на проведение тестированияВместо одного запуска каждого теста требуется выполнить NзапусковКроме того, дополнительное время тратится на генерациюмутантов

Марат Ахин (СПбГПУ) NP 2014 192 / 320

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

Проблема «останова» Мутационное тестирование

Мутационное тестирование

Марат Ахин (СПбГПУ) NP 2014 193 / 320

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

Проблема «останова» Мутационное тестирование

Мутационное тестирование

Марат Ахин (СПбГПУ) NP 2014 194 / 320

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

Проблема «останова» Мутационное тестирование

Мутационное тестирование

Марат Ахин (СПбГПУ) NP 2014 195 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

Мы же уже поговорили об оценке тестового покрытия?

Оценка тестового покрытияпрограммы

Оценка самого тестовогопокрытия

Who observes the observer? c©

Марат Ахин (СПбГПУ) NP 2014 196 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

Какая проблема есть у покрытия потока управления?

Чувствительность к изменениям в исходном коде

Марат Ахин (СПбГПУ) NP 2014 197 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

Какая проблема есть у покрытия потока управления?

Чувствительность к изменениям в исходном коде

Марат Ахин (СПбГПУ) NP 2014 197 / 320

Page 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

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

Проблема «останова» Оценка тестового покрытия

Нестабильность тестового покрытия

Чем сильнее влияют изменения в программе на тестовоепокрытие, тем более нестабильным (fragile) является тестовоепокрытиеЧем более нестабильным является тестовое покрытие, тем менееадекватно оно оценивает качество тестирования

Что же делать?

Марат Ахин (СПбГПУ) NP 2014 199 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

The whole is more than the sum of its parts c©

Можно применить мутационное тестирование для оценкитестового покрытия

Ограничить набор трансформацийПосмотреть на изменение тестового покрытия для мутантов...PROFIT!

Марат Ахин (СПбГПУ) NP 2014 200 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

Какая проблема есть у мутационного тестирования?

Эквивалентные мутанты

Марат Ахин (СПбГПУ) NP 2014 201 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

Какая проблема есть у мутационного тестирования?

Эквивалентные мутанты

Марат Ахин (СПбГПУ) NP 2014 201 / 320

Page 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

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

Проблема «останова» Оценка тестового покрытия

Эквивалентные мутанты

Эквивалентные мутанты «зашумляют» итоговую оценку качестватестированияИз-за шума снижается адекватность оценки

Что же делать?

Марат Ахин (СПбГПУ) NP 2014 203 / 320

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

Проблема «останова» Оценка тестового покрытия

Оценка тестового покрытия

The whole is more than the sum of its parts c©

Можно применить тестовое покрытие для оценки мутационноготестирования

Для каждого мутанта записывается трасса его выполненияУ эквивалентных мутантов будут похожие трассы выполнения...PROFIT!

Марат Ахин (СПбГПУ) NP 2014 204 / 320

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

W.I.L.T. What I Learned Today?

W.I.L.T.

Марат Ахин (СПбГПУ) NP 2014 205 / 320