文章目录
如果控制流不是影响复杂度的最大因素,那么至少也是最大的因素之一
复杂度的重要性
参考[[……]]
如何衡量复杂度
利用决策点(decision point)数量
最著名的方法,源自 Tom McCabe。又称[[圈复杂度]]
具体操作:
- 计数从 1 开始,一直往下阅读程序
- 一旦遇到如下关键字(或其他同性质的词),就加 1:
- if、while、repeat、for、and、or
- 对 case 语句中的每一种情况都加 1
对照下表:
子程序中的决策点数量 | 结论 |
---|---|
1 ~ 5 | 子程序可能还不错,起码不复杂 |
6 ~ 10 | 得想办法简化子程序了 |
10 + | 应该将这个子程序的某一部分改写为另一个子程序再调用它 |
关于上限:
10 个决策点的上限并不是绝对的(如 flask8 推荐上限是12 ),而是应该把决策点的数量当做警示。当警示出现时,就要仔细考虑子程序是否真的过于复杂、是否需要重新设计了
其他衡量手段
智力实体数量
为了理解应用程序,你必须在同一时间记住的智力实体的数量
所用的数据量
??
控制结构中的嵌套层数
toWrite
代码行数
toWrite
同一变量的跨度
toNote
变量的生存期
toNote
输入和输出的量
??
延伸
python 中的 flask8 可以用来衡量圈复杂度