测试与合规性
大多数合规标准,如汽车行业的 ISO26262 或制药行业的 GAMP,遵循 V 模型作为开发过程。V 模型要求将用户和系统需求进行分解,并在不同的细节层级创建规格说明。这是 V 模型的左侧部分。它还要求在各个层级进行验证,以确保系统满足要求和规格。这是 V 模型的右侧部分。可以参考图 12.8 来查看两侧的关系:

Figure 1. 图 12.8 – V 模型中的验证
该模型必须结合风险分析,在每个层级进行。发布阶段需要签署大量文档,这导致了一个缓慢的瀑布流程,包含长时间的规格、开发和发布阶段。
然而,这些标准基于良好的实践——如果你的实践比标准中的要求更好,你可以在审计中加以证明。标准并没有要求你手动进行验证,也没有规定阶段的具体时长。解决方案是自动化所有验证逻辑,并将审批作为代码审查添加到修改测试的拉取请求中(向左转移)。无法自动化的测试必须移至生产环境(向右转移)。这样,你就可以自动化整个 V 模型,并且每天多次运行:
-
添加或修改需求(例如,一个问题)。
-
创建一个拉取请求并将其与问题链接。
-
在代码库中修改系统设计和架构(例如,在 markdown 文件中),或者在拉取请求中声明不需要修改。
-
编写单元测试(即,软件设计)以及实现这些测试的代码。
-
编写或修改功能测试、系统测试和集成测试。
-
确保所有必要的角色都批准拉取请求,并确保在新更改被推送时审批仍然有效。
-
将更改部署到生产环境,并在那里运行最终的测试。
你还可以将风险管理作为代码来处理,这样就可以将其集成到自动化过程中。如果不这样做,你仍然可以将文档附加到问题上。这样,你就拥有了所有更改的端到端可追溯性,所有必要的审批,以及所有验证步骤都已完成。而且,你仍然可以快速迭代并定期发布到生产环境。