为什么说左移测试能有效降低软件开发风险?
所有企业都希望(或应该)减少与软件开发相关的风险。但是对于为安全至关紧要的行业和金融行业服务的企业,需要尽可能消除风险,并在所有其他情况下将风险降至最低。
左移测试可以降低以下关键领域的风险,下面将详细说明:
- 安全性
- 可见性
- 法规和OEM合规性
- 可靠性
- 应用变更
- 外包开发
什么是“左移”?
“左移”是将关键的测试实践移至开发生命周期的早期。这个术语尤其在敏捷、持续和DevOps计划中屡见不鲜。那么,为什么需要执行早期软件测试?
许多测试活动发生在周期的后期,需要花费更长的时间才能找出问题所在,并且需要更多的修复成本。左移是关于将缺陷的识别和预防移到较早的阶段。如果你不这样做,并在开发周期的稍后阶段等待执行测试实践,到那时,特别是非功能性业务需求(即安全性和性能测试)在代码中已根深蒂固,以至于你只能不停地打补丁而无法正确地修复它们。那么,将测试“左移”如何对软件的关键领域有所帮助?
安全性
受损的应用程序安全性会导致信息泄漏、停机、污损和恶意软件安装。根据Web Hacking事件数据库,这些后果占安全相关结果的61.6%。
传统的安全性方法是通过猜测和经验的结合来模拟直接攻击。传统方法由于过分依赖运气而无效且过时。使用左移测试,可以在开发时就避免这些安全风险。
可见性
组织面临的最大风险之一是缺乏决策依据。开发进度是否能按时完成?产品符合要求吗?现在是否需要采取任何措施来利用机会或减轻即将来临的客户问题的影响?
Parasoft的左移测试平台通过将来自每个软件开发基础架构的数据捆绑在一起,并根据已定义的公司策略应用上下文智能,从而为组织提供了前所未有的、无与伦比的、完整的可见性,从而推动了自动化的预防和控制流程,提供最高管理级别所需的商业智能。
法规和OEM合规性
不遵守安全关键性法规,政府或OEM法规可能导致召回、使合同无效、制定处罚或采取法律行动。尽管总金额因行业和项目而异,但它们通常是可观的。通过静态分析、覆盖率分析、过程定义和常规测量的组合,左移测试方法将合规性系统化为一个自动化的、气密性的过程,以确保控制风险。
可靠性
软件可靠性仍然是最显而易见的问题之一,可以通过左移测试轻松解决。崩溃、停机时间和缺少SLA的症状会严重影响公司在市场中的地位。通过将预防、检测和验证结合到一个持续改进的过程中,左移测试将确保减少或消除可靠性风险。
应用变更
在开发人员中,有一个老话:“如果调试是消除bug的过程,那么开发必须是将它们放入其中的过程。”用业务术语来说,每次代码更改都是一种风险。
左移测试通过执行可防止开发人员工作时出现结构和设计问题的编码策略,消除了引入新缺陷的风险。此外,左移测试策略将允许自动生成、执行和管理回归测试以及详细的覆盖率分析,从而消除损害现有功能的风险。自动化的同行评审分配可提供降低风险的最后一层,以确保适当的团队专家可以检查100%的代码。
外包开发
随着企业从高科技领域中廉价、缺乏经验的劳动力的风险中吸取教训,外包正逐渐消失。但是,许多企业拥有活跃的离岸开发和测试团队,并将继续沿这一道路前进。尽管策略各不相同,但成功的外包商会在现场和非现场建立多个缓解风险的门槛,以防范风险注入。左移测试很自然地适合在每个缓解风险的门口建立和实施编码标准,单元测试覆盖率以及同行评审的政策。
那你怎么左移呢?
为简洁起见,左移测试方法分为两个主要活动:
应用开发测试最佳实践
进行早期阶段的开发实践,例如静态代码分析和单元测试,有助于在过程中尽早发现并防止缺陷。
重要的是要记住,目标不是发现错误,而是减少错误的数量(尤其是那些会发布到版本中的错误)。最终,与发现更多的bug相比,首先创建更少的bug有价值得多,而且价格便宜得多。因此,通过标记可能“有效”但仍不安全的代码,采用一种主动预防性的安全关键编码标准。
编码标准是等同于工程标准的软件,它们是减少错误数量(除了更早发现错误),支持并从左移计划中获得最大价值的关键。编码标准是软件工程知识的体现,可以帮助你避免错误/危险/不安全的代码。要使用它们,你需要应用静态代码分析。
为了软件安全,这对于成功强化软件尤为重要。你想在代码中构建安全性,而不是对其进行测试。编码标准可让你从一开始就构建更安全的应用程序(即通过设计确保安全性),如果你受制于诸如 GDPR法规之类的要求,这会是一个好主意。
利用服务虚拟化实现连续测试
接下来,你必须接受在开发过程的所有阶段(包括后期)创建的测试,并不断进行下去。对于采用敏捷开发实践以在整个开发过程中提供连续反馈的团队来说,这一点至关重要。单元测试可以轻松地连续执行,但是由于外部系统的依赖性,通常很难将后期功能测试的执行转移到左手,在这里你可以利用服务虚拟化来进行连续测试。
服务虚拟化使你可以模拟可用性可能受限的相关系统,例如大型机、访问费、第三方服务或可能尚未准备就绪的系统。通过模拟它们,你可以在没有整个系统可用的情况下执行功能测试,并且可以将测试执行完全转移到开发桌面。
在性能测试方面,服务虚拟化使你可以在一切准备就绪之前进行测试,而无需对系统中的所有内容进行完整的实验。你甚至可以运行各种假设分析场景,例如,如果应用服务器运行速度快而数据库运行缓慢(在现实世界中很难实现),该怎么办。或者,如果我的服务器开始抛出一些有趣的错误,例如500错误,那将如何影响系统性能呢?
你可以随心所欲地推动系统运行,并尽早实施。
同样,你可以更早地开始进行安全测试。与物理系统解耦使你可以做一些更有趣的事情,这就是使模拟系统以不可思议的方式运行。现在,你可以真正进行安全测试了……你不仅可以在系统上查看受污染的数据和DDoS,还可以使系统充满数据包,发送格式错误的数据或攻击者常用的许多其他利用方法。因此,不仅可以进行更早的测试(左移),而且还可以比测试实验室或生产系统进行更深入的测试。