Линейная кодовая последовательность и переход
Линейная последовательность и переход кода ( LCSAJ ), в широком смысле, — метод программного анализа, используемый для идентификации структурных единиц в тестируемом коде. Его основное использование связано с динамическим анализом программного обеспечения, чтобы помочь ответить на вопрос «Какого объема тестирования достаточно?». [1] Динамический анализ программного обеспечения используется для измерения качества и эффективности данных тестирования программного обеспечения, при этом количественная оценка выполняется в единицах структурных единиц тестируемого кода. При использовании для количественной оценки структурных единиц, задействованных в заданном наборе тестовых данных, динамический анализ также называется анализом структурного покрытия .
В более узком смысле LCSAJ — это четко определенная линейная область программного кода. В этом смысле LCSAJ также называют JJ-path , что означает путь перехода.
История
[ редактировать ]Метод анализа LCSAJ был разработан профессором Майклом Хеннеллом для оценки качества математических библиотек, от которых зависели его области ядерной физики исследования в в Ливерпульском университете . [2] [3] Позже профессор Хеннелл основал компанию Liverpool Data Research Associates (LDRA) для коммерциализации испытательного стенда программного обеспечения, созданного для этой работы, в результате чего был создан продукт LDRA Testbed .
LCSAJ был представлен в 1976 году. [4] теперь также называется путем перехода к переходу (JJ-путь). [5] Его также назвали «Вкладом Ливерпуля в глупые аббревиатуры и шутки». [ нужна ссылка ]
Определение и характеристики LCSAJ как кодового региона
[ редактировать ]LCSAJ — это фрагмент пути программного кода, состоящий из последовательности кода (линейной кодовой последовательности), за которой следует переход потока управления, и состоит из следующих трех элементов: [6]
- начало линейной последовательности исполняемых операторов
- конец линейной последовательности
- целевая линия, на которую передается поток управления в конце линейной последовательности.
В отличие от (максимальных) базовых блоков , LCSAJ могут перекрываться друг с другом, поскольку переход (выход) может произойти в середине LCSAJ, хотя в середине базового блока он не допускается. В частности, условные переходы генерируют перекрывающиеся LCSAJ: один, который проходит до момента, когда условие оценивается как ложное, и другой, который заканчивается в переходе, когда условие оценивается как истинное (пример, приведенный ниже в этой статье, иллюстрирует такое возникновение). Согласно монографии 1986 года, LCSAJ обычно были в четыре раза больше базовых блоков. [7]
Формальное определение LCSAJ можно дать с точки зрения основных блоков следующим образом: [8]
последовательность из одного или нескольких последовательно пронумерованных базовых блоков p , ( p +1), ..., q кодовой единицы, за которой следует переход потока управления либо из кода [единицы], либо к базовому блоку с номером r , где r ≠( q +1), и либо p = 1, либо существует переход потока управления на блок p из какого-либо другого блока в модуле. (Базовый блок, к которому может быть выполнен такой переход потока управления, называется целью перехода [LCSAJ].)
Согласно учебнику Йоргенсена 2013 года, за пределами Великобритании и литературы ISTQB то же самое понятие называется DD-path . [9] [ сомнительно – обсудить ]
Коэффициент эффективности теста
[ редактировать ]Показатели анализа покрытия используются для оценки объема проведенного тестирования. Самый основной показатель — это доля выполненных операторов, Коэффициент эффективности тестирования 1 (TER1): [10]
Также могут быть сгенерированы показатели покрытия более высокого уровня, в частности: [11]
Эти показатели удовлетворяют чистой иерархии: при достижении TER3 = 100% следует, что TER2 = 100% и TER1 = 100% также были достигнуты.
Обе метрики TER1 и TER2 использовались в начале 1970-х годов, а третья датируется концом 1970-х годов. Требование достижения TER1 = 100% было уровнем, первоначально выбранным для стандарта авионики DO-178, пока в 1992 году он не был дополнен дополнительным требованием MCDC ( модифицированное покрытие условий/решений ). [12] Более высокие уровни TER3 = 100% были предусмотрены для многих других проектов, включая аэрокосмическую, телефонную и банковскую сферу. [ нужна ссылка ] Одна из практических проблем использования TER3 заключается в том, что многие LCSAJ никогда не могут быть выполнены из-за содержащихся в них конфликтующих условий.
Пример
[ редактировать ]Рассмотрим следующий код C:
#include <stdlib.h>
#include <string.h>
#include <math.h>
#define MAXCOLUMNS 26
#define MAXROW 20
#define MAXCOUNT 90
#define ITERATIONS 750
int main (void)
{
int count = 0, totals[MAXCOLUMNS], val = 0;
memset (totals, 0, MAXCOLUMNS * sizeof(int));
count = 0;
while ( count < ITERATIONS )
{
val = abs(rand()) % MAXCOLUMNS;
totals[val] += 1;
if ( totals[val] > MAXCOUNT )
{
totals[val] = MAXCOUNT;
}
count++;
}
return (0);
}
Из этого примера видно, что базовый блок, идентифицируемый тройкой LCSAJ, может охватывать точку принятия решения, отражая условия, которые должны иметь место для выполнения LCSAJ. Например, LCSAJ 2 для приведенного выше примера включает в себя while
заявление, в котором условие (count < ITERATIONS)
оценивается как истина.
С каждой строкой кода связана «плотность» LCSAJ; строка 17, например, появляется в 6 уникальных LCSAJ, т.е. ее плотность LCSAJ равна 6. Это полезно при оценке удобства сопровождения кода; Если необходимо изменить строку кода, то плотность указывает на то, на сколько LCSAJ повлияет это изменение.
Уровень покрытия TER3 = 100% будет достигнут, если используемые тестовые данные вызовут выполнение каждого из этих LCSAJ хотя бы один раз.
Ссылки
[ редактировать ]- ^ М.А.Хеннелл, Д.Хедли и М.Р.Вудворд, «Количественная оценка эффективности тестов программ Algol 68», Материалы конференции Strathclyde ALGOL 68, 1977, стр. 36–41, ISSN 0362-1340
- ^ М. А. Хеннелл, Экспериментальный стенд для численного программного обеспечения. {Я}. {Фортран} , Компьютерный журнал 21 (4): 333–336, ноябрь 1978 г.
- ^ М. А. Хеннелл и Д. Хедли, Экспериментальный стенд для численного программного обеспечения. {II}. {АЛГОЛ 68} , Компьютерный журнал 22(1):53--56, февраль 1979 г.
- ^ М. А. Хеннелл, М. Р. Вудворд и Д. Хедли, «Об анализе программ», Information Processing Letters, 5 (5), стр. 136–140, 1976 г.
- ^ М. Р. Вудворд, М. А. Хеннелл, «О взаимосвязи между двумя критериями покрытия потока управления: всеми JJ-путями и MCDC», Information and Software Technology 48 (2006), стр. 433–440.
- ^ М.А.Хеннелл, Д.Хедли и И.Дж.Ридделл, «Оценка класса программных инструментов», Материалы 7-й Международной конференции по разработке программного обеспечения, март 1984 г., стр. 266–277. ISSN 0270-5257
- ^ Мартин А. Ульд и Чарльз Анвин, изд. (1986). Тестирование в разработке программного обеспечения . Издательство Кембриджского университета. п. 102. ИСБН 978-0-521-33786-1 .
- ^ Гроенда, Хеннинг (2013). Сертификация технических характеристик компонентов программного обеспечения . КИТ Научное издательство. стр. 198–200. ISBN 978-3-7315-0080-3 . цитирую из Йейтс, Д.Ф. (2009). «Включение, разделение, JJ-пути и тестирование структурированного пути: исправление». Тестирование, проверка и надежность программного обеспечения . 19 (3): 199–213. дои : 10.1002/stvr.400 .
- ^ Пол С. Йоргенсен (2013). Тестирование программного обеспечения: подход мастера, четвертое издание . ЦРК Пресс. п. 136. ИСБН 978-1-4665-6068-0 .
- ^ JRBrown, «Практическое применение автоматизированных программных средств», отчет TRW № TRW-SS-72-05, представленный на WESCON, 1972 г.
- ^ М.Р.Вудворд, Д.Хедли и М.А.Хеннелл, «Опыт анализа путей и тестирования программ», Транзакции IEEE по разработке программного обеспечения, Vol. 6, № 3, стр. 278–286, май 1980 г.
- ^ Вопросы программного обеспечения при сертификации бортовых систем и оборудования - RTCA/DO-178B, RTCA Inc., Вашингтон, округ Колумбия, декабрь 1992 г.