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, by
definition, not smart enough to debug it.»
Massimo Arnoldi (feat. Kent Beck)
«Unfortunately at least for me (and not only) testing goes against human
nature. If you realize the pig in you, you will see that you program without
tests.»

Марат Ахин (СПбГПУ)

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

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

  • 1.
    Tестирование программного обеспечения Что,зачем и почему? Software Testing 101 Марат Ахин Санкт-Петербургский государственный политехнический университет 2014 Марат Ахин (СПбГПУ) Intro 2014 1 / 313
  • 2.
    Прелюдия Содержание 1 Прелюдия Обеспечение качества ПО ТестированиеПО 2 Тестирование за 45 минут 3 Тестирование в процессе разработки ПО Марат Ахин (СПбГПУ) Intro 2014 2 / 313
  • 3.
    Прелюдия Обеспечение качества ПО Обеспечениекачества ПО Функциональные vs нефункциональные требования Марат Ахин (СПбГПУ) Intro 2014 3 / 313
  • 4.
    Прелюдия Обеспечение качества ПО Обеспечениекачества ПО Функциональные требования Адекватность Нефункциональные требования Надежность Точность Эффективность Интероперабельность Поддерживаемость Безопасность Переносимость Как можно их проверять? Марат Ахин (СПбГПУ) Intro 2014 4 / 313
  • 5.
    Прелюдия Обеспечение качества ПО Обеспечениекачества ПО Марат Ахин (СПбГПУ) Intro 2014 5 / 313
  • 6.
    Прелюдия Обеспечение качества ПО Обеспечениекачества ПО Thinking is hard, running is simple. (c) Запустить программу просто и это можно сделать всегда Думать о программе сложно и требует «высшего знания» Будем запускать программу, чтобы проверить, отвечает ли она предъявленным требованиям Марат Ахин (СПбГПУ) Intro 2014 6 / 313
  • 7.
    Прелюдия Тестирование ПО Что такоетестирование ПО? То, чем вы будете заниматься до 80% времени Марат Ахин (СПбГПУ) Intro 2014 7 / 313
  • 8.
    Прелюдия Тестирование ПО Что завопрос лежит в основе тестирования? Работает ли это ПО правильно? НЕТ Работает ли это ПО неправильно? ДА = Тестирование Разрушение Марат Ахин (СПбГПУ) Intro 2014 8 / 313
  • 9.
    Прелюдия Тестирование ПО Что завопрос лежит в основе тестирования? Работает ли это ПО правильно? НЕТ Работает ли это ПО неправильно? ДА = Тестирование Разрушение Марат Ахин (СПбГПУ) Intro 2014 8 / 313
  • 10.
    Прелюдия Тестирование ПО Что завопрос лежит в основе тестирования? Работает ли это ПО правильно? НЕТ Работает ли это ПО неправильно? ДА = Тестирование Разрушение Марат Ахин (СПбГПУ) Intro 2014 8 / 313
  • 11.
    Прелюдия Тестирование ПО Что завопрос лежит в основе тестирования? Работает ли это ПО правильно? НЕТ Работает ли это ПО неправильно? ДА = Тестирование Разрушение Марат Ахин (СПбГПУ) Intro 2014 8 / 313
  • 12.
    Прелюдия Тестирование ПО Что завопрос лежит в основе тестирования? Работает ли это ПО правильно? НЕТ Работает ли это ПО неправильно? ДА = Тестирование Разрушение Марат Ахин (СПбГПУ) Intro 2014 8 / 313
  • 13.
    Прелюдия Тестирование ПО Кому помогаеттестирование? Лучший друг верификации и валидации ПО В чем разница? Верификация – «мы сделали это правильно» Валидация – «мы сделали то, что надо» Марат Ахин (СПбГПУ) Intro 2014 9 / 313
  • 14.
    Прелюдия Тестирование ПО Можем лимы что-то гарантировать при тестировании? Данное ПО никогда не упадет Потоки никогда не заблокируются Вычисления всегда выполняются корректно Временные характеристики всегда выдерживаются Мы можем дать такие гарантии лишь в самых тривиальных случаях, когда обычно все ясно и без тестирования Марат Ахин (СПбГПУ) Intro 2014 10 / 313
  • 15.
    Прелюдия Тестирование ПО Можем лимы что-то гарантировать при тестировании? Данное ПО никогда не упадет Потоки никогда не заблокируются Вычисления всегда выполняются корректно Временные характеристики всегда выдерживаются Мы можем дать такие гарантии лишь в самых тривиальных случаях, когда обычно все ясно и без тестирования Марат Ахин (СПбГПУ) Intro 2014 10 / 313
  • 16.
    Прелюдия Тестирование ПО Почему тестироватьсложно? 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, by definition, not smart enough to debug it.» Massimo Arnoldi (feat. Kent Beck) «Unfortunately at least for me (and not only) testing goes against human nature. If you realize the pig in you, you will see that you program without tests.» Марат Ахин (СПбГПУ) Intro 2014 11 / 313
  • 17.
    Прелюдия Тестирование ПО Почему тестироватьнужно? Если отложить сегодняшние дела на послезавтра, у вас появятся два свободных дня! (с) Марат Ахин (СПбГПУ) Intro 2014 12 / 313
  • 18.
    Прелюдия Тестирование ПО Что жеделать? Марат Ахин (СПбГПУ) Intro 2014 13 / 313
  • 19.
    Тестирование за 45минут Содержание 1 Прелюдия 2 Тестирование за 45 минут Тестирование ПО с точки зрения дилетанта Модель программной ошибки Модель тестирования ПО Процесс тестирования ПО 3 Тестирование в процессе разработки ПО Марат Ахин (СПбГПУ) Intro 2014 14 / 313
  • 20.
    Тестирование за 45минут Тестирование ПО с точки зрения дилетанта Тестирование ПО с точки зрения дилетанта Запустили приложение Проверили результаты выполнения на предмет наличия в них ошибок aka aka aka aka «багов» «сбоев» «дефектов» «неудач» Сперва надо разобраться, а что же такое «программная ошибка»? Марат Ахин (СПбГПУ) Intro 2014 15 / 313
  • 21.
    Тестирование за 45минут Модель программной ошибки Модель программной ошибки FAILURE FAULT ERROR Неудача – наблюдаемое снаружи некорректное поведение программы Сбой – некорректное состояние программы из-за ошибки Ошибка – ошибка в самой программе, внесенная на этапе разработки Рассмотрим данную модель на примере Марат Ахин (СПбГПУ) Intro 2014 16 / 313
  • 22.
    Тестирование за 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
  • 23.
    Тестирование за 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
  • 24.
    Тестирование за 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
  • 25.
    Тестирование за 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
  • 26.
    Тестирование за 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
  • 27.
    Тестирование за 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
  • 28.
    Тестирование за 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
  • 29.
    Тестирование за 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
  • 30.
    Тестирование за 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
  • 31.
    Тестирование за 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
  • 32.
    Тестирование за 45минут Модель тестирования ПО Что мы делали? Запускали ПО (мысленно) Сравнивали результаты работы с ожидаемыми (логически) Можно ли придумать другой способ тестирования? Марат Ахин (СПбГПУ) Intro 2014 22 / 313
  • 33.
    Тестирование за 45минут Модель тестирования ПО Модель тестирования ПО Эталонная модель может быть представлена множеством различных способов неформальное представление о том, «как должна работать программа» формальная техническая спецификация набор тестовых примеров корректные результаты работы программы другая (априори корректная) реализация той же исходной спецификации Марат Ахин (СПбГПУ) Intro 2014 23 / 313
  • 34.
    Тестирование за 45минут Процесс тестирования ПО Процесс тестирования ПО Что может случиться? Марат Ахин (СПбГПУ) Intro 2014 24 / 313
  • 35.
    Тестирование за 45минут Процесс тестирования ПО Тест прошел A-WE-SO-ME! Марат Ахин (СПбГПУ) Intro 2014 25 / 313
  • 36.
    Тестирование за 45минут Процесс тестирования ПО Тест не прошел OH-MI-GOD! Марат Ахин (СПбГПУ) Intro 2014 26 / 313
  • 37.
    Тестирование за 45минут Процесс тестирования ПО Ошибка в ПО Все просто и понятно, да? Марат Ахин (СПбГПУ) Intro 2014 27 / 313
  • 38.
    Тестирование за 45минут Процесс тестирования ПО Ошибка в эталонной модели Некорректный тест? Ошибка в спецификации? Марат Ахин (СПбГПУ) Intro 2014 28 / 313
  • 39.
    Тестирование за 45минут Процесс тестирования ПО Ошибка в тестовом окружении Баг в тестовой библиотеке? Марат Ахин (СПбГПУ) Intro 2014 29 / 313
  • 40.
    Тестирование за 45минут Процесс тестирования ПО Ошибка в платформе Баг в ОС? Аппаратный сбой? Ошибка компилятора? Марат Ахин (СПбГПУ) Intro 2014 30 / 313
  • 41.
    Тестирование за 45минут Процесс тестирования ПО Процесс тестирования ПО Является ли данная модель самодостаточной? Марат Ахин (СПбГПУ) Intro 2014 31 / 313
  • 42.
    Тестирование за 45минут Процесс тестирования ПО Процесс тестирования ПО Откуда брать эталонную модель? Как сравнивать результаты работы программы и модели? Марат Ахин (СПбГПУ) Intro 2014 32 / 313
  • 43.
    Тестирование за 45минут Процесс тестирования ПО Процесс тестирования ПО Когда останавливать процесс тестирования? Марат Ахин (СПбГПУ) Intro 2014 33 / 313
  • 44.
    Тестирование за 45минут Процесс тестирования ПО Процесс тестирования ПО Как подобрать входные данные, чтобы: дойти до места с программной ошибкой (Reachibility) испортить состояние программы с появлением сбоя (Corruption) вызвать неудачу в работе программы (Propagation) Марат Ахин (СПбГПУ) Intro 2014 34 / 313
  • 45.
    Проблемы тестирования Проблемы тестирования Проблемытестирования What’s up, Doc? (с) Проблема тестовых входных данных Проблема наблюдаемости Проблема «останова» Проблема тестового оракула Марат Ахин (СПбГПУ) Intro 2014 35 / 313
  • 46.
    Тестирование в процессеразработки ПО Содержание 1 Прелюдия 2 Тестирование за 45 минут 3 Тестирование в процессе разработки ПО Модели разработки ПО Проблемы тестирования ПО Марат Ахин (СПбГПУ) Intro 2014 36 / 313
  • 47.
    Тестирование в процессеразработки ПО Модели разработки ПО Модели разработки ПО Чем активнее используется тестирование в процессе разработки, тем важнее его правильное использование Марат Ахин (СПбГПУ) Intro 2014 37 / 313
  • 48.
    Тестирование в процессеразработки ПО Модели разработки ПО Водопадная модель Строго последовательная модель разработки Тестирование выполняется над всей программой сразу Имеется хорошая эталонная модель Стоимость поиска и исправления ошибок очень высока Марат Ахин (СПбГПУ) Intro 2014 38 / 313
  • 49.
    Тестирование в процессеразработки ПО Модели разработки ПО Инкрементальная модель Разработка проходит в несколько итераций Тестируются отдельные версии программы Имеется неплохая эталонная модель Стоимость поиска и исправления ошибок высока Марат Ахин (СПбГПУ) Intro 2014 39 / 313
  • 50.
    Тестирование в процессеразработки ПО Модели разработки ПО Гибкая модель Все этапы разработки неразрывно связаны друг с другом Тестированию подвергаются как сама программа, так и ее компоненты Эталонная модель есть не всегда Стоимость поиска и исправления ошибок относительно низка Марат Ахин (СПбГПУ) Intro 2014 40 / 313
  • 51.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Проблемы тестирования ПО Разве что-то может пойти совсем плохо? Марат Ахин (СПбГПУ) Intro 2014 41 / 313
  • 52.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Розовые очки Марат Ахин (СПбГПУ) Intro 2014 42 / 313
  • 53.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Розовые очки Неправильное тестирование создает иллюзию, что все хорошо... ...тогда как на самом деле все может быть очень и очень плохо Все тесты проходят Выпускаем код в релиз ... BOOM! Марат Ахин (СПбГПУ) Intro 2014 43 / 313
  • 54.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Наводнение Марат Ахин (СПбГПУ) Intro 2014 44 / 313
  • 55.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Наводнение Неправильное тестирование создает иллюзию, что все плохо... ...тогда как на самом деле все вполне себе ничего Большинство тестов не проходит Садимся и исправляем ошибки ... UNREACHABLE! Марат Ахин (СПбГПУ) Intro 2014 45 / 313
  • 56.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Прятки Марат Ахин (СПбГПУ) Intro 2014 46 / 313
  • 57.
    Тестирование в процессеразработки ПО Проблемы тестирования ПО Прятки Неправильное тестирование создает иллюзию, что все плохо... ...тогда как на самом деле все плохо в другом месте Некоторые тесты не проходит Садимся и ищем ошибки ... HUH? Марат Ахин (СПбГПУ) Intro 2014 47 / 313
  • 58.
    Что же делать? Чтоже делать? Что же делать? Марат Ахин (СПбГПУ) Intro 2014 48 / 313
  • 59.
    Что же делать? Чтоже делать? Что же делать? Марат Ахин (СПбГПУ) Intro 2014 49 / 313
  • 60.
    W.I.L.T. What I LearnedToday? W.I.L.T. Марат Ахин (СПбГПУ) Intro 2014 50 / 313