2013-07-21 1 views
1

Cyclomatic complex - это количество тестовых примеров, необходимых для обеспечения тщательного тестирования конкретного модуля.цикломатическая сложность псевдокода

Рассмотрим следующий псевдокод:

If (A > B) and (C > D) then 
    A = A + 1 
    B = B + 1 
Endif 

я думаю, здесь требуется только два тестовых примеров, один для истинного состояния другого для ложного состояния, так цикломатическое сложность должна быть 2, но ответ на 3 (не уверен, Зачем).

Кто-то пожалуйста, помогите мне понять, почему ответ 3 вместо 2.

+2

Этот вопрос не соответствует теме, потому что речь идет об информатике, для которой есть другие сайты. – bmargulies

ответ

1

код будет переведен составителями к чему-то вроде следующего псевдо-assemley код:

A - B 
branch if greater then 0 to end 
C - D 
branch if greater then 0 to end 
inc A 
inc B 
end: 
... 

Теперь, для того, чтобы все возможные варианты во всех отраслях, вам нужно 3 случая испытаний:

  1. A < = B (филиал в первой инструкции ветвления)
  2. C < = D (филиал во второй инструкции ветвления)
  3. A> B и C> D (не ветвиться во 2-й команде перехода и получить на увеличивающиеся инструкции)

Обратите внимание, что для альтернативного определения «охват» - «Покрытие всех инструкций», 1 тестовый пример может быть достаточным (с указанным выше скомпилированным кодом), потому что даже если вы не введете ветку, команда «ветка, если ..» все еще выполняется, поэтому для A> B и C> D, вы действительно выполняете все инструкции.


P.S. при условии, здесь:

цикломатической сложность количества тестовых случаев, которые необходимы для достижения тщательных тестового покрытия конкретного модуля.

+0

Автор специально задает вопрос о «Cyclomatic complex». – simonzack

+0

@simonzack: 'Цикломатическая сложность - это количество тестовых примеров, которые необходимы для обеспечения тщательного тестирования конкретного модуля». Ответ направлен на то, чтобы вам потребовалось 3 тестовых примера для покрытия модуля. Теперь, что такое «обложка», может быть различным, я предположил здесь «охват всех филиалов». – amit

2

Cyclomatic complex непосредственно измеряет количество линейно независимых путей через исходный код программы.

If (A > B) and (C > D) then 
    A = A + 1 
    B = B + 1 
Endif 

Случай 1.

If (true) and (true) then 
    // Execute some code 
Endif 

Случай 2.

If (true) and (false) then 
    // Don't execute code 
Endif 

Случай 3.

If (false) and (2nd part won't be executed) then 
    // Don't execute code 
Endif 

Так цикломатическая сложность будет 3.