Опубликован: 28.11.2007 | Уровень: специалист | Доступ: платный | ВУЗ: Национальный исследовательский ядерный университет «МИФИ»
Лекция 8:

Документация, сопровождающая процесс верификации и тестирования (отчеты)

Рассмотрим более подробно каждую из характеристик.

True-false decisions - количество логических выражений, в данном случае их 1405. Из этого числа на оба возможных значения ( True и False ) покрыто лишь 674, еще 494 покрыто на какое-то одно из значений, а 237 не покрыто вообще.

Conditions in the decisions - количество логических условий внутри логических выражений. Как можно догадаться, их количество не может быть меньше количества логических выражений. Непокрытие логических условий явным образом влечет за собой непокрытие логических выражений. Факт, что если все условия будут покрыты, то все выражения также будут покрыты.

Case branches - количество веток ветвления операторов выбора ( select ). Ветка считается покрытой, если выражение, стоящее в условии оператора select, принимает значение, соответствующее данному варианту выбора ( case ), в результате чего ветка выполняется.

Coverage events - в данном случае, это количество точек входа / выхода в функциях. Точка входа в функцию считается покрытой, если эта функция была вызвана хотя бы один раз. Точками выхода являются точка окончания функции ( } ), когда управление передается в место вызова этой функции, а также операторы возврата ( return ), после выполнения которых управление также передается в место вызова функции.

Затем выводится информация для первого модуля, а именно: имя модуля, путь к файлу на диске, дата последнего изменения, контрольная сумма. После этого выводится суммарная информация о покрытии только для этого модуля (для всех его функций, количество которых также указывается). Структура этой информации аналогична структуре, описанной выше:

1. File <Module_1_name.cpp> in <Path_to_module_1>
    Last Modified: Fri Oct 15 18:34:14 2004
    Checksum: CEDBAB67

    File Summary (Extended MCDC): 6 Functions
       24 true-false decisions
           10  41.7%  covered
           11  45.8%  partially covered
            3  12.5%  not covered
       39 conditions in the decisions
           20  51.3%  covered
           15  38.5%  partially covered
            4  10.3%  not covered
        0 case branches
       12 coverage events
           12 100.0%  covered
            0   0.0%  not covered

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

COVERED - участок полностью покрыт в понятиях типа, к которому он приписан;

PARTIALLY covered - участок частично покрыт. Применимо только к логическим выражениям и условиям и указывает на то, что выражение (условие) покрыто на какое-то одно из двух возможных значений;

NOT covered - участок не покрыт. Это означает, что данный участок не выполнялся в процессе работы скомпилированного программного кода.

Ниже представлен типичный результат покрытия для функции.

1.1 Function <Function_1>
        void Function_1(void)

        Function Summary (MCDC):
            3 true-false decisions
                0   0.0%  covered
                2  66.7%  partially covered
                1  33.3%  not covered
            5 conditions in the decisions
                1  20.0%  covered
                3  60.0%  partially covered
                1  20.0%  not covered
            0 case branches
            2 coverage events
                2 100.0%  covered
                0   0.0%  not covered

        coverage line 266: function entry
            COVERED

        decision line 267: if statement
            if ((A == B) && (...

             T     F
         1: *ttt  *fxx  ((A == ...)&&    COVERED
         2: *ttt   tfx  ((C...)&&        PARTIALLY covered
         3: *ttt   ttf  ((D == 0)        PARTIALLY covered

        decision line 271: if statement
            if (E <= 0)

             T   F
         1:  t  *f  (E <= 0)   PARTIALLY covered

        decision line 276: if statement
            if (D == 0)

             T   F
         1:  t   f  (D...)   NOT covered

        coverage line 291: function end
            }
            COVERED

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

if ((A==B) && (C > 0) && (D == 0))

и пусть результат покрытия для него такой, как приведен выше ( decision line 267: if statement ). Для этого выражения строится таблица, где в каждой строке помещается информация для каждого из логических условий, входящих в это логическое выражение. Нумерация логических условий начинается с 1, в нашем случае их 3.

В первом столбце указывается комбинация значений логических условий (с участием рассматриваемого условия), которую необходимо выставить, чтобы логическое выражение приняло значение True. В данном случае, так как все условия соединены логическим оператором "И" ( && ), такой комбинацией может быть только TTT. Если указанная комбинация была сформирована в процессе тестирования программы, то она помечается символом ( * ).

Во втором столбце указывается комбинация значений логических условий (с участием рассматриваемого условия), которую необходимо выставить, чтобы логическое выражение приняло значение False. В данном случае достаточно, чтобы хотя бы одно условие приняло значение False, при этом значения всех последующих условий не учитываются (это отображается символом X ).

Третий столбец - это вырезка текста логического условия, позволяющая легче ориентироваться в коде при анализе покрытия.

Из получившейся таблицы видно, что второе и третье логическое условие в процессе выполнения не принимали значения False. Определение причины этого и является задачей анализа структурного покрытия.

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

Отчеты о покрытиях, создаваемые Microsoft Visual Studio Team Edition, будут рассмотрены на семинарских занятиях.

Илья Макаренко
Илья Макаренко

Добрый день.

Вопрос №1

Какова стоимость получения диплома о мини-МБА по данному курсу? Или ориентироваться на указанную на сайте?

Вопрос №2

Возможно ли начать обучение без потери результатов, не отправив документы на зачисление, а отправку выполнить позже?

Александр Медов
Александр Медов

Здравствуйте, какова полная сумма предоставленной услуги с печатью документа и отправкой по почте?

Денис Сафронов
Денис Сафронов
Россия
жылдыз насырбекова
жылдыз насырбекова
Киргизия, бишкек