Что такое тесты

Существует большое количество типов тестов. Типа тесты могут иметь разное назначение:

  • доказать, что код проекта работает корректно;
  • указать на имеющуюся ошибку в коде программы;
  • проверить правильность конфигурации системы в различных средах (демонстрационное, розробницьке, продакшн); • проверить безопасность программы;
  • показать, что программа готова к соответствующим нагрузкам со стороны пользователей;
  • проверить, что функционал аппликации является легким в использовании;
  • помочь спроектировать структуру и дизайн проекта.

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

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

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

Типы тестов

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

По объекту тестирования:

  • функциональное тестирование: тесты на функционал программы; создаются до, в течение или после написания кода программы; имеющие смысл в долговременных проектах для повышения качества кода и стабильности работы аппликации;
  • тестирование производительности: сюда входят тесты по нагрузке программы, стресс-тестирование и тестирование стабильности программы; данные тесты необходимы для гарантии достаточной производительности работы программы при заданном количестве пользователей; данные тесты не стоит писать на начальном этапе жизни аппликации, когда пользователей мало; обычно данные тесты создаются позже, если количество пользователей резко увеличивается;
  • конфигурационное тестирование: данные тесты помогают проверить правильность настройки системы в различных средах; актуальные при разработке программы, которая используется на различных платформах, средах и устройствах;
  • юзабилити тестирование: с англ. usability – эргономичность, удобство, эти тесты проверяют функционал на удобство для пользователя; как правило, данные тесты проводятся с помощью привлечения реальных пользователей в качестве тестировщиков;
  • тестирование интерфейса пользователя: тест, который проверяет пользовательский интерфейс имеет запланированный вид; например, в веб-разработке это будут тесты, которые будут проверять размеры и расположение элементов на веб-странице; так, на данный момент существуют инструменты, позволяющие тестировать даже верстку в вебе;
  • тестирование безопасности: тесты для оценки уязвимости системы к различного рода атак; создаются в особо критических частях программ (платежная система, программа бэк-офис банка, и т.д.), а также при обнаружении дыры в безопасности;
  • тестирование локализации: тесты, которые проверяют перевод программы на одном из языков; данные тесты целесообразно проводить в многоязычных программах при каждом обновлении переводов;
  • тестирование совместимости: проверка отдельных компонент программы на совместимость между собой; также проверка внешнего программного обеспечения для корректной работы программы в их среде.

По доступа к системе:

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

По уровню автоматизации:

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

По уровню изолированности компонентов:

  • модульное тестирование: также называется юнит-тестированием (с англ. unit – модуль, единица); тесты, позволяющие проверить на корректность отдельную единицу кода (функцию, класс и т.д.); при этом тесты пишутся так, чтобы предмет теста был максимально независимым от других компонентов системы;
  • интеграционное тестирование: тестирование модулей, объединенных в группы; большинство тестов в данной главе будут именно интеграционными, ведь в фреймворке Django большинство компонентов завязаны на базу данных и целый ряд других аспектов, которые делают невозможным тестирование отдельных модулей кода;
  • системное тестирование: тестирование программы как целостной системы, включая платформой, на которой ее запускают; цель такого тестирования – выявить все ошибки, которые касаются как функционала программы, так и конфликтов совместимости с конечной платформой запуска программы.

По периоду запуска тестов:

  • альфа-тестирование: проводится на раннем этапе разработки программы; обычно проводят потенциальные пользователи или заказчики;
  • бета-тестирование: проводится на конечном этапе разработки программы; обычно проводит небольшая группа реальных пользователей.

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

В данной главе мы будем работать с автоматизированными тестами. Тестирование будет проводиться в основном в виде тестирования белого и серого ящиков. Будет лишь несколько юнит-тестов, а остальное будет принадлежать к интеграционных тестов в силу того, что мы работаем внутри фреймворка, а не пишем код с нуля. Все эти тесты можно назвать функциональными тестами. Также будут один-два тесты на безопасность, а именно на проверку доступа для анонима до нескольких в’юшок нашей аппликации. Других типов тестов (производительность, нагрузка, конфигурация и т.д.) мы не будем рассматривать в данной главе.