代码复杂度的警示信号
以下是一些表明你的代码可能过于复杂的线索:
- 你必须添加“hacks”来让功能继续运行
- 其他开发者不断询问你某部分代码的工作原理
- 其他开发者经常误用你的代码并导致bug
- 有经验的开发者阅读一行代码需要超过瞬间的时间
- 你害怕修改这部分代码
- 管理层认真考虑为一个类或文件雇佣多名开发者
- 很难想出如何添加新功能
- 开发者经常争论这部分代码应该如何实现
- 人们经常对这部分代码做出完全无意义的修改,你只能在代码审查时或提交后发现
这些是我能立即想到的。还有其他什么线索吗?
-Max
评论
Andrew Pennebaker 说: 2011年11月17日 12:14
- 代码与其他代码配合不佳(API弱或没有API)
- 每个函数似乎都需要自定义输入类型
- 编译或解释速度慢
- 项目需要多种编程语言
- 很难将项目与其依赖项解耦或切换到替代库
- 开发者讨论从头重写整个项目
回复 Max Kanat-Alexander: 2011年11月17日 21:12 是的,这些很好!虽然我不会说缓慢的解释/编译或需要多种语言一定是复杂度的指标。有些语言就是编译器慢,有些项目就是大,有时你必须使用多种工具来完成工作。
-Max
John 说: 2011年11月17日 12:30 “管理层认真考虑雇佣多名经理来管理处理单个类或文件的开发者"怎么样?
回复 Max Kanat-Alexander: 2011年11月17日 21:12 哈哈哈!
Jerome 说: 2011年11月17日 12:56 其他几个:
- 你的方法参数列表随时间失控增长
- 你觉得需要注释控制块结束(我称之为’if’膨胀)
- 编写一个好的覆盖率测试需要的代码比你要测试的方法还多
回复 Max Kanat-Alexander: 2011年11月17日 21:13 是的!这些相当好!虽然就测试编写而言,我发现测试比代码大实际上很常见。我认为这更多是需求复杂度的问题,而不是代码复杂度的问题。
-Max
Simon 说: 2011年11月17日 17:32 依赖树看起来像这样? http://thedailywtf.com/Articles/Enterprise-Dependency-The-Next-Generation.aspx
回复 Max Kanat-Alexander: 2011年11月17日 21:13 哈哈哈!!确实是WTF!!
-Max
Raghu 说: 2011年11月17日 21:54 读了Simon上面的评论后,我去了那个网站并发现了这个。 http://thedailywtf.com/Articles/Serious-String-Validation.aspx ~raghu
Palo 说: 2011年11月29日 01:02 嗨Max,我真的很喜欢你的博客文章。去年我在开发一个从大数据集计算统计信息的批处理系统。为了添加新的业务规则,我必须检查和/或修改几个不相关的地方,包括spring beans、属性文件和其他东西,所有这些都很琐碎,但很容易出错(例如有一个DB2/Oracle小数/整数问题,没有人第一次就能做对)。所以我认为当系统很容易出错时,它就是复杂的(后果是"你害怕修改这部分代码”)
回复 Max Kanat-Alexander: 2011年11月29日 01:16 嘿Palo!感谢你的好话!是的,我同意,“太容易出错"是一个非常好的指标。
-Max
Srihari S 说: 2012年4月6日 01:24 如果你的代码有异味,它就是复杂的。参考WIKI:代码异味。
Steve Bush 说: 2012年4月7日 23:36 我昨天从头到尾读了《代码简洁性》!(电子书有"封面"吗?)。并且很享受!我想说大约50%我同意,剩下的50%我强烈同意!我想我可以挑剔几个点(并期待在未来的某个时候这样做!),但总的来说,我大部分同意你的初始陈述,即无论它可能是什么,这是一个开始!而且是一个非常可行的开始!
我不介意看到一个博客/课程/午餐系列,每个课程周期(或博客条目)提出一个规则或定律进行讨论!那将是一个有趣的对话!
我有两个与编码无关的评论要添加:
我从书中得到的一个全新东西是物理组织。每个定律、规则、事实、定义都在出现时被标识,然后当我读到结尾时,我得到了一个列出所有内容的附录!这创造了整本书的精彩回顾!我非常喜欢这一点,就像在最后5分钟内几乎在心理上重新阅读整本书一样!太棒了!
另一个无关但可能有趣的点是我阅读的方式:通过iPad iBooks应用程序。我读了很多书,但几乎总是通过网页浏览器。我注意到我几乎一直在滚动阅读;在iPad上,我的拇指让文本像自动提示器一样上升,这样我的眼睛总是保持大约相同的高度;在Mac上,我用两个手指放在触控板上做同样的事情。但iBooks保持文本静止,我的眼睛从上到下移动。我不能说这是否更好,只是觉得不同,并提醒我们自从那些纸制的东西,哦是的,书!以来已经走了很长的路!
一个幽默的愚蠢行为:我去了一次iBook的目录,屏幕上只显示到第2章。我花了整整五分钟试图显示剩余的章节。页面不会翻!我几乎放弃了,认为这是一个bug,当我意识到,目录可以滚动!!!!!!无论如何,你做得非常好,非常感谢!我很享受,我相信我的编程将来会从中受益!
Steve————- “我们现在玩得很开心!”
Vidhyut 说: 2013年3月18日 17:33 复杂软件大多有大的依赖性。所以如果你不能将一个类从一个项目重用到另一个项目,这是一个信号,表明你有一个紧密耦合的复杂系统。
Mike W. 说: 2017年9月21日 21:35 这个怎么样:
- 你的整个代码库是一个大泥球 http://www.laputan.org/mud/mud.html
回复 Max Kanat-Alexander: 2017年9月24日 23:15 信不信由你,我曾经认识一个人,他用这个特定的术语自豪地、有意地描述他的系统设计,好像这是一个应该保留的合法设计选择。