Что такое тестирование ортогональными массивами?
Тестирование ортогональными массивами (Orthogonal Array Testing, OAT) использует математические структуры — ортогональные массивы — для генерации тестовых наборов. Эти массивы гарантируют, что каждая пара значений параметров появляется одинаковое число раз во всех тест-кейсах, обеспечивая сбалансированное, равномерное покрытие.
Истоки: Метод Тагути
OAT произошёл из метода Тагути в инженерии качества производства. Доктор Генити Тагути разработал ортогональные массивы для эффективного тестирования влияния множества факторов на качество продукта. Тестирование ПО заимствовало эту технику для комбинаторного тест-дизайна.
Понимание ортогональных массивов
Ортогональный массив — это матрица, где:
- Строки = тест-кейсы
- Столбцы = параметры (факторы)
- Значения = уровни каждого параметра
Ключевое свойство: для любых двух столбцов каждая возможная пара значений появляется одинаковое число раз.
Нотация: L_n(k^f)
- L = латинский квадрат (тип массива)
- n = число строк (тест-кейсов)
- k = число значений параметра (уровней)
- f = число параметров (факторов)
Пример: L4(2^3) — 4 тест-кейса, 3 параметра, 2 значения каждый
| Тест | P1 | P2 | P3 |
|---|---|---|---|
| 1 | 0 | 0 | 0 |
| 2 | 0 | 1 | 1 |
| 3 | 1 | 0 | 1 |
| 4 | 1 | 1 | 0 |
Проверьте любые два столбца: каждая пара (0,0), (0,1), (1,0), (1,1) появляется ровно один раз.
Распространённые ортогональные массивы
| Массив | Тестов | Параметров | Значений | Исчерпывающее |
|---|---|---|---|---|
| L4(2^3) | 4 | 3 | 2 | 8 |
| L8(2^7) | 8 | 7 | 2 | 128 |
| L9(3^4) | 9 | 4 | 3 | 81 |
| L16(2^15) | 16 | 15 | 2 | 32 768 |
| L18(3^7) | 18 | 7 | 3 | 2 187 |
| L25(5^6) | 25 | 6 | 5 | 15 625 |
OAT vs. Попарное тестирование
| Аспект | OAT | Попарное |
|---|---|---|
| Покрытие | Каждая пара появляется одинаково | Каждая пара появляется хотя бы раз |
| Баланс | Идеально сбалансировано | Может быть несбалансированным |
| Гибкость | Фиксированные размеры массивов | Адаптивно к любому числу параметров |
| Смешанные значения | Сложнее при разных уровнях | Легко справляется |
| Оптимальность | Математически оптимально | Почти оптимально (эвристика) |
Выбор правильного массива
Шаг 1: Подсчитайте параметры и значения каждого. Шаг 2: Найдите наименьший стандартный массив, который подходит. Шаг 3: При разном числе значений используйте массивы смешанного уровня.
Продвинутые техники OAT
Реальный пример: Совместимость браузеров
Параметры: Браузер (3), ОС (3), Разрешение (3), Язык (3)
Используя L9(3^4):
| Тест | Браузер | ОС | Разрешение | Язык |
|---|---|---|---|---|
| 1 | Chrome | Windows | 1080p | EN |
| 2 | Chrome | macOS | 1440p | ES |
| 3 | Chrome | Linux | 4K | RU |
| 4 | Firefox | Windows | 1440p | RU |
| 5 | Firefox | macOS | 4K | EN |
| 6 | Firefox | Linux | 1080p | ES |
| 7 | Edge | Windows | 4K | ES |
| 8 | Edge | macOS | 1080p | RU |
| 9 | Edge | Linux | 1440p | EN |
9 тестов вместо 81. Каждая пара значений из любых двух параметров появляется ровно один раз.
Массивы смешанного уровня
Когда параметры имеют разное число значений, используйте ортогональные массивы смешанного уровня:
L18(2^1 x 3^7): 18 тестов для 1 бинарного параметра + 7 параметров с тремя уровнями.
Сила выше 2
Стандартный OAT обеспечивает силу 2 (все пары). Массивы более высокой силы покрывают тройки, четвёрки:
- Сила 2: Каждая пара покрыта → ловит дефекты 2-way взаимодействий
- Сила 3: Каждая тройка покрыта → ловит дефекты 3-way взаимодействий
Большая сила = больше тестов, но обнаруживает более редкие дефекты взаимодействий.
Упражнение: Примените OAT к тесту конфигурации
Сценарий: Нужно протестировать конфигурацию БД:
- Движок БД: MySQL, PostgreSQL, SQLite (3)
- Connection Pool: 5, 20, 100 (3)
- Кэш: Включён, Выключен, Частичный (3)
- Логирование: Debug, Info, Error (3)
Задания:
- Какой ортогональный массив подходит?
- Сколько тест-кейсов он генерирует vs. исчерпывающее?
- Заполните матрицу тестов используя L9(3^4)
- Убедитесь, что любые два столбца содержат все 9 пар ровно по одному разу
Подсказка
4 параметра x 3 значения = L9(3^4). Исчерпывающее = 3^4 = 81. Сопоставьте стандартный L9 с вашими конкретными значениями параметров.
Решение
Массив: L9(3^4) — 9 тестов вместо 81 (89% сокращение).
| Тест | Движок БД | Pool | Кэш | Логирование |
|---|---|---|---|---|
| 1 | MySQL | 5 | Включён | Debug |
| 2 | MySQL | 20 | Выключен | Info |
| 3 | MySQL | 100 | Частичный | Error |
| 4 | PostgreSQL | 5 | Выключен | Error |
| 5 | PostgreSQL | 20 | Частичный | Debug |
| 6 | PostgreSQL | 100 | Включён | Info |
| 7 | SQLite | 5 | Частичный | Info |
| 8 | SQLite | 20 | Включён | Error |
| 9 | SQLite | 100 | Выключен | Debug |
Каждая пара из любых двух столбцов появляется ровно один раз.
Советы профессионала
- Используйте OAT когда важен баланс. Если нужно статистически анализировать, какой фактор вызывает отказы, сбалансированный дизайн OAT незаменим.
- Комбинируйте с BVA для выбора значений. OAT определяет комбинации параметров; BVA — конкретные значения для каждого уровня.
- Переходите к попарному для нерегулярных наборов. При 12 параметрах с разным числом значений PICT практичнее, чем поиск подходящего ортогонального массива.
- Знайте стандартные массивы. L4, L8, L9, L16, L18, L25, L27 покрывают большинство практических сценариев.
- OAT снижает затраты при тестировании оборудования. Когда каждый тестовый прогон стоит реальных денег, математическая оптимальность OAT экономит бюджет.