В какой программе покрытие 100% заявлений не подразумевает 100% покрытие филиалов? - PullRequest
1 голос
/ 03 февраля 2012

При решении задач MCQ для практического теста я натолкнулся на это утверждение: «В любой программе покрытие 100% заявления подразумевает покрытие 100% филиала», и оно называется неверным.Я думаю, что это правильное утверждение, потому что если мы охватываем все утверждения, то это означает, что мы также охватываем все пути и, следовательно, все ветви.Может кто-нибудь, пожалуйста, пролить больше света на этот?

Ответы [ 3 ]

8 голосов
/ 03 февраля 2012

Рассмотрите этот код:

...
if (SomeCondition) DoSomething();
...

Если SomeCondition всегда верно, вы можете иметь 100% покрытие выписки (SomeCondition и DoSomething() будут покрыты), но вы никогда не выполняете делокогда условие ложно, когда вы пропускаете DoSomething().

См. определения различных покрытий здесь .

2 голосов
/ 03 февраля 2012

То, что вы освещаете каждое утверждение, не означает, что вы охватили каждую ветку, которую могла выполнить программа.

вы должны смотреть на каждую возможную ветвь, а не только на операторы внутри каждой ветви.

1 голос
/ 01 марта 2015

Чтобы тестовый набор достиг 100% покрытия ветвлений, каждая точка ветвления в коде должна быть взята в каждом направлении, по крайней мере, один раз.

Архетипический пример, показывающий, что 100% покрытие оператора неподразумевает 100% ветвь освещения, уже дал Алексей Фрунзе.Это является следствием того факта, что (по крайней мере, в большинстве языков программирования) возможно иметь ветви, которые не содержат операторов (такая ветвь в основном пропускает операторы в другой ветке).

причина, по которой вам нужно 100% -ное покрытие филиалов, а не просто 100% -ное покрытие операторов, заключается в том, что ваши тесты также должны показывать, что пропуск некоторых операторов работает, как и ожидалось.

Моя главная причина для предоставления этого ответа - указать, чтонаоборот, а именно«100% покрытие филиала подразумевает 100% покрытие заявления» правильно.

...