softwaretesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../software-testing-102v2.pdf ·...

192
Основы тестирования программного обеспечения Software Testing 102 Марат Ахин Санкт-Петербургский государственный политехнический университет 2011 Марат Ахин (СПбГПУ) Введение 2011 1 / 146

Upload: others

Post on 15-Oct-2020

16 views

Category:

Documents


0 download

TRANSCRIPT

Page 1: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Марат Ахин

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

2011

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

Page 2: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия

Содержание

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

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 3: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия

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

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

Page 4: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия Software Testing 102

Software Testing 102

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

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

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

Page 5: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия Software Testing 102

Software Testing 102

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

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

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

Page 6: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия Software Testing 102

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

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

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

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

Page 7: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Прелюдия Software Testing 102

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

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

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

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

Page 8: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 9: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 10: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 11: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 12: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 13: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 14: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 15: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 16: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 17: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 18: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

FAILURE

FAULT

ERROR

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

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

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

Page 19: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

Найдите ошибку в следующей программе на 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

Page 20: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

Найдите ошибку в следующей программе на 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

Page 21: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 22: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 23: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 24: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 25: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 26: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 27: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 28: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 29: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 30: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 31: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 32: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 33: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 34: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 35: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 36: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 37: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 38: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 39: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 40: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 41: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 42: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 43: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 44: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

Пример

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

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

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

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

Page 45: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

ПримерВход – три числа 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

Page 46: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 47: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

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

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

Page 48: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 49: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 50: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 51: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 52: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 53: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

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

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

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

Page 54: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 55: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Exploratory testing

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

Test designCareful observationCritical thinkingDiverse ideasRich resources

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

Page 56: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

Page 57: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 58: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 59: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Page 60: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 61: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 62: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 63: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 64: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 65: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 66: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 67: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 68: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 69: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 70: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 71: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Homework

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

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

Page 72: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

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

Марат Ахин

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

2011

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

Page 73: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Quiz

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

Page 74: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 75: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 76: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 77: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 78: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 79: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 80: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 81: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 82: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 83: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 84: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 85: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

операторов

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

Page 86: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

Никак

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

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

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

Page 87: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 88: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 89: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 90: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 91: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 92: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 93: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 94: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

Page 95: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

012kmaxmax + 1

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

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

Page 96: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 97: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 98: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 99: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

v = 42

f(&v, ...)

scanf(fmt, &v)

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

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

q = v + 2

g(v, ...)

if (v != NULL) ...

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

Page 100: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

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

Page 101: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Пример

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

Page 102: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 103: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

All-Def Coverage

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

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

Page 104: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 105: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

All-Use Coverage

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

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

Page 106: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 107: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Пример

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

Page 108: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Пример

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

Page 109: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Пример

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

Page 110: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Пример

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

Page 111: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 112: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Зачем?

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

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

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

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

Page 113: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Недостатки?

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

Page 114: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 115: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability

Содержание

1 Прелюдия

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

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

4 Homework

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

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

7 Homework

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

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

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

Page 116: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability

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

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

Зачем?

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

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

Page 117: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability

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

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

Зачем?

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

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

Page 118: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability

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

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

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

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

Design for Testability (D4T)

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

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

Page 119: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability Test-Driven Development

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

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

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

Зачем?

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

Page 120: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability Test-Driven Development

Test-Driven Development

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

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

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

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

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

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

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

Page 121: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Design for testability Test-Driven Development

Test-Driven Development

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

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

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

Page 122: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

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

Page 123: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Simulate & Stub

Никак

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

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

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

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

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

Page 124: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Simulate & Stub

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

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

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

Page 125: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 126: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

C2POF

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

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

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

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

Page 127: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

C2POF

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

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

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

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

Page 128: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Зачем?

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

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

Page 129: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Зачем?

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

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

Page 130: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Зачем?

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

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

Page 131: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 132: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 133: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 134: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 135: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 136: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 137: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 138: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 139: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 140: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

Page 141: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

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

Page 142: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 143: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Homework

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

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

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

Page 144: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

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

Марат Ахин

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

2011

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

Page 145: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Homework

Quiz

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

Page 146: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Содержание

1 Прелюдия

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

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

4 Homework

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

6 Design for testability

7 Homework

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

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

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

Page 147: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 148: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 149: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

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

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

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

Page 150: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

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

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

Основной вид тестирования в процессе разработки ПО – эторегрессионное тестирование

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

Page 151: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Регрессионное тестирование

Как выглядит одна итерация регрессионного тестирования?

1 Мы модифицируем программу P и получаем программу P′

2 Из всего множества тестов T мы выбираем набор тестов T′,

который необходимо выполнить на P′

3 Для новой функциональности мы разрабатываем новые тесты T′′

4 Полученный набор тестов T′+ T

′′запускается на P

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

Какие проблемы связаны с РТ?

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

Page 152: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Регрессионное тестирование

Проблема №1

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

Консервативный подходВыбирать все имеющиеся тестыПолное регрессионное тестирование

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

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

Page 153: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Регрессионное тестирование

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

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

«Качественно. Быстро. Дешево. Выберите любые два.»

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

Page 154: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Регрессионное тестирование

Умный подходВыбирать тесты, которые «затрагивают» при выполненииизмененные части программыВыборочное регрессионное тестирование

Существует множество подходов к ВРТ на различных уровняхМодульное ВРТИнтеграционное ВРТСистемное ВРТ

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

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

Page 155: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Модульное ВРТ

Подход МакКартиАнализ изменений на уровне целого модуляСвязь элементов программы с тестами задается вручнуюразработчиком

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

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

Page 156: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Модульное ВРТ

Поход Ротермела и ХарролдАнализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

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

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

Page 157: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Модульное ВРТ

Подход БаллаАнализ изменений на уровне узлов CFG программыСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

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

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

Page 158: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Модульное ВРТ

Подход на основе ASTАнализ изменений на уровне вершин AST программыСвязь элементов программы с тестами задается на уровне AST наоснове динамической информации о выполнении каждого теста

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

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

Page 159: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Интеграционное ВРТ

Подход на основе концепции файерволаАнализ изменений на уровне целых модулейСвязь элементов программы с тестами не учитывается

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

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

Page 160: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Интеграционное ВРТ

Подход Ротермела-ХарролдАнализ изменений на уровне узлов межмодульного CFGСвязь элементов программы с тестами задается на уровне CFG наоснове динамической информации о выполнении каждого теста

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

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

Page 161: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

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

Page 162: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

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

Page 163: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Системное ВРТ

Какие варианты Вы можете предложить?

Вспомните, что системное тестирование – это модульное тестирование«очень большого и сложного ящика»

Какие варианты Вы можете предложить теперь?

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

Page 164: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

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

Управление регрессионными тестами

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

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

Марат Ахин (СПбГПУ) РТ 2011 128 / 146

Page 165: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

Когда в ПО появилась новая функциональностьКогда в ПО была исправлена ошибкаКогда мы хотим улучшить тестовое покрытие ПОКогда мы можем себе позволить добавить новыйнеповторяющийся тест

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

Page 166: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

Когда в ПО появилась новая функциональностьКогда в ПО была исправлена ошибкаКогда мы хотим улучшить тестовое покрытие ПОКогда мы можем себе позволить добавить новыйнеповторяющийся тест

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

Page 167: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

Когда в ПО появилась новая функциональностьКогда в ПО была исправлена ошибкаКогда мы хотим улучшить тестовое покрытие ПОКогда мы можем себе позволить добавить новыйнеповторяющийся тест

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

Page 168: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Добавление новых тестов

Когда надо добавлять новый регрессионный тест?

Когда в ПО появилась новая функциональностьКогда в ПО была исправлена ошибкаКогда мы хотим улучшить тестовое покрытие ПОКогда мы можем себе позволить добавить новыйнеповторяющийся тест

Марат Ахин (СПбГПУ) РТ 2011 129 / 146

Page 169: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Добавление новых тестов

С течением времени число тестов увеличиваетсяЧем больше тестов, тем лучше тестовое покрытиеПроблемы начинаются, когда тестов становится слишком много

Что такое «слишком много»?

Марат Ахин (СПбГПУ) РТ 2011 130 / 146

Page 170: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

Когда тест дублирует другие тестыКогда тест не улучшает тестовое покрытиеКогда тест ни разу не обнаружил ошибки за все времятестированияКогда тест обнаруживает такие же ошибки, как и другие тесты

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

Page 171: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

Когда тест дублирует другие тестыКогда тест не улучшает тестовое покрытиеКогда тест ни разу не обнаружил ошибки за все времятестированияКогда тест обнаруживает такие же ошибки, как и другие тесты

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

Page 172: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

Когда тест дублирует другие тестыКогда тест не улучшает тестовое покрытиеКогда тест ни разу не обнаружил ошибки за все времятестированияКогда тест обнаруживает такие же ошибки, как и другие тесты

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

Page 173: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

Когда тест дублирует другие тестыКогда тест не улучшает тестовое покрытиеКогда тест ни разу не обнаружил ошибки за все времятестированияКогда тест обнаруживает такие же ошибки, как и другие тесты

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

Page 174: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Удаление старых тестов

Когда можно удалять старый тест?

Никогда

Когда тест дублирует другие тестыКогда тест не улучшает тестовое покрытиеКогда тест ни разу не обнаружил ошибки за все времятестированияКогда тест обнаруживает такие же ошибки, как и другие тесты

Марат Ахин (СПбГПУ) РТ 2011 131 / 146

Page 175: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Приоритизация регрессионных тестов

Проблема №3Как запускать регрессионные тесты?

Взяли имеющийся набор тестов и запустили их

Такой подход может не всегда нас устраиватьЧто мы можем изменить?

Марат Ахин (СПбГПУ) РТ 2011 132 / 146

Page 176: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Приоритизация регрессионных тестов

Мы можем изменить порядок, в котором мы запускаемрегрессионные тестыЗачем?

Чем раньше мы узнаем о том, что в ПО появилась регрессионнаяошибка, тем скорее мы сможем приступить к ее исправлениюЧасто причиной непрохождения различных (напрямую несвязанных друг с другом) тестов является одна и та же ошибка вПОИногда время на тестирование является ограниченным, инеобходимо найти наибольшее число ошибок с учетом всехограничений

Как мы можем приоритизировать регрессионные тесты?

Марат Ахин (СПбГПУ) РТ 2011 133 / 146

Page 177: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Приоритизация регрессионных тестов

При помощи интуицииПодход работает, если у Вас хорошая интуицияКроме интуиции можно использовать имеющийся опыт разработкиПО

На основе знаний о тестовом покрытии ПОСперва выполняются тесты, которые имеют наибольшее покрытиеПОСперва выполняются тесты, которые покрывают более важныекомпоненты ПО

На основе истории разработкиПриоритет отдается тестам, которые чаще других обнаруживалирегрессионные ошибкиПервыми выполняются тесты, проверяющие корректность работынаиболее «проблемных» компонентов ПО

Марат Ахин (СПбГПУ) РТ 2011 134 / 146

Page 178: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Приоритизация регрессионных тестов

Случайным образомПодход перекликается со случайным ВРТЕсли мы можем случайным образом поменять порядоквыполнения тестов, то почему бы это не сделать?

На основе характеристик тестовПервыми выполняются тесты с наименьшим временем выполненияПриоритет отдается тестам, которые наиболее активно работают сокружением программной системы

Марат Ахин (СПбГПУ) РТ 2011 135 / 146

Page 179: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Анализ результатов регрессионного тестирования

Проблема №4Что делать с результатами регрессионного тестирования?

Если все тесты проходят – все хорошо

Если тест не проходит – то все зависит от того, по какой причинеон не проходит

Варианты?

Марат Ахин (СПбГПУ) РТ 2011 136 / 146

Page 180: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Анализ результатов регрессионного тестирования

В тестируемом модуле есть ошибкаОшибку необходимо локализовать и исправитьПосле исправления требуется выполнить повторное РТ

Входные тестовые данные больше не являются корректнымиНапример, была изменена спецификация модуляНеобходимо либо обновить тест, либо удалить его

Ожидаемые выходные данные изменилисьОпять же, была изменена спецификация модуляНеобходимо обновить тест

Марат Ахин (СПбГПУ) РТ 2011 137 / 146

Page 181: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО Управление регрессионными тестами

Анализ результатов регрессионного тестирования

Часто довольно сложно понять, о какой именно ситуации идетречь в каждом конкретном случае

Особенно если мы тестируем модули со сложнойфункциональностьюВ этом нам нисколько не помогает проблема рассинхронизацииспецификации и тестов

Как обстоит дело с РТ/ВРТ на практике?

Марат Ахин (СПбГПУ) РТ 2011 138 / 146

Page 182: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

РТ используется очень частоTDDAgile DevelopmentRUP

ВРТ практически не используется

Почему?

Марат Ахин (СПбГПУ) РТ 2011 139 / 146

Page 183: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

Крайняя сложность выбора регрессионных тестовОпасность пропустить регрессионную ошибку при использованиинебезопасного ВРТСтрах перед использованием «непонятной» технологииПростота экстенсивного пути решения проблем РТ

Отсутствие инструментальной поддержкиДо недавнего времени

Марат Ахин (СПбГПУ) РТ 2011 140 / 146

Page 184: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Интеграция тестирования в процесс разработки ПО РТ на практике

РТ на практике

Сложность получения динамической информации о покрытиитестами компонентов программы

Требуется выполнить инструментирование ПО дополнительнымитрассирующими вызовамиЖурналирование особого вида

Какие сложности могут при этом быть?

Марат Ахин (СПбГПУ) РТ 2011 141 / 146

Page 185: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования

Содержание

1 Прелюдия

2 Общая модель тестирования

3 Уровни тестирования ПО

4 Homework

5 Тестирование белого ящика

6 Design for testability

7 Homework

8 Интеграция тестирования в процесс разработки ПО

9 Будущее тестированияУровни тестированияОткрытые проблемы в тестировании ПО

Марат Ахин (СПбГПУ) РТ 2011 142 / 146

Page 186: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Page 187: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Page 188: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Page 189: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 0Тестирование ничем не отличается от отладки

Уровень 1Цель тестирования – доказать корректность программы

Уровень 2Цель тестирования – доказать, что в программе есть ошибки

Уровень 3Цель тестирования – увеличить качество ПО

Марат Ахин (СПбГПУ) РТ 2011 143 / 146

Page 190: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Уровни тестирования

Уровни тестирования

Уровень 4Тестирование – это одна из частей процесса разработки ПО

Подавляющее большинство компаний находятся на уровнях 0 и 1«Monkey testing»Цена/качество

Некоторые компании «доросли» до уровней 2 и 3Тестирование не является часть процесса разработкиВо главу угла ставится непосредственно разработка ПО

Марат Ахин (СПбГПУ) РТ 2011 144 / 146

Page 191: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Открытые проблемы в тестировании ПО

Открытые проблемы в тестировании ПО

Как тестировать «сверх-высоконадежное» ПО?

Можно ли автоматизировать генерацию тестов?

Как перейти к активному использованию ВРТ?

Как оценивать полноту тестирования в промышленных проектах?

Как использовать результаты научных исследований на практике?

Марат Ахин (СПбГПУ) РТ 2011 145 / 146

Page 192: SoftwareTesting102 МаратАхин 2011kspt.icc.spbstu.ru/.../Software-Testing-102v2.pdf · Прелюдия Что такое тестирование? Почему тестировать

Будущее тестирования Открытые проблемы в тестировании ПО

Революция в тестировании

Тестирование должно стать неотъемлимой частью разработки ПО

Марат Ахин (СПбГПУ) РТ 2011 146 / 146