测试策略描述了组织的通用测试方法,通常作为项目测试活动的起点。典型的测试策略包括通用产品风险(影响产品质量的风险,也称为质量风险)和项目风险(影响项目成功的风险,也称为管理风险)、测试级别的描述(例如:单元、集成、系统和验收测试等)和测试相关的概要活动(例如:定义测试目标、角色和职责、主要任务、入口准则和出口准则等)。制订测试策略的第一步是对软件产品进行分析以开展通用风险的评估,并基于评估结果,提出符合测试方针的应对措施以缓解风险。
本文将以产品风险为例,和大家聊聊通用产品风险评估相关的主要测试实践。需要注意的是,本文并不是完整讲解风险管理的过程,只是截取了与过程域“建立测试策略”相关的通用产品风险的子实践。将其归类为2个部分:
1、识别风险
2、评估风险
一、识别风险
风险识别主要确定在软件开发生命周期中存在哪些产品风险,并以文档的形式进行记录。为了更好地开展风险识别实践,需要识别和选择合适的干系人参与这个过程。有时候,有些干系人需要扮演代理人的角色,即你无法直接邀请到这些干系人。例如:在针对大众市场的软件开发过程中,只能邀请部分潜在的用户作为大众市场的样本,以他们为代表识别软件产品中的产品风险。
根据组织、项目和产品的特点不同,可采用的风险识别方法也会有所不同。常见的风险识别技术,例如:头脑风暴法、专家咨询、风险模板、问卷调查表、风险检查表等,这些技术在实践过程中常常会结合在一起使用,例如在风险检查表基础之上开展头脑风暴。下面是基于问卷调查表的一个例子。
二、评估风险
评估风险阶段,其主要目的是确定风险的分类和分组、可能性和严重程度、确定风险优先级、跟踪风险的责任人等。
假如在风险识别过程中采用的是风险检查表,那么此时在检查表中可能已经提供了风险的分类,例如:资源、技术、沟通、质量等,可以更好的思路开展头脑风暴。而假如在识别过程中,主要采用的是头脑风暴法,那么需要在评估风险时对识别的风险进行分类和分组。例如:基于质量属性的分类、软件产品领域内的分类、常见风险列表分类等。下图是基于ISO 25010质量模型得到的质量属性分类。
确定风险分类之后,接下来需要定义风险的参数:可能性和严重程度。其中:
1)风险可能性指的是被测对象中存在潜在问题的可能性。其主要从技术层面进行分析,有时也称为技术风险。可能性会受到各种因素的影响,例如:被测对象采用技术的复杂性、软件产品参与人员的技能等;
2)风险严重程度指的是当风险发生时,对用户/客户或其他干系人影响的严重性,有时也称为业务风险。严重程度会受到各种因素的影响,例如:被测对象功能使用的频率、对组织形象的损害等;
判断风险高低依赖于风险的上述两个参数,从这里引出一个“风险级别RL(Risk Level)”的概念。通常情况下,风险级别公式可以表示为RL = P * S。在判断风险级别过程中,可以采用定性分析、定量分析,也可以是两者的结合。例如:
1)分析1 - 定性分析:将可能性和严重程度分别定义为高H、中M和低L。其优点是判断高中低相对容易,缺点是计算过程会比较麻烦,有时候无法进行合适的量化;
2)分析2 - 定量分析:将可能性和严重程度分别按照实际数据进行判断,例如:风险发生的可能性是37.68%。这个判断应该是困难的,同时判断出现偏差无法控制;
3)分析3 - 两者结合:将定性分析和定量分析相结合,例如:将可能性和严重程度分别用[1,10]区间进行表示,10说明最高,1是最低。其中这些判断是定性的过程,同时又是可以进行量化计算的;
基于计算得到的风险级别,我们就可以确定被测对象的测试优先级。基本规则是:风险级别越高,通常其测试优先级会越高。但是,这不是绝对的,因为在判断测试先后顺序时,还需要考虑其他因素的影响,例如:测试之间的相互依赖关系。确定测试优先级可以基于两种不同的测试略:深度优先和广度有限。
确定了风险的分类、可能性和严重程度,计算得到风险级别RL,并以此判断测试先后顺序后,还需要针对该风险进行跟踪的责任人。通过责任人监视风险的不同状态,风险缓解的有效性,是否有新的风险出现等。
完成上述活动之后,接下来需要对结果进行评审。通过评审确定识别风险的完整性,同时确定风险评估过程中确定的分类、可能性和严重程度、风险级别和优先级等是否合理,并在干系人之间保持一致性。同时,通过评审的结果,可以在需要时修订通用产品风险。
本文只是涉及到风险管理的风险识别和风险评估,其他阶段如风险应对和风险监控等内容,在后续文章会逐步体现出来的。