Тестирование программного обеспечения: что, зачем и...
TRANSCRIPT
Tестирование программного обеспеченияЧто, зачем и почему?
Software Testing 101
Марат Ахин
Санкт-Петербургский государственный политехнический университет
2014
Марат Ахин (СПбГПУ) Intro 2014 1 / 313
Прелюдия
Содержание
1 ПрелюдияОбеспечение качества ПОТестирование ПО
2 Тестирование за 45 минут
3 Тестирование в процессе разработки ПО
Марат Ахин (СПбГПУ) Intro 2014 2 / 313
Прелюдия Обеспечение качества ПО
Обеспечение качества ПО
Функциональные vs нефункциональные требования
Марат Ахин (СПбГПУ) Intro 2014 3 / 313
Прелюдия Обеспечение качества ПО
Обеспечение качества ПО
Функциональные требованияАдекватностьТочностьИнтероперабельностьБезопасность
Нефункциональные требованияНадежностьЭффективностьПоддерживаемостьПереносимость
Как можно их проверять?
Марат Ахин (СПбГПУ) Intro 2014 4 / 313
Прелюдия Обеспечение качества ПО
Обеспечение качества ПО
Thinking is hard, running is simple. (c)
Запустить программу просто и это можно сделать всегдаДумать о программе сложно и требует «высшего знания»
Будем запускать программу, чтобы проверить, отвечает ли онапредъявленным требованиям
Марат Ахин (СПбГПУ) Intro 2014 6 / 313
Прелюдия Тестирование ПО
Что такое тестирование ПО?
То, чем вы будете заниматься до 80% времени
Марат Ахин (СПбГПУ) Intro 2014 7 / 313
Прелюдия Тестирование ПО
Что за вопрос лежит в основе тестирования?
Работает ли это ПО правильно?НЕТ
Работает ли это ПО неправильно?ДА
Тестирование
=
Разрушение
Марат Ахин (СПбГПУ) Intro 2014 8 / 313
Прелюдия Тестирование ПО
Что за вопрос лежит в основе тестирования?
Работает ли это ПО правильно?НЕТ
Работает ли это ПО неправильно?ДА
Тестирование
=
Разрушение
Марат Ахин (СПбГПУ) Intro 2014 8 / 313
Прелюдия Тестирование ПО
Что за вопрос лежит в основе тестирования?
Работает ли это ПО правильно?НЕТ
Работает ли это ПО неправильно?ДА
Тестирование
=
Разрушение
Марат Ахин (СПбГПУ) Intro 2014 8 / 313
Прелюдия Тестирование ПО
Что за вопрос лежит в основе тестирования?
Работает ли это ПО правильно?НЕТ
Работает ли это ПО неправильно?ДА
Тестирование
=
Разрушение
Марат Ахин (СПбГПУ) Intro 2014 8 / 313
Прелюдия Тестирование ПО
Что за вопрос лежит в основе тестирования?
Работает ли это ПО правильно?НЕТ
Работает ли это ПО неправильно?ДА
Тестирование
=
Разрушение
Марат Ахин (СПбГПУ) Intro 2014 8 / 313
Прелюдия Тестирование ПО
Кому помогает тестирование?Лучший друг верификации и валидации ПОВ чем разница?
Верификация – «мы сделали это правильно»Валидация – «мы сделали то, что надо»
Марат Ахин (СПбГПУ) Intro 2014 9 / 313
Прелюдия Тестирование ПО
Можем ли мы что-то гарантировать при тестировании?
Данное ПО никогда не упадетПотоки никогда не заблокируютсяВычисления всегда выполняются корректноВременные характеристики всегда выдерживаются
Мы можем дать такие гарантии лишь в самых тривиальных случаях,когда обычно все ясно и без тестирования
Марат Ахин (СПбГПУ) Intro 2014 10 / 313
Прелюдия Тестирование ПО
Можем ли мы что-то гарантировать при тестировании?
Данное ПО никогда не упадетПотоки никогда не заблокируютсяВычисления всегда выполняются корректноВременные характеристики всегда выдерживаются
Мы можем дать такие гарантии лишь в самых тривиальных случаях,когда обычно все ясно и без тестирования
Марат Ахин (СПбГПУ) Intro 2014 10 / 313
Прелюдия Тестирование ПО
Почему тестировать сложно?
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.»
Марат Ахин (СПбГПУ) Intro 2014 11 / 313
Прелюдия Тестирование ПО
Почему тестировать нужно?
Если отложить сегодняшние дела на послезавтра, у вас появятся двасвободных дня! (с)
Марат Ахин (СПбГПУ) Intro 2014 12 / 313
Тестирование за 45 минут
Содержание
1 Прелюдия
2 Тестирование за 45 минутТестирование ПО с точки зрения дилетантаМодель программной ошибкиМодель тестирования ПОПроцесс тестирования ПО
3 Тестирование в процессе разработки ПО
Марат Ахин (СПбГПУ) Intro 2014 14 / 313
Тестирование за 45 минут Тестирование ПО с точки зрения дилетанта
Тестирование ПО с точки зрения дилетанта
Запустили приложениеПроверили результаты выполнения на предмет наличия в нихошибок
aka «багов»aka «сбоев»aka «дефектов»aka «неудач»
Сперва надо разобраться, а что же такое «программная ошибка»?
Марат Ахин (СПбГПУ) Intro 2014 15 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
FAILURE
FAULT
ERROR
Неудача – наблюдаемое снаружинекорректное поведение программыСбой – некорректное состояниепрограммы из-за ошибкиОшибка – ошибка в самойпрограмме, внесенная на этаперазработки
Рассмотрим данную модель на примере
Марат Ахин (СПбГПУ) Intro 2014 16 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
Найдите ошибку в следующей программе на Java
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Возможное переполнение в строке 4
Марат Ахин (СПбГПУ) Intro 2014 17 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
Найдите ошибку в следующей программе на Java
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Возможное переполнение в строке 4
Марат Ахин (СПбГПУ) Intro 2014 17 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Нет ни сбоя, ни неудачи – программа работает корректно
Марат Ахин (СПбГПУ) Intro 2014 18 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Нет ни сбоя, ни неудачи – программа работает корректно
Марат Ахин (СПбГПУ) Intro 2014 18 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Нет ни сбоя, ни неудачи – программа работает корректно
Марат Ахин (СПбГПУ) Intro 2014 19 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Нет ни сбоя, ни неудачи – программа работает корректно
Марат Ахин (СПбГПУ) Intro 2014 19 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5, Integer.MAX_VALUE, Integer.MIN_VALUE}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Сбой есть – программа проходит через некорректное состояниеНо неудачи нет – результат работы программы корректен
Марат Ахин (СПбГПУ) Intro 2014 20 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5, Integer.MAX_VALUE, Integer.MIN_VALUE}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Сбой есть – программа проходит через некорректное состояниеНо неудачи нет – результат работы программы корректен
Марат Ахин (СПбГПУ) Intro 2014 20 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5, Integer.MAX_VALUE}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Сбой есть – программа проходит через некорректное состояниеНеудача тоже есть – результат работы программы неправильный
Марат Ахин (СПбГПУ) Intro 2014 21 / 313
Тестирование за 45 минут Модель программной ошибки
Модель программной ошибки
c = {1, 2, 3, 5, Integer.MAX_VALUE}
Что будет?
1 int sumCollection(final @NotNull Collection <Integer > c) {2 int sum = 0;3 for (int i : c) {4 sum += i;5 }6 return sum;7 }
Сбой есть – программа проходит через некорректное состояниеНеудача тоже есть – результат работы программы неправильный
Марат Ахин (СПбГПУ) Intro 2014 21 / 313
Тестирование за 45 минут Модель тестирования ПО
Что мы делали?
Запускали ПО (мысленно)Сравнивали результаты работы с ожидаемыми (логически)
Можно ли придумать другой способ тестирования?
Марат Ахин (СПбГПУ) Intro 2014 22 / 313
Тестирование за 45 минут Модель тестирования ПО
Модель тестирования ПОЭталонная модель может бытьпредставлена множеством различныхспособов
неформальное представление о том,«как должна работать программа»формальная техническаяспецификациянабор тестовых примеровкорректные результаты работыпрограммыдругая (априори корректная)реализация той же исходнойспецификации
Марат Ахин (СПбГПУ) Intro 2014 23 / 313
Тестирование за 45 минут Процесс тестирования ПО
Процесс тестирования ПО
Что может случиться?
Марат Ахин (СПбГПУ) Intro 2014 24 / 313
Тестирование за 45 минут Процесс тестирования ПО
Тест прошел
A-WE-SO-ME! ,
Марат Ахин (СПбГПУ) Intro 2014 25 / 313
Тестирование за 45 минут Процесс тестирования ПО
Тест не прошел
OH-MI-GOD! /
Марат Ахин (СПбГПУ) Intro 2014 26 / 313
Тестирование за 45 минут Процесс тестирования ПО
Ошибка в ПО
Все просто и понятно, да?
Марат Ахин (СПбГПУ) Intro 2014 27 / 313
Тестирование за 45 минут Процесс тестирования ПО
Ошибка в эталонной модели
Некорректный тест? Ошибка в спецификации?
Марат Ахин (СПбГПУ) Intro 2014 28 / 313
Тестирование за 45 минут Процесс тестирования ПО
Ошибка в тестовом окружении
Баг в тестовой библиотеке?
Марат Ахин (СПбГПУ) Intro 2014 29 / 313
Тестирование за 45 минут Процесс тестирования ПО
Ошибка в платформе
Баг в ОС? Аппаратный сбой? Ошибка компилятора?
Марат Ахин (СПбГПУ) Intro 2014 30 / 313
Тестирование за 45 минут Процесс тестирования ПО
Процесс тестирования ПО
Является ли данная модель самодостаточной?
Марат Ахин (СПбГПУ) Intro 2014 31 / 313
Тестирование за 45 минут Процесс тестирования ПО
Процесс тестирования ПО
Откуда брать эталонную модель?Как сравнивать результаты работы программы и модели?
Марат Ахин (СПбГПУ) Intro 2014 32 / 313
Тестирование за 45 минут Процесс тестирования ПО
Процесс тестирования ПО
Когда останавливать процесс тестирования?
Марат Ахин (СПбГПУ) Intro 2014 33 / 313
Тестирование за 45 минут Процесс тестирования ПО
Процесс тестирования ПО
Как подобрать входные данные, чтобы:дойти до места с программной ошибкой (Reachibility)испортить состояние программы с появлением сбоя (Corruption)вызвать неудачу в работе программы (Propagation)
Марат Ахин (СПбГПУ) Intro 2014 34 / 313
Проблемы тестирования Проблемы тестирования
Проблемы тестирования
What’s up, Doc? (с)
Проблема тестовых входных данныхПроблема наблюдаемостиПроблема «останова»Проблема тестового оракула
Марат Ахин (СПбГПУ) Intro 2014 35 / 313
Тестирование в процессе разработки ПО
Содержание
1 Прелюдия
2 Тестирование за 45 минут
3 Тестирование в процессе разработки ПОМодели разработки ПОПроблемы тестирования ПО
Марат Ахин (СПбГПУ) Intro 2014 36 / 313
Тестирование в процессе разработки ПО Модели разработки ПО
Модели разработки ПО
Чем активнее используется тестирование в процессе разработки,тем важнее его правильное использование
Марат Ахин (СПбГПУ) Intro 2014 37 / 313
Тестирование в процессе разработки ПО Модели разработки ПО
Водопадная модель
Строго последовательная модельразработкиТестирование выполняется над всейпрограммой сразуИмеется хорошая эталонная модель
Стоимость поиска и исправленияошибок очень высока
Марат Ахин (СПбГПУ) Intro 2014 38 / 313
Тестирование в процессе разработки ПО Модели разработки ПО
Инкрементальная модель
Разработка проходит в несколькоитерацийТестируются отдельные версиипрограммыИмеется неплохая эталонная модель
Стоимость поиска и исправленияошибок высока
Марат Ахин (СПбГПУ) Intro 2014 39 / 313
Тестирование в процессе разработки ПО Модели разработки ПО
Гибкая модель
Все этапы разработки неразрывносвязаны друг с другомТестированию подвергаются как самапрограмма, так и ее компонентыЭталонная модель есть не всегда
Стоимость поиска и исправленияошибок относительно низка
Марат Ахин (СПбГПУ) Intro 2014 40 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Проблемы тестирования ПО
Разве что-то может пойти совсем плохо?
Марат Ахин (СПбГПУ) Intro 2014 41 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Розовые очки
Марат Ахин (СПбГПУ) Intro 2014 42 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Розовые очки
Неправильное тестирование создает иллюзию, что все хорошо......тогда как на самом деле все может быть очень и очень плохо
Все тесты проходятВыпускаем код в релиз...BOOM!
Марат Ахин (СПбГПУ) Intro 2014 43 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Наводнение
Марат Ахин (СПбГПУ) Intro 2014 44 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Наводнение
Неправильное тестирование создает иллюзию, что все плохо......тогда как на самом деле все вполне себе ничего
Большинство тестов не проходитСадимся и исправляем ошибки...UNREACHABLE!
Марат Ахин (СПбГПУ) Intro 2014 45 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Прятки
Марат Ахин (СПбГПУ) Intro 2014 46 / 313
Тестирование в процессе разработки ПО Проблемы тестирования ПО
Прятки
Неправильное тестирование создает иллюзию, что все плохо......тогда как на самом деле все плохо в другом месте
Некоторые тесты не проходитСадимся и ищем ошибки...HUH?
Марат Ахин (СПбГПУ) Intro 2014 47 / 313