Jump to content

Дифференциальное тестирование

Дифференциальное тестирование , [1] Также известный как дифференциальный фаззинг , это популярный метод тестирования программного обеспечения , который пытается обнаружить ошибки , предоставляя одни и те же входные данные ряду похожих приложений (или различным реализациям одного и того же приложения) и наблюдая различия в их выполнении. Дифференциальное тестирование дополняет традиционное тестирование программного обеспечения, поскольку оно хорошо подходит для поиска семантических или логических ошибок , которые не демонстрируют явного ошибочного поведения, такого как сбои или сбои утверждений. Дифференциальное тестирование иногда называют параллельным тестированием.

Дифференциальное тестирование находит семантические ошибки, используя различные реализации одной и той же функциональности в качестве перекрестных ссылок оракулов , выявляя различия в их выходных данных на одних и тех же входных данных: любое несоответствие между поведением программы на одних и тех же входных данных помечается как потенциальная ошибка.

Домены приложений

[ редактировать ]

Дифференциальное тестирование использовалось для успешного поиска семантических ошибок в различных областях, таких как реализации SSL/TLS , [2] [3] [4] [5] Си , компиляторы [6] JVM- реализации, [7] Брандмауэры веб-приложений , [8] политики безопасности для API , [9] и антивирусное программное обеспечение . [4] [10] Дифференциальное тестирование также использовалось для автоматического создания отпечатков пальцев на основе различных реализаций сетевых протоколов . [11]

Генерация входных данных

[ редактировать ]

Неуправляемый

[ редактировать ]

Инструменты неуправляемого дифференциального тестирования генерируют тестовые входные данные независимо на всех итерациях, не учитывая поведение тестовой программы на прошлых входных данных. Такой процесс генерации входных данных не использует никакой информации из прошлых входных данных и, по сути, создает новые входные данные случайным образом из непомерно большого входного пространства. Это может сделать процесс тестирования крайне неэффективным, поскольку для обнаружения одной ошибки необходимо генерировать большое количество входных данных.

Примером системы дифференциального тестирования, которая выполняет неуправляемую генерацию входных данных, является «Frankencerts». [2] В этой работе франкенсерты синтезируются путем случайного объединения частей реальных сертификатов. Он использует синтаксически допустимые сертификаты для проверки семантических нарушений проверки сертификатов SSL/TLS в нескольких реализациях. Однако, поскольку создание и выбор франкенцертов совершенно неуправляемы, они существенно неэффективны по сравнению с управляемыми инструментами.

Управляемый

[ редактировать ]

Процесс управляемой генерации входных данных направлен на минимизацию количества входных данных, необходимых для поиска каждой ошибки, путем учета информации о поведении программы для прошлых входных данных.

Эволюционное руководство для конкретной области

[ редактировать ]

Примером системы дифференциального тестирования, которая выполняет генерацию входных данных на основе покрытия для конкретной области , является Mucerts. [3] Mucerts полагается на знание частичной грамматики формата сертификата X.509 и использует алгоритм стохастической выборки для управления генерацией входных данных и одновременного отслеживания покрытия программы.

Другое направление исследований основано на наблюдении, что проблему создания новых входных данных из существующих входных данных можно смоделировать как случайный процесс. Примером инструмента дифференциального тестирования, который использует такое моделирование стохастического процесса для генерации входных данных, является инструмент Чена и др.. [7] Он выполняет дифференциальное тестирование виртуальных машин Java (JVM) с использованием выборки цепи Маркова Монте-Карло (MCMC) для генерации входных данных. Он использует мутации, специфичные для конкретной предметной области, используя подробные знания формата файлов классов Java.

Независимое от предметной области эволюционное руководство

[ редактировать ]

НЕЖА [4] является примером инструмента дифференциального тестирования, который имеет механизм выбора пути, ориентированный на независимое от предметной области дифференциальное тестирование. Он использует специальные метрики (называемые дельта-разнообразием), которые суммируют и количественно определяют наблюдаемую асимметрию между поведением нескольких тестовых приложений. Такие показатели, которые способствуют относительному разнообразию наблюдаемого поведения программ, оказались эффективными при применении дифференциального тестирования независимо от предметной области и методом «черного ящика».

Руководство на основе автоматического обучения

[ редактировать ]

Для таких приложений, как фильтры межсайтового скриптинга (XSS) и проверка имени хоста сертификата X.509, которые можно точно смоделировать с помощью конечных автоматов (FSA), можно использовать методы обучения FSA на основе контрпримеров для генерации входных данных, которые с большей вероятностью найдут ошибки. [8] [5]

Руководство на основе символического выполнения

[ редактировать ]

Символическое исполнение [12] — это метод «белого ящика» , который выполняет программу символически, вычисляет ограничения по различным путям и использует решатель ограничений для генерации входных данных, которые удовлетворяют собранным ограничениям по каждому пути. Символьное выполнение также можно использовать для генерации входных данных для дифференциального тестирования. [11] [13]

Присущее инструментам тестирования с символьным выполнением ограничение — расширение путей и масштабируемость — особенно усиливается в контексте дифференциального тестирования, где используется несколько тестовых программ. Поэтому очень сложно масштабировать методы символьного выполнения для дифференциального тестирования нескольких больших программ.

См. также

[ редактировать ]
  1. ^ Уильям М. Маккиман , «Дифференциальное тестирование программного обеспечения», Digital Технический журнал, том. 10, нет. 1, стр. 100–107, 1998.
  2. ^ Jump up to: а б К. Брубейкер, С. Яна, Б. Рэй, С. Хуршид и В. Шматиков, «Использование франкенсертов для автоматического состязательного тестирования проверки сертификатов в реализациях SSL/TLS», в материалах симпозиума IEEE по безопасности и конфиденциальности 2014 г. ( С&П). Компьютерное общество IEEE, 2014 г., стр. 114–129.
  3. ^ Jump up to: а б Ю. Чен и З. Су, «Управляемое дифференциальное тестирование проверки сертификатов в реализациях SSL/TLS», в материалах 10-го совместного совещания по основам программной инженерии (FSE). ACM, 2015, стр. 793–804.
  4. ^ Jump up to: а б с Петсиос Т., Тан А., Столфо С., Керомитис А.Д. и Яна С. (май 2017 г.). НЕЖА: Эффективное независимое от предметной области дифференциальное тестирование. В материалах 38-го симпозиума IEEE по безопасности и конфиденциальности (Сан-Хосе, Калифорния).
  5. ^ Jump up to: а б С. Сивакорн, Г. Аргирос, К. Пей, А. Д. Керомитис и С. Яна, «HVLearn: автоматизированный анализ черного ящика проверки имени хоста в реализациях SSL/TLS», Симпозиум IEEE по безопасности и конфиденциальности (S&P), Сан-Хосе, 2017 г. , Калифорния, США, 2017, стр. 521–538.
  6. ^ X. Ян, Ю. Чен, Э. Эйде и Дж. Регер, «Обнаружение и понимание ошибок в компиляторах C», в материалах 32-й конференции ACM SIGPLAN по проектированию и реализации языков программирования (PLDI). ACM, 2011, стр. 283–294.
  7. ^ Jump up to: а б Ю. Чен, Т. Су, К. Сунь, З. Су и Дж. Чжао, «Дифференциальное тестирование реализаций JVM, ориентированное на покрытие», в материалах 37-й конференции ACM SIGPLAN по проектированию и реализации языков программирования (PLDI). ACM, 2016, стр. 85–99.
  8. ^ Jump up to: а б Г. Аргирос, И. Стаис, С. Яна, А. Д. Керомитис и А. Киайас, «SFADiff: Автоматизированные атаки уклонения и снятие отпечатков пальцев с использованием дифференциального автоматного обучения черного ящика», в материалах конференции ACM SIGSAC 2016 г. по компьютерной и коммуникационной безопасности. (ККС). ACM, 2016, стр. 1690–1701.
  9. ^ В. Шривастава, доктор медицинских наук Бонд, К.С. МакКинли и В. Шматиков, «Оракул политики безопасности: обнаружение дыр в безопасности с использованием нескольких реализаций API», Уведомления ACM SIGPLAN, том. 46, нет. 6, стр. 343–354, 2011.
  10. ^ С. Яна и В. Шматиков, «Злоупотребление обработкой файлов в детекторах вредоносного ПО для развлечения и получения прибыли», в материалах симпозиума IEEE по безопасности и конфиденциальности (S&P) 2012 года. Компьютерное общество IEEE, 2012, стр. 80–94.
  11. ^ Jump up to: а б Д. Брамли, Дж. Кабальеро, З. Лян, Дж. Ньюсом и Д. Сонг, «На пути к автоматическому обнаружению отклонений в двоичных реализациях с помощью приложений для обнаружения ошибок и генерации отпечатков пальцев», на 16-м симпозиуме по безопасности USENIX (USENIX Security '07). ). Ассоциация USENIX, 2007.
  12. ^ JC King, «Символическое выполнение и тестирование программ», Communications of the ACM, vol. 19, нет. 7, стр. 385–394, 1976.
  13. ^ Д. А. Рамос и Д. Р. Энглер, «Практическая, простая проверка эквивалентности реального кода», на Международной конференции по компьютерной проверке. Спрингер, 2011, стр. 669–685.
Arc.Ask3.Ru: конец переведенного документа.
Arc.Ask3.Ru
Номер скриншота №: f43831a2405668c9a270035466cc7469__1700568000
URL1:https://arc.ask3.ru/arc/aa/f4/69/f43831a2405668c9a270035466cc7469.html
Заголовок, (Title) документа по адресу, URL1:
Differential testing - Wikipedia
Данный printscreen веб страницы (снимок веб страницы, скриншот веб страницы), визуально-программная копия документа расположенного по адресу URL1 и сохраненная в файл, имеет: квалифицированную, усовершенствованную (подтверждены: метки времени, валидность сертификата), открепленную ЭЦП (приложена к данному файлу), что может быть использовано для подтверждения содержания и факта существования документа в этот момент времени. Права на данный скриншот принадлежат администрации Ask3.ru, использование в качестве доказательства только с письменного разрешения правообладателя скриншота. Администрация Ask3.ru не несет ответственности за информацию размещенную на данном скриншоте. Права на прочие зарегистрированные элементы любого права, изображенные на снимках принадлежат их владельцам. Качество перевода предоставляется как есть. Любые претензии, иски не могут быть предъявлены. Если вы не согласны с любым пунктом перечисленным выше, вы не можете использовать данный сайт и информация размещенную на нем (сайте/странице), немедленно покиньте данный сайт. В случае нарушения любого пункта перечисленного выше, штраф 55! (Пятьдесят пять факториал, Денежную единицу (имеющую самостоятельную стоимость) можете выбрать самостоятельно, выплаичвается товарами в течение 7 дней с момента нарушения.)