Привет, 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 тестов, которые покрывают все возможные пары значений.
Алгебраические структуры и их применение в 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-инженера. Примеры логических выражений показывают, как алгебра может быть применена на практике для создания точных и эффективных тестов.
Использование булевых выражений в тестировании имеет несколько преимуществ:
-
Формализация условий: Булевы выражения четко формализуют условия, что упрощает их проверку и анализ.
-
Оптимизация тестирования: Логические выражения помогают выявить и устранить избыточные тесты, сфокусировавшись только на необходимых проверках.
-
Автоматизация тестирования: Булевы выражения могут быть использованы в автоматизированных тестах для проверки условий выполнения.
Пример: Создание логических выражений для тестирования сложных условий
Предположим, что у нас есть система аутентификации, которая позволяет входить в систему при следующих условиях:
-
Правильный логин и правильный пароль
-
Либо использование двухфакторной аутентификации
Булевы выражения для этого случая:
login_success = (correct_login AND correct_password) OR two_factor_auth
Пример тестовых сценариев
-
Тестовый сценарий 1: Проверка успешной аутентификации при правильном логине и пароле
-
Входные данные: correct_login = true, correct_password = true, two_factor_auth = false
-
Ожидаемый результат: login_success = true
-
-
Тестовый сценарий 2: Проверка успешной аутентификации при использовании двухфакторной аутентификации
-
Входные данные: correct_login = false, correct_password = false, two_factor_auth = true
-
Ожидаемый результат: login_success = true
-
-
Тестовый сценарий 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 до 100 лет.
-
Разделим диапазон на три эквивалентных класса: 1-17, 18-59, 60-100.
-
-
Выбор представительных значений:
-
Выбираем одно значение из каждого класса:
-
Класс 1: 10 (несовершеннолетние)
-
Класс 2: 30 (взрослые)
-
Класс 3: 70 (пожилые)
-
-
-
Создание тестовых сценариев:
-
На основе выбранных значений, создаем тестовые сценарии для проверки системы.
-
Примеры тестовых сценариев
-
Тестовый сценарий 1: Проверка ввода возраста 10 (Класс 1 — несовершеннолетние)
-
Входные данные: Возраст = 10
-
Ожидаемый результат: Система должна корректно обработать возраст 10 и предоставить соответствующие уведомления для несовершеннолетних.
-
-
Тестовый сценарий 2: Проверка ввода возраста 30 (Класс 2 — взрослые)
-
Входные данные: Возраст = 30
-
Ожидаемый результат: Система должна корректно обработать возраст 30 и предоставить доступ к регистрационным функциям для взрослых.
-
-
Тестовый сценарий 3: Проверка ввода возраста 70 (Класс 3 — пожилые)
-
Входные данные: Возраст = 70
-
Ожидаемый результат: Система должна корректно обработать возраст 70 и предоставить соответствующие уведомления и функции для пожилых.
-
Анализ данных и статистика
Алгебраические методы используются для анализа тестовых данных, что позволяет выявить скрытые зависимости и улучшить качество тестирования. Применение матриц и векторов помогает обработать результаты тестов и получить полезные инсайты.
Пример: Использование векторов для анализа данных об ошибках и их корреляции
Предположим, у нас есть данные о найденных ошибках в виде векторов:
-
Вектор X: Количество ошибок в модуле 1
-
Вектор Y: Количество ошибок в модуле 2
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 соответственно
Пошаговое вычисление
-
Вычислим суммы элементов векторов:
-
∑x=3+7+2=12\sum{x} = 3 + 7 + 2 = 12∑x=3+7+2=12
-
∑y=4+1+5=10\sum{y} = 4 + 1 + 5 = 10∑y=4+1+5=10
-
-
Вычислим суммы квадратов элементов векторов:
-
∑x2=32+72+22=9+49+4=62\sum{x^2} = 3^2 + 7^2 + 2^2 = 9 + 49 + 4 = 62∑x2=32+72+22=9+49+4=62
-
∑y2=42+12+52=16+1+25=42\sum{y^2} = 4^2 + 1^2 + 5^2 = 16 + 1 + 25 = 42∑y2=42+12+52=16+1+25=42
-
-
Вычислим сумму произведений элементов векторов:
-
∑xy=(3×4)+(7×1)+(2×5)=12+7+10=29\sum{xy} = (3 \times 4) + (7 \times 1) + (2 \times 5) = 12 + 7 + 10 = 29∑xy=(3×4)+(7×1)+(2×5)=12+7+10=29
-
-
Подставим значения в формулу и вычислим корреляцию:
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)
-
Упростим выражение:
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 — это возможность формализовать и оптимизировать процессы тестирования, анализировать данные и повышать качество продукта. Применение таких методов открывает новые горизонты для самого специалиста в понимании своих действий высокоуровнего.
В статье указаны довольно простые примеры. На мой взгляд, это полезный базис без перегруза. Надеюсь, статья была вам интересна.
Литература и статьи для дальнейшего изучения
-
Книги:
-
Клайн, Моррис. «Математика: утрата определённости.» — отличный обзор на математику в целом.
-
Льюис, Гарри. «Элементы математической логики.» — вводная книга по математической логике и её применению.
-
-
Статьи:
-
«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)
-
-
Онлайн-ресурсы:
-
EdX: «Linear Algebra — Foundations to Frontiers»
ссылка на оригинал статьи https://habr.com/ru/articles/821191/
Добавить комментарий