# Gray Box Testing

### Что такое тестирование серого ящика? <a href="#definition" id="definition"></a>

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

Сочетаются оба подхода (черного и белого ящика): для создания тест-кейсов применяется подход белого ящика, для тестирования на функциональном уровне — черного.&#x20;

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

#### Примеры <a href="#examples" id="examples"></a>

1. Простейший пример: тестировщик, проверяя ссылку на сайте, обнаруживает в ней ошибку, и исправляет ее, внося правки в html-код, затем ещё раз проверяет на сайте. В этом случае он работает «по серому ящику» —  исправляет ошибку «будучи в белом ящике», и проверяет корректность ссылки — «в черном».
2. Тестировщики могут иметь доступ к базе знаний с кодами ошибок (номерами и описаниями причин каждой), поэтому у них есть частичное понимание причин ошибок, хотя и нет доступа к исходному коду приложения; далее тестировщик детально описывает проблему разработчику.
3. Тестировщики имеют доступ к логам, что тоже дает частичное понимание кода и причин ошибок.

#### Цели <a href="#goals" id="goals"></a>

* Сочетать преимущества обоих подходов
* Смотреть с точки зрения как тестировщиков так и разработчиков, а также и пользователей
* Экономить время, как в функциональном так и нефункциональном тестировании

### Стратегия тестирования методом серого ящика <a href="#strategy" id="strategy"></a>

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

#### Применение <a href="#use" id="use"></a>

**Матричное тестирование**

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

**Регрессионное тестирование**

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

**Тестирование по методике ортогонального массива (ОАТ)**

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

**Тестирование по шаблону**

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

### Плюсы и минусы серого ящика <a href="#advantages" id="advantages"></a>

**Плюсы:**

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

**Минусы:**

* Идеальное тестирование — это все-таки белый ящик
* Неопытным тестировщикам сложно создавать тест-кейсы при неполном понимании системы
* Бывает сложно с большими распределенными системами


---

# Agent Instructions: Querying This Documentation

If you need additional information that is not directly available in this page, you can query the documentation dynamically by asking a question.

Perform an HTTP GET request on the current page URL with the `ask` query parameter:

```
GET https://qabook.gitbook.io/start/teoriya-testirovaniya/osnovy-testirovaniya/vidy-testirovaniya/metody-testirovaniya-yashikami/gray-box-testing.md?ask=<question>
```

The question should be specific, self-contained, and written in natural language.
The response will contain a direct answer to the question and relevant excerpts and sources from the documentation.

Use this mechanism when the answer is not explicitly present in the current page, you need clarification or additional context, or you want to retrieve related documentation sections.
