APP下载

引入测试复杂度提高软件测试管理效率的算法

2015-11-25唐雨薇

企业导报 2015年21期
关键词:软件测试

唐雨薇

摘 要:随着软件规模的不断扩大,软件测试管理从粗放式的管理模式逐步转化为精细化管理,本文从研究软件测试管理的效率出发,重点介绍了测试复杂度的科学算法,来协助广大的质量经理在项目管理的过程中依据可靠的数据来提升测试管理的效率,从而迈出进行精细化管理的第一步。

关键词:软件测试;软件测试复杂度;软件测试管理

一、引入软件测试复杂度的重要性

在测试管理体系中,影响测试项目成功的因素很多,包括软件研发者所提供的程序代码复杂度、测试人员的测试代码的质量、项目功能的复杂度、项目的时间限制等等。这些因素在具体的实践操作中是可以用具体的值来衡量的,将多个因素的分值综合起来便得到测试复杂度的值,可以说软件测试复杂度是测试管理体系中影响测试项目成功因素的一个综合指数。

通常质量经理对软件测试复杂度的确认,是主要依靠其个人能力、经验累积和对项目的熟悉程度进行主观判断,这就导致了对软件的测试具有很强的主观性,为软件项目埋下了风险。加之测试本身的特性决定了测试活动实施过程中存在着大量的风险,而风险影响着测试活动的成败。因此,本文中引入软件测试复杂度计算公式,能较客观地对软件进行测试复杂度的衡量,通过对软件复杂度和测试复杂度的控制来降低软件测试中的风险,从而提高对软件测试的管理效率。

二、软件测试复杂度的算法原理

软件测试复杂度是衡量影响软件测试工作的因素综合指数,本文笔者通过分析测试管理工作中各种因素的变化情况,提炼出影响测试管理效率的关键因素并设计出了符合现代软件测试复杂度的计算公式,即:软件测试复杂度=代码复杂度*代码人员质量分值*伪代码分值*功能复杂度分值。

(一)代码复杂度及度量方法。代码复杂度是基于程序开发者所产生的程序代码而提出概念,程序代码的循环和选择所构成的环路越多,其代码复杂度就越高。现在已经有若干种代码复杂性的度量方法可供参考,其中McCabe QA是比较出色和实用的方法,它能够计算出多种软件代码复杂度。McCabe是对软件结构进行严格的算术分析得出程序拓扑结构复杂性的度量,明确指出项目各部分的复杂度量。

(二)代码人员质量及度量方法。(1)什么是代码人员质量。这是本文提出的一个新概念,基于多项目、连续性版本的软件研发与测试工作中分析总结出:代码人员编写的代码质量是可以用一个数学公式进行精确的计算的。(2)如何计算代码人员质量分值。计算代码人员质量分值需要几个关键数据:bug合计分值、严重bug级别占比数值、功能复杂度、bug功能比值。1)

bug合计分值:笔者把bug划分为3个级别,分别是严重(3分)、一般(1分)、提示(0.5分)。bug合计分值就是由测试人员计算该代码人员在代码编写过程中所得出的所有bug的分值之和,bug合计分值越高,说明代码质量越差。那么该如何来界定bug的级别?根据笔者的实践经验,影响bug级别的因素主要有两个:对系统的影响值和对用户的影响值。当一个bug发生的时候,在系统层面导致系统奔溃或瘫痪、在用户层面则导致用户的流程不能继续或用户数据错误,则为严重bug;在系统层面能在容错性下继续运行、在用户层面用户的流程可以继续或则能通过其他路劲完成该流程,则为一般bug;在系统层面对系统的数据处理或性能都几乎没有影响、在用户层面只是文字性错误或指引信息不够准,则为提示bug。2) 严重bug级别占比数值:严重bug级别占比数值=严重bug分值/bug合计分值(保留4位小数)。为体现软件测试过程中测试的优先级和用户体验的优先级,笔者强调了严重bug对系统和用户的影响。3) 功能复杂度:同一个项目的不同版本中都会由数个功能组成,在代码人员进行代码编写前,该功能或模块的复杂度会由软件的研发经理、测试经理、产品经理为其进行评分,所得到的分值即为功能复杂度分值。4) bug功能比值:bug功能比值=bug合计分值/功能复杂度(保留4位小数)。针对每一个不同复杂度分值的功能或模块,其bug自然会呈现出不同的级别。若功能复杂度越高,相应的其bug的级别可能会越高,其代码质量就越差;若功能复杂度越高,相应的bug的级别越低,其代码质量就越高。所以将bug合计分值对应不同的功能复杂度的比值控制在一个合理范围内就会使代码质量得到保证。根据关键数据得出计算公式为:代码人员质量度=严重bug级别占比数值

*bug功能比值(保留4位小数)。

综上所述进一步细化代码人员质量度计算公式设为:代码人员质量度=(严重分值/bug合计分值)*(bug合计分值/功能复杂度)

在表1中对代码人员A和B的质量度计算中可以看出:认定一个代码人员的代码质量,并不能简单的查看bug数据,也不能简单的看功能复杂度的情况,而是将bug合计分值与对应的功能复杂度控制住一个合理的范围内,在这个合理的范围内,bug合计分值可能会很高,但并不代表代码人员质量差,当然当代码人员质量度数字越小,则代表该代码人员的代码质量也越高。

表1 代码人员质量度的计算实例

(三)伪代码及度量方法。(1)什么是伪代码。伪代码就是一种算法描述语言。使用为代码的目的是为了使被描述的算法可以容易地以任何一种编程语言实现。因此,要实现此目的,伪代码必须具有如下特点:① 必须结构清晰 ② 代码简单 ③ 可读性好 ④ 类似自然语言。本文中伪代码分值就是通过前3个特点进行定义计算的。(2)如何计算伪代码分值。笔者在实践经验中得出,在伪代码的4个特点中,真正对伪代码分值有影响的是前3个特点,因为即使伪代码不太类似自然语言,由于第①项在整个伪代码分值中的比重超过了50%,那么第4个特点几乎可以忽略,故取消了计算公式中对第4个特点的数据评分。笔者将3个特点在伪代码分值中所占比重进行了科学的划分:结构清晰(S)占55%,代码简单(C)占20%,可读性(R)占25%,并将每个特点的优劣评价为优秀+(5分)、优秀(4分)、良+(3分)、良

(2分)、不合格(1分),计算公式为:伪代码分值=S*55%+C*20%

+R*25%。在进行正式的软件代码编写以前,需要对现有版本的功能进行伪代码编写,伪代码分值越高,代表该伪代码是质量越高,从而转换为正式代码的可靠性就越强。

(四)功能复杂度及度量方法。对软件规模和复杂度进行正确的度量,可以降低软件正确性测试的难度。目前,应用最广泛的就是“功能点分析度量法”。在该度量法中,将软件项目管理中的功能点分为ILF(内部逻辑文件)、EIF(外部接口文件)、EI(外部输入)、EO(外部输出)和EQ(外部查询)5大类。对每个功能点自身而言,又可细分为2类:外部逻辑(接收外部输入与输出至外部)接口EL和内部逻辑IL。当某个功能需要提供更多的外部接口时,由于接口数量的增加导致对外需求处理的逻辑数增加,那么该功能的复杂度就会升高,即功能的接口数与复杂度之间成正比例关系。基于功能点,将复杂度的定义以“段”的形式划分,具体为5个功能点为一个段的分界线,出现一个分界线便划定1分,出现N个分界线,划定(N+1)分,计算公式为:功能复杂度 =(N+1)EL*(N+1)IL

三、测试复杂度提高测试管理效率的应用

本文测试复杂度的算法适用于一个已存在项目的连续性管理中,不适合新项目的研发管理。在任何一个项目的测试过程中资源都是有限的,那么该如何优化资源类来提高测试管理效率从而提升软件工程的质量?从测试复杂度的算法中可以看出,计算测试复杂度的过程正是在优化配置各种资源的过程。所以,在测试复杂度的算法中,必须要考虑以下规则:

(1)项目测试复杂度由各个功能的测试复杂度之和构成。

(2)各个功能的测试复杂度的计算必须遵循功能由小到大的顺序,由测试主管计算得出。(3)项目之初通过计算确定大致的测试框架、测试人员配备、测试思路。(4)测试复杂度是动态数据,不是静态数据,项目中通过测试复杂度的动态数据对测试过程进行微调。(5)根据项目功能复杂度设定测试复杂度的安全值范围值。(6)功能测试复杂度分值管测试细节、项目测试复杂度分值管测试进度。

从测试复杂度算法中可以看出,当功能中的任意元素发生变化后都会导致最终数据结果的变化。笔者认为测试复杂度数值变动是允许的,在动态数据中需要重点注意两个数据:(1)变动次数。当变动次数>3时,就是一个危险信号的提示,表明实际的研发过程中该功能的逻辑发生了多次变化。(2)变动比率。变动比率=|(L-F)/F|,L为测试复杂度最后一次变动时的分值,F为测试复杂度第一次变动时的分值,当变动比率>0.25时,表明项目功能的逻辑上有非常大的变动。当以上两种情况任何一种出现时,都需要管理者提高警惕,并主动去寻找原因与错误。

四、结束语

软件测试是软件工程的一个重要阶段,也是保证软件质量的重要手段。统计表明,测试工作量在软件研发总工作量中占到40%以上,软件研发总成本中测试上开销占到30%—50%,所以,对测试工作的有效管理,可以降低软件研发成本,缩短研发周期。本文试图通过引入测试复杂度算法,来帮助大家提高测试管理工作的效率,以便于更好的控制软件项目的质量。

参考文献:

[1] 陈文海.软件测试管理工具的研究与实现.北京.中国科学院研究生院(软件研究所).2003

[2] 张健,徐宝文.《软件测试》专辑前言[J].计算机学报.2011.

猜你喜欢

软件测试
软件测试方向人才培养“1+X”融合研究
基于OBE的软件测试课程教学改革探索
航天软件测试模型构建与应用
基于MBD模型自动生成测试用例的软件测试方法
计算机软件测试方法的研究
EXCEL和VBA实现软件测试记录管理
关于软件测试技术应用与发展趋势研究
一种航空机载软件测试项目的进度改进模型
军用软件测试文档生成设计与实现
软件测试工程化模型及应用研究