静态代码扫描为整个发展组织增加价值。无论您在开发组织中发挥的作用如何,静态代码扫描解决方案都具有附加价值,拥有软件开发中所需要的尖端功能,最大限度地提高质量并管理软件产品中的风险。
背景
微服务架构模式具有服务间独立,可独立开发部署等特点,独立开发诱发了技术上的分离,HTTP通信增加了问题诊断的复杂度,对系统的功能、性能和安全方面的质量保障带来了很大的挑战。
“微服务架构对测试的挑战
微服务架构模式下多个独立业务服务同时开展开发工作,每个系统都有各自的业务范围和开发周期要求,这样一来,下图所示的传统流程中产品经理提供需求,需求人员进行需求分析、开发人员进行开发,最后交给测试人员进行测试的方法,就无法满足测试覆盖和测试效率的要求。
相对于传统的单体模式而言,微服务模式下对测试带来的挑战总结起来包括以下内容:
- 1. 微服务系统模块层次化,需要保证模块内部代码的质量。这种场景下传统的端到端的测试无法满足测试要求;
- 2. 需要保证各个微服务系统内部模块间的正确性。系统模块间以及前端和后端通常会同时开展开发工作,模块间或者前后端通过接口(通常是Restful http接口)进行连接,而模块和后端往往没有界面,为了保证各个系统单个依赖系统的正确性,因此需要借助Mock技术隔离依赖的前提下进行接口级的测试;
- 3. 需要保证微服务系统中的接口一致性,即契约的一致性。需要通过契约测试手段保证契约的正确性,进而保证同步开发过程中的前后开发的正确性和一致性;
- 4. 需要保障单个微服务系统的正确性。需要进行组件级的测试进行微服务系统的正确性;
- 5. 需要保障整个系统的正确性。各个微服务系统串接之后通过端到端的测试保证整体系统的正确性;
“微服务架构下如何开展测试
针对上面提到的微服务对测试的挑战,一方面为了保证在服务各个层级上对微服务进行全面的测试,特别是对于分布式系统;另一方面又要确保测试执行的效率,这样才能保证持续集成/持续交付(CI/CD)。因此,总体的测试策略采用如下解决方法:
- 1. 开展「质量」文化。让开发人员建立起代码「质量」意识,用于保障模块内部的质量;
- 2. 采用自动化测试手段。在微服务架构中,开发分解为负责不同服务的多个小组,测试人员往往每天要花费大量的时间,了解不同团队的开发进度。如果还需要手动进行回归测试(Regression Test),最终将会不堪重负。所以自动化测试在微服务模式下是必须采取的手段。
- 3. 分层的自动化测试策略。自动化测试分层在Mike Cohn 提出的测试金字塔(Test Pyramid)原理中进行了详细的阐述。它提倡在代码级、接口级、应用级进行不同粒度的测试来保证系统的质量。从自动化测试投入比例来