Алгебра для QA: Основы и Применение

Привет, Habr. Если вы беспокоись, что математика не пригодится в будущем, то эта статья для вас. Давайте взлянем на привычные задачи тестировщиков с точки зрения формул и математической логики. В современном мире разработки программного обеспечения качество продукта играет ключевую роль. Для обеспечения высокого уровня качества необходимы не только технические знания, но и применение математических методов. Алгебра, как одна из основных ветвей математики, может существенно помочь в этом процессе. В этой статье мы рассмотрим основные понятия алгебры и их применение в работе QA-инженера.

Давайте коротко вспомним.

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

Допустим, нужно протестировать функцию, которая выполняет разные действия в зависимости от значений трех переменных xxx, yyy и zzz. Для каждого возможного значения этих переменных можно составить уравнение, которое будет определять количество необходимых тестов для полного покрытия всех условий.

Формула: T=n3T = n^3T=n3 где TTT — количество тестов, а nnn — количество возможных значений каждой переменной.

Если каждая переменная может принимать три возможных значения (например, 0, 1 и 2). Тогда общее количество тестов будет равно 33=273^3 = 2733=27.

Но это не конец, теперь давайте сократим это бессоветсно большое количество тестов.

Пример сокращения тестов с помощью попарного тестирования:

Используя инструмент для генерации попарных тестов (например, PICT от Microsoft), мы можем получить следующий набор тестов:

xxx

yyy

zzz

1

0

0

0

2

0

1

1

3

0

2

2

4

1

0

1

5

1

1

2

6

1

2

0

7

2

0

2

8

2

1

0

9

2

2

1

Таким образом, вместо 27 тестов мы получаем 9 тестов, которые покрывают все возможные пары значений.

8960aa7d646f4ab220d1c9e3ab6373dd.png

Алгебраические структуры и их применение в QA

В QA важно понимать множества и их операции, так как это помогает в группировке и анализе данных. Отображения и функции позволяют моделировать различные процессы и взаимосвязи в ПО, а матрицы и их свойства используются для обработки больших объемов данных и анализа результатов тестирования.

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

Применение матриц для управления большими наборами данных в тестировании

Предположим, что у нас есть сложная система, и нам нужно протестировать несколько различных модулей. Мы можем использовать матрицы для управления и анализа тестовых данных. Рассмотрим пример, в котором у нас есть две матрицы данных о тестах:

Матрица A: Результаты тестов для различных входных данных Матрица B: Ожидаемые результаты для этих данных

A = | 1×2 | 3 | | 4×5 | 6 | | 7×8 | 9 |

B = | 0×1 | 0 | | 1×0 | 1 | | 0×1 | 0 |

Умножение матриц позволит нам сопоставить результаты и выявить расхождения:

C = A * B

Формула для умножения матриц:

c_ij = Σ (a_ik * b_kj)

Обозначения:

  • AAA — первая матрица размером m×nm \times nm×n (m строк и n столбцов)

  • BBB — вторая матрица размером n×pn \times pn×p (n строк и p столбцов)

  • CCC — результирующая матрица размером m×pm \times pm×p (m строк и p столбцов)

  • aika_{ik}aik​ — элемент на пересечении i-й строки и k-го столбца матрицы AAA

  • bkjb_{kj}bkj​ — элемент на пересечении k-й строки и j-го столбца матрицы BBB

  • cijc_{ij}cij​ — элемент на пересечении i-й строки и j-го столбца матрицы CCC

Алгебра логики в тестировании

Логические операции и выражения играют важную роль в написании тестов. Булева алгебра позволяет формализовать и оптимизировать условия тестирования, что повышает эффективность работы QA-инженера. Примеры логических выражений показывают, как алгебра может быть применена на практике для создания точных и эффективных тестов.

Использование булевых выражений в тестировании имеет несколько преимуществ:

  1. Формализация условий: Булевы выражения четко формализуют условия, что упрощает их проверку и анализ.

  2. Оптимизация тестирования: Логические выражения помогают выявить и устранить избыточные тесты, сфокусировавшись только на необходимых проверках.

  3. Автоматизация тестирования: Булевы выражения могут быть использованы в автоматизированных тестах для проверки условий выполнения.

Пример: Создание логических выражений для тестирования сложных условий

Предположим, что у нас есть система аутентификации, которая позволяет входить в систему при следующих условиях:

Булевы выражения для этого случая:

login_success = (correct_login AND correct_password) OR two_factor_auth

Пример тестовых сценариев

  1. Тестовый сценарий 1: Проверка успешной аутентификации при правильном логине и пароле

    • Входные данные: correct_login = true, correct_password = true, two_factor_auth = false

    • Ожидаемый результат: login_success = true

  2. Тестовый сценарий 2: Проверка успешной аутентификации при использовании двухфакторной аутентификации

    • Входные данные: correct_login = false, correct_password = false, two_factor_auth = true

    • Ожидаемый результат: login_success = true

  3. Тестовый сценарий 3: Проверка неудачной аутентификации при неправильном логине и пароле без двухфакторной аутентификации

    • Входные данные: correct_login = false, correct_password = false, two_factor_auth = false

    • Ожидаемый результат: login_success = false

Применение алгебры в разработке тестовых сценариев

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

Пример: Применение алгебраических выражений для построения тестов на эквивалентные классы

Эквивалентное разбиение (Equivalence Partitioning) — это метод тест-дизайна, который предполагает разделение входных данных на группы или классы, в которых данные считаются эквивалентными и обрабатываются одинаково. Таким образом, вместо тестирования каждого возможного значения, выбирается одно значение из каждого класса.

Реальный пример: Проверка системы регистрации пользователей

Рассмотрим систему регистрации пользователей, которая принимает возрастные данные в диапазоне от 1 до 100 лет. Мы можем разделить диапазон на эквивалентные классы следующим образом:

  • Класс 1: 1–17 (несовершеннолетние)

  • Класс 2: 18–59 (взрослые)

  • Класс 3: 60–100 (пожилые)

Затем мы выбираем по одному значению из каждого класса для тестирования. Например, для классов 1, 2 и 3 это могут быть значения 10, 30 и 70 соответственно.

Пошаговый процесс

  1. Определение диапазонов и классов:

    • Система регистрации принимает возраст от 1 до 100 лет.

    • Разделим диапазон на три эквивалентных класса: 1–17, 18–59, 60–100.

  2. Выбор представительных значений:

  3. Создание тестовых сценариев:

Примеры тестовых сценариев

  1. Тестовый сценарий 1: Проверка ввода возраста 10 (Класс 1 — несовершеннолетние)

    • Входные данные: Возраст = 10

    • Ожидаемый результат: Система должна корректно обработать возраст 10 и предоставить соответствующие уведомления для несовершеннолетних.

  2. Тестовый сценарий 2: Проверка ввода возраста 30 (Класс 2 — взрослые)

    • Входные данные: Возраст = 30

    • Ожидаемый результат: Система должна корректно обработать возраст 30 и предоставить доступ к регистрационным функциям для взрослых.

  3. Тестовый сценарий 3: Проверка ввода возраста 70 (Класс 3 — пожилые)

    • Входные данные: Возраст = 70

    • Ожидаемый результат: Система должна корректно обработать возраст 70 и предоставить соответствующие уведомления и функции для пожилых.

Анализ данных и статистика

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

Пример: Использование векторов для анализа данных об ошибках и их корреляции

Предположим, у нас есть данные о найденных ошибках в виде векторов:

X=[3,7,2]X = [3, 7, 2]X=[3,7,2] Y=[4,1,5]Y = [4, 1, 5]Y=[4,1,5]

Корреляция между векторами X и Y поможет выявить зависимость между ошибками в разных модулях. Вычислим корреляцию между этими векторами.

Формула для вычисления корреляции:

r=n∑xy−(∑x)(∑y)[n∑x2−(∑x)2][n∑y2−(∑y)2]r = \frac{n \sum{xy} — (\sum{x})(\sum{y})}{\sqrt{[n \sum{x^2} — (\sum{x})^2][n \sum{y^2} — (\sum{y})^2]}}r=[n∑x2−(∑x)2][n∑y2−(∑y)2]​n∑xy−(∑x)(∑y)​

где:

  • nnn — количество элементов вектора (в данном случае 3)

  • ∑xy\sum{xy}∑xy — сумма произведений соответствующих элементов векторов X и Y

  • ∑x\sum{x}∑x и ∑y\sum{y}∑y — суммы элементов векторов X и Y соответственно

  • ∑x2\sum{x^2}∑x2 и ∑y2\sum{y^2}∑y2 — суммы квадратов элементов векторов X и Y соответственно

Пошаговое вычисление

  1. Вычислим суммы элементов векторов:

  2. Вычислим суммы квадратов элементов векторов:

  3. Вычислим сумму произведений элементов векторов:

  4. Подставим значения в формулу и вычислим корреляцию:

r=3×29−(12×10)[3×62−122][3×42−102]r = \frac{3 \times 29 — (12 \times 10)}{\sqrt{[3 \times 62 — 12^2][3 \times 42 — 10^2]}}r=[3×62−122][3×42−102]​3×29−(12×10)​

  1. Упростим выражение:

r=87−120[186−144][126−100]r = \frac{87 — 120}{\sqrt{[186 — 144][126 — 100]}}r=[186−144][126−100]​87−120​

r=−3342×26r = \frac{-33}{\sqrt{42 \times 26}}r=42×26​−33​

r=−331092r = \frac{-33}{\sqrt{1092}}r=1092​−33​

r=−3333.0454r = \frac{-33}{33.0454}r=33.0454−33​

r≈−0.9986r \approx -0.9986r≈−0.9986

Корреляция между векторами X и Y равна примерно -0.9986, что указывает на сильную отрицательную корреляцию. Это означает, что при увеличении числа ошибок в одном модуле, количество ошибок в другом модуле уменьшается, и наоборот.

Заключение

Использование алгебраических структур и методов в QA — это возможность формализовать и оптимизировать процессы тестирования, анализировать данные и повышать качество продукта. Применение таких методов открывает новые горизонты для самого специалиста в понимании своих действий высокоуровнего.

В статье указаны довольно простые примеры. На мой взгляд, это полезный базис без перегруза. Надеюсь, статья была вам интересна.

Литература и статьи для дальнейшего изучения

  1. Книги:

    • Клайн, Моррис. «Математика: утрата определённости.» — отличный обзор на математику в целом.

    • Льюис, Гарри. «Элементы математической логики.» — вводная книга по математической логике и её применению.

  2. Статьи:

    • «Using Algebra in Test Case Design» (TechBeacon)

    • «Matrix Methods for Analyzing Test Results» (IEEE Transactions on Software Engineering)

    • «Boolean Algebra and Its Application in Software Testing» (Journal of Software Testing, Verification & Reliability)

  3. Онлайн-ресурсы:

© Habrahabr.ru