WWW.DISSERS.RU

БЕСПЛАТНАЯ ЭЛЕКТРОННАЯ БИБЛИОТЕКА

   Добро пожаловать!


Pages:     || 2 | 3 | 4 | 5 |   ...   | 14 |
МЕТОДЫ ВЕРИФИКАЦИИ ПРОГРАММНОГО ОБЕСПЕЧЕНИЯ В.В. Кулямин Институт системного программирования РАН 109004, г. Москва, ул. Б. Коммунистическая, д. 25 Аннотация. В данной работе представлен обзор методов верификации программного обеспечения (ПО). Верификацией называется проверка соответствия результатов отдельных этапов разработки программной системы требованиям и ограничениям, сформулированным для них на предыдущих этапах. Рассматривается контекст использования различных методов контроля качества и, в частности, верификации в рамках жизненного цикла ПО. Представлено содержание международных стандартов ISO и IEEE, регулирующих проведение различных видов верификации при разработке программ. Предлагается классификация известных методов верификации, полученная обобщением сложившейся практики позиционирования работ в этой области. В рамках предложенной системы рассматриваются как зрелые и широко применяемые при промышленной разработке методы верификации ПО, так и недавно созданные и используемые пока только в рамках исследовательских проектов. Обзор включает методы статического анализа программ, методы проведения инспекций и экспертиз, техники анализа архитектуры ПО, методы проверки моделей и дедуктивного анализа корректности ПО, а также методы динамической верификации — тестирование и верификационный мониторинг.

Рассматриваются инструменты поддержки верификации ПО.

Annotation. The paper presents review of software verification methods. By verification we mean conformance checking of results of separate phases of software development to requirements and restrictions stated for these results on previous phases. The article considers use of quality control methods, including verification methods, in software development lifecycle. It also presents contents of international standards of ISO and IEEE 1 regulating verification activities in software development. The paper gives classification of verification methods based on current practice of research work positioning in this area. This classification used to review both mature verification methods, widely used in industrial software development, and research ones developed only recently. The review includes methods of static analysis, software review and inspection techniques, methods of software architecture analysis, model checking and theorem proving, along with dynamic verification methods — testing and monitoring. Tool support for each considered method is also discussed.

Содержание Введение................................................................................................................................ 1. Основные понятия............................................................................................................ 1.1. Верификация и валидация........................................................................................ 1.2. Характеристики качества программного обеспечения.......................................... 2. Место верификации в жизненном цикле ПО.............................................................. 2.1. Задачи верификации в рамках жизненного цикла ПО........................................ 2.2. Верификация и другие процессы разработки и сопровождения ПО................. 2.3. Верификация различных артефактов жизненного цикла ПО............................. 2.4. Международные стандарты, касающиеся верификации ПО.............................. 3. Методы верификации программного обеспечения..................................................... 3.1. Экспертиза............................................................................................................... 3.1.1. Оценка ПО по Фагану...................................................................................... 3.1.2. Другие виды общих экспертиз........................................................................ 3.1.3. Специализированные методы экспертиз....................................................... 3.1.4. Методы анализа архитектуры ПО.................................................................. 3.2. Статический анализ................................................................................................. 3.3. Формальные методы верификации........................................................................ 3.3.1. Логико-алгебраические модели...................................................................... 3.3.2. Исполнимые модели........................................................................................ 3.3.3. Модели промежуточного типа........................................................................ 3.3.4. Классификация формальных методов............................................................ 3.3.5. Методы и инструменты дедуктивного анализа............................................. 3.3.6. Методы и инструменты проверки моделей................................................... 3.3.7. Методы и инструменты проверки согласованности..................................... 3.4. Динамические методы верификации..................................................................... 3.4.1. Мониторинг...................................................................................................... 3.4.2. Тестирование.................................................................................................... 3.4.3. Виды тестирования.......................................................................................... 3.4.4. Критерии полноты тестирования.................................................................... 3.4.5. Техники построения тестов............................................................................. 3.4.6. Инструменты автоматизации тестирования.................................................. 3.5. Синтетические методы........................................................................................... 3.5.1. Тестирование на основе моделей.................................................................... 3.5.2. Мониторинг формальных свойств ПО........................................................... 3.5.3. Статический анализ формальных свойств..................................................... 3.5.4. Синтетические методы генерации структурных тестов............................... Заключение......................................................................................................................... Литература.......................................................................................................................... Введение Информационные технологии являются одним из основных элементов инфраструктуры современного общества. Они служат базой для экономической деятельности и социального и культурного развития человечества, обеспечивая людям доступ к огромным массивам разнообразной информации и связывая их друг с другом, где бы они не находились.



Любая информационная система состоит из аппаратного и программного обеспечения (ПО). В начале развития компьютерной техники аппаратная часть была более сложной и значительно более дорогостоящей, стоимость программной части оценивалась примерно в 5% стоимости всей системы. Однако гибкость программного обеспечения и (как оказалось впоследствии, обманчивая) простота внесения в него изменений побуждали использовать его для решения разнообразнейших задач на одном и том же или стандартизированном аппаратном обеспечении. Поэтому постепенно ПО усложнялось, приобретало все большую ценность, и в последние десятилетия его стоимость достигает от 30% до 90% стоимости систем, в зависимости от их типа [1].

Совокупные затраты на создание, развитие и поддержку ПО уже превосходят соответствующие затраты на аппаратное обеспечение [2]. Сложность же современных программных комплексов такова, что многие исследователи считают их самыми сложными системами, созданными человеком [3].

Возрастающая сложность ПО приводит к увеличению количества ошибок в нем, а одновременный рост количества и критичности выполняемых им функций влечет рост ущерба от этих ошибок. Оценки потерь одной экономики США от некачественного программного обеспечения дают около 60 миллиардов долларов в год [4]. Известны также примеры серьезных ошибок в ПО, приведших к потере человеческих жизней, космических аппаратов или к масштабным нарушениям работы инфраструктурных сетей [5-11]. Одна из первых хорошо описанных ошибок такого рода — ошибка в системе управления космическим аппаратом Mariner 1 [5], которая привела к потере этого аппарата 22 июля 1962 года. Ошибка заключалась в том, что в одном месте была пропущена операция усреднения скорости корабля по нескольким последовательно измеренным значениям. В результате колебания значения скорости, вызванные ошибками измерений, стали рассматриваться системой как реальные, и она попыталась предпринять корректирующие действия, которые привели к полной неуправляемости аппарата. Именно после этого инцидента управление военновоздушных сил США приняло решение использовать в процессе разработки ПО экпертизу кода — его просмотр и анализ другими людьми, помимо самого разработчика.

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

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

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

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

Однако можно определить набор понятий, в терминах которых описывается любая такая структура — это, прежде всего, виды деятельности, роли и артефакты.

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





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

Артефактами жизненного цикла ПО называются различные информационные сущности, документы и модели, создаваемые или используемые в ходе разработки и сопровождения ПО. Так, артефактами являются техническое задание, описание архитектуры, модель предметной области на каком-либо графическом языке, исходный код, пользовательская документация и т.д. Различные модели, используемые отдельными разработчиками при создании и анализе ПО, но не зафиксированные в виде доступных другим людям документов, не могут считаться артефактами.

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

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

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

Различие между верификацией и валидацией проиллюстрировано на Рис. 1.

Стандарты, нормы, правила Нужды и потребности пользователей Процессы разработки Требования Исходный код Работающее ПО Проектные решения Верификация Валидация Рисунок 1. Соотношение верификации и валидации.

Приведенные определения получены некоторым расширением определений из стандарта IEEE 1012 на процессы верификации и валидации [12]. В стандартном словаре терминов программной инженерии IEEE 610.12 1990 года [13] определение верификации по смыслу примерно то же, а определение валидации несколько другое — там говорится, что валидация должна проверять соответствие полученного в результате разработки ПО исходным требованиям к нему. В этом случае валидация являлась бы частным случаем верификации, что нигде в литературе по программной инженерии не отмечается, поэтому, а также потому, что оно поправлено в IEEE 1012 2004 года, это определение следует считать неточным. Частое использование фразы B. Boehm’а [14]:

«Верификация отвечает на вопрос "Делаем ли мы продукт правильно", а валидация — на вопрос "Делаем ли мы правильный продукт"» также добавляет путаницы, поскольку афористичность этого высказывания, к сожалению, сочетается с двусмысленностью. Однако многочисленные труды его автора позволяют считать, что он подразумевал под верификацией и валидацией примерно те же понятия, которые определены выше.

Указанные разночтения можно проследить и в содержании стандартов программной инженерии. Так, стандарт ISO 12207 [15] считает тестирование разновидностью валидации, но не верификации, что, по-видимому, является следствием использования неточного определения из стандартного словаря [13].

В среде исследователей, занимающихся теоретической информатикой (computer science), широко распространено более узкое понимание термина «верификация» — только как формальной верификации. В данном обзоре мы будем пользоваться более широким, инженерным понятием, хотя различные методы формальной верификации тоже будут рассмотрены.

Pages:     || 2 | 3 | 4 | 5 |   ...   | 14 |










© 2011 www.dissers.ru - «Бесплатная электронная библиотека»

Материалы этого сайта размещены для ознакомления, все права принадлежат их авторам.
Если Вы не согласны с тем, что Ваш материал размещён на этом сайте, пожалуйста, напишите нам, мы в течении 1-2 рабочих дней удалим его.