Виды тестирования по доступу к коду и архитектуре приложения
У тестировщика есть доступ к внутренней структуре и коду приложения, а также есть достаточно знаний для понимания увиденного.
Выделяют даже сопутствующую тестированию по методу белого ящика глобальную технику — тестирование на основе дизайна (design-based testing). Для более глубокого изучения сути метода белого ящика рекомендуется ознакомиться с техниками исследования потока управления или потока данных, использования диаграмм состояний.
Некоторые авторы склонны жёстко связывать этот метод со статическим тестированием, но ничто не мешает тестировщику запустить код на выполнение и при этом периодически обращаться к самому коду (а модульное тестирование и вовсе предполагает запуск кода на исполнение и при этом работу именно с кодом, а не с «приложением целиком»).
У тестировщика либо нет доступа к внутренней структуре и коду приложения, либо недостаточно знаний для их понимания, либо он сознательно не обращается к ним в процессе тестирования. При этом абсолютное большинство видов тестирования работают по методу чёрного ящика, идею которого в альтернативном определении можно сформулировать так: тестировщик оказывает на приложение воздействия (и проверяет реакцию) тем же способом, каким при реальной эксплуатации приложения на него воздействовали бы пользователи или другие приложения.
В рамках тестирования по методу чёрного ящика основной информацией для создания тест-кейсов выступает документация (особенно — требования (requirements-based testing)) и общий здравый смысл (для случаев, когда поведение приложения в некоторой ситуации не регламентировано явно; иногда это называют «тестированием на основе неявных требований», но канонического определения у этого подхода нет).
Комбинация методов белого ящика и чёрного ящика, состоящая в том, что к части кода и архитектуры у тестировщика доступ есть, а к части — нет. Обычно говорят о методах белого или чёрного ящика в применении к тем или иным частям приложения, при этом понимая, что «приложение целиком» тестируется по методу серого ящика.
Некоторые авторы определяют метод серого ящика как противопоставление методам белого и чёрного ящика, особо подчёркивая, что при работе по методу серого ящика внутренняя структура тестируемого объекта известна частично и выясняется по мере исследования. Этот подход, бесспорно, имеет право на существование, но в своём предельном случае он вырождается до состояния «часть системы мы знаем, часть — не знаем», т. е. до всё той же комбинации белого и чёрного ящиков.
Сочетает преимущества и недостатки методов белого и чёрного ящика.
Вид тестирования (русскоязычное название) | Вид тестирования (англоязычное название) | Белый ящик | Чёрный ящик |
---|---|---|---|
Статическое тестирование | Static testing | Да | Нет |
Динамическое тестирование | Dynamic testing | Изредка | Да |
Ручное тестирование | Manual testing | Мало | Да |
Автоматизированное тестирование | Automated testing | Да | Да |
Модульное (компонентное) тестирование | Unit testing, Module testing, Component testing | Да | Нет |
Интеграционное тестирование | Integration testing | Да | Да |
Системное тестирование | System testing | Мало | Да |
Дымовое тестирование | Smoke test, Intake test, Build verification test | Мало | Да |
Тестирование критического пути | Critical path test | Мало | Да |
Расширенное тестирование | Extended test | Мало | Да |
Позитивное тестирование | Positive testing | Да | Да |
Негативное тестирование | Negative testing, Invalid testing | Да | Да |
Тестирование веб-приложений | Web-applications testing | Да | Да |
Тестирование мобильных приложений | Mobile applications testing | Да | Да |
Тестирование настольных приложений | Desktop applications testing | Да | Да |
Тестирование уровня представления | Presentation tier testing | Мало | Да |
Тестирование уровня бизнес-логики | Business logic tier testing | Да | Да |
Тестирование уровня данных | Data tier testing | Да | Мало |
Альфа-тестирование | Alpha testing | Мало | Да |
Бета-тестирование | Beta testing | Почти никогда | Да |
Гамма-тестирование | Gamma testing | Почти никогда | Да |
Тестирование на основе тест-кейсов | Scripted testing, Test case based testing | Да | Да |
Исследовательское тестирование | Exploratory testing | Нет | Да |
Свободное (интуитивное) тестирование | Ad hoc testing | Нет | Да |
Функциональное тестирование | Functional testing | Да | Да |
Нефункциональное тестирование | Non-functional testing | Да | Да |
Инсталляционное тестирование | Installation testing | Изредка | Да |
Регрессионное тестирование | Regression testing | Да | Да |
Повторное тестирование | Re-testing, Confirmation testing | Да | Да |
Приёмочное тестирование | Acceptance testing | Крайне редко | Да |
Операционное тестирование | Operational testing | Крайне редко | Да |
Тестирование удобства использования | Usability testing | Крайне редко | Да |
Тестирование доступности | Accessibility testing | Крайне редко | Да |
Тестирование интерфейса | Interface testing | Да | Да |
Тестирование безопасности | Security testing | Да | Да |
Тестирование интернационализации | Internationalization testing | Мало | Да |
Тестирование локализации | Localization testing | Мало | Да |
Тестирование совместимости | Compatibility testing | Мало | Да |
Конфигурационное тестирование | Configuration testing | Мало | Да |
Кросс-браузерное тестирование | Cross-browser testing | Мало | Да |
Тестирование данных и баз данных | Data quality testing and Database integrity testing | Да | Мало |
Тестирование использования ресурсов | Resource utilization testing | Крайне редко | Да |
Сравнительное тестирование | Comparison testing | Нет | Да |
Демонстрационное тестирование | Qualification testing | Нет | Да |
Избыточное тестирование | Exhaustive testing | Крайне редко | Нет |
Тестирование надёжности | Reliability testing | Крайне редко | Да |
Тестирование восстанавливаемости | Recoverability testing | Крайне редко | Да |
Тестирование отказоустойчивости | Failover testing | Крайне редко | Да |
Тестирование производительности | Performance testing | Крайне редко | Да |
Нагрузочное тестирование | Load testing, Capacity testing | Крайне редко | Да |
Тестирование масштабируемости | Scalability testing | Крайне редко | Да |
Объёмное тестирование | Volume testing | Крайне редко | Да |
Стрессовое тестирование | Stress testing | Крайне редко | Да |
Конкурентное тестирование | Concurrency testing | Крайне редко | Да |
Инвазивное тестирование | Intrusive testing | Да | Да |
Неинвазивное тестирование | Nonintrusive testing | Да | Да |
Тестирование под управлением данными | Data-driven testing | Да | Да |
Тестирование под управлением ключевыми словами | Keyword-driven testing | Да | Да |
Тестирование предугадыванием ошибок | Error guessing | Крайне редко | Да |
Эвристическая оценка | Heuristic evaluation | Нет | Да |
Мутационное тестирование | Mutation testing | Да | Да |
Тестирование добавлением ошибок | Error seeding | Да | Да |
Доменное тестирование | Domain testing, Domain analysis | Да | Да |
Попарное тестирование | Pairwise testing | Да | Да |
Тестирование в процессе разработки | Development testing | Да | Да |
Тестирование на основе классов эквивалентности | Equivalence partitioning | Да | Да |
Тестирование на основе граничных условий | Boundary value analysis | Да | Да |
Тестирование на основе ортогональных массивов | Orthogonal array testing | Да | Да |
Тестирование по потоку управления | Control flow testing | Да | Нет |
Тестирование по потоку данных | Data flow testing | Да | Нет |
Тестирование по диаграмме или таблице состояний | State transition testing | Да | Нет |
Инспекция (аудит) кода | Code review, code inspection | Да | Нет |
Тестирование на основе выражений | Statement testing | Да | Нет |
Тестирование на основе ветвей | Branch testing | Да | Нет |
Тестирование на основе условий | Condition testing | Да | Нет |
Тестирование на основе комбинаций условий | Multiple condition testing | Да | Нет |
Тестирование на основе отдельных условий, порождающих ветвление («решающих условий») | Modified condition decision coverage testing | Да | Нет |
Тестирование на основе решений | Decision testing | Да | Нет |
Тестирование на основе путей | Path testing | Да | Нет |
Тестирование по таблице принятия решений | Decision table testing | Да | Да |
Тестирование по моделям поведения приложения | Model-based testing | Да | Да |
Тестирование на основе вариантов использования | Use case testing | Да | Да |
Параллельное тестирование | Parallel testing | Да | Да |
Тестирование на основе случайных данных | Random testing | Да | Да |
A/B-тестирование | A/B testing, Split testing | Нет | Да |
Восходящее тестирование | Bottom-up testing | Да | Да |
Нисходящее тестирование | Top-down testing | Да | Да |
Гибридное тестирование | Hybrid testing | Да | Да |
Тестирование на основе дерева классификаций | Classification tree method | Да | Да |
Тестирование на основе синтаксиса | Syntax testing | Да | Да |
Комбинаторные техники (комбинаторное тестирование) | Combinatorial testing | Да | Да |
Тестирование всех комбинаций | All combinations testing | Да | Нет |
Тестирование с выбором значений-представителей | Each choice testing | Да | Нет |
Тестирование с выбором базового набора значений | Base choice testing | Да | Нет |
Тестирование по графу причинно-следственных связей | Cause-effect graphing | Мало | Да |
Проверка использования всех объявлений | All-definitions testing | Да | Нет |
Проверка всех вычислений на основе всех объявлений | All-c-uses testing | Да | Нет |
Проверка всех ветвлений на основе всех объявлений | All-p-uses testing | Да | Нет |
Проверка всех вычислений и ветвлений на основе всех объявлений | All-uses testing | Да | Нет |
Проверка использования всех объявлений и всех путей без переобъявлений (без циклов или с однократными повторениями циклов) | All-du-paths testing | Да | Нет |