随着软件交付时间的缩短,团队正在寻找在不影响质量或安全性的情况下加快行动速度的方法。在我们的网络研讨会,TSDD:通过测试和安全驱动的开发左移安全性,TestRail解决方案架构师Chris Faraglia和PreEmptive & Kiuwan解决方案架构师John Brawner分解了团队如何更早地将测试和安全性引入开发过程——以及为什么这种转变会带来更可预测、更有弹性的发布。
以下是他们涵盖的内容。
为什么发布敏捷性比看起来更难
如今,许多团队都在遵循敏捷或 DevOps 流程,但仍然难以交付可靠、按时发布的版本。问题往往不在于方法,而在于执行,尤其是在时间安排方面。
测试经常延迟到功能完全集成后开发周期的尾声。安全检查通常进行得更晚,通常是在最后一刻的强化 sprint 中。如果在此时发现问题,则几乎没有时间来修复它们,这会延迟发布,或者更糟糕的是,允许风险得不到解决。
当优先事项在周期中发生变化时,测试和安全工作通常首先被削减或降低优先级,以满足最后期限。这就是技术债务和风险的积累方式。
项目增量如何带来结构和灵活性
一种实用的解决方案是采用计划增量 (PI),即从 SAFe 框架中提取的 8 到 12 周的规划周期。这些有助于团队专注于以小型、可测试的块形式交付高价值工作。即使没有正式的 SAFe 实施,项目增量也可以帮助团队:
- 以更小、更易于管理的部分提供功能
- 更一致地衡量进度
- 在不破坏整个发布的情况下进行更改
这是一种灵活的方式,可以保持交付按计划进行,同时为整个周期的集成测试和安全性创造空间。
“Fast Flow”和左移:从一开始就构建质量
TSDD 的核心目标之一是实现快速流程,即快速、自信地将变更交付到生产中的能力。但快速流动并不意味着偷工减料。这意味着通过及早发现问题并从一开始就构建质量来消除开发过程中的摩擦。
这就是左移概念发挥作用的地方。团队不是等到发布周期结束才验证代码,而是将测试和安全活动移到软件开发生命周期的早期。
TSDD 通过鼓励积极主动的心态来支持这一转变:
“在开发开始之前就定义甚至执行测试和安全要求,确保从一开始就将功能和安全性内置到软件中。”
通过将测试用例和安全期望作为初始规划的一部分,并尽早集成 SAST 和 SCA 等工具,团队可以缩短反馈循环并最大限度地减少返工。这样可以更快、更安全地发布。
TSDD:从测试和安全性开始
测试和安全驱动开发 (TSDD) 的核心是在开发开始之前就使团队在质量和安全要求上保持一致。这不仅仅是首先编写测试,而是在开发人员、测试人员和安全工程师之间建立共识。
这种思维方式的转变鼓励团队尽早提出关键问题:
- 我们将如何测试这一点?
- 有哪些安全隐患?
- 我们是否构建了既可测试又有弹性的东西?
有了这些答案,团队可以减少意外,并从一开始就充满信心地进行构建。
以安全为中心的 TDD 实践
考虑使用 REST 登录服务。在构建之前,团队可能会编写一个 Postman 测试,以模拟使用过期的 OAuth 凭据进行登录尝试。
该测试将:
- 检查正确的 HTTP 响应代码
- 确保不返回任何敏感数据
- 验证是否提供了明确的错误消息
这种阴性测试对于验证已知风险特别有用,例如 OWASP 前 10 大风险中概述的风险。通过尽早编写这些测试,团队可以避免在 QA 后期发现关键问题。
DevSecOps 如何将各个点连接起来
TSDD 自然而然地适合 DevSecOps 方法,其中安全性嵌入到整个开发生命周期中。
主要做法包括:
- 风险评估和威胁建模
- 安全编码标准以防止漏洞
- SAST (静态应用程序安全测试) 在构建代码之前对其进行扫描
- SCA(软件组合分析),用于评估第三方软件包
- RASP (运行时应用程序自我保护) 和 WAF (Web 应用程序防火墙) 等运行时工具,用于监控生产
由于高达 80% 的应用程序代码通常来自开源组件,因此 SCA 工具对于管理风险和确保许可证合规性至关重要。
为什么自动化和反馈循环很重要
自动化在使 TSDD 可扩展方面起着关键作用。测试和扫描就位后,它们应该会自动运行,最好是在每个拉取请求或提交时运行。
这种方法创建了一个持续的反馈循环,该循环可以:
- 更早地发现错误和漏洞
- 减少手动测试瓶颈
- 在开发过程中支持更快的决策
与任何强大的 DevOps 实践一样,持续改进是关键。团队应定期评估哪些措施有效,哪些因素会减慢他们的速度,以及如何随着时间的推移改善他们的测试和安全状况。
整合所有内容
TSDD 不仅仅是一种方法,而是一种文化转变。它要求团队将测试和安全视为设计输入,而不是交付检查点。当这些实践从一开始就被嵌入时,结果是更稳定的发布、更少的延迟以及一个可以在不影响安全的情况下快速行动的团队。
如果您的组织希望在不牺牲质量或安全性的情况下更快地交付软件,那么 TSDD 是一个明智的起点。
以下是团队可以持续改进其测试和安全状况的几种方法:
- 早期测试创建: 在编码开始之前优先编写测试。使用 TDD,可以预先验证功能,并且从第一天起就可以测试和执行安全要求。
- 自动早期 SAST 扫描: 将静态应用程序安全测试 (SAST) 集成到您的早期开发工作流程中。在编写代码时对其进行扫描有助于在最容易修复时捕获漏洞。
- 持续的安全反馈:不要等到 sprint 结束才运行安全检查。相反,使用在开发过程中自动发现问题的工具将持续的反馈循环构建到您的管道中。
- 促进跨团队协作: 保持开发人员、QA 和安全之间的沟通渠道畅通。共同的目标和早期的一致性有助于每个人更快地交付更高质量的工作。
通过将持续改进作为开发文化的一部分(而不仅仅是一次性的计划),您的团队可以构建不仅更快地进入市场,而且经久耐用的软件。
By 孙晟