透明可测试原则
透明
透明是一种抽象的概念,笔者更倾向于将其感知为对代码,对运行时程序的掌控感。软件工程师们常常自嘲
即使是很小的项目,简单的代码,也要保证其透明性。通常通过下面手段来保证架构的透明性
- 通过
Lint ,单元测试,集成测试等在部署前前置地发现问题 - 简单的数据结构和算法。
- 通过日志告诉程序做了什么
- 通过
telemetry 接口,让我们可以检阅当前应用程序的( 数据) 状态。 - 在分布式系统架构,需要有
tracing 功能,方便调试业务问题。这在多用户复用相同逻辑的Web 应用中特别重要。通过一个唯一ID 能Track 到整个业务流。
Testability | 可测试性原则
研发团队的首要任务是提供稳定的服务,然后是提供符合客户需求的、易用和低成本的产品。但是绝大部分的开发者都知道,在提供稳定服务的同时,面对快速发展的客户业务场景,我们还需要不断拥抱变化。
-
软件的目的是帮助他人;
-
相比降低开发成本,更重要的是降低维护成本;
-
变化定律:软件存在的时间越久,它的某部分需要变化的可能性越大;
-
缺陷定律:软件出现缺陷的可能性,正比于你对它所做修改的程度;
-
简洁定律:软件任一部分的维护难度,正比于该部分的复杂程度;
-
测试定律:你对软件行为的了解程度,等于你真正测试它的程度。
软件的目的就是满足客户的需求,而随着时间的推移,用户需求总会改变;伴随着用户需求的改变,软件也需要适应新的需求而做修改,修改必然会引入缺陷;如果要排除缺陷就必须进行测试。
但目前软件行业的现状大部分面临这样的问题,即无论花多大的成本去测试,真正的用户行为背后的需求总是不可能被完全满足的,缺陷总是会有的,这时我们最后的安全网就是“灰度发布”(又名“金丝雀发布”