Измененное покрытие условий/решений
Модифицированное покрытие условий/решений ( MC/DC ) — это критерий покрытия кода, используемый при тестировании программного обеспечения .
Обзор
[ редактировать ]Во время тестирования MC/DC требуется все следующее: [1]
- Вызывается каждая точка входа и выхода.
- Каждое решение принимает все возможные результаты
- Каждое условие в решении принимает все возможные результаты
- Показано, что каждое условие решения независимо влияет на результат решения.
Независимость условия доказывается, доказывая, что одновременно изменяется только одно условие.
MC/DC используется в руководствах по разработке программного обеспечения авионики DO-178B и DO-178C для обеспечения адекватного тестирования наиболее критического программного обеспечения (уровня A) , которое определяется как программное обеспечение, которое может обеспечить (или предотвратить отказ) продолжение безопасного полета и посадка самолета. Также настоятельно рекомендуется для уровня SIL 4 в части 3 Приложения B базовой публикации по безопасности. [2] и ASIL D в части 6 автомобильного стандарта ISO 26262 . [3]
Кроме того, НАСА требует 100% покрытия MC/DC для любого критически важного для безопасности компонента программного обеспечения, указанного в разделе 3.7.4 NPR 7150.2D. [4]
Определения
[ редактировать ]- Состояние
- Условие — это логическое выражение конечного уровня (его нельзя разбить на более простые логические выражения).
- Решение
- Логическое выражение, состоящее из условий и нуля или более логических операторов . Решение без логического оператора является условием. Решение не подразумевает изменение потока управления, например, присвоение логического выражения переменной является решением для MC/DC.
- Состояние покрытия
- Каждое условие решения в программе хотя бы один раз учитывало все возможные результаты.
- Охват решений
- Каждая точка входа и выхода в программе была задействована хотя бы один раз, и каждое решение в программе приняло все возможные результаты хотя бы один раз.
- Покрытие условий/решений
- Каждая точка входа и выхода в программе была вызвана хотя бы один раз, каждое условие в решении в программе приняло все возможные результаты хотя бы один раз, и каждое решение в программе приняло все возможные результаты хотя бы один раз.
- Измененное покрытие условий/решений
- Каждая точка входа и выхода в программе вызывалась хотя бы один раз, каждое условие в решении в программе принимало все возможные результаты хотя бы один раз, и было показано, что каждое условие влияет на этот результат решения независимо. Показано, что условие влияет на результат решения независимо, изменяя только это условие, сохраняя при этом фиксированными все остальные возможные условия. Критерий условия/решения не гарантирует охват всех условий в модуле, поскольку во многих тестовых случаях некоторые условия решения маскируются другими условиями. Используя модифицированное условие/критерий решения, необходимо показать, что каждое условие может само по себе влиять на результат решения, при этом все остальное остается неизменным. Таким образом, критерий MC/DC намного сильнее, чем охват условий/решений.
Критика
[ редактировать ] этого раздела Фактическая точность оспаривается . ( январь 2018 г. ) |
Заблуждением является то, что чисто синтаксическими перестановками решений (разбиением их на несколько независимо оцениваемых условий с помощью временных переменных, значения которых затем используются в решении), не меняющими семантику программы, можно снизить сложность получения полных Покрытие MC/DC. [5]
Это связано с тем, что MC/DC управляется синтаксисом программы. Однако такого рода «обман» можно использовать для упрощения выражений, а не просто для того, чтобы избежать сложностей MC/DC. Например, присвоение количества дней в месяце (исключая високосные годы) можно выполнить либо с помощью оператора переключения, либо с помощью таблицы со значением перечисления в качестве индекса. Количество необходимых тестов в зависимости от исходного кода может значительно различаться в зависимости от требуемого покрытия, хотя семантически нам хотелось бы протестировать оба подхода с минимальным количеством тестов. [ нужна ссылка ]
Другой пример, который можно рассматривать как «обман» для достижения более высокого MC/DC:
/* Function A */
void function_a (int a, bool b, bool c, bool d, bool e, bool f)
{
if (a == 100)
{
if (b || c)
// statement 1
if (d || e || f)
// statement 2
}
}
/* Function B */
void function_b (int a, bool b, bool c, bool d, bool e, bool f)
{
bool a_is_equal_to_100 = a == 100 ;
bool b_or_c = b || c ;
bool d_or_e_or_f = d || e || f ;
if (a_is_equal_to_100)
{
if (b_or_c)
// statement 1
if (d_or_e_or_f)
// statement 2
}
}
если определение решения рассматривается как логическое выражение, которое изменяет поток управления программой (текст в скобках в операторе «если»), то можно подумать, что функция B, вероятно, будет иметь более высокий MC/DC чем функция A для заданного набора тестовых случаев (проще тестировать, поскольку для достижения 100% покрытия MC/DC требуется меньше тестов), хотя функционально обе они одинаковы. [6]
Однако в предыдущем утверждении неверно определение решения. Решение включает в себя «любое» логическое выражение, даже для присвоений переменным. В этом случае три назначения следует рассматривать как решение для целей MC/DC, и поэтому измененный код требует точно таких же тестов и количества тестов для достижения MC/DC, чем первый. Некоторые инструменты покрытия кода не используют эту строгую интерпретацию решения и могут давать ложные срабатывания (сообщая о 100% покрытии кода, хотя на самом деле это не так). [ нужна ссылка ]
RC/DC
[ редактировать ]В 2002 году Сергей Вилкомир предложил усиленное покрытие условий/решений ( RC/DC ) как более сильную версию критерия покрытия MC/DC, подходящую для систем, критичных к безопасности . [7] [8]
Джонатан Боуэн и его соавтор проанализировали несколько вариантов MC/DC и RC/DC и пришли к выводу, что по крайней мере некоторые варианты MC/DC имеют более высокий охват, чем RC/DC. [9]
См. также
[ редактировать ]Ссылки
[ редактировать ]- ^ Хейхерст, Келли; Верхузен, Дэн; Чиленски, Джон; Риерсон, Леанна (май 2001 г.). «Практическое руководство по покрытию измененных условий/решений» (PDF) . НАСА .
- ^ МЭК 61508-3:2010.
- ^ ISO 26262-2011 Часть 6, Таблица 12.
- ^ «Требования НАСА к разработке программного обеспечения» . НАСА.
- ^ Раджан, Аджита; Хеймдал, Матс; Уэлен, Майкл (март 2003 г.). «Влияние структуры программы и модели на покрытие адекватности тестов MC/DC» (PDF) .
{{cite journal}}
: Для цитирования журнала требуется|journal=
( помощь ) - ^ http://www.hbni.ac.in/phdthesis/engg/ENGG02201004005.pdf [ только URL-адрес PDF ]
- ^ Вилкомир, SA ; Боуэн, JP (2002). «Усиленный охват условий/решений (RC/DC): новый критерий тестирования программного обеспечения». Международная конференция пользователей B и Z. Конспекты лекций по информатике . 2272 . Спрингер-Верлаг : 291–308. дои : 10.1007/3-540-45648-1_15 . ISBN 978-3-540-43166-4 .
- ^ Вилкомир, SA ; Боуэн, JP (2006). «От MC/DC к RC/DC: формализация и анализ критериев тестирования потока управления» . Формальные аспекты вычислений . 18 (1). Спрингер Природа : 42–62. дои : 10.1007/s00165-005-0084-7 . S2CID 10467796 .
- ^ Капур, Калпеш; Боуэн, Джонатан П. (2005). «Формальный анализ критериев испытаний MCDC и RCDC». Тестирование, проверка и надежность программного обеспечения . 15 (1). Интернет-библиотека Wiley : 21–40. дои : 10.1002/stvr.306 . S2CID 35276126 .