Часть 1: краткая историческая справка (Тестирование ПО)

08 Apr 2017

Оглавление

Баг. Кто он?

Мы все слышали слово “баг”, которым обозначается ошибка в программе приводящая к неверному результату.

Баг. Кто он?

Известно, что первыми, кто назвал неправильную работу устройств “насекомым” были инженеры телеграфных компаний. И было это задолго до появления первых компьютеров - еще в 19 веке.

Откуда пошло тестирование

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

В 1970-х годах процесс проверки программы обозначался как “доказательство правильности”. И включал в себя проверку всех возможных путей исполнения кода.

По мере усложнения программ и решаемых задач тестирование становилось все сложнее и сложнее. И вот уже “доказательство правильности” становится недостаточно всеобъемлющей процедурой. Ибо проверить абсолютно все физически невозможно. Да, тогда и сегодня все еще используется подобных подход, но очень редко и чаще всего в аэрокосмической промышленности.

В дальнейшем было отмечено, что исчерпывающее тестирование практически невозможно.

В эпоху процессора 8086 тестирование стало подразумевать еще понятием “предупреждение дефектов”. А с 1990-х годов в это понятие стали включать планирование, проектирование, создание, поддержку и выполнение тестов и тестовых окружений, и это означало переход от тестирования к обеспечению качества, охватывающего весь цикл разработки программного обеспечения.

Формальное определение

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

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

Поэтому правильнее будет назвать следующее определение:

Тестирование - это процесс выполнения программы с целью обнаружения ошибок.

Виды тестирования (по знанию устройства ПО)

Тестирование методом “черного ящика”

Или другими словами “тестирование, управляемое данными” (data-driven testing).

В соответствии с этим методом программа рассматривается как черный ящик, внутреннее поведение и устройство которого не имеет никакого значения.

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

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

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

Это определение нельзя назвать полным, поскольку подобранный набор данных не всегда соответствует спецификации, но это наиболее полное определение, которое дает представление о тестировании методом “белого ящика”.

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

Конечно же здесь перечислены не все виды тестирования и это следует понимать. Остановимся лишь на тех этапах тестирования, которое чаще всего применяется в веб-разработке.

Блочное тестирование (юнит-тестирование)

Этот аспект проверяет самые мелкие аспекты работы системы. Например корректность каждого метода класса или отдельной функции.

Также отдельные аспекты проверки логики работы модулей входят в эту фазу тестирования. Например проверка функционала регистрации\авторизации пользователя на уровне объекта “пользователь”.

Этот этап является проверкой методом “белого ящика”.

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

После того, как модули программы прошли предварительную проверку они собираются в функциональные группы и проверяются аспекты бизнес-логики. Данные этап - это тестирование методом “черного ящика”. Тесты проектируются таким образом, чтобы проверить соответствие полученного результата заявленному.

Функциональное тестирование

Этот этап тестирование является тестированием методом черного ящика. Этап проверяем отсутствие ошибок в реализации спецификации ПО. На входы форм подаются значения, и выполняется проверка данных на выходе тем, что описаны в спецификации.

Приемочное тестирование

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

Некоторые недальновидные разработчики возлагают этот вид тестирования на пользователей (альфа- и бета-тестеры). Порой это оправдано и каждый из этих случаев нужно рассматривать по отдельности, но чаще всего так делать не стоит.

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

Этот вид тестирования так же является тестированием методом “черного ящика”.

Литература

  1. Книга “Искусство тестирования программ” Гленфорд Майерс, Том Баджетт, Кори Сандлер, ISBN 978-5-8459-1974-8
  2. Wikipedia: Software testing

Оглавление

Теги: тестирование по tdd

Категории: Разработка