Лекции. Тестирование ПО (all in one) (1186159), страница 5
Текст из файла (страница 5)
1.Стандарты,нормы, правилаНужды ипотребностипользователейТребованияПроектныерешенияПроцессыразработкиИсходный кодРаботающее ПОВерификацияВалидацияРисунок 2. Соотношение верификации и валидации.Методы верификации существенно строже, они чаще могут быть формализованы иавтоматизированы. Скорее по историческим, чем по содержательным причинам, методыверификации делятся на следующие группы [1].• Методы экспертизы (review, inspection). При экспертизе верификацию проводитчеловек, обладающий значительным опытом проведения такого рода проверок (частотакже в экспертизу включаются неопытные сотрудники с целью их обучения).Экспертиза бывает общей, нацеленной на выявление любых дефектов и ошибок, илиспециализированной, направленной на оценку отдельных характеристик качества(например, гибкости архитектуры, удобства использования или защищенности ПО).Обычно в качестве видов экспертиз выделяют организационные экспертизы(management review), технические экспертизы (technical review), сквозной контроль(walkthrough), инспекции (inspection) и аудиты (audit).Экспертиза применима к любым свойствам ПО и любым артефактам жизненногоцикла и на любом этапе проекта, хотя для разных целей могут использоваться разныеее виды.
Она позволяет выявлять практически любые виды ошибок, причем делатьэто на этапе подготовки соответствующего артефакта, тем самым минимизируя времясуществования дефекта и его последствия для качества итогового продукта. В то жевремя экспертиза весьма трудоемка, требует активного участия опытных людей и неможет быть автоматизирована. Эффективность экспертизы существенно зависит отопыта и мотивации ее участников, организации процесса, а также от обеспечениякорректного взаимодействия между различными участниками. Это накладываетдополнительные ограничения на распределение ресурсов в проекте и можетприводить к конфликтам между разработчиками, если руководство проекта обращаетмало внимания на коммуникативные аспекты проведения экспертиз• Методы статического анализа (static analysis). Такие методы используютавтоматический анализ кода, моделей или других документов разработки с цельюпроверки выполнения формализованных правил их оформления (синтаксическойкорректности) и поиска часто встречающихся ошибок по определенным шаблонам(разыменования нулевых указателей, обращения к неинициализированным данным,деления на 0, взаимной блокировки параллельных процессов и пр.).Статический анализ выполняется с помощью специализированных инструментов,техники статического анализа кода, которые достигли достаточной зрелости иподдерживаются эффективными алгоритмами, чаще всего включаются в составкомпиляторов.
Однако, статический анализ обычно способен выявлять лишьограниченный набор видов ошибок.Основной проблемой многих техник статического анализа является следующаядилемма: либо используются строгие методы анализа, не допускающие пропускаошибок (тех типов, что ищутся), но приводящие к большому количеству сообщений овозможных ошибках, которые таковыми не являются (ложные сообщения обошибках), либо набор сообщений об ошибках является точным, но возникаетвозможность пропустить ошибку. Обычно используются компромиссные решения,позволяющие обнаруживатькак можно больше ошибок, но допускающие не слишкомвысокий процент ложных сообщений.
Для выявления ложных сообщений об ошибкахпривлекаются достаточно опытные разработчики, поэтому высокий процет такихсообщений означает большие трудозатраты на анализ результатов работыинструментов. В тех случаях, когда определенная техника статического анализавключается в компилятор, часто прибегают к объявлению всех обнаруженных с еепомощью проблем ошибками (даже если при их наличии программу можноскомпилировать в работоспособный код).• Методы динамического анализа (dynamic analysis). Эти методы выполняютверификацию реальной работы ПО или работы его кода или исполнимой модели (изкоторой код получают автоматизированной трансляцией) в специализированномокружении (например, при отсутствии нужного оборудования или внешних системпроизводится их эмуляция). При этом собирается информация о результатах работы вразличных ситуациях, и эта информация далее подвергается анализу на предметсоответсвия требованиям или проектным решениям.
Обычно к таким методам относяттестирование, при котором работа ПО проверяется на заранее выбранном набореситуаций; мониторинг, в рамках которого работа ПО протоколируется и оцениваетсяпри его обычной или пробной эксплуатации; а также профилирование, специфическийвид мониторинга временных характеристики работы ПО и использования имотдельных ресурсов. К динамическим методам анализа относят также иимитационное тестирование и имитационный мониторинг, при которых ПОвыполняется в рамках какого-то модельного окружения, построенного сиспользованием симуляторов и эмуляторов.Для применения динамических методов необходимо иметь работающую систему илихотя бы некоторые ее компоненты, или же их прототипы, поэтому нельзяиспользовать их на первых стадиях разработки. Зато с их помощью можноконтролировать характеристики работы системы в ее реальном окружении, которыечасто невозможно аккуратно проанализировать с помощью других подходов.Динамически методы позволяют обнаруживать в ПО только ошибки, проявляющиесяпри его работе, а, скажем, дефекты удобства сопровождения найти не помогут,однако, обнаруживаемые ими ошибки обычно считаются более серьезными.
Еще однапроблема динамических методов — получаемые с их помощью результаты сильнозасисят от полноты и разнообразия возникающих в ходе выполнения проверяемойсистемы ситуаций. Если набор исследованных ситуаций недостаточно широк, выводыо качестве системы, сделанные только на основе их выполнения, будут необоснованы.Методы статического анализа этим недостатком не обладают — они позволяютисследовать даже самые запутанные ситуации, которые крайне нелегко воспроизвестипри работе проверяемой системы.• Формальные методы верификации (formal verification) используют формальныематематические модели проверяемого артефакта и того, на соответствие которомупроводится проверка.
Чаще всего это модели, соответственно, кода или проектныхрешений и требований. К формальным методам относятся дедуктивный анализ ипроверка моделей. В рамках дедуктивного анализа свойства кода или проектныхрешений, а также требования формализуются в виде наборов логических утверждений(могущих включать элементы логики высших порядков и различных алгебраическихструктур), и из первого набора I (решения) пытаются формально вывести второй S(требования), т.е., пытаются строго доказать выводимость I ⊢ S. Проверка моделейоснована на представлении проверяемых решений в виде автоматных моделей M, атребований к ним — в виде наборов логических утверждений S (обычно с элементамивременной или модальной логики).
Далее выполняется автоматическая проверкавыполнения M ⊨ S этих утверждений на полученных моделях с помощьюспециализированных инструментов. При этом обнаруживаемые ошибки могут бытьсразу же оформлены как контрпримеры, конкретные сценарии работы проверяемоймодели, при которых сформулированные требования нарушаются.Формальные методы применимы только к тем свойствам, которые выражены в рамкахнекоторой математической модели, а также к тем артефактам, для которых можнопостроить адекватную формальную модель.
Для использования таких методовнеобходимо затратить значительные усилия на построение формальных моделей. Ктому же, построить такие модели и провести их анализ могут только специалисты поформальным методам, которых не так много, и чьи услуги стоят достаточно дорого.Построение формальных моделей нельзя автоматизировать, для этого всегданеобходим человек. Анализ их свойств в значительной мере может бытьавтоматизирован, и сейчас уже есть инструменты, способные анализироватьформальные модели промышленного уровня сложности, однако чтобы эффективнопользоваться ими часто тоже требуется очень специфический набор навыков и знаний(в специфических разделах математической логики и алгебры).Тем не менее, в ряде областей, где последствия ошибки в системе могут оказатьсячрезвычайно дорогими, формальные методы верификации активно используются.Они способны обнаруживать сложные ошибки, практически не выявляемые спомощью экспертиз или тестирования.
Кроме того, формализация требований ипроектных решений возможна только при их глубоком понимании, и поэтомувынуждает провести тщательнейший их анализ, для чего часто необходимасовместная работа специалистов по формальным методам и экспертов в предметнойобласти.В последние 15-20 лет появились основанные на формальных методах инструменты,решающие ряд задач верификации функциональных требований, но зато способныеэффективно работать в промышленных проектах.Гораздо чаще, чем к программам, формальные методы верификации на практикеприменяются к аппаратному обеспечению. Их использование в этой области имеетболее долгую историю, что привело к созданию более зрелых методик иинструментов. Это обусловлено более высокой стоимостью ошибок для аппаратногообеспечения, более однородной его структурой и более простыми базовымиэлементами моделей аппаратного обеспечения, более широким многократнымиспользованием проектной информации.Приведенная классификация методов верификации не является полностью строгой.
Запоследнее десятилетие активно развиваются инструменты верификации ПО, использующиетехники, относящиеся одновременно к нескольким из перечисленных пунктов. В качествепримеров таких методов можно привести следующие: расширенный статический анализ,построение полных тестов на основе формальных моделей, синтетическое структурноетестирование.Тестирование на основе формальных моделей [2,3] использует для построения тестовформальные модели требований к ПО и принятых проектных решений.
В рамках тестовпроверяются ограничения, описанные в моделях, а критерий полноты, на базе которогостроится набор тестов, обычно использует структуру модели и имеет формальноеобоснование, позволяющее утверждать, что при соблюдении определенных гипотез (обычнокасающихся представимости реального поведения в выбранном формализме,ограниченности реализации, т.е., отсутсвия в ней неограниченно сильно отличающихся отмодели элементов поведения, и ее однородности, т.е., отсутсвия в ней большого количестванезатрагиваемых моделью деталей) такой набор тестов действительно способен выявить всеошибки (все отклонения в поведении тестируемой реализации от модели).Расширенный статический анализ [4] (extended static checking) использует формальныеспецификации поведения отдельных функций и операций и дедуктивный анализ дляпроверки выполнения этих спецификаций кодом.Синтетическое структурное тестирование [5-8] использует элементы формальныхспецификаций и статического анализа для генерации тестов, на основе результатов работыкоторых, опять же, может быть проведен более глубокий статический анализ.
Наиболеешироко известным представителем этой группы техник является метод DART (DirectedAutomated Random Testing) [7,8].Определение тестированияДля тестирования в литературе можно найти много определений, выделяющих несколькоразличающиеся понятия, например, следующие.• Процесс выполнения программы с намерением найти ошибки (Glenford J. Myers [9]).• Любая деятельность, направленная на оценку некоторых характеристик программногообеспечения и проверку того, что они соответствуют требуемым результатам (WilliamC.