Тестирование
21 Oct 2016Про тестирование софта как написал фредерик брукс в книге “Мифический человеко-месяц”, у нас нет серебряных пуль, чтобы уничтожить монстров наших системных проектов, вклчая тех, что водятся в обеспечении качества и в тестировании.
Методы тестирования
Статическое тестирование
Верификация. Проверка структуры исходного кода. Проверка синтаксиса. Проверка потока данных. Верификация (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