【一两年前收集整理的资料,感觉不错,放到博客上来】

作为软件测试计划的一部分,软件测试风险的分析与控制是其中重要的环节。如果前期风险分析与控制比较充分,那么会使软件的测试成功性大大增加,且可将由风险异常引发的额外成本(如人力,时间等)降到最低。查阅了网上很多关于软件测试风险控制的文章,其中不乏精品之作。本文将此类知识进行了归纳,查漏补缺,并在思维导向性上给出了简单的实施步骤,以使得在实际应用中能得到更好的运用。

第一部分:软件测试项目级的风险分析

1.          从人、料、法、环、时等方面分析测试项目级的风险分布

探寻测试隐藏的风险时,应招集测试全组成员举行会议, 建议采用头脑风暴和询问5Why的方式进行,以集思广益和深度挖掘。下面就在鱼骨图中以TQM (全面质量管理) 的人、机、料、法、环等五个方面来全方位的分析和罗列项目级可能隐藏的风险 (注:考虑到在软件测试中“机”这一项更多的属于环境这一分类,故删除此类。另外时间对于软件测试是一个非常重要的属性,故添加之)。

下面对鱼骨图中的各个分支及子分支进行相应注解:

,即测试人员:

l   业务不熟:测试人员对被测系统的业务流程不熟悉,体现在对需求的理解上把握不准、理解不透侧、理解错误等。

l   测试人员变动:离职,岗位调动,请假等。

l   定位效应:测试过的可靠的功能,特别是在多次回归且没有发现问题,在此后往往会认为此功能是可靠的。

l   疲态:某一些功能点一直由某一位测试人员测试,经过多次回归后,测试人员对该功能点的测试显示出倦意和缺乏兴趣。

l   同化效应:经过和开发的长时间接触,往往会被开发的思维逻辑所同化,渐渐丧失从用户角度出发的测试观察点。

,即测试相关文档(在TQM中指的是生产原材料):

l   Spec (详细规格说明书)缺失:只有PRD(项目需求概要说明书),没有spec。笔者所在的公司,早些时候的产品更多的时候只有PRD,没有Spec。

l   需求变更:这是最不想,但又最经常发生的事情

l   测试用例/数据设计不充分:某些时候由于编写测试人员的个人因素或时间的限制等方面因素导致。

l   质量标准不统一:如某些Bug的优先级方面,测试和开发的认同不一致。

,即测试方法和实施:

l   错误或缺失测试方法:对功能点没有采用正确的测试方法,或某些测试方法没有被忽视,如边界测试等,导致测试不充分。

l   场景的缺失或部分缺失:Spec非常详细,所有的精力放在功能点的测试上,忽视了业务场景(Spec中无定义)的全(100%)测试。

l   测试用例实施不充分:测试用例由于各种原因没有完全测试,如在回归测试中。

,即测试环境:

l   被测软件版本不统一:没有有效的配置管理,这种情况及易出现

l   测试软件环境不一致:测试员之间或和开发之间的操作系统类型不一致、操作系统的干净程度不一致。

l   测试硬件环境不一致:测试员之间或和开发的设备不一致,如CPU频率,内存大小等。

l   测试硬件未及时到位

,即测试时间:

l   测试时间不足:里程碑之间留给测试的时间无法满足全测试要求。

l   测试时间延长:由于需求方突然宣布原进度表中的里程碑时间点延后,导致项目的进度表一下松弛了许多。笔者参加过的两个项目就遇见过这种情况,我们为世界某著名品牌电脑供应商开发并提供随机软件。在项目进展到中后期时,客户忽然通知我们暂时不安排我们的软件在他们这一版本系统中进行安装,要等到下一版本,时间延迟可能长达三个月,甚至更多。

注:以上五个方面不可能将所有软件测试中潜在的风险全部罗列,旨在给出思维方式。

2.          采用FMEA评估及分析风险项

在采用FMEA对风险进行评估和分析前,有必要先熟悉一些FMEA的知识点。

l  FMEA (Failure Mode Effects Analysis) :潜在失效模式和结果分析。即找出产品/过程中潜在的故障模式根据相应的评价体系对找出的潜在故障模式进行风险量化评估;列出故障起因/机理,寻找预防或改进措施。

l  FMEA关键项

ü  Function (功能要求): What is design/process/service supposed to do at this stage?

ü  Failure Mode (潜在失效模式): A specific means by which a design (product), process, or service may fail.

ü  Effect (潜在失效后果): What happens when the failure occurs?

ü  Severity (严重度):  How serious is the consequence of the failure? The value is 1~10.

ü  Cause (潜在的失效起因): What can occur to cause the failure?

ü  Occurrence (频度): How often will the cause/failure occur? The value is 1~10.

ü  Current Control (现行控制):  Current method to detect/prevent transmission of failures to subsequent “customers”.

ü  Detection (探测度): Can the cause/failure be detected if it occurs? The value is 1~10.

ü  RPN (风险顺序数): Review Risk Priority Numbers, RPN = (Severity) x (Occurrence) x (Detection)

ü  Recommended Actions (建议措施): What can we do?

ü  Responsibility & Target Completion Date (责任及目标完成日期): When it can be fixed?

ü  Actions Taken Result (措施结果): The actually result after action have been taken.

 

l  FMEA流程:

本文只给出了简单流程示意图,更详细的流程做法,请参看《FAILURE MODES AND EFFECTS ANALYSIS》Kenneth Crow 中的FMEA Procedure章节。

下面给出一个FMEA的简单模板,可以参照下图的表格填写上面人、料、法、环、时五大因素中所提及的各个风险子项填写在Function一列,并按公司的切实情况填写后续各列。

第二部分:软件测试用例级的风险分析

1.        测试用例风险分析的目的

在进行回归测试等情况下,从所有测试用例集(含功能点和场景测试两部分)中如何选择最小测试用例集,是一个值得思考的问题,本文仅想从测试用例风险系数等级划分来对这一问题进行部分探讨。对所有测试用例进行风险系数等级划分,并按等级数进行排序。在选择回归测试用例集时,从中挑选风险系数等级级别的高的测试用例进行优先测试,最后根据项目进度条件从风险等级高到等级低的合理选择回归测试用例集。

2.        采用风险矩阵评估及分析测试用例优先级

测试用例

风险

出现概率(1~10)

后果与影响(1~10)

风险系数(=出现概率x影响)

规避措施

 

第三部分:总结与说明

1.          本文没有对项目管理方面的隐藏风险进行探寻,如项目经费成本风险分析等。仅从测试本身考虑了风险分布,角色定位于测试项目Leader,而前者则是PM。

2.          本文的标题定为测试风险分析,所以对于发生风险后所应该采用的规避措施,没有在文中给出,可采用根据公司内容的实际情况采用头脑风暴进行解决方案的探讨和筛选,也可参考网上一些文章所建议的解决方案。

3.          风险分析的方法有很多种,如Boehm的六步风险管理法、Rex Black在《软件测试核心过程》一书中提到的风险分析过程等都是比较优秀的方法,但其精髓和FMEA、风险分析矩阵是如出一辙,个人觉得以表格的形式展示更加形象化。

实施软件测试风险分析&回归用例刷选的更多相关文章

  1. MVC3+EF4.1学习系列(三)-----排序 刷选 以及分页

    上篇文章 已经做出了基本的增删改查    但这远远不足以应付实际的项目  今天讲下实际项目中 肯定会有的 排序 刷选  以及分页. 重点想多写点分页的 毕竟这个是任何时候都要有的 而且 我会尽量把这个 ...

  2. NumPy 排序、条件刷选函数

    NumPy 排序.条件刷选函数 NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法 ...

  3. mysql函数date_format统计刷选按年月日统计的数据

    /*原型*/ SELECT count(did) AS sum, date_format(releasetime, '%Y-%m-%d') AS releasetime FROM hengtu_dem ...

  4. mybatis----Integer = 0 刷选不出来条件原因以及sql改法

    Xml写法: POJO: 当status的值为 0时该where SQLand status = 0并未正常拼接,也就是说test内的表达式为false,从而导致查询结果错误.但是,显然该值(Inte ...

  5. Excel2013复制内容粘贴到刷选的数据表中

    如何将复制内容粘贴到筛选后表格中: 1.需要一个表格:我要把这个表格里姓名列不包含A的项改为另外一个表中的数据列: 2.在姓名右侧插入两列,列A.列B: 3.在列A下第一格输入1,向下序列填充: 4. ...

  6. 15、numpy——排序、条件刷选函数

    NumPy 提供了多种排序的方法. 这些排序函数实现不同的排序算法,每个排序算法的特征在于执行速度,最坏情况性能,所需的工作空间和算法的稳定性. 下表显示了三种排序算法的比较. 种类 速度 最坏情况 ...

  7. Python之-在字典、列表、集合中刷选数据

    一.元组.字典.列表的遍历 1.元组遍历 元组的遍历借助 range() 函数,基本思想是通过元组的长度使用for循环进行遍历 #troup s = ["aaa","bb ...

  8. 吴裕雄--天生自然Numpy库学习笔记:NumPy 排序、条件刷选函数

    numpy.sort() 函数返回输入数组的排序副本.函数格式如下: numpy.sort(a, axis, kind, order) 参数说明: a: 要排序的数组 axis: 沿着它排序数组的轴, ...

  9. 2020软件测试工程师面试题汇总(内含答案)-看完BATJ面试官对你竖起大拇指!

    测试技术面试题 1.什么是兼容性测试?兼容性测试侧重哪些方面? 参考答案: 兼容测试主要是检查软件在不同的硬件平台.软件平台上是否可以正常的运行,即是通常说的软件的可移植性. 兼容的类型,如果细分的话 ...

随机推荐

  1. 用js获取页面颜色值怎么比较?

    一般情况下,我们通过十六进制的方式设置页面颜色值 如#64e164 但当我们通过js获取这个dom颜色值的时候,返回的值却可能不是十六进制的,所以比较的时候需要分浏览器进行 在火狐和谷歌浏览器中,返回 ...

  2. Hadoop SSH+IP、SSH+别名 免密登录配置

    1.为什么要进行 SSH 无密码验证配置? Hadoop运行过程中需要管理远端Hadoop守护进程,在Hadoop启动以后,NameNode是通过SSH(Secure Shell)来启动和停止各个Da ...

  3. 高CPU、数据库无法读写的真凶

    有兴趣的同学可以参考如下系列文章,都是针对dump分析的实战和总结: Windbg DUMP分析(原创汇总) http://www.cnblogs.com/LoveOfPrince/p/6653341 ...

  4. 使用dom4j讲xml字符串递归遍历成Map

    package test; import java.util.ArrayList;import java.util.HashMap;import java.util.Iterator;import j ...

  5. net core 程序docker打包镜像并发布到官方store

    学习一个技术的第一步,总是要先打印或显示一个hello world的.当然,学习docker也不例外.上一篇文章已经简单的介绍了环境的安装和配置.接下来就要打印我们的hello world了. 首先我 ...

  6. SQL 调用存储过程

    --1调用存储过程 exec 存储过程名 参数 --2当表使用 select a.*,b.* from tb b inner join ( select * from openrowset('sqlo ...

  7. js中的函数

    [函数的声明及调用] 基础知识 1.函数声明的格式: function 函数名(参数1,参数2,....){ //函数体 return 结果: } >>>函数调用的格式: 直接调用: ...

  8. CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture)

    CSharpGL(42)借助帧缓存实现渲染到纹理(RenderToTexture) 渲染到纹理(Render To Texture)是实现很多OpenGL高级效果的一个基础.本文记录了如何用CShar ...

  9. Oracle Database Transaction Isolation Levels 事务隔离级别

    Overview of Oracle Database Transaction Isolation Levels Oracle 数据库提供如下事务隔离级别: 已提交读隔离级别 可串行化隔离级别 只读隔 ...

  10. BigDecimal四舍五入使用总结

    //BigDecimal四舍五入double f1 = new BigDecimal(1).setScale(2,RoundingMode.HALF_UP).doubleValue();//转化成字符 ...