88
условие приняло значение False, при этом значения всех последующих условий не
учитываются (это отображается символом X).
Третий столбец – это вырезка текста логического условия, позволяющая легче
ориентироваться в коде при анализе покрытия.
Из получившейся таблицы видно, что второе и третье логическое условие в процессе
выполнения не принимали значения False. Определение причины этого и является задачей
анализа структурного покрытия.
После того, как в рамках данного модуля будут рассмотрены все функции,
рассматривается следующий модуль, и так далее. Как видно, структура отчетного файла,
получаемого в результате работы CodeTEST, достаточно проста и имеет вложенную
структуру.
Отчеты о покрытиях, создаваемые Microsoft Visual Studio Team Edition будут
рассмотрены на семинарских занятиях.
4.6.3. Покрытие на уровне исходных текстов и
на уровне машинных
кодов
В некоторых случаях инструментальные средства сбора покрытия анализируют
покрытие программного кода тестами не на уровне исходных текстов системы, а на
уровне машинных инструкций. В этом случае степень покрытия зависит и от того, какой
исполняемый код генерируется компилятором. Отчеты о покрытии в этом случае
выглядят следующим образом (
отчет о покрытии сгененирован при помощи отладчика
Microtec XRAY для Motorola 680x0):
******* INSTRUCTION EXECUTION COVERAGE - Analyze Unit: Menu_Display
Function: DATA_PROCESSING\Menu_Display. Instruction(s) not executed:
5668 switch (Key)
0004A0F6 0352 BCHG D1,(A2)
0004A102 0466 0466 SUBI.W #$466,-(A6)
0004A106 0466 0466 SUBI.W #$466,-(A6)
0004A10A 0466 0466 SUBI.W #$466,-(A6)
0004A10E 0466 0466 SUBI.W #$466,-(A6)
0004A112 0466 0466 SUBI.W #$466,-(A6)
0004A116 0466 0474 SUBI.W #$474,-(A6)
5751 i = 1;
0004A4A6 7401 MOVEQ #$1,D2
Executed Total Percent Analyze-unit
467 475 98.32 DATA_PROCESSING\Menu_Display
0 unit(s) excluded.
******* BRANCH EXECUTION COVERAGE - Analyze Unit: Menu_Display
Function: DATA_PROCESSING\Menu_Display. Branch(es) not executed:
5612 if ( First_Call == TRUE ) { /* Only execute this block during th
00049E3A 6600 0722 BNE.W $4A55E Branch not taken.
5613 if ( MP_Rd_Config_Straps ( RAW_STRAPS, &Strap_Config ) ==
00049E52 664A BNE.B $49E9E Branch not taken.
5750 if (i == 17)
0004A4A4 6602 BNE.B $4A4A8 Fall thru not taken.
Executed Total Percent Analyze-unit
74 77 96.10 DATA_PROCESSING\Menu_Display
0 unit(s) excluded.
Поскольку степень покрытия может меняться в зависимости от оптимизации при
генерации кода, в некоторых случаях даже при полном выполнении всех операторов
языка высокого уровня на котором написана программная система, не удается достичь
полного покрытия на уровне исполняемого кода.
Например, в случае покрытия следующей конструкции на языке C:
typedef enum
{
CC1 = 250,