应用于软件的"过度工程"是什么?

Vla*_*dim 26 terminology definition

我想知道应用于软件开发的术语"过度工程"的定义是什么.在软件设计讨论中,这个表达似乎经常与"过度的未来证明"结合使用,并且很难确定更精确的定义.

Mic*_*rdt 52

与大多数答案相反,我不相信"目前不需要的功能"是过度工程; 或者它是问题最少的形式.

就像你说的那样,最糟糕的过度工程通常是以未来发展和可扩展性为名 - 并且完全相反:

  • 空的抽象层最多是不必要的,最坏的情况是限制您对底层API的狭隘,低效使用.
  • 代码散落着指定的"扩展点",例如受保护的方法或通过抽象工厂获取的组件 - 当你必须扩展功能时,这些都不是你真正需要的.
  • 使一切都可配置为"避免硬编码",结果是配置文件中的(复杂的,容易出错的)应用程序逻辑比源代码中的更多(复杂,容易出错)应用程序逻辑.
  • 过度泛化:开发人员不是实现(技术上无趣的)功能规范,而是构建一个(技术上有趣的)"业务规则引擎",它"执行"业务用户提供的规范本身.最终结果是一个专有(脚本或特定于域)语言的解释器,通常设计可怕,没有工具支持,并且很难使用,没有业务用户可以使用它.

事实上,最容易适应新的和不断变化的要求的设计(因此是最具前瞻性和可扩展性的)是尽可能简单的设计.

  • 有趣的想法是,当人们试图找到一个技术上有趣的问题而不是仅仅实现一些无聊的东西时,就会发生过度工程.我想要谨慎一些. (5认同)
  • 我喜欢最后一段! (2认同)

0sc*_*car 25

流行的看法相反,过度工程是真当工程师获得"傲慢",并认为他们了解用户时出现的现象.

我做了一个简单的图表来说明这一点:
替代文字

  • 看起来像癌症. (7认同)
  • 很好的插图.如果我问的话,你用什么把它放在一起? (3认同)

dar*_*asd 20

在我们考虑过工程设计的情况下,它总是描述设计得如此通用的软件,以至于它忽略了它最初设计要执行的主要任务,因此不仅难以使用但是在基金上并不聪明.


Bil*_*ard 14

对我来说,过度工程包括你不需要的任何东西以及你不知道自己需要的东西.如果你发现如果要求以某种方式改变,某个功能可能会很好,那么你可能会过度工程化.基本上,过度工程违反了YAGNI.


nik*_*nik 8

Joel on Software上有这样的讨论,首先是,

为一个尚未存在的想象未来问题创建广泛的类层次结构,是一种过度工程,因此是坏的.

并且,与示例进行讨论.


Kee*_*ter 8

这个问题的敏捷答案是:每一段代码都没有对所请求的功能做出贡献.


sou*_*rge -1

我认为你的问题的最佳答案可以在另一个问题中找到