知识卡片
框架类产品的质量优先级排序:可读性优先于功能正确性和性能
内容
Elastic-Job团队给出了一条初看反直觉、细想很有道理的质量优先级排序:代码可读性>代码可测性>模块解耦设计>功能正确性>性能>功能可扩展性,并明确说明对于框架类产品,质量优先于交付时间,交付时间又优先于成本。这个排序的核心逻辑在于区分”能被发现和修复的问题”和”会随时间不断恶化、最终失控的问题”:功能缺陷可以被测试发现、被修复;性能不够可以后续针对性优化——这两类问题都有明确的诊断路径和修复手段。但代码不清晰(可读性差)会导致一种更隐蔽也更致命的后果:项目会随着时间推移逐渐变成一个没人能完全理解的黑盒,新的贡献者不敢改、老的维护者不愿意碰,功能缺陷和性能问题反而因为代码不可读而变得更难定位、更难修复——可读性差不是独立的一类问题,而是会放大所有其他问题的修复成本。对开源框架类产品而言这一点尤其关键,因为框架的使用寿命通常很长、参与贡献代码的人也会持续变化,只有代码本身是可读、可测试、可以被外部贡献者理解和信任的,项目才可能持续演进而不是逐渐腐化成谁都不敢动的遗留系统。这也解释了为什么该团队要求Elastic-Job核心模块测试覆盖率达到95%以上——测试全覆盖本身既是可测性的直接体现,也是保障可读性和正确性长期不劣化的一道防线。
参考来源
- 位置:《高可用架构(第1卷)》第2章《高可用架构原理与分布式实践》"2.6 新一代分布式任务调度框架:当当Elastic-Job开源项目的10项特性"节,"2.6.6 对开源产品的开发理念"(源文件:_epub-src/OEBPS/Text/Chapter2_6_7.xhtml)
- 结论依据:原文说明"对质量的定义有代码可读性>代码可测性>模块解耦设计>功能正确性>性能>功能可扩展性……功能缺陷可以修复,性能不够可以优化,而代码不清晰则会使项目渐渐变为黑盒。所以对于框架类产品,我们认为质量>时间>成本",直接支撑本卡片结论。
- 原始内容:对质量的定义有代码可读性>代码可测性>模块解耦设计>功能正确性>性能>功能可扩展性。只有代码可读、可测试、可100%掌控,项目才能持续发展。功能缺陷可以修复,性能不够可以优化,而代码不清晰则会使项目渐渐变为黑盒。