Разработка, HowTo

Часть 4: Подготовка окружение (vagrant + PuPHPet) (Тестирование ПО)

Снимок экрана от 2017-05-02 16-36-41Оглавление

Это очередная часть проекта Тестирование ПО который рассказывает о разработке веб-приложений с использованием методологии TDD. Конкретно  в этой главе мы развернем рабочее окружение и создадим шаблон проекта для последующей разработки.

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

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

Читать далее

Реклама
Разработка

Часть 3: Разработка через тестирование, TDD (Тестирование ПО)

Оглавление


Блочное тестирование уже укоренилось в качестве полезной практики работы с кодом. Протестированный код дает разработчикам уверенность в том, что результат отвечает намерению. Методика разработки, управляемой тестами — это следующий шаг, заключающийся в том, что тесты пишутся раньше, чем код.

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

Читать далее

Разработка

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

Оглавление

Баг. Кто он?

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

Баг. Кто он?

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

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

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

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

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

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

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

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

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

  • Тестирование — это процесс, демонстрирующий отсутствие ошибок в программе.
  • Цель тестирования — показать, что программа корректно выполняет заданные функции.
  • Тестирование — это процесс, позволяющий убедиться в том, что программа реализует запланированные действия.

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Литература

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

Оглавление