查看原文
其他

质量评估模型助力风险决策水平提升

欢迎关注的 百度Geek说 2023-03-24


作者 | 黄佳鑫

导读 introduction

基于风险驱动的交付是百度实践智能测试--感知智能阶段非常重要的研究方向,基于风险驱动的交付,源于三个现状:

一、不是所有的项目都有风险,80%以上的项目无任何的关联bug和线上问题;

二、不是所有的测试任务都能够揭错,无效的质量行为(有bug发现的质量行为/所有质量行为)占比非常高;

三、测试人员也有误判的可能,漏测一直存在。

通过上述三个现状,可见如果能够有方法逼近:测该测的项目、评风险评得准,那么对测试效能和召回都有极大的帮助。

接下来我们将持续刊登三篇文章,来揭秘百度实践基于风险驱动的交付的冰山一角:

1、百度搜索业务交付无人值守实践与探索:从具体业务实践的角度介绍风险评估在交付无人值守领域的关键作用。

2、AI技术在基于风险测试模式转型中的应用:从测试全过程的角度介绍各环节以风险思维+AI技术加持的各种应用场景。

3、质量评估模型助力风险决策水平提升:从思路、方案和模型的角度介绍质量度模型的实现和挑战。

本文介绍第三篇:质量评估模型助力风险决策水平提升。



GEEK TALK

01

背景

无论自动化测试任务执行、项目准出还是项目流程流转主要依赖人员判断,而人员能力是有区别的,进而会影响质效,本文章主要介绍我们在探索和实践的一条路径,就是通过机器学习模型,让计算机自动,辅助甚至是替代人工,进行决策。

项目如何评估是否可以准出,如果是人工决策方式,一般分为三步:

1. 查看交付过程涉及到的数据以及报告,包括查看代码、以及预估影响面、质量活动内容等;

2. 结合这些数据给出决策结论,包括决策可以进入下一个流程、需要 qa补充测试;

3. 跟进该项目,在后续环节是否有bug漏出,如果有bug漏出会去做 case study。经过case study学习,以及一些经验交流,QA不断提升测试认知,从而在下一次需求测试中,能做的更好。

基于这种人工决策的方式,存在一些弊端:

1. 查看数据,每个人需要跨多个平台,查看各种测试活动的数据,看数据的重复性比较大,而且成本比较高;

2. 依赖人工经验给出决策结论,人员素质参差不齐,特别是新老员工的测试经验的差距比较大,完全基于人工经验去评估,会存在判断盲区,造成漏测;

3. 如果测试人员流失,会导致测试经验流失。并且测试人员的精力有限,当自主测试项目比较多,会影响测试项目的交付周期。

那么如何破局呢?

机器学习其实在很多实际的业务场景当中遍地开花,比如基于人工进行决策,现在通过机器自己去决策场景:

  • 自动驾驶

  • 智能的自检系统

  • 通道人脸安检之类

这些场景都是能够让机器自己去做决策,我们是否可以引入机器学习,在质量场景里面让计算机去做风险决策呢?

以自动驾驶为例,自动驾驶从 L0 到 L5一共有六个等级,随着等级提升,自动化程度也同步提升,人工需要参与程度不断降低。

  • L0 阶段属于纯人工驾驶阶段,需驾驶员完全去做所有的操作以及环境监控;

  • 到 L2 阶段的时候,是一个辅助驾驶阶段,汽车可以做部分自动驾驶,比如做一些加速、减速或制动,但是驾驶员还需随时保证能够控制这个车辆,以及全部的环境监测;

  • 到 L3 跟 L4 的时候,就是条件自动化跟高度自动化阶段,汽车大部分时候能够自动操作,人只在偶尔需要去关注一下,部分的环境监测;

  • 到 L5 的时候,就是完全全自动化驾驶阶段,让人完全变成了旅客。

以自动化驾驶为例,其实是很契合我们期望的,即基于机器进行风险决策:从纯人工决策 -> 辅助决策 -> 条件自动化 -> 高度自动化 -> 全自动化决策。


GEEK TALK

02

整体方案

要达到机器代替人自动决策,如何做到呢?

整体方案是构建质量评估系统,机器自动决策,自动流转流程,核心由风险识别、风险控制和风险决策3部分组成,具体如下:

  • 风险识别: 识别动、静态风险点,包括人员,项目,代码变更和影响范围的风险;

  • 风险控制: 针对识别的风险,推荐测试活动、测试用例,自动构造测试输入进行测试控制;

  • 风险决策: 针对风险控制后的风险遗留概率和风险发生可能造成的影响,给出测试建议,风险等级和决策结论,就可以根据决策结论和建议做相应的辅助/自动化操作。


第一、风险识别:
风险识别这块,主要解决采集什么数据,如何采集,以及怎么串联这些数据?
目前我们大概采集了5个维度共50+维特征,通过提测单+需求卡片id+自动化流水线id建立该维度血缘关系,即可以获取卡片对应维度的特征数据,便于后续做控制和决策。同时,支持业务自定义特征和数据的快速检索。

第二、风险控制:

风险控制,主要解决需求该如何测试。
传统的基于人工经验执行方式,一般是rd提测后,会触发所有流水线所有测试活动和用例,全部执行完,去判断测试是否充分。基本是看整体的代码覆盖率是否达标,以及挂载在流水线的测试用例是否执行通过,如果覆盖率不达标,就需要人工去补充case来提升代码覆盖率,或者任务失败了,去做问题排查。基于人工的方式,它的优点就是简单、粗暴、省事,无论风险怎么样?
但是它缺点是什么呢?从效能角度来说,因为不区分不同需求、不同风险,所有任务、所有用例重复和不必要的执行,会带来时间和资源的浪费。从质量角度来说,完全依赖于人工经验去判断,给出充分度的评估,人工是有盲区的,特别是依赖影响,很容易造成漏测。
风险控制直接以风险驱动执行模式,大概是一个怎样流程呢?
  • 首先识别所有风险;

  • 然后针对于变更,比如影响接口、影响场景有针对性的测试,能够覆盖变更用例做定制执行,如果有覆盖不到的,甚至可以推荐一些自动生成用例执行;

  • 测试执行后,进行充分度评估,包括:一次测试输入的测试参数组合是否充分?执行的覆盖情况是否充分?输出、断言、error 类型是否充分?从而更加全面的评估测试充分度。如果不充分,可以给出是哪一块不充分,需要提升,进而补充相应测试。

以风险驱动执行方式,优点是按需执行,效率和利用率大幅提升。质量深度评估,给出测试建议,量化识别,减少人工盲区,经验得到沉淀,从而提升质量。缺点是对白盒识别能力强依赖,机制较复杂。



第三、风险决策:

风险决策主要解决识别风险,并进行控制后,如何给出决策结论?
先来看一下现实生活中场景,感触会比较深。主要举两个例子:一个是身体体检、一个是风控放贷。
身体体检,去做身体的风险预警:
我们会针对不同的群体,有不同的体检单,比如男生跟女生的体检单可能不太一样。然后每个不同的体检单,体检项上也会有区别,针对不同体检项的结果会根据体检项产生的危害程度,在体检报告上分类型去做决策推荐。比如待就诊的?还是待复查的?还是待关注的?整体是偏专家经验规则化的决策。
风控放贷,决定一个人可不可以放贷,放多少额度:
首先会去过一个黑名单的规则,看一下年龄有没有达到18岁?或者年龄已经八九十岁的?可能直接通过黑名单的机制,就不会给他放贷。
那么没有命中规则的部分呢?就没办法再通过一些确定性的规则去给出结论,那就依赖模型,抽取每个人的一些基础特征,或者是附属的一些特征丢给模型去训练,从而给出信用评分。就像蚂蚁芝麻信用分,基于这个信用分,去决定是否给这个人授信?以及授信额度?整体风控放贷的这个模式,其实是专家经验加风控模型的组合决策方式。
基于两个场景启示,我们提出决策方案主要是基于规则+模型+影响面进行量化决策。首先是规则加模型,给出风险发生概率,然后再结合风险发生之后可能会造成的损失,共同做决策结论。

风险决策过程,主要涉及到两个重要部分:风险发生概率的评估以及 结合风险产生的影响给出决策结论。接下来,介绍这两部分如何建设。

  • 风险发生概率评估

一个测试任务,是否有风险以及风险发生概率的大小本质上是一个二分类算法,通过模型从历史数据自动学习经验,预测未来,二分类算法很多,那么该选哪一个,主要从三个角度:

1. 首先是从实际到我们业务测试数据的效果来看效果是怎么样的;

2. 然后模型需要可解释。因为给出决策结论后,qa或者rd需要知道,为什么给出对应的结论,或者拦截后需要披露拦截原因。所以对于模型可解释性要求比较高;

3.质量数据量比较少,对速度要求比较高,所以模型不能太复杂。如果数据量少、模型太复杂就会很容易出现过拟合。

基于上面三个考虑,最终选择逻辑回归作为分类的模型,逻辑回归公式如下:

θ表示权重,x 表示选择的特征

比如:x1 是一个开发时长,X2 是一个变更函数类似特征。

给模型输入的特征就是风险引入跟风险移除的各种维度的特征灌给模型去学习,模型效果评估,因为分类算法,所以典型的评估指标主要是正确率、准召率指标。


  • 风险决策给出评估结论

我们无法在有限时间穷举所有可能,因此,测试本质是规避风险,减少风险发生概率和发生问题造成的危害,风险矩阵是一种综合两者的风险评估分析的方法,主要用于风险评估领域,y 轴是风险发生的问题的概率,x 轴是问题发生产生的危害,交叉的区间里面,就有不同的结论:

  • 红色这一块是代表伤害事件发生可能性极大,并且任何情况都会出现,这种肯定是要拦截的;

  • 针对于会发生少量的伤害事件但是可能性极小的、或者压根就不会发生,但是在极少特定情况下可能会发生,这种就会通过,无人值守直接流转或者由 QA 确认之后再进行流转。

有了风险识别与控制决策后,需要有统让QA去看风险决策的内容,所以会有风险可视化报告,包括:

  • 风险的数据;

  • 决策的结论以及反馈建议。

报告中有入口能够让QA进行反馈,整个反馈闭环的一个流程大概就是,人工反馈,再结合后续的环节去看有没有BUG反馈,结合这些反馈,我们会去提取模型优化路径。优化路径提取完,会去看这个优化路径,里面有哪一些特征需要提取,提取完之后灌给模型去迭代,然后再到下一轮的模型上线落地,循环迭代优化。

具体报告示例:


GEEK TALK

03

落地效果

整套方案的落地收益主要是带来测试思维变化,决策水平提升明显,测试思维变化主要是越来越多业务依赖报告去评估,给出决策结论,有部分业务甚至直接基于模型结论自动流程流转。

决策水平提升主要体现在质量和效能的提升。

  • 质量:2022Q3共识别1123个不可自主测试项目,共拦截318个bug;

  • 效能:2022Q3共识别4345个自主测试项目,约节省2172人天;可自测项目评估等待时间得到大幅降低:从50H降到2H。


GEEK TALK

04

总结

上述内容质量风险评估系统共包含风险识别、风险控制、风险决策和风险闭环四部分,我们现在能力还需要持续完善。如果类比自动驾驶的 L0 到 L5 层级来说,当前处在辅助决策这一阶段。后续我们会不断的完善、深耕所需能力,往条件自动化跟高度自动化这个方向前进,期望未来能够实现完全自动化决策的这种能力。

能够实现完全自动化的这种决策能力,未来的智能交付系统,可能是这样一个的流程。

发起需求,请求质量评估系统,质量评估系统来告知应该进行什么样的测试活动、测试用例甚至应该由谁来执行测试;

在执行过程中,请求质量评估系统,检查测试充不充分?有哪里还不充分,如果执行一半已经够充分,可以给出终止建议;

测试完成后,请求质量风险评估系统,返回是否还有遗留的风险点没有测?还需要补充哪一些测试?给出一些拦截建议,比如高风险拦截后分配QA跟进,补充测试用例,再做测试。如果是低风险,可能就自动流转到下一个阶段,减少人工参与。

 END


推荐阅读:

合约广告平台架构演进实践

AI技术在基于风险测试模式转型中的应用

Go语言躲坑经验总结

PaddleBox:百度基于GPU的超大规模离散DNN模型训练解决方案

聊聊机器如何"写"好广告文案?

百度工程师教你玩转设计模式(适配器模式)


一键三连,好运连连,bug不见👇

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存