代码复杂度的警示信号:识别过度复杂代码的实用指南

本文总结了代码过度复杂的多个警示信号,包括需要添加“hacks”来维持运行、其他开发者频繁询问代码逻辑、修改代码时感到恐惧等,帮助开发者识别和改善代码质量。

代码复杂度的警示信号

以下是一些表明你的代码可能过于复杂的线索:

  • 你必须添加“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 这个怎么样:

回复 Max Kanat-Alexander: 2017年9月24日 23:15 信不信由你,我曾经认识一个人,他用这个特定的术语自豪地、有意地描述他的系统设计,好像这是一个应该保留的合法设计选择。

comments powered by Disqus
使用 Hugo 构建
主题 StackJimmy 设计