Тестирование программного обеспечения: что, зачем и...

60
Tестирование программного обеспечения Что, зачем и почему? Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) Intro 2014 1 / 313

Upload: marat-akhin

Post on 05-Jul-2015

871 views

Category:

Education


3 download

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

Прелюдия Обеспечение качества ПО

Обеспечение качества ПО

Марат Ахин (СПбГПУ) Intro 2014 5 / 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

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

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

Марат Ахин (СПбГПУ) Intro 2014 13 / 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

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

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

Марат Ахин (СПбГПУ) Intro 2014 48 / 313

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

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

Марат Ахин (СПбГПУ) Intro 2014 49 / 313

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

W.I.L.T.

Марат Ахин (СПбГПУ) Intro 2014 50 / 313