2016-08-18算法
1 理解测试策略
1.1 什么是测试策略?
1.2 测试策略等于测试方针?
1.3 测试策略等于测试计划?
1.4 测试策略等于测试方案?
2 四步测试策略制定法
2.1 明确“产品质量目标”
2.2 进行“风险分析”
2.3 适配“产品研发流程”
2.4 进行“测试分层”
2.5 “四步测试策略制定法”中的测试技术
3 产品质量评估模型
3.1 优秀的产品质量评估模型的特征
3.2 软件产品质量评估模型
4 测试覆盖度评估
4.1 需求覆盖度评估
4.2 路径覆盖度评估
5 测试过程评估
5.1 测试用例评估
5.2 测试方法分析
5.3 测试投入分析
6 缺陷分析
6.1 缺陷密度
6.2 缺陷修复率
6.3 缺陷趋势分析
6.3.1 绘制缺陷趋势图
6.3.2 缺陷趋势曲线的“凹凸性”和“拐点”
6.3.3 缺陷是否收敛
6.4 缺陷年龄分析
6.4.1 肯定缺陷的缺陷年龄
6.4.2 统计出各种缺陷年龄的数量,绘制缺陷年龄分析图
6.4.3 进行缺陷年龄分析
6.5 缺陷触发因素分析
6.5.1 肯定缺陷的测试方法和测试类型
6.5.2 统计出各类测试方法发现的缺陷数目,绘制缺陷触发因素分析图
6.5.3 进行缺陷触发因素分析
6.6 组合使用各类缺陷分析技术
7 风险分析技术
7.1 风险分析
7.1.1 风险识别
7.1.2 风险评估
7.2 风险应对
7.3 老功能分析
7.3.1 差别性分析
7.3.2 历史测试状况分析
8 分层测试技术
8.1 V模型
8.2 设计测试层次并发
四步测试策略制定发思惟导图函数
返回工具
“测试策略”通俗来说就是6个字:“测什么”和“怎么测”。性能
具体来说,就是答好和产品测试相关的六大问题:单元测试
测试方针是产品测试中的通用要求、原则或底线。测试
通用是测试方针的显著特色:它不针对某个特定产品,而是一个产品族,或是一个产品系列,而且在较长的一段时间内都是适用的。ui
测试方针举例:编码
试策略仅针对当前特定的产品版本而言,并不像测试方针那样具有通用性。反过来,咱们却是能够这样理解测试策略:循测试方针+项目实际状况=测试策略
试策略须要遵循测试方针,并不意味着咱们不能根据项目的实际状况来对测试方针进行调整。
测试策略也不是测试计划,它们之间的关系是:经过测试策略肯定的测试活动,在测试计划中被拆解为一个个任务,并为每一个任务肯定工期、执行的前后次序和责任人,如图1所示。
图1 测试策略与测试计划的关系
表1 “测试计划”示例
此外,测试计划的制订者是测试经理,属于测试管理的范畴。而测试策略的制定者是软件测试架构师,属于测试技术的范畴。
1)测试方案主要解决的是特性在测试设计和测试执行方面的问题
测试策略要解决的是产品测试的六大问题。显然,测试方案要解决的问题没有那么“高大上”,就是如何对特性进行测试设计和如何安排这个特性的测试执行,具体包括:
举例以下:
测试方案模板(以一个“特性”为单位):
2)测试方案须要遵循测试策略
测试方案须要遵循测试策略对具体某个特性的测试深度和广度的要求。
例如,某测试策略对特性A和特性B的测试说明,见表2。
表2 测试说明
该在何时开始制定测试策略?若是在项目开头进行,你会发现不少和测试策略相关的内容根本就还不明了,无从下手;若是在项目后期进行,内容是明了,可是作测试策略的意义又在哪里呢?
可见,咱们仍是须要一套方法来指导咱们制定测试策略的整个过程,“四步测试策略制定法”应运而生,如图2所示。
图2 四步测试策略制定法
明确“产品质量目标”是咱们在制定测试策略过程当中十分关键的一个步骤。对咱们而言,不只须要关注操做层面的具体方法,更要理解其中蕴含的测试策略思想。
1)咱们的测试目标就是让产品在发布的时候可以知足事先约定的质量目标
2)围绕产品质量目标进行刚恰好的测试
3)将目标—行为—评估造成闭环
图3 产品质量评估
如图3:
1)提早识别项目中可能存在哪些会阻塞测试的风险,而后基于风险来调整测试策略
实际项目中真的有不少问题,都会让咱们的测试变得举步维艰。
举例:实际项目中测试活动没法顺利开展的一些例子
“骨感”的现实告诉咱们,须要提早识别项目中可能存在哪些会阻塞测试的风险,而后基于风险来调整咱们的测试策略,增长一些测试活动或者质量保证活动。
2)基于风险来增强和下降测试投入
什么时候开展测试策略的制定活动?制定测试策略是一次到位,仍是要分几回完成?
这就须要咱们将测试策略的制定和研发流程结合起来。
1)测试策略的结构
图4是一个传统研发流程示意图。针对这个研发流程,咱们设计了整体测试策略—阶段测试策略—测试执行策略这样的测试策略结构。
图6-4 传统研发流程示意图
有了这样的结构,咱们可以将当前的测试策略老是控制在“当下”,即项目的状况老是在比较肯定的范围内,避免咱们过于纠结“将来”。
2)根据研发流程来安排测试活动
测试策略中具体的内容,也须要和研发流程保持一致,确保测试和开发的节奏可以彼此吻合。
从大层面来讲,测试在各个阶段的活动和开发的活动是可以配合起来的,如图6-5所示:
图6-5 测试人员职责
要达到这个大层面的吻合,是比较容易的。相对比较困难的是,是在版本测试阶段,开发活动和测试活动彼此配合的问题。简单地说,就是开发人员在作计划的时候是否考虑了测试活动:
这就须要软件测试架构师可以作好版本测试策略,可以和开发人员进行有效沟通,使得双方可以理解彼此的节奏,达到更好的配合。
除此以外,咱们即将要介绍的测试分层,也能帮助咱们更好地制定版本测试策略。
到目前为止,咱们已经可以综合考虑研发流程、风险,并基于产品质量目标来制定测试策略。经过上面的分析,咱们能够获得不少测试活动,会发现有那么多要作的事情,如今的问题是咱们该以什么策略去安排这些测试活动?
这个问题的最佳答案就是进行“测试分层”。
测试分层最大的价值在于:
经过前面的介绍,咱们了解到在使用四步测试策略制定法来制定测试策略时,会使用到一些方式或者模型。总的来讲,如图6-6所示。
图6 四步测试策略制定法中用到的方式或模型
产品质量评估模型将用在测试目标的肯定和评估上,它是整个测试策略的基础。在介绍这个重要模型以前,咱们想先花一点笔墨来讨论一下一个优秀的产品质量评估模型应该具有哪些特征。
产品质量评估中的几个场景:
结果:
我分析出现场景3中的问题,主要缘由有3点:
例如,咱们以测试的代码覆盖度要达到90%做为一项质量目标。为了达到这个目标,咱们可能会选择一些容易进行测试“覆盖”,但实际上风险并不大的地方进行测试。虽然最终能达到90%的测试覆盖目标,可是没有被测试到的10%那部分状况如何,是否真的不须要测试,可能会有哪些风险,对咱们来讲都是“未知”的。未知正是内心没底的源头。
若是咱们将这个问题从评估引伸到目标的层面,若是咱们在制订目标的时候,考虑的不只仅是指标,而能包含一些如“对重要特性,要达到100%的测试覆盖”“测试方法要包含语句覆盖、判断覆盖、路径覆盖”等的描述,以此做为要达到的质量目标,不只能解决上述的问题,还能更好地帮助咱们肯定要进行的测试活动。
综上,一个优秀的产品质量评估模型,应该具有以下特质:
咱们将从3个方面来创建软件产品质量评估模型,对产品质量进行分析、肯定和评估(图7):
图7 产品质量评估模型
表3 测试覆盖度评估的定义与属性
需求覆盖度的目标必须为100%,即测试保证对产品承诺要实现的需求都进行。
“需求覆盖度”中的“需求”,能够是“包需求”,也能够是“需求规格”“story”“user case”等能够表明项目中产品需求的内容,你们能够根据项目的实际状况来选择。
需求覆盖度评估有如下两种方法:
方法1:直接在需求表中确认测试状况
方法2:创建测试用例和需求的对应关系
方法2是在测试设计的时候,经过编号来创建需求和测试用例的对应关系。这样咱们只要保证这些测试用例都被执行了,需求也就都被测试验证了,见表6-5。
方法2的优点是,测试可以从一开始就保证需求的覆盖,从源头上避免了需求遗漏的风险;还很容易经过不一样的测试设计方法,让不一样优先级的需求可以有不一样的测试深度,更利于软件测试架构师对整个项目进行把控。
可是方法2也有一些须要注意的地方:
表6-6 路径分析法总结
第一步:肯定路径覆盖策略。
软件测试架构师能够以特性或者功能为粒度,根据该功能的质量目标来肯定路径覆盖策略。在如何选择肯定路径覆盖策略上,建议以下:
表7 路径覆盖策略的记录
第二步:使用路径分析法设计测试用例。
第三步:跟踪测试用例的执行状况。
当测试团队按照路径覆盖策略完成了用例设计后,对路径覆盖度的评估,就转换为了测试用例执行状况的评估。咱们的目标是这些设计的用例可以至少被执行一遍,而且测试结果为“经过”。若是存在测试用例在产品发布的时候都被“阻塞”,没法执行的状况,咱们就须要对阻塞的状况进行分析,评估当前的覆盖度是否可以知足测试的基本要求。
1.测试用例执行率
2.测试用例执行经过率
3.测试用例和非测试用例发现缺陷比
们但愿“经过测试用例发现的缺陷”和“发散测试”,也就是非测试用例发现的缺陷”的比值可以在一个合理的范围内。
若是比值太低,即大部分缺陷都是经过发散测试发现的,可能的问题是:
若是果比值太高,大多数缺陷都是经过测试用例发现的,可能的问题是:
图8 详细总结图
其中:
测试投入分析也是很重要的一项测试过程评估项目,在这里咱们主要从测试人员安排和测试投入工做量来进行分析,确认重要的、高风险的特性可以保证测试投入,符合测试策略。
表8 测试投入分析
可是若是咱们仅仅把缺陷当成产品问题的记录,而不去挖掘缺陷数据背后隐含的和产品质量有关的信息,就显得太惋惜了。
缺陷密度是指每千行代码发现的缺陷数。咱们在肯定了缺陷密度后,还能够顺带获得缺陷总数。
对一个产品研发项目而言,肯定、分析缺陷密度的重要意义在于:
咱们可以在产品测试以前,较为准确地预测产品的缺陷密度并将此做为一个测试目标,主要基于以下假设:
若是咱们发现实际的缺陷密度值偏高,一般最可能的缘由为:产品总体质量不高。此时,软件测试架构师能够:
提升缺陷密度的预估值。
对缺陷较多的地方增长测试投入,如增长测试人力、增长测试时间、使用更多的测试方法等。
考虑和研发经理、开发人员、系统工程师等一块儿进行一些质量改进和质量保证工做,如增强评审等。
若是咱们发现实际的缺陷密度值偏低,一般最可能的缘由为:
在每一个测试分层(如集成测试、系统测试)开始的时候肯定缺陷修复率目标。有时候产品的缺陷实在太多,为了保证重要缺陷可以被优先修复,咱们能够对缺陷按照严重程度进行划分,而后按照不一样的严重程度来肯定缺陷修复率。
1.缺陷的严重程度
表9 缺陷的严重程度的定义与示例
缺陷趋势是指“随着测试时间的进行,测试发现的缺陷趋势和开发解决缺陷的趋势”。咱们进行此项分析的重要缘由在于:缺陷趋势分析可以帮助咱们判断当前系统是否还能很容易地发现缺陷,进而帮咱们肯定是否能够退出测试,发布产品。
表10 缺陷趋势分析表
咱们将表10绘成图,就获得了如图9所示的缺陷趋势分析图。
图9 缺陷趋势分析图
在绘制缺陷趋势分析图时,不要忘记去掉节假日、周末公休日等“没有工做的日子”。
1)理想的“累积发现的缺陷趋势”曲线
图10 理想的变化趋势
2)“累积发现的缺陷趋势”的“拐点”出现得过早
“拐点”的出现,意味着测试团队在这个测试阶段里已经没法有效发现产品的缺陷了。出现这种状况,可能的缘由有:
3)“累积发现的缺陷趋势”的拐点未出现
这说明在这个测试阶段里,测试团队依然能够发现产品大量的问题。出现这种状况,可能的缘由是:
出现第一种状况,这个团队的测试者水平应该比较不错(至少掌握的测试方法比较多);也应该比较有测试激情(不是按照软件测试架构师要求的任务测完就结束了,而是本身主动去发现系统更多的问题);另外版本的质量可能也不错(至少还可以使用各类测试方法来“折腾”系统),没有严重的测试阻塞。但这依然须要软件测试架构师和测试者仔细核对测试计划,确认测试者是在保证了测试计划的前提下才进行发挥的——核对的过程可能会让人感到有些尴尬,但咱们的核心理念是:经过测试策略来进行“刚恰好”(咱们必须保证对重点测试部分的确认)的测试,而不只是为了发现产品的缺陷。
若是确认发现测试计划存在误差,须要在下个版本中进行补充测试,并和测试者作好沟通。
出现第二种状况,软件测试架构师能够考虑从以下几个方面来更新后续的测试策略:
咱们在判断缺陷趋势是否收敛时,须要具有如下两个条件,缺一不可:
当咱们发现缺陷不收敛时,作好代码改动方面的控制,是一个很好的思路:
表11 缺陷年龄的定义
进行缺陷年龄分析,可以帮助咱们确认每一个可能引入缺陷环节、可能引入的缺陷是否都已经被有效去除。具体操做时,咱们经过如下简单的3个步骤来开展缺陷年龄分析活动。
若是你的项目有缺陷的管理工具(如bugzilla),能够增长缺陷年龄的选项。在开发修复缺陷的时候,能够对缺陷年龄进行选择。
若是没有缺陷管理工具也没有关系,你可使用相似表6-12的形式来肯定缺陷年龄。
表12 缺陷年龄肯定方法
表13 缺陷年龄的数量
图11 缺陷年龄分析图
咱们在进行缺陷年龄分析以前,须要先理解一下理想的缺陷年龄应该具备怎样的特色。
1)理想的缺陷年龄分析图
理想的缺陷年龄分析图应该是以下这样的。
(1)在缺陷的引入阶段就能及时发现该类缺陷,缺陷不会逃逸到下个阶段,如图12所示:
图12 引入阶段
若是真能达到这样的水平,测试也就能够“光荣”失业了。但实际状况是,每一个阶段都会有一些缺陷“逃逸”到下一阶段,须要“测试”来发现这些逃掉的缺陷。
咱们已经了解到测试不该该想到哪里就测到哪里,而应该进行分层测试:在每一个测试分层围绕不一样的测试目标,使用不一样的测试方法来进行测试。
(2)在特定的测试分层发现该层的问题,如图13所示。
图13 发现特定测试分层问题
对其余几类缺陷年龄,咱们的指望是:
2)没有在特定的测试层次发现该层的缺陷
例如,在集成测试阶段,咱们但愿发如今编码阶段和设计阶段引入的缺陷,但实际上却发现了大量的在需求阶段引入的缺陷。这说明:
这就须要测试或整个研发团队来有针对性地进行改进。例如:
3)继承或历史遗留引入的缺陷过多
当咱们发现测试中出现了不少由于继承或历史遗留引入的缺陷时,这就说明产品还存在一些“旧帐”还没有清理,这时咱们须要:
图14清理“旧帐”
4)新需求或变动引入的缺陷过多
5)缺陷修改引入的缺陷过多
缺陷的触发因素就是测试者发现缺陷的测试方法。缺陷触发因素分析,就是对测试中使用的测试方法进行分析。
对缺陷触发因素进行分析,可以帮助咱们确认产品测试是否已经进行得足够全面和深刻
和缺陷年龄分析方法相似,咱们也能够经过下面3个步骤来进行缺陷触发因素分析。
若是你的项目有缺陷的管理工具(如bugzilla),能够增长测试方法和测试类型的选项,在测试发现缺陷的时候来记录相关的信息。
果没有缺陷管理工具也没有关系,你可使用相似表6-14的形式,来肯定该缺陷的测试方法和测试类型。
表14 肯定缺陷测试方法和测试类型
图15 缺陷触发因素分析图
在理想状况下,咱们但愿作出的缺陷触发因素图和测试策略是吻合的。例如,当前版本咱们的测试策略是:
对功能首先进行配置的遍历测试,须要保证新提交的命令行和之前已有的Web页面功能具备一致性;再进行基本功能测试,可以覆盖业务流程的基本路径;最后进行满规格的测试。
若是咱们持续对产品进行缺陷触发因素分析,参考历史数据,结合自身的经验,咱们还能够获得“不一样的测试方法发现缺陷的大体比值和分布”。固然,这个比值可能不是很准,可是也能够做为软件测试架构师对数据进行分析时的参考。
表15 产品质量评估表
咱们将风险分析技术用在保证测试策略的顺利进行和基于风险来增强或下降测试投入上,涉及的主要技术为风险识别、风险评估、风险应对和老功能分析。
此处咱们讨论的风险分析的对象是测试策略,目标是提早识别那些可能会阻塞测试策略顺利进行的问题,包括风险识别和风险评估两个部分。
图16 风险识别的方法
举例:对测试设计进行风险识别
Step1:首先分析测试设计须要关注哪些内容。例如:
Step2:分析上述内容都可以保质保量顺利地进行,须要哪些条件。例如:
Step3:逐一分析这些条件是否可以知足。假如条件1和条件4可能没法知足,那么识别出来的风险点就是:
须要特别说明的是,虽然此处咱们进行风险分析的对象是测试策略,围绕测试活动可否正常展开,但并不等于咱们只在测试内部识别风险点——咱们依然要从整个项目的角度来进行风险识别。咱们可使用表6-16风险识别清单,来帮助咱们进行风险识别。
风险评估的目标就是肯定风险优先级。
1)风险优先级正交表
表17 风险优先级正交表
表18 常见风险及应对思路
差别性分析是指找出老功能在新版本和老版本上的差别。这些差别包括需求、设计、平台、实现等各类差别。
历史测试状况分析是对老功能在老版本中的测试状况(包括测试策略、测试用例、缺陷)进行分析,以此来肯定老功能在新版本中须要采用怎样的测试策略。
1)确认老功能在新版本和老版本中的质量要求是否一致
2)进行测试方法分析
表19 分析角度
3)进行缺陷分析
表20 老功能历史缺陷分析点
4)对“组织和人”进行分析
表21 测试团队分析
咱们将分层测试运用在测试目标的SMART化上和测试活动的安排上。
对V模型而言,每一个测试分层测试图测试的重点为:
1.某通讯公司的测试分层
图17 某通讯公司的测试分层
和V模型相比,集成测试在本例中被分红了MST和BBIT;系统测试被分红了SDV、SIT和SVT。
为何此处的“测试分层”要这么复杂呢?这是由于在这个例子中,被测对象是通讯产品。咱们知道,通讯产品须要包含硬件、驱动和软件,业务也比较复杂,还会涉及不少协议和规范。在设计上经常会包含多个子系统,涉及不少接口。用户不只关注功能,还特别关注可靠性、性能等方面的质量,对产品质量总体要求很高。
2.某公司在敏捷环境下的测试分层
图18 某公司在敏捷环境下的测试分层
和前面的介绍的测试分层相比,本例就显得简单多了:
这时被测对象是一个纯软件产品,根据用户的业务需求进行迭代开发,但整体来讲并不复杂,基本不涉及协议或规范。用户比较关注功能、易用性和性能,对可靠性方面的问题有必定的容忍性,总的来讲对质量的总体要求并不算过高,但愿产品可以快速交付。
在这样的背景下,快速评估产品是否可以发布,进行快速测试是有必要的。若是咱们仍是按照V模型中的测试分层来进行测试,就显得过重了。在这个测试分层中,咱们在单元测试层中测试代码、接口的质量;提交给测试后,在功能测试层中集中测试功能;待功能相对稳定后,在非功能测试层中再集中易用性、性能和可靠性等方面的内容;在探索测试层,再结合缺陷,进行补充测试和回归测试。