Привет, 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"
MasterMentor
Затея похвальна, реализация так себе.
Начинающий математик написал бы так:
"Декартовым произведением М = A х B х C х ... х N получим область определения М n-местной функции F (что, то же самое: все входные значения функции). Мощность данного множества k (оно же: общее количество тестов) вычислим по формуле k = |M|=|A|*|B|*|C|*...*|N|, где | | - означает мощность множества. С учётом такой-то особенности функции, вычтем подмножество Y из множества М (чтобы сократить общее количество тестов)".
Что до "формулы"
То это не формула, а, скорее, вид абракодабр. Что ей сказано - вообще ничего не понял.
Рекомендую по теме: https://ru.wikipedia.org/wiki/Прямое_произведение там этот этап раскрыт слегка яснее.
По "умножение матриц позволит нам сопоставить результаты и выявить расхождения", хорошо бы показать КАК "позволит". А вдруг - нет?!
PS Статью не минусовал и не плюсовал. Может кто-то другой что-то поймёт, кроме общего посыла, что "математика - это хорошо".