本文是Bert Hubert关于长期软件开发的思考,源于他为荷兰选举委员会进行的关于开源投票软件Abacus的演讲。
演讲中,他探讨了与传统软件开发中持续部署和自动化测试不同,一些关键领域(如核电站、选举、医疗设备等)对软件长期稳定性的要求。这些领域需要软件能够运行数十年,并具有明确的变更计划和发布说明。
Hubert在演讲中也谈到了软件开发中的依赖关系,包括外部世界、编程语言、框架、数据库以及辅助库等。他指出,在长期软件开发中,依赖关系管理至关重要,需要谨慎选择和评估。尤其要关注依赖项的来源、维护情况、安全性等方面,避免选择不稳定或容易被弃用的依赖项。
此外,他还强调了测试的重要性,认为测试能够帮助开发人员及时发现依赖项的变化,并进行相应的调整。同时,测试也能提高代码的重构和依赖项移除的效率。
文章还谈到了软件复杂度的问题,指出复杂度是软件开发的最终敌人,会随着时间的推移而增加。因此,开发人员需要采取措施控制复杂度,例如进行及时的代码重构、删除无用代码以及编写简洁明了的代码。编写简单的代码,尤其是避免过度追求性能优化,能够降低后期维护成本。
此外,文章还提到了团队合作、开源、日志记录、文档等方面,并推荐了一些相关的书籍,例如《编程实践》、《人月神话》以及《软件设计哲学》等。
总而言之,文章强调了长期软件开发中需要关注的几个关键方面:
1. 保持代码简洁,避免不必要的复杂度;
2. 谨慎选择和管理依赖项,减少依赖项数量,并定期检查其状态;
3. 编写大量的测试用例,确保代码质量和稳定性;
4. 编写详细的文档,记录代码背后的设计思想和决策过程;
5. 构建稳定的团队,并为开发人员提供良好的工作环境;
6. 尽可能地将代码开源,接受外部的审查和贡献;
7. 记录软件的运行情况和性能数据,以便后期分析和解决问题。