Покрытие кода для C

Я сделал небольшой обзор различных тестов покрытия кода, используемых во встроенных системах. В частности, я смотрю на MC/DC. Насколько я понимаю, одна из целей состоит в том, чтобы убедиться, что каждое логическое предложение в утверждении влияет на результат утверждения.

Два вопроса:

  1. Что дает независимая проверка того, что каждое предложение влияет на результат?
  2. Почему (A||B) && (A||!C) не сможет достичь 100% MC/DC, а A||(B&&!C) достигнет 100% MC/DC, даже если они имеют точно такую ​​же функциональность?

person engineer14    schedule 04.11.2016    source источник


Ответы (1)


Чтобы ответить на ваши вопросы

  1. Вам нужно как можно меньше кода и как можно менее сложный код. Наличие недостижимых условий удлиняет ваш код и делает его излишне сложным.

  2. (A||B) && (A||!C) не достигнет 100%, потому что требует A проверки дважды без всякой причины. В условии, когда A ложно, а B истинно, истинность A будет проверяться во второй раз в выражении (A||!C) без всякой причины в этой формулировке, тогда как в формуле A||(B&&!C) истинность A проверяется только один раз.

person Eli Sadoff    schedule 04.11.2016
comment
Значит, главная цель MC/DC — уменьшить сложность? - person engineer14; 04.11.2016
comment
Цель MC/DC состоит в том, чтобы проверить все возможные исходы с минимально возможной сложностью. - person Eli Sadoff; 04.11.2016