我在想什么Cyclomatic Complexity应该有一个角度应用程序(它的每个控制器,服务等)易于测试和维护。我在Microsoft Documentation中发现Visual Studio已将其设置为25的警告级别,但我认为它更依赖于语言/技术。适用于Angular应用程序的最大圈复杂度
2
A
回答
1
圆形复杂性不依赖于语言/技术。它是从函数中的逻辑可能路径计算出来的。
没有'最大'圈复杂度。 它越高代码越难以快速理解。 它越高,错误地理解它的机会就越高,并且如果您必须对其进行修改,则会在该函数中引入错误。
如果要维护您的代码,或者您的代码要发展,则必须考虑这一点。 (维护费用远远低估。)
这个SO问题Do you find cyclomatic complexity a useful measure?有一些有价值的答案。
我个人使用的规则是7.(科学研究表明人类大脑一次只能掌握7个事物/概念)。当CC> = 7,当函数的行数> = 7,当我的类有> = 7个数据成员,当我的函数有> = 7个参数时,我开始质疑我的设计...等等。
1
我想,没有确切的答案。 25的CC很可能无法在任何语言中维护,并且是从一种语言到另一种语言存在差异。在某些语言中,您可以将函数引入到字典中,并从该字典中选择函数将CC增加1,而在没有lambda的其他语言中,您将使用开关或甚至一个else-if链会为每个案例添加一个CC,但如果所有案例均以return;
为例,则可维护性不会成为问题。
正如Stephane所说,7是一个很好的数字,并且存在静态代码分析工具,它们默认为Java的7,但您总是会遇到异常情况,将函数分成两部分会正式减少CC,但人类会有一个更难以跟上发生的事情。考虑到它,角控制器通常会有一个非常低的CC(< = 2),因为它们只定义了函数和变量。虽然这些函数在CC的意义上可能看起来是“复杂的”,但promises
没有向CC添加任何内容,因为现在的代码流将位于另一个函数中(例如,success()
或failure()
或failure()
)。
相关问题
- 1. 圈复杂度在传统VB6.0应用
- 2. McCabe的圈复杂度
- 3. ActionScript 3的圈复杂度
- 4. 降低基于Cairngorm的应用程序的图层复杂度
- 5. backbone.js适用于大型应用程序
- 6. angular material2不适用于Angular 2.0.0应用程序
- 7. 控制流程图和圈复杂度
- 8. 圈复杂度差异in_array
- 9. 圈复杂度 - Cobol语言
- 10. 用于计算圈复杂度的Java工具
- 11. 适用于Azure B2C SPA应用程序的npm包适用于Angular 4和Typescript
- 12. 适用于中等复杂度的Java桌面应用程序;应该JavaDB连接是静态的吗?
- 13. 找不到适用于jdbc.sqlite的驱动程序,更复杂
- 14. 适用于Angular应用程序和组件的Scss结构
- 15. 我的Angular应用程序仅适用于某种语法
- 16. 禁用适用于通用Windows应用程序的应用程序大小
- 17. Django应用程序的复杂程度如何?
- 18. 嵌入式卡片不适用于Angular应用程序
- 19. 路由不适用于Angular和nodejs应用程序
- 20. D3动画(过渡)不适用于Angular应用程序
- 21. Angular UI路由器不适用于Chrome应用程序
- 22. openCover和Visual Studio中的圈复杂度
- 23. 的Python:降低圈复杂度
- 24. 降低代码的圈复杂度
- 25. 圈旋复杂度的计算
- 26. 圈复杂边
- 27. 用于复杂应用程序结构的NodeJS本地模块
- 28. 中等复杂度的Web应用程序的最佳技术是什么?
- 29. 程序javascript的时间复杂度,用于计划任务
- 30. Url.Content()不适用于复杂的URL
CC> 7通常是一个问题,OP的“25”将是疯狂的。该规则有例外,但有些仅适用于某些语言。如果语言强迫你使用else-if链而不是表查找,你有相同的复杂性,但正式增加你的CC。另外我想知道如何编写一个角度控制器,处理少于7行的超过5个输入的形式。 – Giszmo 2015-03-13 05:05:26