《持续交付 发布可靠软件的系统方法》读书笔记

软件从业者的目标

作为软件从业者,我们的目标是 尽快地用户 交付 有用的可工作的 软件。

速度是至关重要的,因为未交付的软件就意味着机会成本。因此,本书有两个目标,其中之一就是找到减少周期时间的方法。周期时间是从决定进行变更的时刻开始,包括修正缺陷或增加特性,直至用户可以使用本次变更后的结果。

快速交付也是非常重要的,因为这使你能够验证那些新开发的特性或者修复的缺陷是否真的有用。决定开发这个应用程序的人(我们称为客户)会猜测哪些特性或缺陷修复对用户是有用的。然而,直到使用者真正使用之前,这些全是未经过验证的假设。这也是为什么减少周期时间并建立有效反馈环如此重要的原因。

有用性的一个重要部分是质量。我们的软件应该满足它的业务目的。质量并不等于完美,正如伏尔泰所说“追求完美是把事情做好的大敌”,但我们的目标应该一直是交付质量足够高的软件,给客户带来价值。因此,尽快地交付软件很重要,保证一定的质量是基础。

因此,我们来调整一下目标,即找到可以以一种高效、快速、可靠的方式交付高质量且有价值的软件的方法

反馈流程

什么是反馈流程? 它是指完全以自动化方式尽可能地测试每一次变更。根据系统的不同,测试会有所不同,但通常至少包括下面的检测。

  • 创建可执行代码的流程必须是能奏效的。这用于验证源代码是否符合语法。
  • 软件的单元测试必须是成功的。这可以检查应用程序的行为是否与期望相同。
  • 软件应该满足一定的质量标准,比如测试覆盖率以及其他与技术相关的度量项。
  • 软件的功能验收测试必须是成功的。这可以检查应用是否满足业务验收条件,交付了所期望的业务价值。
  • 软件的非功能测试必须是成功的。这可以检查应用程序是否满足用户对性能、有效性、安全性等方面的要求。
  • 软件必须通过了探索性测试,并给客户以及部分用户做过演示。这些通常在一个手工测试环境上完成。此时,产品负责人可能认为软件功能还有缺失,我们自己也可能发现需要修复的缺陷,还要为其写自动化测试来避免回归测试。

运行测试的这些环境应该尽可能与生产环境相似,从而验证对于环境的任何修改都不会影响应用程序的正常运行。

交付原则

  1. 为软件的发布创建一个可重复且可靠的过程
  2. 将几乎所有事情自动化
  3. 把所有的东西都纳入版本控制
  4. 提前并频繁地做让你感到痛苦的事
  5. 内建质量
  6. “DONE”意味着“已发布”
  7. 交付过程是每个成员的责任
  8. 持续改进