WikiDer > Последовательность линейного кода и прыжок
Последовательность линейного кода и прыжок (LCSAJ) в широком смысле - это метод анализа программного обеспечения, используемый для выявления структурных единиц в тестируемом коде. Его основное использование - с динамическим анализом программного обеспечения, чтобы помочь ответить на вопрос «Сколько тестов достаточно?».[1] Динамический анализ программного обеспечения используется для измерения качества и эффективности данных тестирования программного обеспечения, где количественная оценка выполняется с точки зрения структурных единиц тестируемого кода. При использовании для количественной оценки структурных единиц, выполняемых заданным набором тестовых данных, динамический анализ также называется анализ структурного покрытия.
В более узком смысле LCSAJ - это четко определенная линейная область кода программы. В этом смысле LCSAJ также называется JJ-путь, обозначающие траекторию прыжка в прыжок
История
Метод анализа LCSAJ был разработан профессором Майкл Хеннелл для выполнения оценки качества математических библиотек, в которых он ядерная физика исследования в Ливерпульский университет зависело.[2][3] Позже профессор Хеннелл основал Liverpool Data Research Associates (LDRA) для коммерциализации испытательного стенда программного обеспечения, созданного для этой работы, в результате чего Стенд LDRA товар.
Представленный в 1976 году, LCSAJ[4] теперь также называется траекторией перехода к скачку (JJ-path).[5] Его также называют вкладом Ливерпуля в глупые сокращения и анекдоты.[нужна цитата]
Определение и характеристика LCSAJ как кодовой области
LCSAJ - это фрагмент программного кода, состоящий из последовательности кода (линейной кодовой последовательности), за которой следует переход потока управления, и состоит из следующих трех элементов:[6]
- начало линейной последовательности исполняемых операторов
- конец линейной последовательности
- целевая линия, на которую передается поток управления в конце линейной последовательности.
В отличие от (максимального) базовые блокиLCSAJ могут перекрываться друг с другом, потому что переход (выход) может происходить в середине LCSAJ, в то время как он не разрешен в середине базового блока. В частности, условные переходы генерируют перекрывающиеся LCSAJ: один, который проходит до того места, где условие оценивается как ложное, а другой, который заканчивается при переходе, когда условие оценивается как истинное (пример, приведенный ниже в этой статье, иллюстрирует такой случай). Таким образом, каждый базовый блок является LCSAJ, но LCSAJ может состоять более чем из одного базового блока. Согласно монографии 1986 года, LCSAJ обычно были в четыре раза больше, чем базовые блоки.[7]
Формальное определение LCSAJ может быть дано в терминах основных блоков следующим образом:[8]
последовательность из одного или нескольких последовательно пронумерованных базовых блоков, п, (п+1), ..., q, кодового блока, за которым следует переход потока управления либо из кода [unit], либо к базовому блоку с номером р, куда р≠(q+1), и либо п= 1 или существует переход потока управления в блок п из другого блока в блоке. (Базовый блок, к которому может быть выполнен такой переход потока управления, называется целью перехода [LCSAJ].)
Согласно учебнику Йоргенсена 2013 г., за пределами Великобритании и ISTQB литературе то же понятие называется DD-путь.[9][сомнительный ]
Коэффициент эффективности теста
Метрики анализа покрытия используются для оценки результатов тестирования. Самая основная метрика - это доля выполненных заявлений, коэффициент эффективности теста 1 (TER1):[10]
Также могут быть созданы показатели покрытия более высокого уровня, в частности:[11]
Эти показатели удовлетворяют чистой иерархии, согласно которой при достижении TER3 = 100% следует, что TER2 = 100% и TER1 = 100% также были достигнуты.
Метрики TER1 и TER2 использовались в начале 1970-х годов, а третья датируется концом 1970-х годов. Требование для достижения TER1 = 100% было уровнем, изначально выбранным для стандарта авионики DO-178, пока он не был дополнен MCDC (модифицированное покрытие условий / решений) дополнительное требование в 1992 г.[12] Более высокие уровни TER3 = 100% требуются для многих других проектов, включая аэрокосмическую, телефонную и банковскую.[нужна цитата] Одна практическая проблема использования TER3 заключается в том, что многие LCSAJ никогда не могут быть выполнены из-за конфликтующих условий, которые они содержат.
Пример
Рассмотрим следующий код C:
1 #включают <stdlib.h> 2 #включают <string.h> 3 #включают <math.h> 4 5 #define MAXCOLUMNS 26 6 #define MAXROW 20 7 #define MAXCOUNT 90 8 #define ИТЕРАЦИИ 750 9 10 int главный (пустота)11 {12 int считать = 0, итоги[MAXCOLUMNS], вал = 0;13 14 мемсет (итоги, 0, MAXCOLUMNS * размер(int));15 16 считать = 0;17 пока ( считать < ИТЕРАЦИИ )18 {19 вал = пресс(ранд()) % MAXCOLUMNS;20 итоги[вал] += 1;21 если ( итоги[вал] > MAXCOUNT )22 {23 итоги[вал] = MAXCOUNT;24 }25 считать++;26 }27 28 возвращаться (0);29 30 }
Ниже приведен полный список троек LCSAJ для этого кода.
Номер LCSAJ | Стартовая линия | Финишная черта | Перейти к строке |
---|---|---|---|
1 | 10 | 17 | 28 |
2 | 10 | 21 | 25 |
3 | 10 | 26 | 17 |
4 | 17 | 17 | 28 |
5 | 17 | 21 | 25 |
6 | 17 | 26 | 17 |
7 | 25 | 26 | 17 |
8 | 28 | 28 | −1 |
Из этого примера можно увидеть, что базовый блок, идентифицированный тройкой LCSAJ, может охватывать точку принятия решения, отражающую условия, которые должны быть выполнены для выполнения LCSAJ. Например, LCSAJ 2 для приведенного выше примера включает пока
заявление, где условие (количество <ИТЕРАЦИИ)
оценивается как истина.
Каждая строка кода имеет связанную с ней "плотность" LCSAJ; строка 17, например, появляется в 6 уникальных LCSAJ, т. е. имеет плотность LCSAJ, равную 6. Это полезно при оценке ремонтопригодности кода; Если строка кода должна быть изменена, то плотность указывает, сколько LCSAJ будет затронуто этим изменением.
Уровень покрытия TER3 = 100% будет достигнут, если используемые тестовые данные вызывают выполнение каждого из этих LCSAJ хотя бы один раз.
Рекомендации
- ^ М. А. Хеннелл, Д. Хедли и М. Р. Вудвард, "Количественная оценка эффективности тестов программ на Алголе 68", Труды конференции Strathclyde ALGOL 68 1977, стр. 36 - 41, ISSN 0362-1340
- ^ М. А. Хеннелл, Экспериментальный стенд для численного программного обеспечения. {Я}. {Fortran}, Компьютерный журнал 21 (4): 333-336, @nov, 1978.
- ^ М. А. Хеннелл и Д. Хедли, Экспериментальный стенд для численного программного обеспечения. {II}. {АЛГОЛ 68}, Компьютерный журнал 22 (1): 53--56, @feb, 1979
- ^ М. А. Хеннелл, М. Р. Вудвард и Д. Хедли, "Об анализе программ", Информационные письма, 5 (5), стр. 136 - 140, 1976
- ^ М. Р. Вудворд, М. А. Хеннелл, «О взаимосвязи между двумя критериями покрытия потока управления: всеми JJ-путями и MCDC», Информационные и программные технологии 48 (2006), стр. 433–440
- ^ M.A.Hennell, D.Hedley и I.J.Riddell, "Assessing a Class of Software Tools", Proceedings of the 7th International Conference on Software Engineering March 1984, pp. 266 - 277. ISSN 0270-5257
- ^ Мартин А. Ульд и Чарльз Анвин, изд. (1986). Тестирование в разработке программного обеспечения. Издательство Кембриджского университета. п. 102. ISBN 978-0-521-33786-1.
- ^ Groenda, Хеннинг (2013). Сертификация характеристик производительности программных компонентов. КИТ Научное издательство. С. 198–200. ISBN 978-3-7315-0080-3. цитата из Йейтс, Д. Ф. (2009). «Включение, включение, JJ-пути и структурированное тестирование путей: исправление». Тестирование, проверка и надежность программного обеспечения. 19 (3): 199–213. Дои:10.1002 / stvr.400.
- ^ Пол К. Йоргенсен (2013). Тестирование программного обеспечения: подход мастера, четвертое издание. CRC Press. п. 136. ISBN 978-1-4665-6068-0.
- ^ Дж. Р. Браун, «Практическое применение автоматизированных программных средств», отчет TRW № TRW-SS-72-05, представленный на WESCON, 1972 г.
- ^ М. Р. Вудвард, Д. Хедли и М. А. Хеннелл, «Опыт анализа путей и тестирования программ», IEEE Transactions on Software Engineering, Vol. 6, No. 3, pp. 278 - 286, май 1980 г.
- ^ Рекомендации по программному обеспечению при сертификации бортовых систем и оборудования - RTCA / DO-178B, RTCA Inc., Вашингтон, округ Колумбия, декабрь 1992 г.