УДК 004.4(06) Технологии разработки программных систем М.А. СУДЬБИН Московский инженерно-физический институт (государственный университет) ПРОБЛЕМЫ СБОРА СТРУКТУРНЫХ ПОКРЫТИЙ ПРИ ВЕРИФИКАЦИИ ПРОГРАММНОГО КОДА Рассматривается процедура сбора структурного покрытия в рамках верификации программного обеспечения. Ставится задача о сокращении объемов хранения и времени интерпретации данных с помощью представления кода в виде соответствующей модели. Одним из этапов верификации программного обеспечения является процедура сбора и анализа структурного покрытия кода. В таких отраслях как авионика этот этап имеет первостепенную важность и жестко регламентируется соответствующими стандартами[1, 2]. В соответствии со стандартами выделяются четыре различных уровня покрытия: покрытие требований; покрытие всех операторов кода; покрытие всех условий в коде; независимое покрытие всех логических переменных, входящих в условия. Вне зависимости от уровня, процедуру структурного покрытия можно условно разбить на три части: накопление, хранение и интерпретацию данных о покрытии. При значительном объеме кода и большом числе тестовых примеров количество хранимых данных становится гигантским, а их интерпретация становится непрозрачной и мало эффективной. На практике, при объеме исходного кода в десять мегабайт и количестве тестов порядка тысячи, использование существующих инструментов сбора покрытия приводит к появлению соответствующей отчетности размером до нескольких гигабайт, а то и до десятков гигабайт. Детальная интерпретация отчетов такого размера становится слишком трудоемкой и нецелесообразной. С другой стороны, процедура сбора структурного покрытия не требует исчерпывающих данных об исходном коде, важны лишь вполне определенные его свойства. Поэтому, предлагается рассматривать исходный код в рамках некоторой модели, которая бы учитывала только необходимые свойства исходного кода, тем самым позволяя существенно уменьшить количество хранимой информации и упростить ее интерпретацию. ISBN 5-7262-0555-3. НАУЧНАЯ СЕССИЯ МИФИ-2005. Том 2 53 УДК 004.4(06) Технологии разработки программных систем Эта модель должна обладать следующими основными свойствами: 1. выделять все точки ветвления программы и декомпозировать код до конечных операторов, при этом семантика операторов не важен и учитываться не должен; 2. выделять каждое условие и описывать его с нужной степенью детализации; 3. накапливать информацию о собранном покрытии и трассировать каждый тестовый пример на соответствующий элемент структурного покрытия; 4. выделять принципиально непокрываемые участки кода и не рассматривать их при накоплении информации и трассировке. Свойства 1 и 2 непосредственно вытекают из требований к процедуре сбора структурного покрытия. Модель должна учитывать специфику процедуры и хранить информацию для каждого уровня покрытия оптимальным образом. Свойства 3 и 4 принципиальны для практического применения предлагаемой модели, так как одной из основных целью сбора структурного покрытия является локализация непокрытых, а значит не проверенных участков кода и выявления причин такого непокрытия [3]. В дальнейшем обычно требуется определить тестовые примеры а так же требования соответствующие непокрытым участкам кода, поэтому трассируемость выделена как одно из ключевых свойств предлагаемое модели. В докладе обсуждается практический опыт применения данного подхода при верификации программного обеспечения бортовых систем. Рассматривается результативность использования модели в случае различных уровней покрытия и определяются возможные пути дальнейшего развития этой идеи. Список литературы 1. Требования к программному обеспечению бортовой аппаратуры и систем при сертификации авиационной техники (КТ-178А). Межгосударственный Авиационный Комитет, Авиационный Регистр, 1997. 2. Software Considerations in Airborne Systems and Equipment Certification (DO-178B), RTCA Inc., 1992 3. Г. Майерс. Надежность программного обеспечения. М.: МИР, 1980 ISBN 5-7262-0555-3. НАУЧНАЯ СЕССИЯ МИФИ-2005. Том 2 54