SlideShare une entreprise Scribd logo
1  sur  58
Télécharger pour lire hors ligne
Тестирование для
разработчиков
Лекция 2. Критерии выбора тестов.
Развенская Ксения
В предыдущих сериях
Качество – совокупность характеристик, определяющих
насколько продукт хорош с точки зрения заинтересованных лиц.
Тестирование - техническое исследование, которое проводится
с целью предоставить заинтересованным лицам информацию о
качестве тестируемого продукта.
Тестирование на стадии разработки – сокращает время и
риски.
В предыдущих сериях
Техники тестирования
• На основе спецификации (Specification-based)
• На основе выбора входных данных/Доменное (Input Domain-
based)
• На основе кода (Code-based)
• Поток управления (control-flow)
• Поток данных (data-flow)
• На основе модели (Model-based)
• Конечный автомат
• Таблица принятия решений
• Формальная спецификация
• На основе интуиции и опыта
• Ad-hoc
• Исследовательское
• Прогнозирование ошибок
• …
+ комбинации
План
1. Sanity-check
2. Тестовое покрытие
3. Критерии покрытия
4. Критерии выбора тестов
Sanity-check
Программа принимает на вход 3 целых числа. Эти
значения интерпретируются как длины сторон
треугольника. Программа должна вывести сообщение
о том, каким является заданный треугольник:
разносторонним, равнобедренным или
равносторонним.
Sanity-check
1. Позитивный тест, разносторонний (3, 4, 5)
2. Позитивный тест, равнобедренный (3, 4, 4)
3. Позитивный тест, равносторонний (3, 3, 3)
4. Перестановки п.2 (3, 4, 4) (3, 4, 3) (4, 4, 3)
5. Негативный, одна сторона – 0 (3, 4, 0)
6. Негативный, все нули (0, 0, 0)
7. Негативный, отрицательное значение (3, 4, -1)
8. Не треугольник a+b=c (1, 2, 3)
9. Перестановки п. 8 (1, 2, 3) (3, 2, 1) (1, 3, 2)
10. Не треугольник a+b<c (1, 2, 4)
11. Перестановки п. 10 (1, 2, 4) (4, 2, 1) (1, 4, 2)
12. Дробные значения (3,5; 4,5; 5,5)
13. 2 аргумента / или не числа
14. Был ли указан ожидаемый результат для негативных тестов?
Sanity-check
Набрал больше
8 баллов?
Круто!
Тестовое покрытие
Покрытие (coverage) – метрика, применяемая для оценки
полноты/качества тестов.
Зависит от выбранной техники тестирования и может измеряться,
например:
• В процентах покрытой функциональности (например, по
спецификации)
• В количестве покрытых строк кода (в % от общего кол-ва строк)
• В процентах покрытых ветвей в графе потока управления
…
Критерии выбора тестов
Протестировать все – невозможно, даже 100% покрытие не
обеспечивает 100% тестирования.
Чтобы протестировать все, мы должны:
• Проверить все возможные значения каждой входной
переменной
• Проверить все возможные комбинации значений переменных
• Проверить каждую конфигурацию ПО и оборудования, а также
конфигурации серверов, которые мы не контролируем
• Протестировать взаимодействие с другими программами,
работающими параллельно с нашей
…
Почему нельзя
протестировать все
Проверить все допустимые значения каждой переменной на
входе. Реально ли?
Пример: функция, вычисляющая квадратный корень из
32-битного числа без знака.
Сколько значений мы должны проверить?
232 значений (4 294 967 296)
У Дага Хоффмана автоматизированная проверка всех валидных
значений заняла 6 минут.
Почему нельзя
протестировать все
А если число 64-битное?
264=232
*232 =232
* 6 минут
Проверка займет ~ 49 000 лет
Пример неуловимого бага
Критерии выбора тестов
Задача:
составить минимальный набор тестов,
обеспечивающий максимальное
покрытие.
Критерии выбора тестов
Классы критериев
• Критерии черного ящика/Функциональные критерии
• Критерии белого ящика/Структурные критерии
• Мутационные критерии
Критерии черного ящика
• Классы эквивалентности
• Анализ граничных значений
• Попарное тестирование (pairwise)
• Таблицы принятия решений
• Диаграммы состояний
Разбиение на классы эквивалентности
(Equivalence Partitioning)
Класс эквивалентности (КЭ) – множество входных данных
(доменов), для которых, как мы ожидаем, поведение
системы/модуля будет одинаковым.
Все значения из одного КЭ эквивалентны с точки зрения
тестирования:
• Если один тест-кейс из КЭ обнаруживает баг, то все
остальные тоже его обнаружат
• Если один тест-кейс из КЭ не обнаруживает баг, то
остальные тоже не обнаружат
Критерий покрытия – каждый класс должен быть
представлен как минимум одним тестом.
Гипотеза – кейсы, соответствующие некоторым КЭ,
обрабатываются некорректно.
Классы эквивалентности
Пример
N – кол-во посещенных лекций по тестированию
0 ≤ N ≤ 1– автомат, незачет
2 ≤ N < 5 – сдает зачет
N = 5 – автомат, зачет
Классы эквивалентности допустимых значений:
[0;1]
[2;5)
[5]
Тестовый набор:
(0, 3, 5)
Разбиение на классы
эквивалентности
Классы эквивалентности:
• Допустимые (позитивные тесты)
• Недопустимые (негативные тесты)
• КЭ окружения/конфигурации
КЭ недопустимых значений
(-∞, 0)
(5, +∞)
N - из множества вещественных чисел
N - NaN
Для значений из недопустимых КЭ ожидаем получить
корректное сообщение об ошибке.
Тестовый набор
(-10, 42, 2.7, ‘voloshin’)
Разбиение на классы
эквивалентности
Чуть более сложный пример.
Программа получает на вход строку. Результатом работы
является перевернутая строка.
КЭ:
• Пустая строка
• Длина == 1 символ
• >1 символа палиндром
• >1 символа не палиндром
Тестовый набор:
• <пустая строка>
• ‘а’
• ‘ререферер’
• ‘technopark’
Разбиение на классы
эквивалентности
Строки четной и нечетной длины – разные КЭ!
Возможная реализация (найдите ошибку):
Разбиение на классы
эквивалентности
КЭ окружения/конфигурации
Приложение голосового поиска для iPhone надо
протестировать на разных версиях iOs + 3G, WiFi, без
интернета.
Возможные конфигурации также разбиваются на КЭ.
Если переменные независимые (как в случае с сетью и
версиями ОС) – необязательно проверять все комбинации,
достаточно проверить их попарно:
• iOs 6 + 3G
• iOs 5 + WiFi
• iOs 5 или 6 + откл. интернет
Анализ граничных значений
Что делаем?
В тестовый набор добавляем значения границ КЭ и
значения, лежащие непосредственно выше и ниже границ +
в набор добавляем предельные значения для используемых
типов данных, строки предельной и нулевой длины, етс.
Кроме того, желательно добавить значения, лежащие очень
близко к границам.
Анализ граничных значений
Пример
КЭ допустимых значений:
[0;1]
[2;5)
[5]
КЭ недопустимых значений
(-∞, 0)
(5, +∞)
N - из класса рациональных чисел
N - NaN
Добавим в тестовый набор значения из границ диапазона +
добавим значения, выходящие за тип int.
Итоговый тестовый набор:
(-1, 0, 1, 2, 3, 4, 5, 6, MaxInt, MaxInt+1, MaxInt+0.001, MaxInt-
1, MaxInt-0.001, MinInt, …, -42, 100, 2.7, ‘voloshin’, <оч
длинная строка>, <пустая строка>)
Анализ граничных значений
Какого рода ошибки обнаруживает:
• Выход за границы диапазона (найдите ошибку в коде
ниже, С++)
Hint: integer (32 bit) -2 147 483 648 .. 2 147 483 647
Что будет выведено в консоль?
Подробно тут:
http://en.wikipedia.org/wiki/Two%27s_complement
Пример из жизни
Анализ граничных значений
Какого рода ошибки обнаруживает:
• Проверка итераторов цикла
• Ошибки в операциях сравнения (“>” вместо “>=” и тд)
Анализ граничных значений
Границы могут быть нефункциональными:
• Максимально допустимый размер файла для отправки по
эл. почте.
• Сервер должен обрабатывать 100500 запросов в секунду
Метод всех пар
(Pairwise testing)
Что делать, если входных параметров много и невозможно
протестировать все комбинации значений из разных КЭ?
Пример:
1) Спутник должен корректно устанавливаться на: Windows 8, Windows
7, Win Vista, с вкл. UAC, выкл. UAC, с установленными на них
антивирусами: Касперский, Eset, NOD32, McAffee. В браузеры IE7,
IE8, IE9, IE10, Opera 11, 12, Chrome 22, Firefox 19, 20. С
установленными Яндекс.Элементами и без Яндекс.Элементов.
Поверх установленного Спутника и на новую машину.
Итого:
- 3 ОС
- 2 конфигурации UAC
- 4 конфигурации антивирусов
- 9 браузеров
- 2 конфигурации ПО от конкурентов
- 2 версии Спутника
864
комбинации!
Метод всех пар
(Pairwise testing)
Номер ОС Браузер Яндекс.Элементы
1 Win 7 IE Да
2 Win 8 IE Да
3 Vista IE Да
4 Win 7 Firefox Да
5 Win 8 Firefox Да
6 Vista Firefox Да
7 Win 7 Chrome Да
8 Win 8 Chrome Да
9 Vista Chrome Да
10 Win 7 IE Нет
11 Win 8 IE Нет
12 Vista IE Нет
13 Win 7 Firefox Нет
14 Win 8 Firefox Нет
15 Vista Firefox Нет
16 Win 7 Chrome Нет
17 Win 8 Chrome Нет
18 Vista Chrome Нет
• Критерий выбора тестов – проверка всех
комбинаций значений для любой пары входных
параметров
• Предпосылки:
• “Большинство ошибок проявляются либо при конкретных
значениях одного параметра, либо взаимным влиянием значений
двух параметров.” ("The Combinatorial Design Approach to
Automatic Test Generation" [Telcordia 1997])
• Оптимальный компромисс “трудозатраты vs. покрытие” между
полным перебором и проверкой по каждому параметру
независимо.
Метод всех пар
(Pairwise testing)
Метод всех пар
(Pairwise testing)
Номер ОС Браузер Яндекс.Элементы
1 Win 7 IE Да
2 Win 8 IE Да
3 Vista IE Да
4 Win 7 Firefox Да
5 Win 8 Firefox Да
6 Vista Firefox Да
7 Win 7 Chrome Да
8 Win 8 Chrome Да
9 Vista Chrome Да
10 Win 7 IE Нет
11 Win 8 IE Нет
12 Vista IE Нет
13 Win 7 Firefox Нет
14 Win 8 Firefox Нет
15 Vista Firefox Нет
16 Win 7 Chrome Нет
17 Win 8 Chrome Нет
18 Vista Chrome Нет
Метод всех пар
(Pairwise testing)
Номер ОС Браузер Yandex
1 Win 7 IE Да
3 Vista IE Да
5 Win 8 Firefox Да
8 Win 8 Chrome Да
9 Vista Chrome Да
11 Win 8 IE Нет
13 Win 7 Firefox Нет
15 Vista Firefox Нет
16 Win 7 Chrome Нет
• 9 тестов вместо 18-ти
Метод всех пар
(Pairwise testing)
• Пример
• система с 75 параметрами yes/no
• Полный перебор:
• 275 = 37 778 931 862 957 161 709 568
• Метод всех пар:
28 !
• Факторы, влияющие на результаты применения (и
применимость) метода:
• Степень зависимости между параметрами конкретной
системы
• Распределение вероятности комбинаций значений
параметров (5 существительных подряд!)
• Выбор параметров и их проверяемых значений
Метод всех пар
Таблицы решений
Таблица принятия решений - таблица, описывающая логику
работы системы для различных комбинаций начальных
условий.
Правило 1 Правило 2 …
Условия
Условие 1
Условие 2
…
Действия
Действие 1
Действие 2
…
Критерий покрытия – как
минимум один тест на
столбец.
Гипотеза – при некоторой
комбинации условий, может
выполниться неправильное
действие. Или при
некоторой комбинации
условий не выполнится
необходимое действие.
Таблицы решений
Пример
Таблицы решений
Пример
Таблица принятия решений для avia.mail.ru
Пр-ло 1 Пр-ло 2 Пр-ло 3 Пр-ло 4 Пр-ло 5 Пр-ло 6 Пр-ло 7 Пр-ло 8
Условия
Выбран город
откуда
Да Да Нет Нет Да Да Нет Нет
Выбран город
куда
Да Да Да Да Нет Нет Нет Нет
Туда-обратно Да Нет Да Нет Да Нет Да Нет
Действия
Действие 1 ищем ищем ворнинг ворнинг ворнинг ворнинг ворнинг ворнинг
Диаграммы состояний
Диаграмма состояний – ориентированный граф, в
котором вершины обозначают состояния, а дуги
показывают переходы между 2мя состояниями.
Критерий (самый слабый) – покрытие всех состояний и всех переходов.
Методы белого ящика
На основе:
• Потока управления
• Потока данных
Control-flow diagram
Граф потока управления - множество всех возможных путей
исполнения программы, представленное в виде графа
(Википедия).
Критерии покрытия:
• Покрытие ветвей потока
управления
• Покрытие путей потока
управления
Control-flow diagram
Покрытие всех ветвей графа потока управления
Тестовый набор удовлетворяет критерию покрытия ветвей потока
управления, если при выполнении этого тестового набора
управление хотя бы один раз проходит по каждому ребру графа
потока управления.
Тестовый набор (входные данные):
(0,30)
x = 17 - x
x = 0
x>17
x == -13
Control-flow diagram
Покрытие всех путей графа потока управления (комбинация
условий)
Тестовый набор удовлетворяет критерию покрытия путей потока
управления, если его выполнение хотя бы один раз проходит по
каждому возможному пути в графе потока управления ведущему от
точки входа до точки завершения работы.
Тестовый набор: (0, 30) (-13, 31)
x = 17 - x
x = 0
x>17
x == -13
Data-flow diagram
Граф потока данных – это граф, на котором показано движение
значений данных от их источников через преобразующие их
процессы к потребителям в других объектах.
Чтобы построить граф потока данных, сначала лучше построить
граф потока управления.
Data-flow diagram
Инструкция, в которой используется некоторая переменная,
называется ее использованием (use). Инструкция, в которой
определяется новое значение для некоторой переменной,
называется ее определением (definition).
du-путь — путь в графе потока управления, начинающийся с
вершины, соответствующей инструкции, определяющей
значение переменной, и заканчивающийся вершиной,
соответствующей инструкции ее использования, и не
содержащий вершин для инструкций определения этой
переменной, кроме первой.
Метрика покрытия использований (all-uses coverage) — доля
покрытых использований всех переменных по отношению к
количеству достижимых использований.
Метрика покрытия du-путей (du-path coverage) — доля
покрытых du-путей для всех переменных программы по
отношению к достижимым du-путям.
Data-flow diagram
Вычисление НОД
использование
определение
Data-flow diagram
Определение b
Использование b
Пример du-путей для переменной a:
0-3, 0-6, 0-7, 0-7’…
Code-coverage
&Unit-testing
• Покрытие операторов (== строк кода)
• Покрытие ветвей
• Покрытие комбинаций
IEEE Unit Testing Standart: покрыто 100% операторов и 100% ветвей.
Code-coverage &
Unit-testing
Покрытие 100% инструкции (операторов) == покрытие всех строк кода
Тестовый набор: a==6, b==‘Hello’
Code-coverage&
Unit-testing
Покрытие 100% ветвей:
Тестовый набор: (a==6, b==‘Hello’) (a==4, b==‘Goodbye’)
Code-coverage&
Unit-testing
100% покрытие инструкций и ветвей – необходимый, но не достаточный
критерий полноты тестирования.
Пример:
Любые 2 протестированных значения a и b обеспечивают 100% покрытие
кода.
При этом не обнаруживает ошибку.
Division by Zero.
Резюме
Комбинируйте техники тестирования
Мутационные критерии
Мутация – применение к исходному коду программы 1 оператора
мутации.
Операторы мутации:
- удаление определенной инструкции
- добавление новой инструкции
- замена переменных в выражениях на другие переменные того же
типа или на константные выражения того же типа
- замена операторов арифметических действий +, –, *, / друг на друга
- замена логических операций друг на друга
- …
Программа, получаемая из тестируемой применением одного оператора
мутации, называется мутантом.
Метрика полноты тестов – доля обнаруженных мутантов.
Если все мутанты обнаружены – программа корректна и тесты полны.
Мутационные критерии
Мутация – применение к исходному коду программы 1 оператора
мутации.
Операторы мутации:
- удаление определенной инструкции
- добавление новой инструкции
- замена переменных в выражениях на другие переменные того же
типа или на константные выражения того же типа
- замена операторов арифметических действий +, –, *, / друг на друга
- замена логических операций друг на друга
- …
Программа, получаемая из тестируемой применением одного оператора
мутации, называется мутантом.
Метрика полноты тестов – доля обнаруженных мутантов.
Если все мутанты обнаружены – программа корректна и тесты полны.
Особенности веба
• Когда мы видим ошибку со стороны клиента, то мы видим симптом
ошибки, но не ее саму. (Саджест не работает, возможно отключен js)
• Ошибки часто зависят от среды и могут возникать не во всех
средах. (Пример – медленный канал)
• Ошибки могут быть в коде или в конфигурации. (Пример: ошибка в
конфиге nginx)
• Ошибки могут постоянно находиться на любом из нескольких
уровней (клиент, сервер, сеть?).
Особенности веба
Уязвимости:
• Sql-инъекции
• JS-инъекции
• XSS
• …
Кодировки
Материалы
1. Lee Copeland "A Practitioner'S Guide To Software Test Design“
2. Rex Black «Advanced Software Testing», Vol.3
3. Борис Бейзер «Тестирование черного ящика»
4. http://www.uchi-it.ru/7/10/soder.html
5. http://www.pairwise.org/tools.asp
6. http://www.developsense.com/pairwiseTesting.html
7. http://www.intuit.ru/department/se/testing/3/2.html
Спасибо за внимание
Развенская Ксения, k.razvenskaya@corp.mail.ru

Contenu connexe

Tendances

Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRAMBLER&Co
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisIosif Itkin
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовYandex
 
технология и отладка по (47)
технология и отладка по (47)технология и отладка по (47)
технология и отладка по (47)romachka_pole
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...Iosif Itkin
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительностиvyacheslavmaslov
 
Test Set Generation Based on a Management Stream Model
Test Set Generation Based on a Management Stream ModelTest Set Generation Based on a Management Stream Model
Test Set Generation Based on a Management Stream ModelIosif Itkin
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...Iosif Itkin
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.Igor Shkulipa
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...yaevents
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализаторAndrey Karpov
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1m2rus
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокTatyanazaxarova
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentTMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentIosif Itkin
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформыSQALab
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Andrey Karpov
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...Iosif Itkin
 

Tendances (20)

Rambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOSRambler.iOS #3: Test-Driven Development в iOS
Rambler.iOS #3: Test-Driven Development в iOS
 
TMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program AnalysisTMPA-2013 Itsykson: Java Program Analysis
TMPA-2013 Itsykson: Java Program Analysis
 
Анастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестовАнастасия Бордонос - Проектирование тестов
Анастасия Бордонос - Проектирование тестов
 
технология и отладка по (47)
технология и отладка по (47)технология и отладка по (47)
технология и отладка по (47)
 
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
TMPA-2015: The Application of Static Analysis to Optimize the Dynamic Detecti...
 
6 лекция. тестирование производительности
 6 лекция. тестирование производительности 6 лекция. тестирование производительности
6 лекция. тестирование производительности
 
Test Set Generation Based on a Management Stream Model
Test Set Generation Based on a Management Stream ModelTest Set Generation Based on a Management Stream Model
Test Set Generation Based on a Management Stream Model
 
лекция4 qa
лекция4 qaлекция4 qa
лекция4 qa
 
QA Лекция2
QA Лекция2QA Лекция2
QA Лекция2
 
лекция3 QA
лекция3 QAлекция3 QA
лекция3 QA
 
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
TMPA-2015: Automated Testing of Multi-thread Data Structures Solutions Lineri...
 
C# Desktop. Занятие 17.
C# Desktop. Занятие 17.C# Desktop. Занятие 17.
C# Desktop. Занятие 17.
 
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
Модели в профессиональной инженерии и тестировании программ. Александр Петрен...
 
Как создать качественный статический анализатор
Как создать качественный статический анализаторКак создать качественный статический анализатор
Как создать качественный статический анализатор
 
Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1Основы и применение статического анализа кода при разработке лекция 1
Основы и применение статического анализа кода при разработке лекция 1
 
Урок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибокУрок 7. Проблемы выявления 64-битных ошибок
Урок 7. Проблемы выявления 64-битных ошибок
 
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS EnvironmentTMPA-2015: Multi-Module Application Tracing in z/OS Environment
TMPA-2015: Multi-Module Application Tracing in z/OS Environment
 
Опыт тестирования API САПР платформы
Опыт тестирования API САПР платформыОпыт тестирования API САПР платформы
Опыт тестирования API САПР платформы
 
Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...Улучшение качества открытого программного обеспечения с помощью инструментов ...
Улучшение качества открытого программного обеспечения с помощью инструментов ...
 
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
TMPA-2015: Standards and Standartization in Program Engineering. Why Would Yo...
 

En vedette

Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Technopark
 
Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1Technopark
 
Тестирование весна 2013 лекция 3
Тестирование весна 2013 лекция 3Тестирование весна 2013 лекция 3
Тестирование весна 2013 лекция 3Technopark
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Technopark
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelTechnopark
 
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"Darja Varlamova
 

En vedette (8)

Black box testing
Black box testingBlack box testing
Black box testing
 
Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4Тестирование весна 2013 лекция 4
Тестирование весна 2013 лекция 4
 
Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1Тестирование весна 2013 лекция 1
Тестирование весна 2013 лекция 1
 
Тестирование весна 2013 лекция 3
Тестирование весна 2013 лекция 3Тестирование весна 2013 лекция 3
Тестирование весна 2013 лекция 3
 
Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5Тестирование весна 2013 лекция 5
Тестирование весна 2013 лекция 5
 
Coding like a sex
Coding like a sexCoding like a sex
Coding like a sex
 
Лекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель PregelЛекция 11. Вычислительная модель Pregel
Лекция 11. Вычислительная модель Pregel
 
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"
Мастер-класс "Бизнес-процессы в организации. Процессный подход к управлению"
 

Similaire à Тестирование весна 2013 лекция 2

3 лекция. презентация
3 лекция. презентация3 лекция. презентация
3 лекция. презентацияvyacheslavmaslov
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1sgdread
 
Викторина для тестировщиков
Викторина для тестировщиковВикторина для тестировщиков
Викторина для тестировщиковUladzimir Kryvenka
 
Надежный тест-дизайн
Надежный тест-дизайнНадежный тест-дизайн
Надежный тест-дизайнSQALab
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыcorehard_by
 
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияАвтотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияSQALab
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыSQALab
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)Evgeny Kaziak
 
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2GoQA
 
Тимур Шевляков
Тимур ШевляковТимур Шевляков
Тимур ШевляковCodeFest
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...SQALab
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Maksim Grinevich
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаIgor Lyubin
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийSQALab
 
Техники тест дизайна для черноящичного тестирования
Техники тест дизайна для черноящичного тестированияТехники тест дизайна для черноящичного тестирования
Техники тест дизайна для черноящичного тестированияDmytro Protsenko
 
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQAFest
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовMskDotNet Community
 

Similaire à Тестирование весна 2013 лекция 2 (20)

3 лекция. презентация
3 лекция. презентация3 лекция. презентация
3 лекция. презентация
 
JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1JavaTalks.Unit Testing.Part 1
JavaTalks.Unit Testing.Part 1
 
Викторина для тестировщиков
Викторина для тестировщиковВикторина для тестировщиков
Викторина для тестировщиков
 
Надежный тест-дизайн
Надежный тест-дизайнНадежный тест-дизайн
Надежный тест-дизайн
 
Современный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтерыСовременный статический анализ кода: что умеет он, чего не умели линтеры
Современный статический анализ кода: что умеет он, чего не умели линтеры
 
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполненияАвтотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
Автотестирование АБС. Конвейер разработки, конвейер данных, конвейер выполнения
 
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной командыМаргарита Сафарова - Аудит процессов тестирования при смене проектной команды
Маргарита Сафарова - Аудит процессов тестирования при смене проектной команды
 
10M tests per day
10M tests per day10M tests per day
10M tests per day
 
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
[JAM 1.1] Testing not for Fun (Evgeny Kaziak)
 
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2
ВОЛОДИМИР НІКОНОВ «Приймальні тести і стратегія тестування» Online QADay 2020 #2
 
Тимур Шевляков
Тимур ШевляковТимур Шевляков
Тимур Шевляков
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
 
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
Промышленный подход к автоматизации тестирования или Keyword-driven testing в...
 
Unit Testing
Unit TestingUnit Testing
Unit Testing
 
Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
Багдатов Методы автоматического выявления плагиата в текстах компьютерных про...
 
Автоматическое тестирование. Моя система
Автоматическое тестирование. Моя системаАвтоматическое тестирование. Моя система
Автоматическое тестирование. Моя система
 
Использование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложенийИспользование комбинаторного тестирования для мобильных приложений
Использование комбинаторного тестирования для мобильных приложений
 
Техники тест дизайна для черноящичного тестирования
Техники тест дизайна для черноящичного тестированияТехники тест дизайна для черноящичного тестирования
Техники тест дизайна для черноящичного тестирования
 
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайниковQA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
QA Fest 2016. Андрей Мясников. Тест-дизайн для чайников
 
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестовЮлия Ковалёва. Fscheck — альтернативный путь для unit тестов
Юлия Ковалёва. Fscheck — альтернативный путь для unit тестов
 

Plus de Technopark

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuTechnopark
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARNTechnopark
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. SparkTechnopark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache MahoutTechnopark
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeperTechnopark
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveTechnopark
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Technopark
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Technopark
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Technopark
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSTechnopark
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы HadoopTechnopark
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceTechnopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"Technopark
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...Technopark
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"Technopark
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"Technopark
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"Technopark
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"Technopark
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...Technopark
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...Technopark
 

Plus de Technopark (20)

Лекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.RuЛекция 14. Hadoop в Поиске Mail.Ru
Лекция 14. Hadoop в Поиске Mail.Ru
 
Лекция 13. YARN
Лекция 13. YARNЛекция 13. YARN
Лекция 13. YARN
 
Лекция 12. Spark
Лекция 12. SparkЛекция 12. Spark
Лекция 12. Spark
 
Лекция 10. Apache Mahout
Лекция 10. Apache MahoutЛекция 10. Apache Mahout
Лекция 10. Apache Mahout
 
Лекция 9. ZooKeeper
Лекция 9. ZooKeeperЛекция 9. ZooKeeper
Лекция 9. ZooKeeper
 
Лекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и HiveЛекция 7. Введение в Pig и Hive
Лекция 7. Введение в Pig и Hive
 
Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)Лекция 6. MapReduce в Hadoop (графы)
Лекция 6. MapReduce в Hadoop (графы)
 
Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)Лекция 5. MapReduce в Hadoop (алгоритмы)
Лекция 5. MapReduce в Hadoop (алгоритмы)
 
Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)Лекция 4. MapReduce в Hadoop (введение)
Лекция 4. MapReduce в Hadoop (введение)
 
Лекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFSЛекция 3. Распределённая файловая система HDFS
Лекция 3. Распределённая файловая система HDFS
 
Лекция 2. Основы Hadoop
Лекция 2. Основы HadoopЛекция 2. Основы Hadoop
Лекция 2. Основы Hadoop
 
Лекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduceЛекция 1. Введение в Big Data и MapReduce
Лекция 1. Введение в Big Data и MapReduce
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL"
 
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
СУБД 2013 Лекция №10 "Нереляционное решение в области баз данных — NoSQL" Час...
 
СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"СУБД 2013 Лекция №9 "Безопасность баз данных"
СУБД 2013 Лекция №9 "Безопасность баз данных"
 
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"СУБД 2013 Лекция №8 "Конфигурирование базы данных"
СУБД 2013 Лекция №8 "Конфигурирование базы данных"
 
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
СУБД 2013 Лекция №7 "Оптимизация запросов и индексирование"
 
СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"СУБД 2013 Лекция №5 "Определение узких мест"
СУБД 2013 Лекция №5 "Определение узких мест"
 
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
СУБД 2013 Лекция №6 "Профилирование запросов. Сложноструктурированные SQL-зап...
 
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
СУБД 2013 Лекция №4 "Расширенные возможности работы с базами данных. Триггеры...
 

Тестирование весна 2013 лекция 2

  • 1. Тестирование для разработчиков Лекция 2. Критерии выбора тестов. Развенская Ксения
  • 2. В предыдущих сериях Качество – совокупность характеристик, определяющих насколько продукт хорош с точки зрения заинтересованных лиц. Тестирование - техническое исследование, которое проводится с целью предоставить заинтересованным лицам информацию о качестве тестируемого продукта. Тестирование на стадии разработки – сокращает время и риски.
  • 3. В предыдущих сериях Техники тестирования • На основе спецификации (Specification-based) • На основе выбора входных данных/Доменное (Input Domain- based) • На основе кода (Code-based) • Поток управления (control-flow) • Поток данных (data-flow) • На основе модели (Model-based) • Конечный автомат • Таблица принятия решений • Формальная спецификация • На основе интуиции и опыта • Ad-hoc • Исследовательское • Прогнозирование ошибок • … + комбинации
  • 4. План 1. Sanity-check 2. Тестовое покрытие 3. Критерии покрытия 4. Критерии выбора тестов
  • 5. Sanity-check Программа принимает на вход 3 целых числа. Эти значения интерпретируются как длины сторон треугольника. Программа должна вывести сообщение о том, каким является заданный треугольник: разносторонним, равнобедренным или равносторонним.
  • 6. Sanity-check 1. Позитивный тест, разносторонний (3, 4, 5) 2. Позитивный тест, равнобедренный (3, 4, 4) 3. Позитивный тест, равносторонний (3, 3, 3) 4. Перестановки п.2 (3, 4, 4) (3, 4, 3) (4, 4, 3) 5. Негативный, одна сторона – 0 (3, 4, 0) 6. Негативный, все нули (0, 0, 0) 7. Негативный, отрицательное значение (3, 4, -1) 8. Не треугольник a+b=c (1, 2, 3) 9. Перестановки п. 8 (1, 2, 3) (3, 2, 1) (1, 3, 2) 10. Не треугольник a+b<c (1, 2, 4) 11. Перестановки п. 10 (1, 2, 4) (4, 2, 1) (1, 4, 2) 12. Дробные значения (3,5; 4,5; 5,5) 13. 2 аргумента / или не числа 14. Был ли указан ожидаемый результат для негативных тестов?
  • 8. Тестовое покрытие Покрытие (coverage) – метрика, применяемая для оценки полноты/качества тестов. Зависит от выбранной техники тестирования и может измеряться, например: • В процентах покрытой функциональности (например, по спецификации) • В количестве покрытых строк кода (в % от общего кол-ва строк) • В процентах покрытых ветвей в графе потока управления …
  • 9. Критерии выбора тестов Протестировать все – невозможно, даже 100% покрытие не обеспечивает 100% тестирования. Чтобы протестировать все, мы должны: • Проверить все возможные значения каждой входной переменной • Проверить все возможные комбинации значений переменных • Проверить каждую конфигурацию ПО и оборудования, а также конфигурации серверов, которые мы не контролируем • Протестировать взаимодействие с другими программами, работающими параллельно с нашей …
  • 10. Почему нельзя протестировать все Проверить все допустимые значения каждой переменной на входе. Реально ли? Пример: функция, вычисляющая квадратный корень из 32-битного числа без знака. Сколько значений мы должны проверить? 232 значений (4 294 967 296) У Дага Хоффмана автоматизированная проверка всех валидных значений заняла 6 минут.
  • 11. Почему нельзя протестировать все А если число 64-битное? 264=232 *232 =232 * 6 минут Проверка займет ~ 49 000 лет
  • 13. Критерии выбора тестов Задача: составить минимальный набор тестов, обеспечивающий максимальное покрытие.
  • 14. Критерии выбора тестов Классы критериев • Критерии черного ящика/Функциональные критерии • Критерии белого ящика/Структурные критерии • Мутационные критерии
  • 15. Критерии черного ящика • Классы эквивалентности • Анализ граничных значений • Попарное тестирование (pairwise) • Таблицы принятия решений • Диаграммы состояний
  • 16. Разбиение на классы эквивалентности (Equivalence Partitioning) Класс эквивалентности (КЭ) – множество входных данных (доменов), для которых, как мы ожидаем, поведение системы/модуля будет одинаковым. Все значения из одного КЭ эквивалентны с точки зрения тестирования: • Если один тест-кейс из КЭ обнаруживает баг, то все остальные тоже его обнаружат • Если один тест-кейс из КЭ не обнаруживает баг, то остальные тоже не обнаружат Критерий покрытия – каждый класс должен быть представлен как минимум одним тестом. Гипотеза – кейсы, соответствующие некоторым КЭ, обрабатываются некорректно.
  • 17. Классы эквивалентности Пример N – кол-во посещенных лекций по тестированию 0 ≤ N ≤ 1– автомат, незачет 2 ≤ N < 5 – сдает зачет N = 5 – автомат, зачет Классы эквивалентности допустимых значений: [0;1] [2;5) [5] Тестовый набор: (0, 3, 5)
  • 18. Разбиение на классы эквивалентности Классы эквивалентности: • Допустимые (позитивные тесты) • Недопустимые (негативные тесты) • КЭ окружения/конфигурации КЭ недопустимых значений (-∞, 0) (5, +∞) N - из множества вещественных чисел N - NaN Для значений из недопустимых КЭ ожидаем получить корректное сообщение об ошибке. Тестовый набор (-10, 42, 2.7, ‘voloshin’)
  • 19. Разбиение на классы эквивалентности Чуть более сложный пример. Программа получает на вход строку. Результатом работы является перевернутая строка. КЭ: • Пустая строка • Длина == 1 символ • >1 символа палиндром • >1 символа не палиндром Тестовый набор: • <пустая строка> • ‘а’ • ‘ререферер’ • ‘technopark’
  • 20. Разбиение на классы эквивалентности Строки четной и нечетной длины – разные КЭ! Возможная реализация (найдите ошибку):
  • 21. Разбиение на классы эквивалентности КЭ окружения/конфигурации Приложение голосового поиска для iPhone надо протестировать на разных версиях iOs + 3G, WiFi, без интернета. Возможные конфигурации также разбиваются на КЭ. Если переменные независимые (как в случае с сетью и версиями ОС) – необязательно проверять все комбинации, достаточно проверить их попарно: • iOs 6 + 3G • iOs 5 + WiFi • iOs 5 или 6 + откл. интернет
  • 22. Анализ граничных значений Что делаем? В тестовый набор добавляем значения границ КЭ и значения, лежащие непосредственно выше и ниже границ + в набор добавляем предельные значения для используемых типов данных, строки предельной и нулевой длины, етс. Кроме того, желательно добавить значения, лежащие очень близко к границам.
  • 23. Анализ граничных значений Пример КЭ допустимых значений: [0;1] [2;5) [5] КЭ недопустимых значений (-∞, 0) (5, +∞) N - из класса рациональных чисел N - NaN Добавим в тестовый набор значения из границ диапазона + добавим значения, выходящие за тип int. Итоговый тестовый набор: (-1, 0, 1, 2, 3, 4, 5, 6, MaxInt, MaxInt+1, MaxInt+0.001, MaxInt- 1, MaxInt-0.001, MinInt, …, -42, 100, 2.7, ‘voloshin’, <оч длинная строка>, <пустая строка>)
  • 24. Анализ граничных значений Какого рода ошибки обнаруживает: • Выход за границы диапазона (найдите ошибку в коде ниже, С++) Hint: integer (32 bit) -2 147 483 648 .. 2 147 483 647 Что будет выведено в консоль? Подробно тут: http://en.wikipedia.org/wiki/Two%27s_complement
  • 26. Анализ граничных значений Какого рода ошибки обнаруживает: • Проверка итераторов цикла • Ошибки в операциях сравнения (“>” вместо “>=” и тд)
  • 27. Анализ граничных значений Границы могут быть нефункциональными: • Максимально допустимый размер файла для отправки по эл. почте. • Сервер должен обрабатывать 100500 запросов в секунду
  • 28. Метод всех пар (Pairwise testing) Что делать, если входных параметров много и невозможно протестировать все комбинации значений из разных КЭ? Пример: 1) Спутник должен корректно устанавливаться на: Windows 8, Windows 7, Win Vista, с вкл. UAC, выкл. UAC, с установленными на них антивирусами: Касперский, Eset, NOD32, McAffee. В браузеры IE7, IE8, IE9, IE10, Opera 11, 12, Chrome 22, Firefox 19, 20. С установленными Яндекс.Элементами и без Яндекс.Элементов. Поверх установленного Спутника и на новую машину. Итого: - 3 ОС - 2 конфигурации UAC - 4 конфигурации антивирусов - 9 браузеров - 2 конфигурации ПО от конкурентов - 2 версии Спутника 864 комбинации!
  • 29. Метод всех пар (Pairwise testing) Номер ОС Браузер Яндекс.Элементы 1 Win 7 IE Да 2 Win 8 IE Да 3 Vista IE Да 4 Win 7 Firefox Да 5 Win 8 Firefox Да 6 Vista Firefox Да 7 Win 7 Chrome Да 8 Win 8 Chrome Да 9 Vista Chrome Да 10 Win 7 IE Нет 11 Win 8 IE Нет 12 Vista IE Нет 13 Win 7 Firefox Нет 14 Win 8 Firefox Нет 15 Vista Firefox Нет 16 Win 7 Chrome Нет 17 Win 8 Chrome Нет 18 Vista Chrome Нет
  • 30. • Критерий выбора тестов – проверка всех комбинаций значений для любой пары входных параметров • Предпосылки: • “Большинство ошибок проявляются либо при конкретных значениях одного параметра, либо взаимным влиянием значений двух параметров.” ("The Combinatorial Design Approach to Automatic Test Generation" [Telcordia 1997]) • Оптимальный компромисс “трудозатраты vs. покрытие” между полным перебором и проверкой по каждому параметру независимо. Метод всех пар (Pairwise testing)
  • 31. Метод всех пар (Pairwise testing) Номер ОС Браузер Яндекс.Элементы 1 Win 7 IE Да 2 Win 8 IE Да 3 Vista IE Да 4 Win 7 Firefox Да 5 Win 8 Firefox Да 6 Vista Firefox Да 7 Win 7 Chrome Да 8 Win 8 Chrome Да 9 Vista Chrome Да 10 Win 7 IE Нет 11 Win 8 IE Нет 12 Vista IE Нет 13 Win 7 Firefox Нет 14 Win 8 Firefox Нет 15 Vista Firefox Нет 16 Win 7 Chrome Нет 17 Win 8 Chrome Нет 18 Vista Chrome Нет
  • 32. Метод всех пар (Pairwise testing) Номер ОС Браузер Yandex 1 Win 7 IE Да 3 Vista IE Да 5 Win 8 Firefox Да 8 Win 8 Chrome Да 9 Vista Chrome Да 11 Win 8 IE Нет 13 Win 7 Firefox Нет 15 Vista Firefox Нет 16 Win 7 Chrome Нет • 9 тестов вместо 18-ти
  • 33. Метод всех пар (Pairwise testing) • Пример • система с 75 параметрами yes/no • Полный перебор: • 275 = 37 778 931 862 957 161 709 568 • Метод всех пар: 28 !
  • 34.
  • 35. • Факторы, влияющие на результаты применения (и применимость) метода: • Степень зависимости между параметрами конкретной системы • Распределение вероятности комбинаций значений параметров (5 существительных подряд!) • Выбор параметров и их проверяемых значений Метод всех пар
  • 36. Таблицы решений Таблица принятия решений - таблица, описывающая логику работы системы для различных комбинаций начальных условий. Правило 1 Правило 2 … Условия Условие 1 Условие 2 … Действия Действие 1 Действие 2 … Критерий покрытия – как минимум один тест на столбец. Гипотеза – при некоторой комбинации условий, может выполниться неправильное действие. Или при некоторой комбинации условий не выполнится необходимое действие.
  • 38. Таблицы решений Пример Таблица принятия решений для avia.mail.ru Пр-ло 1 Пр-ло 2 Пр-ло 3 Пр-ло 4 Пр-ло 5 Пр-ло 6 Пр-ло 7 Пр-ло 8 Условия Выбран город откуда Да Да Нет Нет Да Да Нет Нет Выбран город куда Да Да Да Да Нет Нет Нет Нет Туда-обратно Да Нет Да Нет Да Нет Да Нет Действия Действие 1 ищем ищем ворнинг ворнинг ворнинг ворнинг ворнинг ворнинг
  • 39. Диаграммы состояний Диаграмма состояний – ориентированный граф, в котором вершины обозначают состояния, а дуги показывают переходы между 2мя состояниями. Критерий (самый слабый) – покрытие всех состояний и всех переходов.
  • 40. Методы белого ящика На основе: • Потока управления • Потока данных
  • 41. Control-flow diagram Граф потока управления - множество всех возможных путей исполнения программы, представленное в виде графа (Википедия). Критерии покрытия: • Покрытие ветвей потока управления • Покрытие путей потока управления
  • 42. Control-flow diagram Покрытие всех ветвей графа потока управления Тестовый набор удовлетворяет критерию покрытия ветвей потока управления, если при выполнении этого тестового набора управление хотя бы один раз проходит по каждому ребру графа потока управления. Тестовый набор (входные данные): (0,30) x = 17 - x x = 0 x>17 x == -13
  • 43. Control-flow diagram Покрытие всех путей графа потока управления (комбинация условий) Тестовый набор удовлетворяет критерию покрытия путей потока управления, если его выполнение хотя бы один раз проходит по каждому возможному пути в графе потока управления ведущему от точки входа до точки завершения работы. Тестовый набор: (0, 30) (-13, 31) x = 17 - x x = 0 x>17 x == -13
  • 44. Data-flow diagram Граф потока данных – это граф, на котором показано движение значений данных от их источников через преобразующие их процессы к потребителям в других объектах. Чтобы построить граф потока данных, сначала лучше построить граф потока управления.
  • 45. Data-flow diagram Инструкция, в которой используется некоторая переменная, называется ее использованием (use). Инструкция, в которой определяется новое значение для некоторой переменной, называется ее определением (definition). du-путь — путь в графе потока управления, начинающийся с вершины, соответствующей инструкции, определяющей значение переменной, и заканчивающийся вершиной, соответствующей инструкции ее использования, и не содержащий вершин для инструкций определения этой переменной, кроме первой. Метрика покрытия использований (all-uses coverage) — доля покрытых использований всех переменных по отношению к количеству достижимых использований. Метрика покрытия du-путей (du-path coverage) — доля покрытых du-путей для всех переменных программы по отношению к достижимым du-путям.
  • 47. Data-flow diagram Определение b Использование b Пример du-путей для переменной a: 0-3, 0-6, 0-7, 0-7’…
  • 48. Code-coverage &Unit-testing • Покрытие операторов (== строк кода) • Покрытие ветвей • Покрытие комбинаций IEEE Unit Testing Standart: покрыто 100% операторов и 100% ветвей.
  • 49. Code-coverage & Unit-testing Покрытие 100% инструкции (операторов) == покрытие всех строк кода Тестовый набор: a==6, b==‘Hello’
  • 50. Code-coverage& Unit-testing Покрытие 100% ветвей: Тестовый набор: (a==6, b==‘Hello’) (a==4, b==‘Goodbye’)
  • 51. Code-coverage& Unit-testing 100% покрытие инструкций и ветвей – необходимый, но не достаточный критерий полноты тестирования. Пример: Любые 2 протестированных значения a и b обеспечивают 100% покрытие кода. При этом не обнаруживает ошибку. Division by Zero.
  • 53. Мутационные критерии Мутация – применение к исходному коду программы 1 оператора мутации. Операторы мутации: - удаление определенной инструкции - добавление новой инструкции - замена переменных в выражениях на другие переменные того же типа или на константные выражения того же типа - замена операторов арифметических действий +, –, *, / друг на друга - замена логических операций друг на друга - … Программа, получаемая из тестируемой применением одного оператора мутации, называется мутантом. Метрика полноты тестов – доля обнаруженных мутантов. Если все мутанты обнаружены – программа корректна и тесты полны.
  • 54. Мутационные критерии Мутация – применение к исходному коду программы 1 оператора мутации. Операторы мутации: - удаление определенной инструкции - добавление новой инструкции - замена переменных в выражениях на другие переменные того же типа или на константные выражения того же типа - замена операторов арифметических действий +, –, *, / друг на друга - замена логических операций друг на друга - … Программа, получаемая из тестируемой применением одного оператора мутации, называется мутантом. Метрика полноты тестов – доля обнаруженных мутантов. Если все мутанты обнаружены – программа корректна и тесты полны.
  • 55. Особенности веба • Когда мы видим ошибку со стороны клиента, то мы видим симптом ошибки, но не ее саму. (Саджест не работает, возможно отключен js) • Ошибки часто зависят от среды и могут возникать не во всех средах. (Пример – медленный канал) • Ошибки могут быть в коде или в конфигурации. (Пример: ошибка в конфиге nginx) • Ошибки могут постоянно находиться на любом из нескольких уровней (клиент, сервер, сеть?).
  • 56. Особенности веба Уязвимости: • Sql-инъекции • JS-инъекции • XSS • … Кодировки
  • 57. Материалы 1. Lee Copeland "A Practitioner'S Guide To Software Test Design“ 2. Rex Black «Advanced Software Testing», Vol.3 3. Борис Бейзер «Тестирование черного ящика» 4. http://www.uchi-it.ru/7/10/soder.html 5. http://www.pairwise.org/tools.asp 6. http://www.developsense.com/pairwiseTesting.html 7. http://www.intuit.ru/department/se/testing/3/2.html
  • 58. Спасибо за внимание Развенская Ксения, k.razvenskaya@corp.mail.ru