前言:算法
在测试领域,精准测试已经成了测试数字化的代名词,渐渐获得测试开发人员的关注,也是测试行业一个具备挑战性的议题,本文试图回答如下几个问题:安全
有必要作精准测试吗?微信
什么是精准测试?架构
精准测试适合的项目类型与关键特性是什么?分布式
设计和实现一个精准测试方案,要点与价值有哪些?函数
目录:微服务
1、非精准测试的五宗罪单元测试
2、精准测试:一种可追溯的软件测试技术测试
3、精准测试的核心:数据与追溯设计
4、精准测试的关键特性
5、精准测试体系方案的价值和实现
6、不一样类型对精准测试的需求程度
7、总结
1、非精准测试的五宗罪
精准测试这一理念之因此产生,主要是基于以下的6个方面的考虑:
测试过程和规范没法知足要求
项目验收缺乏具有公信力的手段
传统的手工测试效率较低
测试与开发的断层
新技术架构的挑战
随着测试行业的发展,软件测试作得愈来愈规范,但大部分的测试仍是基于对业务的理解,与真实业务数据还有差距,准确性难以保证,测试结果没法精确的对软件质量进行定义和判断,系统上线后,问题开始暴露出来,使用体验差,更有甚者形成巨大的经济损失。归根结底,就是由于测试不充分,没有引入精准的测试分析,仅依靠测试经验是根本没法判断的。
软件是拿来使用的。虽然软件项目验收过程当中验收的内容比较多,包括合同约定内容、技术协议、开发文档、产品文档、用户文档、程序代码等,但客户最关心的是他们的业务可否真的在系统中落地运行,而且运行良好,单凭投入少许人力进行业务功能的验证,抽样的检测结果不表明软件所有,可信性不具有技术公信力。
使用传统的手工测试,采用的是基于人工评定的黑盒测试方法,打造高可靠性的软件产品须要投入大量人工成本。因为测试执行没法精准量化控制,凭主观定性评价结果为主,对人力经验依赖大,人员变更状况大,质量抖动厉害,看不到明确测试差距和量化目标。虽然在不断的执行测试,但缺陷发现率并不高,无效的测试消耗了大量的测试成本。
缺陷处理的通常流程是:测试人员执行用例,发现缺陷就提交缺陷系统,开发人员看到缺陷,进行重现或远程调试。若是测试给开发提供的测试结果都是比较模糊的功能逻辑描述,重现缺陷须要花费大量的时间。若是测试人员采用了精准测试技术,经过执行的用例就能够找到对应执行的程序代码块,这样解决问题就会快不少,开发人员和测试人员之间的协同工做就会轻松好多。
采用分布式/微服务架构,使软件系统愈来愈复杂,测试的挑战性愈来愈大,采用传统的测试方法执行测试,系统质量也难以保证。
在移动互联网大力发展时代,软件开发对质量要求愈来愈高,而迭代开发要求项目周期愈来愈短,快速的版本验证面临挑战。
从字面理解,精准就是很是准确。很是准确须要用数字说话。
在测试领域,精准测试是一套计算机测试辅助分析系统,对测试过程的活动进行监控,将采集到的监控数据进行分析,获得精准的量化数据,使用这些量化数据进行质量评价,利用这些分析数据能够促进测试过程的不断完善,造成度量及分析闭环。精准测试是一种可追溯的软件测试技术。
精准测试的核心思想就是使用很是精确和智能的软件来解决软件测试的问题,从根本上引领从经验型方法向技术型方法的转型。质量的评估再也不靠经验,而是经过精准的数据来断定。
精准测试没有改变传统的软件测试方法,区别只在于,由软件去采集测试过程执行的代码逻辑及测试数据的过程,自动创建测试用例与程序代码之间的逻辑关系。在测试过程加入软件的采集过程,能够造成正向和逆向的追溯。
经过正向追溯,开发人员能够看到测试人员执行用例的代码细节,以方便进行缺陷的修复,测试数据能够直接为开发调试提供依据,快速定位并修复缺陷。
经过逆向追溯,测试人员经过修改的源代码快速肯定测试用例的范围,极大减小回归测试的盲目性和工做量,快速修订测试用例,达到测试覆盖率最大化。
软件测试示波器
在功能测试过程当中自动分析程序运行的一些数据指标,以波形的形式进行实时输出。示波器是一种实时的监控,实时的计算测试过程数据并展示。
执行一个测试用例之后,精准测试经过程序自动的记录和显示这个测试用例执行的代码。若是测试人员关注某一些代码行,它能够追溯出哪些用例在执行过程当中运行过这段代码。
根据代码的变更范围来直接精确的定位须要回归的用例,这样使回归测试所需的时间更短,回归的范围更准确。
精准测试覆盖率形式多样,最高支持标准MC/DC(修订的条件/断定覆盖)的100%覆盖率要求。
根据缺陷与用例的对应关系,快速找到执行用例对应的代码行。
根据前文所讲到的需求、概念和关键特性,咱们能够设计出以下的一种精准测试体系。这也是咱们的技术团队一直在客户现场采用的测试方案。
精准测试体系主要以持续集成平台、统一测试平台和测试监控分析平台为测试能力支撑。
经过持续集成完成代码的构建编译、静态代码扫描和测试环境部署;
使用统一测试平台实现自动化测试回归;
经过测试监控分析平台,精确、详尽的记录测试用例运行的状况,提供大量原生分析性数据,进行过后的缺陷分析、追踪,创建测试用例与程序代码的关联,实现测试用例和程序代码的双向追溯,真正实现数据化的测试管理。
精准测试的总体过程以下图所示:
精准测试须要结合持续集成、持续部署和持续测试的过程,并结合白盒测试技术和黑盒测试技术,实现代码规范、质量和安全扫描,完成单元测试及覆盖率的评测,经过自动化测试的手段实现系统的功能测试。经过测试监控分析平台,从静态测试和动态测试两个维度实现软件质量的精准化评估。
精准测试的核心流程就是经过测试监控分析平台实现测试用例和程序代码的双向追溯。
在测试监控分析平台的帮助下,实现测试用例和海量的代码执行信息自动关联,精确到函数级别及代码块级别。测试人员能够知道测试用例到底测试了哪些功能,覆盖了哪些代码。
上图就是测试用例到被测代码的正向追溯,经过正向追溯可直接在代码级定位测试现场故障和缺陷逻辑,并提供最后运行的时序数据;经过正向追溯自动记录产生功能对应的详细设计实现,辅助软件解耦和架构分析;经过正向追溯,能够迅速定位缺陷对应的代码执行逻辑,帮助开发人员快速修复缺陷,可追踪难复现缺陷。
相反,在测试监控分析平台的帮助下,能够实现程序代码到测试用例的反向追溯。下图就是反射追溯的一个过程展现。
经过反向追溯,咱们很容易就能肯定代码块对应的测试集,获取到的增量代码,经过智能用例选取算法,能够准确的肯定须要回归的测试用例。精准的肯定回归测试范围,避免了全量回归形成测试资源的浪费,既保证了质量又缩短了版本的迭代周期。
有了精准测试,覆盖率统计再也不是白盒测试的技术专利。使用精准测试技术,系统测试也能够实现程序的覆盖率分析,并且能够不须要源代码,实现运行代码的指令覆盖、分支覆盖、圈复杂度、行覆盖和方法覆盖的统计分析。
程序代码的覆盖率统计能够是单次执行的数据,也能够是屡次执行的累计数据,得到一段时间内或多人测试执行的累计效果,支持在软件研发周期内总体评估测试的覆盖程度。
传统的黑盒测试技术属于经验型模糊测试,质量、进度不可视,产生的无效劳动较多,系统与人员的管理成本极高,软件质量风险高。
传统的黑盒测试大约70%的缺陷很容易发现,但以后缺陷的发现效率会急剧的降低。而传统的白盒测试技术直接面对代码测试,难度大、效率低,仅关注覆盖率,无系统性。精准测试是采用传统黑盒测试与白盒测试相结合的模式,它能够在黑盒测试过程当中,经过专用软件自动采集白盒级别的运行逻辑数据,根据可视化出来的不足点和漏洞点,引导开发和测试有针对性的补充测试用例,提升缺陷发现效率。
精准测试体系的创建也是一个系统化的工程,须要长远规划,按部就班,并逐步完善。须要以理论为基础,以实践为准绳,持续改进,让精准测试体系使测试更加智能化,对质量评估更精准。
并不是是全部的项目类型,都适用精准测试,精准测试的核心需求是来自于对软件质量的较高要求,而不一样的项目类型对质量的敏感程度是不一样的。
移动互联网型的产品通常需求响应快,并且产品发布成本低,采用灰度发布,使用A/B测试方法替代传统的功能测试即便用小流量测试新功能,若有问题迅速下线,对发布质量并不太敏感。
项目型的产品通常以用户为中心,须要准确把握用户的需求,须要进行系统测试,一般采用用户测试的方式对项目进行验收,对项目的上线质量比较敏感。
产品型的产品需求由本身把握,产品的研发周期相对较长,一般都有独立的测试团队,须要按照必定的规程执行测试,由开发人员进行单元测试,由测试人员进行集成测试和系统测试,并且知足必定的质量目标才容许发布,对发布质量要求较高。
精准测试的核心是以自动化的软件对软件测试过程数据进行记录,从而实现双向的追溯:从开发到测试的正向追溯以及从测试到开发的逆向追溯。
经过双向追溯,咱们能够实现软件质量的实时监控,回归用例的智能筛选,测试覆盖率的精准分析以及软件缺陷的快速定位。
但精准测试并不是适用于全部的软件项目类型,互联网应用、项目级应用和产品级应用,对软件质量的需求,也就是对精准测试的要求是逐渐递增的。
精准测试的诞生,核心动因是对于软件质量的要求。不管是项目验收公信力手段、测试效率管控、测试与开发人员的协同以及复杂的分布式架构带来的挑战,无不围绕着对软件质量的需求知足。而软件质量的最终价值,是用户体验的提高。在Gartner提出数字化转型的双模式理念后,各个领域都在寻找各自业务领域里应用和实践数字化转型的方案,对精准测试的实现过程,实际上也是软件测试过程数字化的一种体现。精准测试经过提高软件质量,改善了用户体验,从而赋予企业数字化转型更可靠的软件能力。
关于做者:王俊其,普元软件产品部统一测试平台产品经理,十余年的开发与测试工做经验,一直专一于持续集成与自动化测试领域技术的研究,带领团队成功实施多个有关金融、保险、证券等客户的持续集成与自动化测试项目,现担任普元统一测试平台产品经理,全面负责测试产品研发、售前咨询、项目实施等工做。
关于EAWorld:微服务,DevOps,数据治理,移动架构原创 技术分享,长按二维码关注