《持续交付:发布可靠软件的系统方法》书评

《持续交付:发布可靠软件的系统方法》,Jez Humble、David Farley著,乔梁 著,人民邮电出版社,2011年10月出版。
这本书深刻改变了我的软件开发实践。
本书书名所提及的"可靠",是任何软件产品都向往的简朴理想,对甲方和乙方都如此。然而,但凡有过软件开发和发布经历的人,都必然深刻体会过,软件上线发布那一刻是多么让人忐忑,并几乎总是伴随着各种问题。要追求"可靠"这样一个看似简单的目标,是相当不容易的。我正是在即将发布我的第一款软件产品(ACMGator)之际,如抓住救命稻草般,翻开了这本书。而这本书也不负期望,通过彻底改变了我在软件开发流程方面的一系列实践后,也让我于上周末发布软件产品时,信心得以大幅增强。当然,我目前写的测试还远未达到"足够",我在继续阅读本书第二遍、第三遍的同时,我的软件开发过程的自我革新之路仍在向前延伸。
本书的核心思想是"持续交付",通过构建一套自动化的流水线,频繁地对软件提交版本进行测试、构建、部署,来确保软件的可靠发布。因为自动化,所以可以频繁进行;而频繁的直接效果就是,每一个被测试的版本,其修改的内容都相对很少,一旦在测试中暴露问题,修复起来也是相当容易的。遵循这样的理念,我在所开发的 Django 应用程序中,开始引入并利用 Python unittest、Jest、Playwright 等技术,逐步搭建起单元测试、集成测试、端到端测试等不同水平的保障。有了它们,在产品发布前(也包括内部测试的数十次发布),我无需像过去那样,手动打开有限的几个页面、确认它们都显示正常(以此获得些许心理安慰),就可以信心十足地确认测试代码所覆盖到的场景,都得到了充分测试并能够正常运行。
此外,本书还提及一个重要的不同观念:不要在版本管理系统中使用"分支",即应该保持一条单一的"主干"历史,所有提交都直接提交到该主干上,而持续集成也沿着该主干进行。多年前,我曾觉得"分支"是必要且值得推崇的;但在后来的大量实践中,我却并没有真正把分支用起来。本书的观点和解释,正好印证了我的实践,从方法论方面也增强了我的信心。
创业是一个不断试错、并期望尽快找到突破口的过程,这个过程中有大量的"重复工作"。一人公司并没有足够用来"浪费"的人力资源,自动化和持续集成的理念,正适合降低执行难度,提高创业的效率。从这个角度看,创业确实是一条非常适合程序员修炼的路。