iMega's Blog This notebook

Тестирование

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

Методы тестирования

Статическое тестирование

Верификация. Проверка структуры исходного кода. Проверка синтаксиса. Проверка потока данных. Верификация (Verification) - процесс оценки системы или компонентов с целью определения удовлетвлетворенности условиям результата текущего этапа разработки.

Динамическое тестирование

Проверка отдельных участков кода. Валидация (Validation) - определение соответствия разрабатываемого ПО ожиданиям и потребностям пользователя, требованиям к системе.

The Box approach

Black-Box testing

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

White-Box testing

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

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

  • API testing - тестирование приложения с помощью публичных и приватных вызовов API.
  • Code coverage - создание тестов, чтобы удовлетворить некоторые критерии покрытия кода.
  • Fault injection methods - намеренно вводя ошибки, чтобы оценить эффективность стратегий тестирования
  • Mutation testing methods - в разрабатываемую программу вносят мутации(Мутации - мелкие ошибки в программе), т.е. искусственно создают программы-мутанты(Мутанты - программы, отличающиеся друг от друга мутациями). Затем программа и ее мутанты тестируются на одном и том же наборе тестов. Если на наборе подтверждается правильность программы и выявляются все внесенные в программы-мутанты ошибки, то набор тестов соответствует мутационному критерию, а тестируемая программа объявляется правильной. Если некоторые мутанты не выявили всех мутаций, то надо расширять набор тестов и продолжать тестирование.
  • Static testing methods - Статический анализ программы, это анализ ПО, которое осуществляется без фактического выполнения программ. Этот термин обычно применяется к анализу, проведенному с помощью автоматизированного инструмента.

Gray-Box testing

Visual testing

Предоставление разработчикам возможности исследования того, что происходило в момент сбоя ПО.

Уровни тестирования

Есть четыре признанных уровней испытаний: модульное тестирование, интеграционное тестирование, тестирование компонентов интерфейса, и тестирование системы. Тесты часто группируются учитыывая где они будут добавлены в процессе разработки программного обеспечения, или уровнем специфичности теста. Основные уровни в процессе разработки, как это определено в руководстве SWEBOK являются Unit-, integration- и system- тестирование, которые определяют над чем производятся тесты, не подразумевая конкретную модель процесса. При этом ни один из уровней тестирования не может считаться приоритетным. Важны все уровни тестирования, вне зависимости от используемых моделей и методологий. Другие уровни испытаний классифицируются по цели тестирования.

Есть два разных уровня тестов с точки зрения клиентов: тестирование низкого уровня (LLT) и тестирования на высоком уровне (HLT). Тестирование низкого уровня представляет собой группу тестов для различных компонентов уровня прикладного программного обеспечения или продукта. Тестирования на высоком уровне представляет собой группу тестов для всего прикладного программного обеспечения или продукта.

Тестирование обычно производится на протяжении всей разработки и сопровождается на разных уровнях.

Unit testing

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

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

Integration testing

Component interface testing

System testing

Operational Acceptance testing

Типы тестирования

Instalation testing

Гарантирует, что система установлена правильно.

Compatibility testing

Тестирование на совместимость с операционной системой и другими прикладными программами.

Smoke & Sanity testing

Проверка целесообразности проводить дальнейшее тестирование.

Regression testing

Фокусируется на поиске дефектов после значитильных изменений в коде.

Acceptance testing

Alpha testing

Имитация эксплуатации потенциальными пользователями.

Beta teng

Тестирование на ограниченной аудитории пользователей.

Functional testing

Проверяет конкретные действия по коду, бывает по методике пользовательский историй.

Non-functional testing

Не функциональное тестирование включает в себя: Scalability, Performance, Behavoir under certain constraints.

Scalability

Performance

Behavoir under certain constraints

Поведение при определенных ограничениях.

Continuous testing

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

Destructive testing

Разрушающее тестирование. Поппытка вызвать ошибки а ПО.

Обработка исключений

Тестирование на восстановление

Software performance testing

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

Load testing

Тестирование нагрузки в первую очередь касается тестирования, что система может продолжать работать под удельной нагрузкой, будь то большие объемы данных или большого числа пользователей. Обычно называют масштабируемостью программного обеспечения. Родственное нагрузочное тестирование, когда выступает в качестве нефункциональной деятельности часто называют как тестирование на выносливость(endurance testing).

Volume testing

Тестирование по объему способ проверить функции программного обеспечения, даже если некоторые компоненты (например, файл или базу данных) увеличить в размерах радикально.

Stress testing

Стресс-тестирование является способом проверить надежность при неожиданных или редких нагрузках.

Stabiliry testing

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

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

Real-time testing

Программные системы в режиме реального времени имеют строгие временные ограничения. Чтобы проверить будут ли выполнены временные ограничения, используется тестирование в режиме реального времени.

Usability testing

Accessibility testing

Security testing

Internationalization and localization

Development testing

Широкий спектр стратегий и профилактик поиска дефектов ПО.

A/B testing

Concurrent testing

Conformance testing or type testing

Процесс тестирования

Традиционная модель (водопад/waterfall)

Agile or Extreme dev model

Top-down and bottom-up

A sample testing cycle

Автоматизированное тестирование

Артефакты тестирования

Test plan

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

Traceability matrix

Матрица прослеживаемости. Это табличка, которая корреллирует требованиям или проектной документации.

Test Case

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

ДействиеОжидаетсяРезультат
Открыть страницу сайтаСтраница открыласьВыполнен

Test script

Test suite

Test fixture or test data

Test harness

Сертификация

Разногласия

Связанные процессы


Источники

  • Cem Kaner, Exploratory Testing, 2006
  • SWEBOK Guide V3.0 (computer.org), Chapter 4: Software Testing, 2014
  • BS 7925-1, Glossary of terms used in software testing, Version 6.3
  • Rex Black, Critical Testing Processes, 2006
  • Татьяна Павловская, Тестирование белого ящика,
  • Антон Карпушинский, Татьяна Павловская, Разработка тестов для программ с неявным потоком управления, 2011
  • И.В. Степанченко, Методы тестирования программного обеспечения, 2006
iMega's Blog
iMega logo