有了代码块的概念之后,在实现代码覆盖率这个功能时,我们可以用一个大的布尔数组来保存有多少块代码被执行这个信息,而布尔数组的长度呢,就是程序的代码块的个数(因为一块代码可以看成一行代码)。也就是说,我们可以把产品代码手工修改成类似下面的样子:
bool pathCovered[] = new bool[11]; // 11是统计下来程序里面代码块的个数 for ( int i = 0; i < pathCovered.Length; ++i ) pathCovered[i] = false;
// while (inputIter < input.Length && input[inputIter] == ' ') inputIter++; firstblock: bool result = inputIter < input.Length; pathCovered[0] = true; if ( result ) { result = input[inputIter] == ' '; pathCovered[1] = true; } else { pathCovered[2] = true; goto secondblock; }
if ( result ) { pathCovered[3] = true; inputIter++; goto firstblock; }
secondblock: pathCovered[4] = true; int[] indics = new int[2] { inputIter, // first word begin index, 0 // second word begin index };
for (; pathCovered[5] = true, inputIter < input.Length; pathCovered[6] = true, ++inputIter) { pathCovered[7] = true; if (input[inputIter] == ' ') { pathCovered[8] = true; if (indics[1] == 0) { pathCovered[9] = true; indics[1] = -1; } else if (indics[1] > 0) { pathCovered[10] = true; break; } } }
// 统计代码覆盖率信息 int covered = 0; for ( int i = 0; i < pathCovered.Length; ++i ) { if ( pathCovered[i] ) covered++; }
return covered / pathCovered.Length; |