SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf ·...

Preview:

Citation preview

Основы тестирования программного обеспеченияSoftware Testing 102

Марат Ахин

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

2011

Марат Ахин (СПбГПУ) Введение 2011 1 / 146

Прелюдия

Содержание

1 ПрелюдияSoftware Testing 102Что такое тестирование?

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) Введение 2011 2 / 146

Прелюдия

Методы обеспечения качества ПО

Марат Ахин (СПбГПУ) Введение 2011 3 / 146

Прелюдия Software Testing 102

Software Testing 102

Основы тестирования программного обеспеченияТо, что Вы точно должны знать, если хотите стать хорошимспециалистом по тестированию ПОА если я хочу быть разработчиком?

Знание основ тестирования ПО разработчику никогда не помешает

Марат Ахин (СПбГПУ) Введение 2011 4 / 146

Прелюдия Software Testing 102

Software Testing 102

Основы тестирования программного обеспеченияТо, что Вы точно должны знать, если хотите стать хорошимспециалистом по тестированию ПОА если я хочу быть разработчиком?

Знание основ тестирования ПО разработчику никогда не помешает

Марат Ахин (СПбГПУ) Введение 2011 4 / 146

Прелюдия Software Testing 102

Почему разработчик должен уметь тестировать ПО?

Потому что так сказал преподаватель!

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

Марат Ахин (СПбГПУ) Введение 2011 5 / 146

Прелюдия Software Testing 102

Почему разработчик должен уметь тестировать ПО?

Потому что так сказал преподаватель!

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

Марат Ахин (СПбГПУ) Введение 2011 5 / 146

Прелюдия Что такое тестирование?

Что за вопрос лежит в основе тестирования?

Работает ли это ПО правильно?НЕТ, тестирование никогда не может дать Вам ответа на этотвопрос

Работает ли это ПО неправильно?

ДА, тестирование может (и должно) ответить на этот вопрос

Тестирование = Разрушение

Марат Ахин (СПбГПУ) Введение 2011 6 / 146

Прелюдия Что такое тестирование?

Что за вопрос лежит в основе тестирования?

Работает ли это ПО правильно?НЕТ, тестирование никогда не может дать Вам ответа на этотвопрос

Работает ли это ПО неправильно?

ДА, тестирование может (и должно) ответить на этот вопрос

Тестирование = Разрушение

Марат Ахин (СПбГПУ) Введение 2011 6 / 146

Прелюдия Что такое тестирование?

Что за вопрос лежит в основе тестирования?

Работает ли это ПО правильно?НЕТ, тестирование никогда не может дать Вам ответа на этотвопрос

Работает ли это ПО неправильно?

ДА, тестирование может (и должно) ответить на этот вопрос

Тестирование = Разрушение

Марат Ахин (СПбГПУ) Введение 2011 6 / 146

Прелюдия Что такое тестирование?

Что за вопрос лежит в основе тестирования?

Работает ли это ПО правильно?НЕТ, тестирование никогда не может дать Вам ответа на этотвопрос

Работает ли это ПО неправильно?

ДА, тестирование может (и должно) ответить на этот вопрос

Тестирование = Разрушение

Марат Ахин (СПбГПУ) Введение 2011 6 / 146

Прелюдия Что такое тестирование?

Что за вопрос лежит в основе тестирования?

Работает ли это ПО правильно?НЕТ, тестирование никогда не может дать Вам ответа на этотвопрос

Работает ли это ПО неправильно?

ДА, тестирование может (и должно) ответить на этот вопрос

Тестирование = Разрушение

Марат Ахин (СПбГПУ) Введение 2011 6 / 146

Прелюдия Что такое тестирование?

Что такое тестирование?

Лучший друг верификации и валидации ПОВ чем разница?

Верификация – «мы сделали это правильно»Валидация – «мы сделали то, что надо»

Марат Ахин (СПбГПУ) Введение 2011 7 / 146

Прелюдия Что такое тестирование?

Можем ли мы что-то гарантировать при тестировании?

Данное ПО никогда не упадет по NPEПотоки никогда не заблокируютсяВычисления всегда выполняются корректноВременные характеристики всегда выдерживаются

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

Почему это так – мы рассмотрим в следующих лекциях

Марат Ахин (СПбГПУ) Введение 2011 8 / 146

Прелюдия Что такое тестирование?

Почему тестировать сложно?

Brian Kernighan«Debugging is twice as hard as writing the code in the first place.Therefore, if you write the code as cleverly as possible, you are, bydefinition, not smart enough to debug it.»

Massimo Arnoldi (feat. Kent Beck)

«Unfortunately at least for me (and not only) testing goes against humannature. If you realize the pig in you, you will see that you program withouttests.»

Чтобы сделать тестирование более приятным процессом, необходимопонять его характерные особенности и свойства

Марат Ахин (СПбГПУ) Введение 2011 9 / 146

Общая модель тестирования

Содержание

1 Прелюдия

2 Общая модель тестированияТестирование ПО с точки зрения дилетантаМодель программной ошибкиМодель тестирования ПО

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) Введение 2011 10 / 146

Общая модель тестирования Тестирование ПО с точки зрения дилетанта

Тестирование ПО с точки зрения дилетанта

Запустили приложениеПроверили результаты выполнения на предмет наличия в нихошибок

aka «багов»aka «сбоев»aka «дефектов»aka «неудач»

Сперва надо разобраться, а что же такое «программная ошибка»?

Марат Ахин (СПбГПУ) Введение 2011 11 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

FAILURE

FAULT

ERROR

Неудача – наблюдаемое снаружинекорректное поведение программыСбой – некорректное состояниепрограммы из-за ошибкиОшибка – ошибка в самойпрограмме, внесенная на этаперазработки

Рассмотрим данную модель на примере

Марат Ахин (СПбГПУ) Введение 2011 12 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

Найдите ошибку в следующей программе на Java

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Возможное переполнение в строке 4

Марат Ахин (СПбГПУ) Введение 2011 13 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

Найдите ошибку в следующей программе на Java

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Возможное переполнение в строке 4

Марат Ахин (СПбГПУ) Введение 2011 13 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Нет ни сбоя, ни неудачи – программа работает корректно

Марат Ахин (СПбГПУ) Введение 2011 14 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Нет ни сбоя, ни неудачи – программа работает корректно

Марат Ахин (СПбГПУ) Введение 2011 14 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Нет ни сбоя, ни неудачи – программа работает корректно

Марат Ахин (СПбГПУ) Введение 2011 15 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Нет ни сбоя, ни неудачи – программа работает корректно

Марат Ахин (СПбГПУ) Введение 2011 15 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5, +MAX_INT, -MAX_INT}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Сбой есть – программа проходит через некорректное состояниеНо неудачи нет – результат работы программы корректен

Марат Ахин (СПбГПУ) Введение 2011 16 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5, +MAX_INT, -MAX_INT}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

Сбой есть – программа проходит через некорректное состояниеНо неудачи нет – результат работы программы корректен

Марат Ахин (СПбГПУ) Введение 2011 16 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5, +MAX_INT}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

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

Марат Ахин (СПбГПУ) Введение 2011 17 / 146

Общая модель тестирования Модель программной ошибки

Модель программной ошибки

c = {1, 2, 3, 5, +MAX_INT}

Что будет?

1 int sumCollection(final Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }

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

Марат Ахин (СПбГПУ) Введение 2011 17 / 146

Общая модель тестирования Модель тестирования ПО

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

Эталонная модель может бытьпредставлена множеством различныхспособов

неформальное представление того,«как ПО должно работать»формальная техническаяспецификациянабор тестовых примеровкорректные результаты работыпрограммыдругая (априори корректная)реализация той же исходнойспецификации

Марат Ахин (СПбГПУ) Введение 2011 18 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

Для того, чтобы найти ошибку, тест должен обеспечивать выполнениеопределенных свойств

Каких?Reachibility – тест должен выполнить место в исходном коде, гдеприсутствует программная ошибкаCorruption – при выполнении ошибки состояние программыдолжно испортиться с появлением сбояPropagation – сбой должен распространиться дальше и вызватьнеудачу в работе программы

Обеспечение этих свойств – одна из самых сложных проблемтестирования ПО

Марат Ахин (СПбГПУ) Введение 2011 19 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

Для того, чтобы найти ошибку, тест должен обеспечивать выполнениеопределенных свойств

Каких?Reachibility – тест должен выполнить место в исходном коде, гдеприсутствует программная ошибкаCorruption – при выполнении ошибки состояние программыдолжно испортиться с появлением сбояPropagation – сбой должен распространиться дальше и вызватьнеудачу в работе программы

Обеспечение этих свойств – одна из самых сложных проблемтестирования ПО

Марат Ахин (СПбГПУ) Введение 2011 19 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

Для того, чтобы найти ошибку, тест должен обеспечивать выполнениеопределенных свойств

Каких?Reachibility – тест должен выполнить место в исходном коде, гдеприсутствует программная ошибкаCorruption – при выполнении ошибки состояние программыдолжно испортиться с появлением сбояPropagation – сбой должен распространиться дальше и вызватьнеудачу в работе программы

Обеспечение этих свойств – одна из самых сложных проблемтестирования ПО

Марат Ахин (СПбГПУ) Введение 2011 19 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

Для того, чтобы найти ошибку, тест должен обеспечивать выполнениеопределенных свойств

Каких?Reachibility – тест должен выполнить место в исходном коде, гдеприсутствует программная ошибкаCorruption – при выполнении ошибки состояние программыдолжно испортиться с появлением сбояPropagation – сбой должен распространиться дальше и вызватьнеудачу в работе программы

Обеспечение этих свойств – одна из самых сложных проблемтестирования ПО

Марат Ахин (СПбГПУ) Введение 2011 19 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

Для того, чтобы найти ошибку, тест должен обеспечивать выполнениеопределенных свойств

Каких?Reachibility – тест должен выполнить место в исходном коде, гдеприсутствует программная ошибкаCorruption – при выполнении ошибки состояние программыдолжно испортиться с появлением сбояPropagation – сбой должен распространиться дальше и вызватьнеудачу в работе программы

Обеспечение этих свойств – одна из самых сложных проблемтестирования ПО

Марат Ахин (СПбГПУ) Введение 2011 19 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

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

А сейчас...Как именно мы можем наблюдать за ошибками в работе программы?

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

Марат Ахин (СПбГПУ) Введение 2011 20 / 146

Общая модель тестирования Модель тестирования ПО

Свойства теста

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

А сейчас...Как именно мы можем наблюдать за ошибками в работе программы?

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

Марат Ахин (СПбГПУ) Введение 2011 20 / 146

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

Содержание

1 Прелюдия

2 Общая модель тестирования

3 Уровни тестирования ПОМодульное тестированиеТестирование черного ящикаТестирование белого ящикаИнтеграционное и системное тестирование

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) Введение 2011 21 / 146

Уровни тестирования ПО Модульное тестирование

Модульное тестирование

Модульное тестирование – проверка корректности работыотдельных модулей программыМодуль – это

Набор входовНекий «ящик», выполняющий какие-либо преобразованияНабор выходов

Вопрос – что мы вообще можем сделать с модулем?

Марат Ахин (СПбГПУ) Введение 2011 22 / 146

Уровни тестирования ПО Модульное тестирование

Модульное тестирование

Мы можемПодать модулю на вход какие-либо данныеСчитать с выходов результаты его работы

К сожалению, это ВСЕ, что мы можем сделать с модулем

Как можно тестировать ПО в таких ужасных условиях?

Марат Ахин (СПбГПУ) Введение 2011 23 / 146

Уровни тестирования ПО Модульное тестирование

Модульное тестирование

Мы можемПодать модулю на вход какие-либо данныеСчитать с выходов результаты его работы

К сожалению, это ВСЕ, что мы можем сделать с модулем

Как можно тестировать ПО в таких ужасных условиях?

Марат Ахин (СПбГПУ) Введение 2011 23 / 146

Уровни тестирования ПО Модульное тестирование

Модульное тестирование

Решение «в лоб»Протестировать модуль на всех возможных комбинациях входов

Чтобы протестировать функцию, которая перемножает два32-разрядных числа, необходимо перебрать 264 вариантов.Если на проверку каждого варианта тратить по 1 наносекунде,нам понадобится всего лишь 584 года

Необходимо как-то уменьшить число перебираемых вариантов

Марат Ахин (СПбГПУ) Введение 2011 24 / 146

Уровни тестирования ПО Модульное тестирование

Модульное тестирование

Все зависит от того, знаем ли мы что-нибудь о том самом«ящике»

Тестирование черного ящика – известна только внешняяспецификация модуляТестирование белого ящика – известно полное внутреннееустройство модуляТестирование серого ящика – известны некоторые деталиустройства модуля

Марат Ахин (СПбГПУ) Введение 2011 25 / 146

Уровни тестирования ПО Тестирование черного ящика

Тестирование черного ящика

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

Разбиение на классы эквивалентностиИдея заключается в том, чтобы разбить пространство входныхсостояний программы на небольшое число классовэквивалентности таким образом, чтобы все элементы одногокласса эквивалентности обрабатывались модулем одинаково сточки зрения спецификацииВ случае, если при написании модуля спецификация былаполностью учтена, тестирование всех классов эквивалентностиозначает полное тестирование данного модуля

Марат Ахин (СПбГПУ) Введение 2011 26 / 146

Уровни тестирования ПО Тестирование черного ящика

Тестирование черного ящика

Пример

Вход – пара чисел (x , y)Выход – строка, характеризующая отношение между x и y

x < yx > yx = yERROR (если на вход модуля был подан объект, не являющийсяпарой чисел)

В данном случае все просто и понятно...

Марат Ахин (СПбГПУ) Введение 2011 27 / 146

Уровни тестирования ПО Тестирование черного ящика

Тестирование черного ящика

ПримерВход – три числа x , y и zВыход

x · y · z , если x – целое число, y > 0, z > 0x · y , если x – целое число, x < 42, y > z2

xz , если x представимо рациональной дробью по основанию 13,z < 42...

В этом случае все уже не столь очевидно...

Марат Ахин (СПбГПУ) Введение 2011 28 / 146

Уровни тестирования ПО Тестирование черного ящика

Тестирование черного ящика

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

ПримерРасчет городского налога

Нерезиденты платят 1% от общего доходаРезиденты платят

1% от дохода, если он не превышает 300,000 в год5% от дохода, если он не превышает 600,000 в год15% от дохода, если он превышает 600,000 в год

Марат Ахин (СПбГПУ) Введение 2011 29 / 146

Уровни тестирования ПО Тестирование черного ящика

Тестирование черного ящика

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

спецификации задают одинаковое поведение модуля

ПримерРасчет городского налога

Если доход не превышает 300,000 в год, налог составляет 1%Если доход не превышает 600,000 в год

Для нерезидентов налог составляет 1% от общего доходаДля резидентов налог составляет 5% от общего дохода

Если доход превышает 600,000 в годДля нерезидентов налог составляет 1% от общего доходаДля резидентов налог составляет 15% от общего дохода

Марат Ахин (СПбГПУ) Введение 2011 30 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

Анализ причинно-следственных связей

Систематический подход к перебору возможных причин (входов)и следствий (выходов) и отношений между нимиПод причиной может пониматься как конкретное значение входа,так и определенный класс эквивалентностиПод следствием обычно понимается конкретное значение выхода

Но иногда это может также быть какой-либо классэквивалентности

Марат Ахин (СПбГПУ) Введение 2011 31 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

1: Определение причин и следствийСамый важный и самый сложный этап анализаКрайне важно выбрать правильный уровень абстракцииПричины не обязательно должны быть взаимоисключающими

2: Вывод логических отношений и ограниченийЗадаются при помощи логических операций И, ИЛИ, НЕОписывают возможные комбинации причин с учетоманализируемой предметной области и здравого смысла

Марат Ахин (СПбГПУ) Введение 2011 32 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

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

4: Составить план тестированияТребует внимательного анализа причинно-следственныхзависимостей в соответствии со стратегией выбора тестовОбычно это крайне трудоемкий процесс

Что означает возможность ошибки при подготовке к тестированиюА это очень и очень плохо – поэтому желательно использоватьсредства автоматизации

Марат Ахин (СПбГПУ) Введение 2011 33 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

ПримерРасчет городского налога

Нерезиденты платят 1% от общего доходаРезиденты платят

1% от дохода, если он не превышает 300,000 в год5% от дохода, если он не превышает 600,000 в год15% от дохода, если он превышает 600,000 в год

Удобным способом представления причинно-следственных связейявляются булевы графы

Марат Ахин (СПбГПУ) Введение 2011 34 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

Марат Ахин (СПбГПУ) Введение 2011 35 / 146

Уровни тестирования ПО Тестирование черного ящика

Причинно-следственный анализ

Возможные стратегии выбора тестов

1 Все возможные комбинации причин2 Все возможные эффекты при минимальном общем числе тестов3 Все возможные эффекты для всех возможных при этом

комбинаций причин4 Стратегия 3 с набором дополнительных правил

Для узлов типа И рассматриваем только такие комбинациипричин, в которых

либо все входы истиннылибо лишь один вход ложен

Для узлов типа ИЛИ рассматриваем только такие комбинациипричин, в которых

либо все входы ложнылибо лишь один вход истинен

Марат Ахин (СПбГПУ) Введение 2011 36 / 146

Уровни тестирования ПО Тестирование черного ящика

Другие методы тестирования черного ящика

Анализ граничных значений

Exploratory testingМетод научного тыкаЧертовски эффективный в случае правильного его примененияНеобходимо выйти за рамки разумного и пытаться сломатьсистему настолько нестандартными способами, какие Вы толькоможете себе представить

Ad hoc testingСамый неформальный метод тестированияМетод научного тыка, возведенный в абсолютНет ни предварительного планирования, ни документированияпроцесса тестирования

Марат Ахин (СПбГПУ) Введение 2011 37 / 146

Уровни тестирования ПО Тестирование черного ящика

Exploratory testing

Exploratory testing is simultaneous learning, test design, and test execution

Test designCareful observationCritical thinkingDiverse ideasRich resources

Марат Ахин (СПбГПУ) Введение 2011 38 / 146

Уровни тестирования ПО Тестирование черного ящика

Exploratory testing

Input/Output attacksAttacks by input valueAttacks by input value combinationAttacks by input order

Data attacksAttacks by variable valueAttacks by data element sizeAttacks by data access

Computation attacksAttacks by operandAttacks by resultAttacks by feature interaction

Марат Ахин (СПбГПУ) Введение 2011 39 / 146

Уровни тестирования ПО Тестирование белого ящика

Тестирование белого ящика

Будет рассмотрено на следующей лекции

Марат Ахин (СПбГПУ) Введение 2011 40 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Интеграционное и системное тестирование

Тестирование корректности работы нескольких модулей вместе всоставе программной системы

Два основных подходаМоментальный

Тестирование взаимодействия начинается после написания всехотдельных модулейТакое тестирование также известно как тестирование методом«Большого Взрыва»

ИнкрементальныйТестирование взаимодействия выполняется постоянно, в процессеразработкиВопрос в том, о какой инкрементальности мы говорим

Марат Ахин (СПбГПУ) Введение 2011 41 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Интеграционное и системное тестирование

Марат Ахин (СПбГПУ) Введение 2011 42 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Нисходящее интеграционное тестирование

Тестирование начинается с верхних уровней системыОтсутствующие на данный момент модули заменяются«заглушками»По мере реализации новых модулей они подключаются к системевместо «заглушек»

Марат Ахин (СПбГПУ) Введение 2011 43 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Нисходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности высокоуровневогоповеденияМодули могут добавляться по одному, независимо друг от другаНе требуется разработка множества драйверовМожно разрабатывать систему как в глубину, так и в ширину

НедостаткиОтложенная проверка низкоуровневого поведенияТребуется разработка «заглушек»Крайне сложно корректно сформулировать требования ковходам/выходам частичной системы

Марат Ахин (СПбГПУ) Введение 2011 44 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Нисходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности высокоуровневогоповеденияМодули могут добавляться по одному, независимо друг от другаНе требуется разработка множества драйверовМожно разрабатывать систему как в глубину, так и в ширину

НедостаткиОтложенная проверка низкоуровневого поведенияТребуется разработка «заглушек»Крайне сложно корректно сформулировать требования ковходам/выходам частичной системы

Марат Ахин (СПбГПУ) Введение 2011 44 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Нисходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности высокоуровневогоповеденияМодули могут добавляться по одному, независимо друг от другаНе требуется разработка множества драйверовМожно разрабатывать систему как в глубину, так и в ширину

НедостаткиОтложенная проверка низкоуровневого поведенияТребуется разработка «заглушек»Крайне сложно корректно сформулировать требования ковходам/выходам частичной системы

Марат Ахин (СПбГПУ) Введение 2011 44 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Восходящее интеграционное тестирование

Тестирование начинается с нижних уровней системыОтсутствующие на данный момент модули заменяютсядрайверамиПри реализации всех модулей нижнего уровня драйвер можетбыть заменен на соответствующий модуль

Марат Ахин (СПбГПУ) Введение 2011 45 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Восходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности низкоуровневогоповеденияНе требуется написание заглушекПросто определить требования ко входам/выходам модулей

НедостаткиОтложенная проверка высокоуровневого поведенияТребуется разработка драйверовПри замене драйвера на модуль высокого уровня можетпроизойти «мини-Большой Взрыв»

Марат Ахин (СПбГПУ) Введение 2011 46 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Восходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности низкоуровневогоповеденияНе требуется написание заглушекПросто определить требования ко входам/выходам модулей

НедостаткиОтложенная проверка высокоуровневого поведенияТребуется разработка драйверовПри замене драйвера на модуль высокого уровня можетпроизойти «мини-Большой Взрыв»

Марат Ахин (СПбГПУ) Введение 2011 46 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Восходящее интеграционное тестирование

ПреимуществаВозможность ранней проверки корректности низкоуровневогоповеденияНе требуется написание заглушекПросто определить требования ко входам/выходам модулей

НедостаткиОтложенная проверка высокоуровневого поведенияТребуется разработка драйверовПри замене драйвера на модуль высокого уровня можетпроизойти «мини-Большой Взрыв»

Марат Ахин (СПбГПУ) Введение 2011 46 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Системное тестирование

Модульное тестирование «очень большого и сложного ящика»

Обычно системное тестирование выполняется с определеннойцелью

Тестирование производительностиСтресс тестированиеТестирование безопасностиТестирование совместимостиТестирование переносимостиТестирование восстанавливаемостиТестирование устанавливаемостиТестирование обслуживаемости...

Марат Ахин (СПбГПУ) Введение 2011 47 / 146

Уровни тестирования ПО Интеграционное и системное тестирование

Системное тестирование

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

Марат Ахин (СПбГПУ) Введение 2011 48 / 146

Homework

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) Введение 2011 49 / 146

Homework

Homework

Написать краткое эссе на тему: какойметод системного тестированияявляется самым важным с точкизрения обеспечения качества ипочему?Оригинальность (в разумныхпределах) приветствуется

Марат Ахин (СПбГПУ) Введение 2011 50 / 146

Homework

Полнота тестирования ПО: оценка и обеспечениеSoftware Testing 102

Марат Ахин

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

2011

Марат Ахин (СПбГПУ) D4T 2011 51 / 146

Homework

Quiz

Марат Ахин (СПбГПУ) D4T 2011 52 / 146

Тестирование белого ящика

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящикаСвойства тестирования белого ящикаПокрытие потока управленияПокрытие потока данныхМутационное тестирование

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) D4T 2011 53 / 146

Тестирование белого ящика Свойства тестирования белого ящика

В чем отличие от тестирования черного ящика?

В цвете??? Вообще-то – да!

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

Это дополнительное знание – хорошо или плохо?

Марат Ахин (СПбГПУ) D4T 2011 54 / 146

Тестирование белого ящика Свойства тестирования белого ящика

Свойства тестирования белого ящика

Дополнительная информация о тестируемом ПО не может бытьлишней

Благодаря ей мы можем проектировать более эффективные иточные тестыМы знаем устройство «ящика» – и знаем то, какие его частитребуют более тщательного тестирования, а какие можнопрактически не тестироватьЗа счет этого можно снизить стоимость проведения тестирования

Марат Ахин (СПбГПУ) D4T 2011 55 / 146

Тестирование белого ящика Свойства тестирования белого ящика

Свойства тестирования белого ящика

К сожалению, при тестировании ПО всегда есть один негативныйфактор – человек

Обычно при тестировании белого ящика тесты пишет самразработчик «ящика»При разработке он думал о вполне определенных входныхвоздействиях на модульСкорее всего, при тестировании он будет подавать такие жевходные воздействияВ то же время, ошибки появляются, когда в работе модулявозникают «неожиданности»

Марат Ахин (СПбГПУ) D4T 2011 56 / 146

Тестирование белого ящика Свойства тестирования белого ящика

Свойства тестирования белого ящика

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

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

Оценки покрытия также используются для оценки полнотытестирования ПО

Об этом мы поговорим чуть дальше

Марат Ахин (СПбГПУ) D4T 2011 57 / 146

Тестирование белого ящика Свойства тестирования белого ящика

Свойства тестирования белого ящика

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

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

Оценки покрытия также используются для оценки полнотытестирования ПО

Об этом мы поговорим чуть дальше

Марат Ахин (СПбГПУ) D4T 2011 57 / 146

Тестирование белого ящика Свойства тестирования белого ящика

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 58 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 59 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 59 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 60 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 61 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

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

операторов

Марат Ахин (СПбГПУ) D4T 2011 62 / 146

Тестирование белого ящика Покрытие потока управления

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

Никак

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

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

Марат Ахин (СПбГПУ) D4T 2011 63 / 146

Тестирование белого ящика Покрытие потока управления

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

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

1 if (p != q && (p == null || !p.equals(q))) {2 ...3 }

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

Марат Ахин (СПбГПУ) D4T 2011 64 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

1 if (p != q && (p == null || !p.equals(q))) {2 ...3 }

Марат Ахин (СПбГПУ) D4T 2011 65 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

1 if (p != q && (p == null || !p.equals(q))) {2 ...3 }

Марат Ахин (СПбГПУ) D4T 2011 66 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 67 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 67 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 67 / 146

Тестирование белого ящика Покрытие потока управления

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

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

Марат Ахин (СПбГПУ) D4T 2011 68 / 146

Тестирование белого ящика Покрытие потока управления

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

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

Марат Ахин (СПбГПУ) D4T 2011 68 / 146

Тестирование белого ящика Покрытие потока управления

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

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

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

012kmaxmax + 1

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

Марат Ахин (СПбГПУ) D4T 2011 69 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 70 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 70 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 70 / 146

Тестирование белого ящика Покрытие потока данных

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

Определение переменной (Def)

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

v = 42

f(&v, ...)

scanf(fmt, &v)

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

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

q = v + 2

g(v, ...)

if (v != NULL) ...

Марат Ахин (СПбГПУ) D4T 2011 71 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 72 / 146

Тестирование белого ящика Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) D4T 2011 73 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 74 / 146

Тестирование белого ящика Покрытие потока данных

All-Def Coverage

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

Марат Ахин (СПбГПУ) D4T 2011 75 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 76 / 146

Тестирование белого ящика Покрытие потока данных

All-Use Coverage

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

Марат Ахин (СПбГПУ) D4T 2011 77 / 146

Тестирование белого ящика Покрытие потока данных

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

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

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

Марат Ахин (СПбГПУ) D4T 2011 78 / 146

Тестирование белого ящика Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) D4T 2011 79 / 146

Тестирование белого ящика Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) D4T 2011 80 / 146

Тестирование белого ящика Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) D4T 2011 81 / 146

Тестирование белого ящика Покрытие потока данных

Пример

Марат Ахин (СПбГПУ) D4T 2011 82 / 146

Тестирование белого ящика Мутационное тестирование

Что еще мы можем сделать с «белым ящиком»?

Зная внутреннее устройство модуля, мы можем измерить то,насколько полно мы его тестируемА также можем оптимизировать написание тестов, используяинформацию о тестовом покрытии

Может быть, кто-нибудь сможет предложить что-нибудь еще?

Марат Ахин (СПбГПУ) D4T 2011 83 / 146

Тестирование белого ящика Мутационное тестирование

Что еще мы можем сделать с «белым ящиком»?

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

Зачем?

Чтобы оценить полноту нашего тестирования – но в другойплоскости

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

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

Марат Ахин (СПбГПУ) D4T 2011 84 / 146

Тестирование белого ящика Мутационное тестирование

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

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

Если тест не проходит на мутанте, то говорят, что тест «убивает»этого мутанта

Доля «убитых» мутантов показывает, насколько полно данныйнабор тестов покрывает нашу программу

Недостатки?

Марат Ахин (СПбГПУ) D4T 2011 85 / 146

Тестирование белого ящика Мутационное тестирование

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

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

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

Кроме того, сильно возрастают затраты на проведениетестирования

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

Марат Ахин (СПбГПУ) D4T 2011 86 / 146

Design for testability

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testabilityTest-Driven DevelopmentСпособы обеспечения управляемостиСпособы обеспечения наблюдаемостиТестирование некоторых классов приложений

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) D4T 2011 87 / 146

Design for testability

Что еще мы можем сделать с «белым ящиком»?

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

Зачем?

Тест должен обеспечивать выполнение трех основных свойствReachibilityCorruptionPropagation

Марат Ахин (СПбГПУ) D4T 2011 88 / 146

Design for testability

Что еще мы можем сделать с «белым ящиком»?

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

Зачем?

Тест должен обеспечивать выполнение трех основных свойствReachibilityCorruptionPropagation

Марат Ахин (СПбГПУ) D4T 2011 88 / 146

Design for testability

Как можно обеспечить выполнение этих свойств?

1 Можно надеяться на то, что данные свойства будут выполнятьсясами по себе

Как показывает многолетний опыт, если при разработке ПО недумают о RCP, то тестировать данное ПО будет очень сложноАдаптировать ПО для тестирования, если RCP нет, такжепрактически невозможно

2 Можно заранее обеспокоиться выполнением RCP

Design for Testability (D4T)

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

Марат Ахин (СПбГПУ) D4T 2011 89 / 146

Design for testability Test-Driven Development

Как можно обеспечить выполнение этих свойств?

Способы D4T зависят от того, какое ПО мы разрабатываем

Test-Driven DevelopmentНаиболее известный способ обеспечения D4TЕдинственный способ, применимый практически к любому ПООсновной принцип – тесты разрабатываются перед исходнымкодом

Зачем?

Марат Ахин (СПбГПУ) D4T 2011 90 / 146

Design for testability Test-Driven Development

Test-Driven Development

Чтобы обеспечить управляемость и наблюдаемость

Наблюдаемость обеспечивается за счет того, что каждый тестпроверяет какой-либо набор предположений о тестируемойпрограмме

Корректность этих предположений должна быть видна снаружипрограммыДля каждого теста проверяется как успешное, так и неудачноевыполнение теста

Управляемость обеспечивается за счет того, что тесты пишутсядля минимальных элементов функциональности

Никакой дополнительной функциональности, которая не покрытатестами, нетЛюбое возможное действие имеет соответствующий тест

Преимущества и недостатки?

Марат Ахин (СПбГПУ) D4T 2011 91 / 146

Design for testability Test-Driven Development

Test-Driven Development

TDD стимулирует к написанию маленьких, локальных модулейОшибки обнаруживаются рано, что снижает стоимость ихисправленияРазработка идет от функциональности, что приводит к созданиюболее простых и понятных интерфейсов

Разработка тестов требует дополнительного времениПри исправлении ошибки, сделанной на ранних этапахразработки, требуется модифицировать или написать с нулябольшое число тестовЭффект «розовых очков»

Марат Ахин (СПбГПУ) D4T 2011 92 / 146

Design for testability Способы обеспечения управляемости

Способы обеспечения управляемости

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

Этим вопросом занимаются такие дисциплины как SoftwareArchitecture, Software Analysis & Design, etc.

Кроме этого, в ПО обычно есть значительная часть кода, скоторым мы ничего сделать не можем

сторонние библиотекисистемные библиотеки ОСlegacy-код

Как управлять ими?

Марат Ахин (СПбГПУ) D4T 2011 93 / 146

Design for testability Способы обеспечения управляемости

Simulate & Stub

Никак

Критически важные сторонние компоненты необходимоэмулировать или заменять заглушками (Simulate & Stub → S&S)

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

С их помощью можно имитировать редкие ошибки (например,сбои в аппаратуре)Заглушки могут «вносить в систему детерминизм» там, где его нет

S&S может обеспечить «обратную масштабируемость» (downwardsscalability)

Марат Ахин (СПбГПУ) D4T 2011 94 / 146

Design for testability Способы обеспечения управляемости

Simulate & Stub

Пример S&S – mock-объекты

Заглушки в ООПМогут быть легко заменены (при правильном проектировании) нареальные объекты при развертывании приложенияЧасто работают на порядок быстрее реальных объектовСтимулируют разработку модульного, слабо связанного кода

Марат Ахин (СПбГПУ) D4T 2011 95 / 146

Design for testability Способы обеспечения управляемости

Способы обеспечения управляемости

А все же – что мы можем сделать с нашим кодом?

Правило C2POFConsistent test run resultsConfiguration is not neededPartial testing is possibleOrder of tests is not importantFast run time

Марат Ахин (СПбГПУ) D4T 2011 96 / 146

Design for testability Способы обеспечения управляемости

C2POF

Результаты тестов должны быть повторяемымиВ тесте не должно быть недетерминированного поведенияНеобходимо минимизировать зависимость теста от его окруженияS&S – но уже внутри нашего кода

Тесты не должны требовать дополнительной конфигурацииЭто касается как самих тестов, так и тестируемых модулейпрограммыИначе в каждом тесте требуется выполнять рутинную работу позаданию каких-либо параметровS&S – но уже внутри нашего кода

Тесты должны выполняться быстроКогда число тестов становится достаточно большим, Вы неможете тратить по 10 минут каждые полчаса на запуск тестовНо тесты необходимо запускать часто – чтобы находить ошибкикак можно раньшеS&S – но уже внутри нашего кода

Марат Ахин (СПбГПУ) D4T 2011 97 / 146

Design for testability Способы обеспечения управляемости

C2POF

Тесты должны допускать возможность частичного запускаТо есть между тестами не должно быть никаких зависимостей повыполнениюВ противном случае возникают сложные, мало кому понятныеошибки при изменении отдельных тестов

Тесты должны допускать возможность запуска в любом порядкеТо есть между тестами не должно быть никаких зависимостей повыполнениюЕсли Вы не можете добиться этого – значит, Вы делаете что-то нетак

Какие из этих свойств важнее?Какие из этих свойств сложнее в обеспечении?

Марат Ахин (СПбГПУ) D4T 2011 98 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

Некоторые способы обеспечения наблюдаемости мы ужерассмотрели «между строк» ранее

Например, разработка на основе маленьких, локальных модулей

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

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

Зачем?

Чтобы обеспечить выполнение свойства распространяемости сбояЭто, фактически, и означает обеспечение наблюдаемости

Марат Ахин (СПбГПУ) D4T 2011 99 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

Некоторые способы обеспечения наблюдаемости мы ужерассмотрели «между строк» ранее

Например, разработка на основе маленьких, локальных модулей

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

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

Зачем?

Чтобы обеспечить выполнение свойства распространяемости сбояЭто, фактически, и означает обеспечение наблюдаемости

Марат Ахин (СПбГПУ) D4T 2011 99 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

Некоторые способы обеспечения наблюдаемости мы ужерассмотрели «между строк» ранее

Например, разработка на основе маленьких, локальных модулей

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

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

Зачем?

Чтобы обеспечить выполнение свойства распространяемости сбояЭто, фактически, и означает обеспечение наблюдаемости

Марат Ахин (СПбГПУ) D4T 2011 99 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

Выделяют три основных способа обеспечения наблюдаемостиИспользование assert’овПроверка состояния программы при выполненииЖурналирование

AssertionsКонтролируют некоторые факты о состоянии программы принеобходимостиПревращают некоторые сбои в неудачи

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

Могут использоваться как при тестировании, так и во времяреальной эксплуатации ПО

Марат Ахин (СПбГПУ) D4T 2011 100 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

Invariant checkersПроверяют корректность состояния программы в какой-то точкевыполнения

Могут рассматриваться как более масштабные assert’ы

Корректность может выражаться как набор довольно сложныхинвариантовМогут обнаруживать хитрые «скрытые» сбоиКрайне ресурсоемки, поэтому используются только притестировании

Марат Ахин (СПбГПУ) D4T 2011 101 / 146

Design for testability Способы обеспечения наблюдаемости

Способы обеспечения наблюдаемости

LoggingСамый часто используемый способ обеспечения наблюдаемостиЗаписывают трассы выполнения программы вместе с еесостоянием в удобной для разработчика формеПредоставляют разработчику очень много информации

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

Марат Ахин (СПбГПУ) D4T 2011 102 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование некоторых классов приложений

Простота обеспечения управляемости и наблюдаемости зависитот того, какое ПО мы разрабатываемРассмотрим некоторые проблемы, которые возникают притестировании

объектно-ориентированных приложенийприложений с GUIВеб-приложений

Марат Ахин (СПбГПУ) D4T 2011 103 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование ОО-приложений

В чем основные отличия ОО-приложений?НаследованиеПолиморфизмИнкапсуляция

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

Марат Ахин (СПбГПУ) D4T 2011 104 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование ОО-приложений

В чем основные отличия ОО-приложений?НаследованиеПолиморфизмИнкапсуляция

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

Марат Ахин (СПбГПУ) D4T 2011 104 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование ОО-приложений

Наследование и полиморфизм усложняют обеспечениеуправляемости

Необходимо знать не только то, что делает тестируемый модуль,но и все модули в его иерархии наследованияИзменения в модулях могут приводить к вызову другихполиморфных методов, что, в свою очередь, может изменитьрезультаты тестирования

Инкапсуляция усложняет наблюдаемостьСобственно, ее основная задача – это скрыть подробностиреализацииУ нас нет стандартных средств определения внутреннего состоянияобъектов

Марат Ахин (СПбГПУ) D4T 2011 105 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование приложений с GUI

В чем основные отличия приложений с GUI?В GUIОсновной недостаток GUI для тестирования – крайне большоевозможное число состоянийКроме того, GUI обычно очень контекстно-чувствительны

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

Марат Ахин (СПбГПУ) D4T 2011 106 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование приложений с GUI

Управляемость GUI обычно крайне низкаЧасто с этим ничего невозможно сделатьВ некоторых случаях GUI имеет средства автоматизацииДля больших интерфейсов даже этого может быть мало

Наблюдаемость GUI обычно крайне низкаАнализировать визуальные ошибки автоматически очень сложноК сожалению, классические средства обеспечения наблюдаемостислабо подходят для работы с GUI

Марат Ахин (СПбГПУ) D4T 2011 107 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование Веб-приложений

В чем основные отличия Веб-приложений?Распределенная архитектураАктивная работа с базами данныхКрайне сложное взаимодействие с пользователем

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

Марат Ахин (СПбГПУ) D4T 2011 108 / 146

Design for testability Тестирование некоторых классов приложений

Тестирование Веб-приложений

Распределенная архитектура несколько помогает притестировании

ПО всегда можно «разрезать» по какой-либо плоскости ииспользовать S&SВзаимодействие по сети просто отслеживать и анализировать

БД усложняют обеспечение как управляемости, так инаблюдаемости

БД – это огромное хранимое состояние программы, котороевлияет на ее работуПонять, что и как хранится в БД, очень сложно

Марат Ахин (СПбГПУ) D4T 2011 109 / 146

Homework

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестирования

Марат Ахин (СПбГПУ) D4T 2011 110 / 146

Homework

Homework

Написать эссе объемом не менее 3000символов на одну из следующих тем

Какое из свойств C2POF важнее ипочему?Какое из свойств C2POF сложнее вобеспечении и почему?Какой из способов обеспеченияуправляемости лучше и почему?Какой из способов обеспечениянаблюдаемости лучше и почему?

Марат Ахин (СПбГПУ) D4T 2011 111 / 146

Homework

Интеграция тестирования в жизненный циклразработки ПОSoftware Testing 102

Марат Ахин

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

2011

Марат Ахин (СПбГПУ) РТ 2011 112 / 146

Homework

Quiz

Марат Ахин (СПбГПУ) РТ 2011 113 / 146

Интеграция тестирования в процесс разработки ПО

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПОТестирование ПО в процессе разработкиРегрессионное тестированиеВыборочное регрессионное тестированиеУправление регрессионными тестамиРТ на практике

9 Будущее тестирования

Марат Ахин (СПбГПУ) РТ 2011 114 / 146

Интеграция тестирования в процесс разработки ПО Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

Инкрементально, небольшими независимыми шагамиИзменение уже существующего кодаИсправление ошибокДобавление новой функциональностиАдаптация имеющихся компонентов к новым задачам

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) РТ 2011 115 / 146

Интеграция тестирования в процесс разработки ПО Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

Инкрементально, небольшими независимыми шагамиИзменение уже существующего кодаИсправление ошибокДобавление новой функциональностиАдаптация имеющихся компонентов к новым задачам

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) РТ 2011 115 / 146

Интеграция тестирования в процесс разработки ПО Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

Как ПО изменяется в процессе разработки?

Инкрементально, небольшими независимыми шагамиИзменение уже существующего кодаИсправление ошибокДобавление новой функциональностиАдаптация имеющихся компонентов к новым задачам

Любые (даже самые незначительные) изменения могут серьезноповлиять на качество ПО

Марат Ахин (СПбГПУ) РТ 2011 115 / 146

Интеграция тестирования в процесс разработки ПО Тестирование ПО в процессе разработки

Тестирование ПО в процессе разработки

После любого изменения требуется проверить, что в программе непоявилось новых ошибокДля этого мы выполняем все имеющиеся тесты и проверяем, чтовсе они успешно завершаются

Основной вид тестирования в процессе разработки ПО – эторегрессионное тестирование

Марат Ахин (СПбГПУ) РТ 2011 116 / 146

Интеграция тестирования в процесс разработки ПО Регрессионное тестирование

Регрессионное тестирование

Как выглядит одна итерация регрессионного тестирования?

1 Мы модифицируем программу P и получаем программу P′

2 Из всего множества тестов T мы выбираем набор тестов T′,

который необходимо выполнить на P′

3 Для новой функциональности мы разрабатываем новые тесты T′′

4 Полученный набор тестов T′+ T

′′запускается на P

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

Какие проблемы связаны с РТ?

Марат Ахин (СПбГПУ) РТ 2011 117 / 146

Интеграция тестирования в процесс разработки ПО Регрессионное тестирование

Регрессионное тестирование

Проблема №1

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

Консервативный подходВыбирать все имеющиеся тестыПолное регрессионное тестирование

Экономичный подходВыбирать все тесты, каким-либо образом связанные потребованиям/спецификации/интуиции с изменениями в коде«Выборочное» регрессионное тестирование

Марат Ахин (СПбГПУ) РТ 2011 118 / 146

Интеграция тестирования в процесс разработки ПО Регрессионное тестирование

Регрессионное тестирование

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

Полнота – способность выбирать те тесты, которые могутобнаружить ошибки, связанные с изменениями в кодеТочность – способность пропускать такие тесты, которые неизменяют своего поведения на модифицированной программеЭффективность – способность выполняться быстрее, чем полноерегрессионное тестированиеУниверсальность – применимость в большинстве практическихситуаций

«Качественно. Быстро. Дешево. Выберите любые два.»

Марат Ахин (СПбГПУ) РТ 2011 119 / 146

Интеграция тестирования в процесс разработки ПО Регрессионное тестирование

Регрессионное тестирование

Умный подходВыбирать тесты, которые «затрагивают» при выполненииизмененные части программыВыборочное регрессионное тестирование

Существует множество подходов к ВРТ на различных уровняхМодульное ВРТИнтеграционное ВРТСистемное ВРТ

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

Марат Ахин (СПбГПУ) РТ 2011 120 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Модульное ВРТ

Подход МакКартиАнализ изменений на уровне целого модуляСвязь элементов программы с тестами задается вручнуюразработчиком

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 121 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Модульное ВРТ

Поход Ротермела и ХарролдАнализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 122 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Модульное ВРТ

Подход БаллаАнализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 123 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Модульное ВРТ

Подход на основе ASTАнализ изменений на уровне вершин AST программыСвязь элементов программы с тестами задается на уровне AST наоснове динамической информации о выполнении каждого теста

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 124 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Интеграционное ВРТ

Подход на основе концепции файерволаАнализ изменений на уровне целых модулейСвязь элементов программы с тестами не учитывается

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 125 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Интеграционное ВРТ

Подход Ротермела-ХарролдАнализ изменений на уровне узлов межмодульного CFGСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

Преимущества и недостатки?

Марат Ахин (СПбГПУ) РТ 2011 126 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

Марат Ахин (СПбГПУ) РТ 2011 127 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

Марат Ахин (СПбГПУ) РТ 2011 127 / 146

Интеграция тестирования в процесс разработки ПО Выборочное регрессионное тестирование

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

Марат Ахин (СПбГПУ) РТ 2011 127 / 146

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

Управление регрессионными тестами

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

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

Марат Ахин (СПбГПУ) РТ 2011 128 / 146

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

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

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

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

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

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

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

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

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

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

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

Добавление новых тестов

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

Что такое «слишком много»?

Марат Ахин (СПбГПУ) РТ 2011 130 / 146

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

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

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

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

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

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

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

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

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

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

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

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

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

Приоритизация регрессионных тестов

Проблема №3Как запускать регрессионные тесты?

Взяли имеющийся набор тестов и запустили их

Такой подход может не всегда нас устраиватьЧто мы можем изменить?

Марат Ахин (СПбГПУ) РТ 2011 132 / 146

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

Приоритизация регрессионных тестов

Мы можем изменить порядок, в котором мы запускаемрегрессионные тестыЗачем?

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

Как мы можем приоритизировать регрессионные тесты?

Марат Ахин (СПбГПУ) РТ 2011 133 / 146

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

Приоритизация регрессионных тестов

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

На основе знаний о тестовом покрытии ПОСперва выполняются тесты, которые имеют наибольшее покрытиеПОСперва выполняются тесты, которые покрывают более важныекомпоненты ПО

На основе истории разработкиПриоритет отдается тестам, которые чаще других обнаруживалирегрессионные ошибкиПервыми выполняются тесты, проверяющие корректность работынаиболее «проблемных» компонентов ПО

Марат Ахин (СПбГПУ) РТ 2011 134 / 146

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

Приоритизация регрессионных тестов

Случайным образомПодход перекликается со случайным ВРТЕсли мы можем случайным образом поменять порядоквыполнения тестов, то почему бы это не сделать?

На основе характеристик тестовПервыми выполняются тесты с наименьшим временем выполненияПриоритет отдается тестам, которые наиболее активно работают сокружением программной системы

Марат Ахин (СПбГПУ) РТ 2011 135 / 146

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

Анализ результатов регрессионного тестирования

Проблема №4Что делать с результатами регрессионного тестирования?

Если все тесты проходят – все хорошо

Если тест не проходит – то все зависит от того, по какой причинеон не проходит

Варианты?

Марат Ахин (СПбГПУ) РТ 2011 136 / 146

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

Анализ результатов регрессионного тестирования

В тестируемом модуле есть ошибкаОшибку необходимо локализовать и исправитьПосле исправления требуется выполнить повторное РТ

Входные тестовые данные больше не являются корректнымиНапример, была изменена спецификация модуляНеобходимо либо обновить тест, либо удалить его

Ожидаемые выходные данные изменилисьОпять же, была изменена спецификация модуляНеобходимо обновить тест

Марат Ахин (СПбГПУ) РТ 2011 137 / 146

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

Анализ результатов регрессионного тестирования

Часто довольно сложно понять, о какой именно ситуации идетречь в каждом конкретном случае

Особенно если мы тестируем модули со сложнойфункциональностьюВ этом нам нисколько не помогает проблема рассинхронизацииспецификации и тестов

Как обстоит дело с РТ/ВРТ на практике?

Марат Ахин (СПбГПУ) РТ 2011 138 / 146

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

РТ используется очень частоTDDAgile DevelopmentRUP

ВРТ практически не используется

Почему?

Марат Ахин (СПбГПУ) РТ 2011 139 / 146

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

Крайняя сложность выбора регрессионных тестовОпасность пропустить регрессионную ошибку при использованиинебезопасного ВРТСтрах перед использованием «непонятной» технологииПростота экстенсивного пути решения проблем РТ

Отсутствие инструментальной поддержкиДо недавнего времени

Марат Ахин (СПбГПУ) РТ 2011 140 / 146

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

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

Требуется выполнить инструментирование ПО дополнительнымитрассирующими вызовамиЖурналирование особого вида

Какие сложности могут при этом быть?

Марат Ахин (СПбГПУ) РТ 2011 141 / 146

Будущее тестирования

Содержание

1 Прелюдия

2 Общая модель тестирования

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

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестированияУровни тестированияОткрытые проблемы в тестировании ПО

Марат Ахин (СПбГПУ) РТ 2011 142 / 146

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 4Тестирование – это одна из частей процесса разработки ПО

Подавляющее большинство компаний находятся на уровнях 0 и 1«Monkey testing»Цена/качество

Некоторые компании «доросли» до уровней 2 и 3Тестирование не является часть процесса разработкиВо главу угла ставится непосредственно разработка ПО

Марат Ахин (СПбГПУ) РТ 2011 144 / 146

Будущее тестирования Открытые проблемы в тестировании ПО

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

Как тестировать «сверх-высоконадежное» ПО?

Можно ли автоматизировать генерацию тестов?

Как перейти к активному использованию ВРТ?

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

Как использовать результаты научных исследований на практике?

Марат Ахин (СПбГПУ) РТ 2011 145 / 146

Будущее тестирования Открытые проблемы в тестировании ПО

Революция в тестировании

Тестирование должно стать неотъемлимой частью разработки ПО

Марат Ахин (СПбГПУ) РТ 2011 146 / 146

Recommended