这个问题的焦点:尽管软件中存在一个或多个内部错误,某些软件执行“额外工作”以增加“最终成功/令人满意”结果的机会,当这些错误发生时,这需要更长的执行时间。如果结果成功,所有这些都会在用户不知情的情况下发生。
复杂软件的定义:
- 包含超过10个开发人员在其生命周期内编写的代码(由其提供),并且未在同一时间段内编写
- 依赖于10多个外部库,每个库都带有警告
- 典型的软件任务(用于生成用户想要的结果)需要10个或更多输入参数,其中大多数具有默认值,但如果用户需要控制,则可以配置。
- 最重要的是,相对于要执行的任务具有适当复杂性的软件,即不必造成不必要的复杂性。
编辑:什么是复杂的?请参阅复杂和复杂之间有很大的区别。(直接链接)
此问题内的冗余/鲁棒性的定义:(
基于注释增加了鲁棒性)
- 如果在使用当前参数集时软件任务失败,请尝试其他参数。
- 显然,必须有内部知识,这些“不同”的参数使用不同的代码路径,可能会导致不同的(希望更好)结果。
- 有时,这些不同的代码路径是基于对外部库的观察而选择的。
- 最后,如果执行的实际任务与用户的说明略有不同,则用户将收到详细说明差异的报告。
- 最后,像10余个可配置参数一样,冗余和报告也是可配置的。
此类软件的示例:
- 数据库迁移
- 业务数据库
- 源代码控制数据库等
- 在Word文档和OpenOffice文档,PowerPoint和OpenOffice Draw等之间进行批量转换。
- 自动翻译整个网站
- 自动分析软件包,例如Doxygen,但需要更可靠的分析(即不仅仅是文档工具)
- 网络通信,其中数据包可能会丢失并且可能会重试
这个问题最初是由您如何处理故意的不良代码启发而来的?
但现在仅关注软件膨胀的原因之一。这个问题没有解决软件膨胀的任何其他原因,例如添加新功能。
可能相关: