《电子技术应用》
您所在的位置:首页 > 嵌入式技术 > 设计应用 > 基于历史数据的软件测试数据统计分析研究
基于历史数据的软件测试数据统计分析研究
2017年微型机与应用第4期
杨贞祥,赵兴奋,贺虎林
苏州桑泰海洋仪器研发有限责任公司,江苏 苏州 215125
摘要: 从大数据的角度,利用软件测试历史数据,分析和研究软件开发及测试过程,为软件质量保证和项目管理及组织能力建设提供了新的思路。在组织内部建立测试数据收集机制,对软件测试相关数据进行收集,建立数据分析模型,从软件开发过程、软件测试过程、软件缺陷数据等方面对测试数据进行分析,获得多个具有实际意义的量化指标,将此指标反馈到软件开发和软件测试及项目管理等过程中,显著提高了软件产品质量及工作效率,降低了过程风险,提高了组织市场竞争能力。
Abstract:
Key words :

  杨贞祥,赵兴奋,贺虎林

  (苏州桑泰海洋仪器研发有限责任公司,江苏 苏州 215125)

        摘要:从大数据的角度,利用软件测试历史数据,分析和研究软件开发及测试过程,为软件质量保证和项目管理及组织能力建设提供了新的思路。在组织内部建立测试数据收集机制,对软件测试相关数据进行收集,建立数据分析模型,从软件开发过程、软件测试过程、软件缺陷数据等方面对测试数据进行分析,获得多个具有实际意义的量化指标,将此指标反馈到软件开发和软件测试及项目管理等过程中,显著提高了软件产品质量及工作效率,降低了过程风险,提高了组织市场竞争能力。

  关键词:软件测试;测试历史数据;数据统计分析

  中图分类号:TP301文献标识码:ADOI: 10.19358/j.issn.1674-7720.2017.04.007

  引用格式:杨贞祥,赵兴奋,贺虎林.基于历史数据的软件测试数据统计分析研究[J].微型机与应用,2017,36(4):22-24,28.

0引言

  技术高度发展的结果必然是各行业及行业内精细化的社会分工。在软件行业表现为计算机技术与其他行业相结合,向专业化发展,意味着每个软件开发组织开发的软件越来越具备系列化、继承性的特点,这一重要特征使得针对软件测试历史数据的数据分析具有了重要意义。杨旭等人将数据分析定义为:“数据分析是指用适当的统计分析方法对收集来的大量数据进行分析,为提取有用信息和形成结论而对数据加以详细研究和概括总结的过程”[1]。软件测试是最主要的软件质量保证手段[23],研究者们在测试过程改进[4]、建立评估基准[5]及度量理论研究[6]方面已经进行了深入研究。但这些研究或重点研究测试过程和技术、或倾向于理论研究,而对软件测试历史数据进行分析研究[7],则能够从软件开发和测试结果入手,从问题现象分析问题原因,有针对性地改进软件开发、软件测试、项目管理等过程,从而提高软件质量。由于该研究过程针对每个组织自身的实际问题,故在具体实施中具有很强的可操作性。

1数据准备

  数据分析离不开数据,而要收集具有分析价值的测试数据,需要构建测试数据收集系统,包括测试数据库的物理架构和测试数据逻辑存储结构两方面。

  1.1软件测试数据库系统

  软件测试数据存储系统作为软件测试管理系统的一部分,可以单独架构,也可以作为项目配置管理系统的一部分,架构在项目配置管理系统上。为了便于管理和运行,该系统采用B/S架构,部署在局域网上,考虑到项目数据安全性,该局域网与互联网物理隔离,在系统中配备唯一的数据导入和导出终端。系统架构图如图1所示。

 

001.jpg

  图1中,测试人员在测试终端机上上传测试数据,存储到测试数据存储服务器上,数据处理服务器与存储服务器及用户进行交互,运行自动化测试系统等处理操作。测试数据备份机存储测试历史数据,并通过备份方式保证数据安全。

  1.2测试数据逻辑存储结构

  为了有效收集数据,对数据表的结构进行了设计,如图2所示。

  图2中测试用例表存储了需要分析的基础数据,在数据库中按照项目代号(或被测件标识)分类存储。人员信息表中包括了开发人员信息和测试人员信息,作为人员工作分析的一部分,将在下一节描述。问题分类表、开发人员分类表、测试人员分类表及被测软件分类表则根据检索要求,在整个测试数据库范围进行信息检索,给出相应的视图,以便进一步分析。

 

002.jpg

2测试数据集分析

  2.1被测试软件数据集分析

  基于被测试软件数据进行分析,获取相应指标,对相似类别软件或模块进行结果对照,得到分析结论。

  (1)软件可测度

  软件可测度用同等难度系数下测试用例密度与平均用例密度差来反映。软件可测度计算公式如下:

  CZ@1@$[_@(IFB]WNOZUXZ1S.png

  可测度值大于零,表示该项目用例密度高于平均密度,软件可测试性较好,反之,则该项目用例密度小于平均密度,软件可测试性较差。正常情况下,可测度值应该是在零值上下波动,波动幅度不得超过平均用例密度的1/2。若上下波动幅度超过限定范围,则有可能是该项目测试用例设计粒度太大或者太小,或者对该项目的难度等级估计不准确,使得公式(1)中的平均用例密度值选取不匹配。

  (2)模块复用率

  模块复用率可以通过统计各个项目对模块的复用次数获得。模块复用率反映模块或函数在组织内部的复用情况。由于同一个组织内部产品的相似性及系列性,使得核心模块复用的概率较高,而复用模块一般比新开发模块具有更高的软件可靠性和算法成熟性,故模块复用率能够间接反映软件质量情况。另一方面,对复用模块的测试一般会复用以前的测试用例,减少测试难度和测试工作量。从而测试模块复用率越高,软件模块越稳定,软件测试工作量越小。

  2.2测试用例数据集分析

  基于测试用例数据的分析包括测试用例分布分析、用例通过率分析、用例效率分析。

  (1)测试用例分布分析

  测试用例分布分析指对测试用例在软件各模块中的分布情况进行分析。根据软件测试经验,测试用例数随着软件模块复杂度的增加而增加,而模块中存在缺陷的概率也随着模块复杂度的增加而增大。软件测试用例密度计算公式定义为:

  %~G~S44N0%C[J3_)0~~J0}R.png

  若要计算模块的测试用例密度,则软件代码行数是指该模块行数;若要计算整个软件的测试用例密度,则软件代码行数是指整个软件代码行数。在同一个项目中,对各模块测试用例密度进行比较,从而识别关键模块,采取措施提高软件质量。也可以进行同难度系数下项目间的整体用例密度比较,获得对各项目设计质量的指标值。

  (2)用例通过率分析

  测试用例通过率定义为:

  5[H)9PR_Z4}LJ7C$4MPVU)3.png

  若剔除测试误差、设计和测试人员水平因素、测试环境因素,测试用例通过率可以用来表征软件的成熟性。反过来,测试用例通过率也可以用来对设计和测试情况进行估计,若一次测试的测试用例通过率显著低于公司同类软件平均水平,则需要深入分析该软件设计人员的设计是否合理、测试人员的测试设计和执行是否正常或者测试环境差异是否对测试结果造成严重影响等。

  (3)用例效率分析

  测试用例效率计算公式定义为:

  $AMASJBNH@_1O`QB@5KLCHM.png

  上式中复杂度系数根据软件逻辑复杂度的不同而不同,取值范围大于0且小于1。对于软件测试来说,测试覆盖率为基本要求,在保证测试覆盖率的前提下,测试用例效率能够表征测试工作效率和测试用例设计水平。在实际使用时,该指标需要与测试用例粒度保持平衡,不能为了追求高测试用例效率而增大测试用例颗粒度,从而使得测试用例界限不合理,这样的测试用例反而会降低测试执行效率。

  2.3缺陷数据集分析

  (1)缺陷在软件模块中的分布

  软件缺陷具有集群效应,即出现缺陷的模块或程序段,再次发现软件缺陷的可能性越大。据此,在软件质量分析和风险应对方案制定过程中,使用软件缺陷分布,能够有效预防缺陷再次发生,提高软件质量。

  (2)组织的缺陷-能力曲线

  将组织数据库中的缺陷按照不同类别进行统计,根据不同类型缺陷分布情况,可以得到缺陷分布曲线,相应地,根据缺陷分布曲线获得组织软件能力曲线。由于各个类别软件的业务量有差别,因此对于统计获得的缺陷数据应该按照相应类别在整个工作量中的占比进行加权,获得最终的权衡缺陷数。缺陷分布曲线与软件能力曲线关系图如图3所示。

 

003.jpg

  图3中横坐标的类别为组织能力范围,左侧坐标为缺陷指数刻度值,右侧坐标为能力曲线刻度值。实线为类别缺陷指数曲线,虚线则表示组织在类别能力指数曲线。缺陷能力曲线图说明缺陷指数越大,则给类别软件缺陷越多,软件质量越差,表明组织在该类别软件的开发能力越差。

  2.4开发人员数据集分析

  从软件测试角度,使用测试数据库中积累的数据资源对开发人员数据进行分析,能够获得软件开发人员开发质量因子指标。该指标计算公式定义为:

  O$YRSJ9FS}T9HFH`NCHFR[A.png

  上式中工作量以代码行为单位,表示每个项目中该开发人员编写的代码行数,难度系数是对该部分工作复杂度的评估值,缺陷总数指在测试数据库中统计的该代码范围内的缺陷数量。

  对于同一个软件开发组织来说,每个开发人员的质量因子趋势应该是趋于相同的,若分析后发现相同组织内部开发人员质量因子曲线趋势差别很大,则说明该组织在沟通、培训及交流学习中出现了问题,组员之间没有共享技术和经验,这对组织发展是不利的。

  2.5测试人员数据集分析

  从效率和质量的角度,根据测试数据库中的历史数据,对测试人员工作进行量化。本文从测试效率和漏测率两方面进行描述。

  (1)测试效率

  测试效率可以用来对单个软件测试人员一段时间内的工作效率进行衡量。测试效率计算公式定义为:

  NPG[AI8}W%9RK`KOQI0XCUH.png

  上式中N代表该测试人员在测试数据库中的任务数量;测试代码行数为第n个任务的代码行数;难度系数为该任务的难度估计值;测试周期以天为单位,在公式中换算到小时数。

  (2)缺陷漏测率

  作为对软件测试质量的度量,项目经理可以通过缺陷漏测率指标对产品质量进行监控,若某个测试人员一段时间的缺陷漏测率指标高于平均水平,则需要分析具体原因并采取相应措施。

  UW2Y[YL[{1M}GQ21P0KVV9C.png

  上式中N表示测试人员总数,工作量占比表示该测试人员在整个测试组织中的工作比重值。

3结论

  软件测试是保证软件质量的主要手段,软件测试能够有效降低项目风险,故在软件行业中越来越受到重视。软件测试数据也成为软件开发组织重要的过程资产,建立有效的测试数据收集数据库,对测试过程和测试结果数据进行有效收集,并在软件测试历史数据基础上对数据进行分析,获得多个具有重要意义的量化指标,

  用其分析和研究软件开发、测试、项目管理等过程,以求发现问题并解决问题,使得组织能力获得提高。基于软件测试历史数据的分析统计方法在软件项目实施过程中具有一定的实用价值。

参考文献

  [1] 杨旭,汤海京.数据科学导论[M].北京:北京理工大学出版社,2014.

  [2] 郑人杰.计算机软件测试技术[M]. 北京:清华大学出版社,1992.

  [3] 陈开颜,王希武,孙会珺,等.软件质量与软件测试[J].河北省科学院学报,2004,21(2):18-22.

  [4] EDWARD K.软件测试过程改进[M].李新华,译.北京:机械工业出版社,2003.

  [5] JONES C.软件评估、基准测试与最佳实践[M].韩柯,等,译.北京:机械工业出版社,2003.

  [6] 邢大红.面向对象软件的度量学理论与工具实现[D].合肥:合肥工业大学,1998.

  [7] 王悠,罗燕京,易福华,等.基于用例的软件复杂度估算及应用[J].计算机技术与发展,2007,17(7):196-199.


此内容为AET网站原创,未经授权禁止转载。