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

1,530 views

Published on

Published in: Education
0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
1,530
On SlideShare
0
From Embeds
0
Number of Embeds
6
Actions
Shares
0
Downloads
62
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

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

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

×