Привет, 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-инженера. Примеры логических выражений показывают, как алгебра может быть применена на практике для создания точных и эффективных тестов.

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

  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. Выбор представительных значений:

    • Выбираем одно значение из каждого класса:

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

      • Класс 2: 30 (взрослые)

      • Класс 3: 70 (пожилые)

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

    • На основе выбранных значений, создаем тестовые сценарии для проверки системы.

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

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

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

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

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

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

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

  3. Тестовый сценарий 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 соответственно

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

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

    • ∑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

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

    • ∑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

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

    • ∑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

  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. Онлайн-ресурсы:

Комментарии (1)


  1. MasterMentor
    12.06.2024 10:03
    +1

    Затея похвальна, реализация так себе.

    Начинающий математик написал бы так:

    "Декартовым произведением М = A х B х C х ... х N получим область определения М n-местной функции F (что, то же самое: все входные значения функции). Мощность данного множества k (оно же: общее количество тестов) вычислим по формуле k = |M|=|A|*|B|*|C|*...*|N|, где | | - означает мощность множества. С учётом такой-то особенности функции, вычтем подмножество Y из множества М (чтобы сократить общее количество тестов)".

    Что до "формулы"

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

    То это не формула, а, скорее, вид абракодабр. Что ей сказано - вообще ничего не понял.

    Рекомендую по теме: https://ru.wikipedia.org/wiki/Прямое_произведение там этот этап раскрыт слегка яснее.

    По "умножение матриц позволит нам сопоставить результаты и выявить расхождения", хорошо бы показать КАК "позволит". А вдруг - нет?!

    PS Статью не минусовал и не плюсовал. Может кто-то другой что-то поймёт, кроме общего посыла, что "математика - это хорошо".