четверг, 26 марта 2015 г.

Оракулы в тестировании

В эту субботу состоится сессия викенд тестирования, посвященная оракулам (подробнее об участии). Это сообщение является чем то вроде вводной к этой сессии.

Лично для меня эта тема очень интересна. Пару лет назад на конференции во Львове я даже выступал с докладом про оракулы. Так что когда я говорю про оракулы - я вспоминаю про Львов, а когда говорю про Львов - вспоминаю про оракулы. Так и живу :)

Вряд ли найдется тестировщик, который не сталкивался с оракулами. Если вы находили баг - вы имело с ними дело, если бы писали тест кейс - тоже. Это одна из вещей, которые мы используем каждый день, но не всегда знаем, как она называется.



Оракул - это эвристический механизм, который помогает нам определить проблему. Это первое определение, которое мы рассмотрим. Прилагательное "эвристический" указывает на то, что этот механизм, как и любая другая эвристика, подвержен ошибкам. То есть, он помогает, но не всегда. Зато его сравнительно легко использовать - еще одно свойство, характерное для эвристики.

Еще одно определение оракула - второе в этом сообщении - говорит о том, что это - способ генерации ожидаемого результата теста.

Эти два определения похожи, они оба связаны с определением результата теста и распознаванием правильного и неправильного поведения продукта. Но есть в них и принципиальное различие: первое используется в основном в контексте обнаружения проблем, второе - в контексте разработки тестов (я имею в виду придумывание тестов).

Существует две популярные классификации оракулов: FEW HICCUPPS Майкла Болтона и Джеймса Баха и таксономия оракулов Дуга Хоффмана (см. раздел Doug Hoffman’s Approach). Как мне кажется, первое определение оракулов удобнее и логичнее употреблять в контексте классификации Болтона и Баха, второе - в рамках классификации Хоффмана.

Если коротко, то FEW HICCUPPS - что-то вроде сборника универсальных типов оракулов для обнаружения проблем, а таксономия Хоффмана - сборник разных типов оракулов в помощь при тест дизайне (автор составлял ее с прицелом на автоматизацию). 

Давайте рассмотрим 2 примера использования оракулов.

1. Представьте, что вы тестируете приложение по обмену мгновенными текстовыми сообщениями. Вы на автомате нажимаете Ctrl + Enter, чтобы отправить сообщение, но ничего не происходит. В спецификации об этом ни слова. Но что-то говорит вам о том, что тут есть проблема. Это - оракул, то есть механизм, с помощью которого вы обнаруживаете ошибку. В этом случае, используя классификацию FEW HICCUPPS, вы видите проблему из-за явного несоответствия поведения вашего продукта и сравнимых с ним продуктов (оракул несоответствия Comparable product). Возможно, отсутствие посылки сообщений по Ctrl + Enter является своеобразной фичей вашего продукта (тогда мы можем сказать, что оракул не сработал, ведь реальная ошибка не найдена). Но скорее всего это все-таки проблема. Похоже, что про реализацию этой фичи просто забыли.

2. Представьте, что вы автоматизируйте тест по проверке построения графика синуса в вашем математическом продукте. Как вы можете проверить правильность графика:
  • Сравните его с графиком, сгенеренным предыдущей версией программы на тех же данных. Таким образом вы используете оракул регрессии из классификации Дуга Хоффмана. Он не всегда работает (например, когда в предыдущей версии программы был баг), но может вам пригодиться.
  • Построите график в другой программе и сравните свой график с ним. Такой оракул называется оракулом образцовой программы в таксономии Хоффмана. Он очень похож на оракул соответствия сравнимому продукту в FEW HICCUPPS (Comparable product).
  • Вы можете ограничиться проверкой ключевых точек: sin(0), sin(π/2), ... Это довольно легко сделать (по сравнению с другими вариантами), но гарантий правильности графика в других точках не дает. Этот метод проверки можно отнести к оракулу вычислений из таксономии Хоффмана (Calculation oracle).
Материалы по оракулам:
На сегодня -все :)

Комментариев нет:

Отправить комментарий