软件复杂度衡量方法有许多种:
对于软件复杂度最著名的可能就是Tom McCabe的方法了。该方法通过计算子程序中的“决策点(decision points)”的数量来衡量复杂度。
圈复杂度用来评价代码复杂度,以函数为单位,数值越大表示代码的逻辑分支越多,理解起来也更复杂。圈复杂度可以成为编码及重构的重要参考指标,以指导撰写可读性高的代码。有关圈复杂度的定义,可以自行搜索。《代码大全》有如下的定义:
计算子程序中决策点数量的技术 (代码大全2,19章P458)
1.由1计数,一直往下通过程序。
2.一旦遇到以下关键字,或者其同类的词,就加1:
if, while, repeat, for, and, or
3. 给case(switch)语句中的每一种情况都加1.
作者也给了处理复杂度度量结果的建议:
0-5: 子程序可能还不错
6-20: 得想办法简化子程序了
10+ 把子程序的某一部分拆分成另一个子程序并调用它。
这些数字和策略都不是绝对的,正如作者所言至少应当视其为警示。
把子程序的一部分提取成两一个子程序,不会降低整个程序的复杂度,只是把决策点移到其他地方。但是这样做可以降低你在同意时间必须关注的复杂度水平。由于重点是要降低你需要在头脑中同时考虑的项目的数量,所有降低一个给定子程序的复杂度是有价值的。