2. QA Lead, QA Trainer
9+ years experience
Testing processes, test design, test strategy,
personal effectiveness
SQA Days Program Committee member
ISTQB Full Advanced Level specialist
Andrey Ladutko
E-Mail: ladutko_andrey@tut.by,
andrey.ladutko@pandadoc.com
Skype: ladutko_andrey
Site: www.qastugama.blogspot.com
5. Определение классов
эквивалентности
Если мы ожидаем одинакового результата от
выполнения двух и более тестов, эти тесты
эквивалентны. Такие множества тестов называются
классами эквивалентности.
6. • Они направлены на поиск одной и той же ошибки
• Если один из тестов обнаруживает ошибку, другие её тоже, скорее
всего, обнаружат
• Если один из тестов НЕ обнаруживает ошибку, другие её тоже,
скорее всего, НЕ обнаружат
• Тесты используют одни и те же наборы входных данных
• Для выполнения тестов мы совершаем одни и те же операции
• Тесты генерируют одинаковые входные данные или приводят
приложение в одно и то же состояние
• Все тесты приводят к срабатыванию одного и того же блока
обработки ошибок
Признаки классов эквивалентности
8. Граничные значения (или просто – границы) – это те места, в
которых один класс эквивалентности переходит в другой.
Например, одна группа тестов вызывает сообщение «вы ввели
слишком маленькое число», а другая вызывает сообщение «вы
ввели слишком большое число». Граница будет лежать где-то в
районе чисел «самых больших из слишком маленьких» и «самых
маленьких из слишком больших».
Граничные значения
9. У всех ли эквивалентных
классов есть граничные
значения?
10. Программа принимает на входе пол и возраст и на
выходе выдает, является ли человек пенсионером или
нет.
• Как вы думаете, сколько классов эквивалентности
нам необходимо проверить?
Задача «Пенсионный возраст»
11. 3 класса эквивалентности: 0—57, 58-62 и 63 - …
3 класса - ответ неверный, т.к. в классе 58-62 является ли
человек пенсионером или нет, определяется полом.
4 класса:
М: 0-62 и 63 - ...
Ж: 0-57 и 58 – ...
Задача «Пенсионный возраст»
Решение
16. • Состояние (state)(представленное в виде круга на диаграмме) - это состояние
приложения, в котором оно ожидает 1 или более событий. Состояние помнит
входные данные полученные до этого и показывает как приложение будет
реагировать на полученные события. События могут вызывать смену состояния
и/или инициировать действия.
• Переход (transition) (представленное в виде стрелки на диаграмме) -
представляет переход одного состояния в другое, происходящий по событию.
• Событие (event) (представленное ярлыком над стрелкой) - событие это что
то, что заставляет приложение поменять свое состояние. Cобытия могут
поступать извне приложения, поступающие через интерфейс приложения. Так
же само приложение может генерировать события, например как событие
"истек таймер".
• Действие (action) (представлено после "/" в ярлыке над переходом) - это
действие инициированное сменой состояния. Это может быть "напечатать
билет", "показать на экране" и др.
• Точка входа показывается на диаграмме как черная точка.
• Точка выхода показывается на диаграмме как мишень.
Диаграммы состояний и переходов
17. • Состояние (state) – Made, Paid
• Переход (transition) - стрелки
• Событие (event) – Paymoney, giveInfo
• Действие (action) - startPayTimer
18. • Сколько тестов необходимо, чтобы покрыть все состояния?
• Сколько тестов необходимо, чтобы покрыть все переходы?
Задача «Банкомат»
19. все состояния = 2 теста
все переходы = 4 теста
Задача «Банкомат». Решение
23. Q3. Which set of test data demonstrates equivalence
partitioning to check whether a customer is a teenager or not?
Teenager is between 13 and 19 years, including both values.
• A. 10, 15, 19 years
• B. 13, 19, 25 years
• C. 13, 16, 19 years
• D. 12, 13, 20 years
ISTQB Foundation Level
26. Правила (rules)
Условия Значения 1 2 3 4 5 6 7 8
Условие1 T,F T T T T F F F F
Условие2 T,F T T F F T T F F
Условие3 T,F T F T F T F T F
Действия
Действие1 X X X
Действие2 X X
Действие3 X X X
Действие4 X X X X
Условия – входящие
данные
Действия – исходящие
данные (ожидаемый
результат)
Правила – тест-кейсы
Как выглядит таблица
27. • If you are a new customer opening a credit card account, you will get a
15% discount on all your purchases today.
• If you are an existing customer and you hold a loyalty card, you get a
10% discount.
• If you have a coupon, you can get 20% off today (but it can't be used
with the 'new customer' discount).
• Discount amounts are added, if applicable.
Conditions Rule1 Rule2 Rule3 Rule4 Rule5 Rule6 Rule7 Rule8
New customer (15%) T T T T F F F F
Loyalty card (10%) T T F F T T F F
Coupon (20%) T F T F T F T F
Actions
Discount (%) ? ? ? ? ? ? ? ?
Задача «Кредитная карточка»
28. Conditions Rule1 Rule2 Rule3 Rule4 Rule5 Rule6 Rule7 Rule8
New customer (15%) T T T T F F F F
Loyalty card (10%) T T F F T T F F
Coupon (20%) T F T F T F T F
Actions
Discount (%) X X 15 15 30 10 20 0
Задача «Кредитная карточка»
• If you are a new customer opening a credit card account, you will get a
15% discount on all your purchases today.
• If you are an existing customer and you hold a loyalty card, you get a
10% discount.
• If you have a coupon, you can get 20% off today (but it can't be used
with the 'new customer' discount).
• Discount amounts are added, if applicable.
33. • Показываем тесты для выражения
• A & B = C
• {A,B,C} = True || False
• A, B – условия, С - результат
• True – поднимаем руку
• False – продолжаем сидеть
ЗАДАЧА.
34. • Проверим?
• A & B = C
• A = False B = True
• C = ?
ЗАДАЧА.
35. • Проверим?
• A & B = C
• A = False B = True
• C = False
ЗАДАЧА.
36. Покрытие условий (ПУ) – Condition Coverage (CC)
ПП
МПУР
ПУР
ПУ
Определение:
ü Каждое условие принимает
значение True и False
ОПРЕДЕЛЕНИЕ
37. № A B C = A & B
1 False True False
• У нас есть один тест.
• Какие еще тесты нужно добавить для ПУ?
• Каждое условие принимает значение True и False
ВЕРНЕМСЯ К ЗАДАЧЕ
38. № A B C = A & B
1 False True False
• Что нужно и что проверено:
Ø A = True, A = False. Проверено: A = False
Ø B = True, B = False. Проверено: B = True
ВЕРНЕМСЯ К ЗАДАЧЕ
39. № A B C = A & B
1 False True False
2 True False ?
• Добавляем второй тест:
• A = True, B = False
• C = ?
ВЕРНЕМСЯ К ЗАДАЧЕ
40. № A B C = A & B
1 False True False
2 True False False
• Добавляем второй тест:
• A = True, B = False
• C = False
ВЕРНЕМСЯ К ЗАДАЧЕ
41. № A B C = A & B
1 False True False
2 True False False
• Теперь все тесты?
• Каждое условие принимает значение
• True и False
ВЕРНЕМСЯ К ЗАДАЧЕ
42. № A B C = A & B
1 False True False
2 True False False
• Теперь все тесты?
• Каждое условие принимает значение
• True и False
• Итого 2 теста
ВЕРНЕМСЯ К ЗАДАЧЕ
43. ПП
МПУР
ПУР
ПУ
Ø Не исследуем результат (в обоих
тестах С = False)
Вывод:
В теории интересно, на практике –
не применимо
НО: нужно для понимания более
сложных покрытий
№ A B C = A & B
1 False True False
2 True False False
ПОКРЫТИЕ УСЛОВИЙ - ВЫВОДЫ
44. Покрытие условий и решений (ПУР) –
condition decision coverage (CDC)
ПП
МПУР
ПУР
ПУ
Определение:
ü Каждое условие принимает
значение True и False
ü Результат принимает
значение True и False
ОПРЕДЕЛЕНИЕ
45. • У нас есть два теста на ПУ.
• Что еще нужно проверить для ПУР?
№ A B C = A & B
1 False True False
2 True False False
ВЕРНЕМСЯ К ЗАДАЧЕ
46. • У нас есть два теста на ПУ.
• Что еще нужно проверить для ПУР?
• Результат принимает значение True и False
№ A B C = A & B
1 False True False
2 True False False
ВЕРНЕМСЯ К ЗАДАЧЕ
47. • Что нужно и что проверено:
Ø A = True, A = False. Проверено: A = False, A = True
Ø B = True, B = False. Проверено: B = True, B = False
• Осталось:
Ø C = True, C = False. Проверено: С = False
№ A B C = A & B
1 False True False
2 True False False
ВЕРНЕМСЯ К ЗАДАЧЕ
48. № A B C = A & B
1 False True False
2 True False False
3 True True True
• Теперь все тесты?
ü Каждое условие принимает значение True и False
ü Результат принимает значение True и False
ВЕРНЕМСЯ К ЗАДАЧЕ
49. № A B C = A & B
1 False True False
2 True False False
3 True True True
• Теперь все тесты?
ü Каждое условие принимает значение True и False
ü Результат принимает значение True и False
• Итого 3 теста
ВЕРНЕМСЯ К ЗАДАЧЕ
50. № A B C = A & B
1 False True False
2 True False False
3 True True True
• Оптимально? Нет.
ВЕРНЕМСЯ К ЗАДАЧЕ
51. № A B C = A & B
1 False True False
2 True False False
3 True True True
• Упростим:
1. A = False, B = False, C = False
2. A = True, B = True, C = True
ВЕРНЕМСЯ К ЗАДАЧЕ
52. № A B C = A & B
1 False False False
2 True True True
• Теперь все тесты?
ü Каждое условие принимает значение True и False
ü Результат принимает значение True и False
• Оптимально? Да.
• Итого 2 теста
ВЕРНЕМСЯ К ЗАДАЧЕ
53. Ø Исследуем и условия, и
результат
Ø Проверили только самое важное
Вывод:
Проверяет важное, но не
критичное. Нужны более сильные
покрытия
ПП
МПУР
ПУР
ПУ
№ A B C = A & B
1 False False False
2 True True True
ПОКРЫТИЕ УСЛОВИЙ И РЕШЕНИЙ - ВЫВОДЫ
55. • Показываем тесты для выражения
• A & (B | C) = D
• {A,B,C,D} = True | False
• A, B, C – условия, D - результат
• True – поднимаем руку
• False – продолжаем сидеть
ЗАДАЧА
56. • Проверим?
• A & (B | C) = D
• A = True
• B = False
• C = True
• D = ?
ЗАДАЧА
57. • Отлично!
• A & (B | C) = D
• A = True
• B = False
• C = True
• D = True
ЗАДАЧА
60. • У нас есть один тест. Рассмотрим его подробнее
№ A B С D = A & (B | C)
1 True False True True
ВЕРНЕМСЯ К ЗАДАЧЕ
61. • Возьмем условие А.
• A = True, B = False, C = True. D = True
• Минимум 1 тест, в котором результат меняется, если атомарное условие А = True – DONE.
• Нужно:
• Минимум 1 тест, в котором результат меняется, если атомарное условие А = False
№ A B С D = A & (B || C)
1 True False True True
ВЕРНЕМСЯ К ЗАДАЧЕ
62. • Поменяем условие А с True на False
• A = False, B = False, C = True. D = False
• Минимум 1 тест, в котором результат меняется, если атомарное условие А =
False – DONE
• Определения 1 и 2 для условия А выполнены.
• Что осталось?
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
ВЕРНЕМСЯ К ЗАДАЧЕ
63. • Аналогично для условий B и C.
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
ВЕРНЕМСЯ К ЗАДАЧЕ
64. • Выполним для С, снова посмотрим на 1 тест
• A = True, B = False, C = True. D = True
• Минимум 1 тест, в котором результат меняется, если атомарное условие С = True – DONE.
• Нужно:
• Минимум 1 тест, в котором результат меняется, если атомарное условие С = False
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
ВЕРНЕМСЯ К ЗАДАЧЕ
65. • Поменяем условие C с True на False
• A = True, B = False, C = False. D = False
• Минимум 1 тест, в котором результат меняется, если атомарное условие C =
False – DONE
• Определения 1 и 2 для условия C выполнены.
• Что осталось?
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
3 True False False False
ВЕРНЕМСЯ К ЗАДАЧЕ
66. • Выполним для B, посмотрим на 3 тест
• A = True, B = False, C = False. D = False
• Минимум 1 тест, в котором результат меняется, если атомарное условие B = False – DONE.
• Нужно:
• Минимум 1 тест, в котором результат меняется, если атомарное условие B = True
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
3 True False False False
ВЕРНЕМСЯ К ЗАДАЧЕ
67. • Поменяем условие B с False на True
• A = True, B = True, C = False. D = True
• Минимум 1 тест, в котором результат меняется, если атомарное условие B = True – DONE
• Определения 1 и 2 для условия B выполнены.
• Все?
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
3 True False False False
4 True True False True
ВЕРНЕМСЯ К ЗАДАЧЕ
68. • Определения 1 и 2 выполнены для все условий:
ü A – тесты 1 и 2
ü B – тесты 3 и 4
ü С – тесты 1 и 3
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
3 True False False False
4 True True False True
69. Модифицированное Покрытие условий и решений –
выводы
ПП
МПУР
ПУР
ПУ
№ A B С D = A & (B | C)
1 True False True True
2 False False True False
3 True False False False
4 True True False True
Ø Исследуем влияние КАЖДОГО
условия на результат
Ø Возможны сложности с
составлением тестов для покрытия
Ø Некоторые ЯП выдают заранее
известный результат, обработав
ЧАСТЬ выражения
70. Полное Покрытие (ПП) – multiple condition
coverage (MCC)
ПП
МПУР
ПУР
ПУ
Определение:
ü Проверяем ВСЕ возможные
комбинации условий
Вопрос:
Сколько тестов получится для выражения
D = A & (B | C) ?
71. Полное Покрытие (ПП) – multiple condition
coverage (MCC)
ПП
МПУР
ПУР
ПУ
Ответ: 8 тестов.
В общем случае для N
условий:
два в степени N тестов
72. Полное Покрытие (ПП) – multiple condition
coverage (MCC)
№ A B С D = A & (B | C)
1 False False False False
2 False False True False
3 False True False False
4 False True True False
5 True False False False
6 True False True True
7 True True False True
8 True True True True
ПП
МПУР
ПУР
ПУ
73. Ø Проверяем ВСЕ возможные
случаи – для надежных систем,
рассчитанный на длительный срок
работы
ØБольшое количество тестов для
ПП делает более применимым
предыдущее покрытие (МПУР).
Вместо 2^N -> N + 1 тестов
ПП
МПУР
ПУР
ПУ
ПОЛНОЕ ПОКРЫТИЕ - ВЫВОДЫ
74. Авиационный стандарт DO178-B,
5 типов ошибок:
• Катастрофичная (не работает критичный
функционал, необходимый для
безопасного полета или приземления)
• Опасная (негативное влияние на
безопасность или производительность)
• Важная (ошибка значительная, но менее
серьезная чем А или В)
• Не важная
• Не имеющая эффекта
ПП
МПУР
ПУР
ПУ
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ТЕХНИК
75. Международный стандарт
программируемых электронных
устройств C-61508.
Автомобильная, станкостроительная,
железнодорожная, атомная
промышленность. Критичность
определяется по шкале от 1 до 4 (1 –
наименее критичная):
4 (наиболее критичная) – МПУР
крайне рекомендуется
ПП
МПУР
ПУР
ПУ
ПРИМЕРЫ ИСПОЛЬЗОВАНИЯ ТЕХНИК
78. To create a control-flow diagram from this code, we do the following:
1. The top process block contains up to and including line 6. Note that there are
no decisions, so all lines go into the same process block. By combining
multiple lines of code where there is no decision made into a single process
block, we can simplify the graph. Note that we could conceivably have drawn
a separate process block for each line of code.
2. At line 7 there is a reserved word in the C language: if. This denotes that the
code is going to make a decision. Note that the decision can go one of two
ways, but not both. If the decision resolves to TRUE, the left branch is taken
and lines 8 and 9 are executed and then the thread jumps to line 17.
3. On the other hand, if the decision resolves to FALSE, the thread jumps to line
10 to execute the else clause.
4. Line 11 sets a value, and then goes to line 12 where another decision is made.
This is the reserved word, for, which means we may or may not loop.
5. At line 12, a decision is made in the for loop body using the second phrase in
the statement (i <= n). If this evaluates to TRUE, the loop will fire, causing the
code to go to line 13 where it calculates the value of f and then goes right
back to the loop at line 12.
6. If the for loop evaluates to FALSE, the thread goes to line 15 and then to line
17.
7. Once the thread gets to line 17, the function ends at line 18.
Строим диаграмму состояний-
переходов для кода