Покрытие на уровне исходных текстов и на уровне машинных кодов

В некоторых случаях инструментальные средства сбора покрытия анализируют покрытие программного кода тестами не на уровне исходных текстов системы, а на уровне машинных инструкций. В этом случае степень покрытия зависит и от того, какой исполняемый код генерируется компилятором. Отчеты о покрытии в этом случае выглядят следующим образом (отчет о покрытии сгененирован при помощи отладчика 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,

CC2 = 251,

CC3 = 252

} E_CC;

E_CC key;

switch (key) {

case CC1: printf(“CC1”); break;

case CC2: printf(“CC2”); break;

case CC3: printf(“CC3”); break;

}

компилятор Microtec C для Motorola 680x0 создаст таблицу возможных значений переменной key, в которой будут присутствовать все элементы от 0 до 255. Реально в программной системе возможно передать только значения констант CC1 – CC3, в результате покрытыми окажутся только три ветки из 255 возможных в исполняемом коде. Никакими стандартными средствами увеличить степень такого покрытия нельзя. В этом случае отчет о покрытии сопровождается дополнительной информацией о причинах невозможности обеспечить полное покрытие.

Сбор информации о покрытии на уровне исполняемого кода наиболее часто применяется в высококритичных программных системах, в которых не допускается наличия «мертвого» исполняемого кода, который потенциально может привести к сбою или отказу во время работы системы. К таким системам в первую очередь можно отнести авиационные бортовые системы, медицинские системы и системы обеспечения безопасности информации.


Понравилась статья? Добавь ее в закладку (CTRL+D) и не забудь поделиться с друзьями:  



double arrow
Сейчас читают про: