提升代码质量——控制程序复杂度

如何度量复杂度

最著名的是Tom McCabe方法,通过计算程序中“决策点”的数量来衡量复杂度。下表给出了一种用于计算决策点的方法。

计算子程序中决策点数量的技术

1.从1开始,一直往下通过程序

2.一旦遇到以下关键籽,或者其同类的词,就加1:

  if、while、repeat、for、and、or

3.给case语句中的每一种情况都加1

下面举一个例子:

If (((status = Success) and done) or

(not done and (numLines >= maxLines))) then ...

在这段代码中,从1算起,遇到if得2,and得3,or得4,and得5。加起来,这段代码总共包含了5个决策点。

如何处理复杂度的度量结果

0-5   子程序可能还不错

6-10  得想办法简化子程序了

10+   把子程序的某一部分拆分成另一个子程序并调用它

说明:

  1.把子程序的一部分提取成另一个子程序,不会降低整个程序的复杂度,只是把决策点移到其他地方,降低在同一时间必须关注的复杂度水平。所以降低一个给定子程序的复杂度是有价值的。

  2.10个决策点的上限并不是绝对的。应该把决策点的数量当作一个警示,该警示说明某个子程序可能需要重新设计了。不要死守这个规则。一条情况很多的case语句可能会包含超过10个的元素。如果硬拆开它可能就是很愚蠢的,这取决于该case语句的用途。

其他类型的复杂度

  其他度量方法包括:所用的数据量、控制结构中的嵌套层数、代码行数、对同一变量的先后引用之间的代码行数(跨度)、变量生存的代码行数(生存期),以及输入和输出的量。

总结:

  上述总结是将软件程序复杂度进行量化,并提供优化建议,所以将复杂度降低到最低水平的编写高质量的代码的关键。

posted @ 2017-02-28 22:45  独立小桥风满袖  阅读(980)  评论(0编辑  收藏  举报