График потока управления и цикломатическая сложность
Я должен найти график потока управления и цикломатическую сложность для этого кода, а затем предложить несколько тестовых случаев белого ящика и тестовых случаев черного ящика. Но у меня проблемы с созданием CFG для кода.
Был бы признателен за помощь в тестовых случаях.
private void downShift(int index)
{
// index of "child", which will be either index * 2 or index * 2 + 1
int childIndex;
// temp storage for item at index where shifting begins
Comparable temp = theItems[index];
// shift items, as needed
while (index * 2 <= theSize)
{
// set childIndex to "left" child
childIndex = index * 2;
// move to "right" child if "right" child < "left" child
if (childIndex != theSize && theItems[childIndex + 1].compareTo(theItems[childIndex]) < 0)
childIndex++;
if (theItems[childIndex].compareTo(temp) < 0)
{
// shift "child" down if child < temp
theItems[index] = theItems[childIndex];
}
else
{
// shifting complete
break;
}
// increment index
index = childIndex;
}
// position item that was originally at index where shifting began
theItems[index] = temp;
}
1 ответ
Базовая цикломатическая сложность здесь равна 4: while + if + if + 1. Если вы рассматриваете расширенную цикломатическую сложность, как это делают Understand или CMTJava, вам также необходимо добавить 1 для конъюнктов, так что это будет 5. Безусловные операторы управления, такие как как break
не влияют на значение цикломатической сложности.