В тестировании программного обеспечения тестовый оракул (или просто оракул ) является поставщиком информации, описывающей правильный вывод на основе ввода тестового случая . Тестирование с оракулом включает сравнение фактических результатов тестируемой системы (SUT) с ожидаемыми результатами, предоставленными оракулом. [1]
Термин «тестовый оракул» был впервые введен в статье Уильяма Э. Хаудена. [2] Дополнительные работы по различным видам оракулов были исследованы Элейн Вейукер . [3]
Оракул может работать отдельно от тестируемой системы; к нему можно обращаться во время выполнения теста , или его можно использовать до запуска теста с ожидаемыми результатами, закодированными в тестовой логике. [4]
Однако постусловия метода являются частью SUT, как автоматизированные оракулы в моделях проектирования по контракту . [5]
Определение правильного вывода для заданного ввода (и набора состояний программы или системы) известно как проблема оракула или проблема тестового оракула , [6] : 507 которую некоторые считают относительно сложной проблемой и которая включает в себя работу с проблемами, связанными с управляемостью и наблюдаемостью. [7]
Обзор исследовательской литературы, охватывающий период с 1978 по 2012 год [6], выявил несколько потенциальных категорий тестовых оракулов.
Указанный оракул обычно ассоциируется с формализованными подходами к моделированию программного обеспечения и построению программного кода. Он связан с формальной спецификацией , [8] проектированием на основе модели , которое может использоваться для генерации тестовых оракулов, [9] спецификацией перехода состояний, для которой оракулы могут быть получены для помощи в тестировании на основе модели [10] и тестировании соответствия протокола , [11] и проектированием по контракту , для которого эквивалентным тестовым оракулом является утверждение .
Определенные тестовые оракулы имеют ряд проблем. Формальная спецификация опирается на абстракцию, которая в свою очередь может иметь элемент неточности, поскольку все модели не могут охватить все поведение. [6] : 514
Производный тестовый оракул различает правильное и неправильное поведение, используя информацию, полученную из артефактов системы. Они могут включать документацию, результаты выполнения системы и характеристики версий SUT. [6] : 514 Наборы регрессионных тестов (или отчеты) являются примером производного тестового оракула — они построены на предположении, что результат предыдущей версии системы может быть использован в качестве вспомогательного средства (оракула) для будущей версии системы. Ранее измеренные характеристики производительности могут использоваться в качестве оракула для будущих версий системы, например, для запуска вопроса о наблюдаемом потенциальном ухудшении производительности. Текстовая документация из предыдущих версий системы может использоваться в качестве основы для руководства ожиданиями в будущих версиях системы.
Псевдооракул [6] : 515 попадает в категорию производных тестовых оракулов. Псевдооракул, как определено Вейукером [12], представляет собой отдельно написанную программу, которая может принимать те же входные данные, что и программа или SUT, так что их выходные данные можно сравнивать, чтобы понять, есть ли проблема, требующая исследования.
Частичный оракул [6] : 515 — это гибрид между указанным тестовым оракулом и производным тестовым оракулом. Он определяет важные (но не полные) свойства SUT. Например, метаморфическое тестирование использует такие свойства, называемые метаморфическими отношениями, в нескольких исполнениях системы.
Неявный тестовый оракул опирается на подразумеваемую информацию и предположения. [6] : 518 Например, может быть некоторый подразумеваемый вывод из сбоя программы, т. е. нежелательное поведение - оракул, чтобы определить, что может быть проблема. Существует ряд способов поиска и тестирования нежелательного поведения, некоторые называют это негативным тестированием, где есть специализированные подмножества, такие как фаззинг .
Существуют ограничения в неявных тестовых оракулах, поскольку они полагаются на подразумеваемые выводы и предположения. Например, сбой программы или процесса может не быть приоритетной проблемой, если система является отказоустойчивой и, таким образом, работает в форме самовосстановления/самоуправления . Неявные тестовые оракулы могут быть подвержены ложным срабатываниям из-за зависимостей от среды. Тестирование на основе свойств опирается на неявные оракулы.
Человек может выступать в качестве тестового оракула. [7] Этот подход можно отнести к категории количественных или качественных. [6] : 519–520 Количественный подход направлен на поиск нужного количества информации для сбора по SUT (например, результатов тестирования), чтобы заинтересованная сторона могла принять решения о соответствии целевому назначению или выпуске программного обеспечения. Качественный подход направлен на поиск репрезентативности и пригодности входных тестовых данных и контекста выходных данных SUT. Примером является использование реалистичных и репрезентативных тестовых данных и осмысление результатов (если они реалистичны). Они могут руководствоваться эвристическими подходами, такими как интуиция, эмпирические правила, контрольные списки и опыт, чтобы помочь адаптировать конкретную комбинацию, выбранную для SUT.
Тестовые оракулы чаще всего основаны на спецификациях и документации . [13] [14] Формальная спецификация, используемая в качестве входных данных для проектирования на основе модели и тестирования на основе модели , будет примером указанного тестового оракула . Оракул на основе модели использует ту же модель для генерации и проверки поведения системы. [15] Документация, которая не является полной спецификацией продукта, например, руководство по использованию или установке, или запись характеристик производительности или минимальных требований к машине для программного обеспечения, обычно будет производным тестовым оракулом.
Оракул согласованности сравнивает результаты одного выполнения теста с другим на предмет схожести. [16] Это еще один пример производного тестового оракула.
Оракул для программного обеспечения может быть второй программой, которая использует другой алгоритм для оценки того же математического выражения, что и тестируемый продукт. Это пример псевдооракула, который является производным тестовым оракулом. [12] : 466
Во время поиска Google у нас нет полного оракула для проверки правильности числа возвращаемых результатов. Мы можем определить метаморфическое отношение [17] таким образом, что последующий суженный поиск даст меньше результатов. Это пример частичного оракула, который является гибридом между указанным тестовым оракулом и производным тестовым оракулом.
Статистический оракул использует вероятностные характеристики, [18] например, с анализом изображений, где диапазон определенности и неопределенности определяется для тестового оракула, чтобы объявить о совпадении или нет. Это будет примером количественного подхода в человеческом тестовом оракуле.
Эвристический оракул предоставляет репрезентативные или приблизительные результаты по классу тестовых входных данных. [19] Это может быть примером качественного подхода в человеческом тестовом оракуле.