软件系统变更与测试实践指南
1. 构建简单高效的系统
一个精心设计的系统,其关键在于简单性。只构建你所需要的部分,这样就能更轻松地确保所构建的内容是正确的。当重组代码能明显增加价值时,比如让当前的工作变得更简单、更安全,那就进行重组。一旦发现“破窗”(即系统中的小问题),及时修复。
2. 管理技术债务
技术债务是指我们在系统中留下未修复的问题。就像大多数金融债务一样,系统会为技术债务收取“利息”。具体表现形式多样:
- 可能需要持续进行手动变通操作,以维持系统的运行。
- 在进行本可通过更简洁架构轻松完成的更改时,需要额外花费时间。
- 用户可能会遇到服务不可靠或难以使用的情况。
软件工艺很大程度上在于避免技术债务。养成一旦发现问题和缺陷就立即修复的习惯,最好是在问题产生时就解决,而不是陷入“现在这样就够了”的不良思维模式。
不过,将技术债务作为描述实施不佳系统的隐喻存在争议。有人认为这暗示了一种像借钱创业那样经过深思熟虑、负责任的决策。但实际上存在不同类型的债务,糟糕地实现某个功能就如同用发薪日贷款去度假,极有可能让你陷入“破产”的风险。Martin Fowler提出了技术债务象限,区分了有意与无意的技术债务,以及鲁莽与谨慎的技术债务。
3. 管理重大基础设施变更
推荐的工程实践是一次只进行小的更改。但在交付大型且可能具有破坏性的变更时,这可能具有挑战性。例如,完全替换像用户目录服务这样的关键基础设施,可能需要数周甚至数月才能让新服务正常运行并通过测试。如果将旧服务替换为尚未正常工作的新服务,会给用户和我们自身带来严重问题。
以敏捷方式交付复