lsekfe 发表于 2023-12-25 13:49:37

超实用的测试万能法则——帕累托分析!

20/80原则来源于意大利经济学家维弗雷多•帕累托(Villefredo Pareto)提出的财富占比帕累托原则:80%的财富是掌握在20%的人手中的,而余下的80%的人只占那剩余的20%财富,而后这个理论延伸为:至关重要的少数和微不足道的多数。
帕累托理论可以用在方方面面,不管是时间管理、人员管理、还是个人规划,任何一个你能想到的对象,都可以尝试将它切分为至关重要20%和并不重要的80%。
如果延用到软件测试之中,它可以帮助我们更好地处理测试管理、测试计划制定, 测试用例设计精度控制, 以及用例执行权重配比等问题。
最神奇的是,我们甚至可以利用已发现的缺陷,结合帕累托效应来反向追踪、定位质量隐患区域,而这一点也是测试理念中的“缺陷集群效应”的体现:通常在少数模块中包含了大部分在发布前测试中发现的缺陷,或者是造成大部分运行失效的原因。


预测的缺陷集群效应或实际观察到的缺陷集群效应,应作为风险分析的重要输入,并进行集中测试。
一个软件产品中,80%区域都是比较安全的,理论上会存在剩余的20%缺陷,存在较高风险的只是少数区域。
但这里的区域并不代表广义上的功能或模块,不可能存在完全没问题的功能,也不存在集中所有问题的个别功能。所以这里的区域,是一个具备一定特性(共性)而归类成的抽象概念,并不是自然划分或业务划分出来的功能或模块。
测试80%精力应该分配在最重要的20%功能上, 即核心功能、核心模块和高风险区域。


产品层面划分
以产品层面来区分功能模块,可以分为:核心模块、高使用率模块以及安全性模块;这些模块应当被分配更多的测试精力。
此处的测试精力体现在所有测试功能内容上,包括测试方案、测试时间、测试用例占比、测试执行强度、探索性/随机测试的测试时间等。


功能、特性层面划分
以功能、特性层面,来区分重点区域,可分为影响最大的处理区域、高集成度区域(具备与多种模块交互的区域)和功能核心区域,这些区域应当被分配更多的测试精力。
这里的测试精力则体现在测试用例设计深度、测试执行强度、探索性/随机测试的发散度和时间等。


测试者执行层面划分
以测试者执行层面,来区分测试精力分配,则是80%测试精力应分配给自己手上最核心(最重要)的任务部分,主要用于优化工作效率上。其余的20%分配给其余模块和细节部分。
对于手上的测试工作内容都很重要,不分主次。
这时候主要考虑的角度是是否存在可以优化的工作,其主要的解决思路是:把可优化部分通过工作优化来降低时间占用,从而将80%时间用于不可优化部分(间接提高工作效率)。


例如:
1. 选用更快捷并且可以达到同样测试目的方法或手段;
2. 选用规避性的测试方式或业务流程 (不影响当前测试点)来直接绕过比较耗时或被阻塞的区域;
3. 尽可能拆分测试对象,尤其是尽量分离出可以静态测试的部分,来大幅度节省时间。
对于手上的工作内容比较杂乱,且带有非测试执行性质工作(测试工作依赖的周边隐含工作)。
这时候的考虑的角度主要是如何尽可能的减少其他工作内容的时间占比,来保障将80%时间用来做关键测试工作(测试工作中隐含工作,如测试数据准备,环境调试、维护,沟通协调,设备等资源准备等)。


主要的解决思路有两种:
1. 工作内容切分:秉承着越专精越高效,工作越集中越高效的原则
将一个涵盖很多工作内容的大组,切分成分别负责不同内容的小组,来协作完成全部工作。这样对于不同小组自身的核心工作就各不相同,但都可以做到80%以上占比的集中性。
组内所有人员均处理同一工作内容,不如将人员分给独立处理不同工作内容的小组。
2. 分别提高各工作内容的效率:单元化的分别提高效率,来释放足够时间给核心测试工作。
例如自动化数据创建;预调试(Health Check)来提前识别环境问题以便及时规避问题,从而减少时间浪费;
通过流程优化来减少沟通成本;
设备和测试用例分布精确化、分工化来降低每个测试人员的测试成本等。
以B/S架构的银行系统为例,整个系统由前端、网关、后端、服务器,可能还包括数据中台,这几部分组成。
在个人账户功能中,核心模块是与个人账户相关的后端服务,即80%的重点要放在后端服务和数据库的验证上,关键是数据的传输和验证。
那么为了保证这个功能的正确,又需要花费80%的精力在前期需求的澄清和验证上,尤其是各个字段的数据类型和长度限制,这里是往往容易发生问题的点,也是上文提到的高使用率模块;
安全性模块在这里则是分散在系统端到端操作的各个环节中,从前端向后端则依次是UI界面、网关、后端服务接口、服务器数据库。
这些环节中对于数据的校验是用最小成本获得最大收益的典型,只需要对校验功能和特殊值及边界值进行验证处理,就可以避免系统测试时很多奇奇怪怪的问题。
而此时,UI元素的显示等边缘功能,就是可以用剩余的精力来进行覆盖,对核心模块的测试,就可以使用深度测试来对应用场景和特殊场景进行覆盖。
用这样的精力分配,可以保证在模块层面,将大部分的精力集中测试这些关键模块和功能,是可以起到事半功倍的效果的。
以功能特性来区分的话,从业务角度来划分是非常清晰的,以提到的个人账户功能为例,基本功能是查询、存取款,围绕着基本功能,则是衍生业务,属于高级程度功能模块,例如理财、基金、信用卡等等;
而基本功能的查询,则是影响最大和最核心的功能区域。按照这样的分类,则需要将最主要的精力集中在核心模块上,每次查询的结果返回,则都需要和数据库及后端接口返回进行端到端的处理。
以上给出的是对“帕累托”效应的应用思路,根据每位测试工程师不同的分类,可以进行自己的划分,灵活地分配精力和测试深度。
通过对帕累托效应的灵活运用,结合测试理论,可以很快地将测试任务进行有效排序,做到集中精力应对关键问题,从而提升测试效率,确保测试质量。

页: [1]
查看完整版本: 超实用的测试万能法则——帕累托分析!