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

Preview:

Citation preview

Полнота тестирования ПО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

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

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

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

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

01kmax

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

Марат Ахин (СПбГПУ) 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 → 61 → 2 → 3 → 4 → 61 → 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

Recommended