综述:
         众观很多的缺陷管理系统,都是为了更加合理的帮助开发进行缺陷管理。没有对见到的事物有充分的度量或适当的准则去判断、评估和决策,这样是无法进行的管理。这需要软件缺陷度量数据分析,度量是对事物属性的量化的过程,但它不能对未来可能发生的缺陷进行预测,所以我们应用数据挖掘技术到软件缺陷度量中。对未来可能发生的缺陷进行分析预测,得出可能出现高缺陷数的模块。帮助管理层、开发与测试人员能预见性了解那些模块有潜在的严重缺陷,发现或者采取有效手段预防缺陷,不断改进软件开发过程。
    下面先对什么是软件缺陷度量及预测、数据挖掘的概念与方法论、模糊聚类挖掘算法、自动收集数据做些简单的说明。
 
什么是软件缺陷度量及预测:
         度量是根据一定的规则,将数字或符号赋予系统、构件、过程等实体的特定期属性,从而使我们能清晰地理解该实体及其属性的量化表示。简而言之,度量是对事物属性的量化表示。
         缺陷度量是软件度量的一部分,其本身并不能发现缺陷、剔除缺陷,但是有助于这些问题的解决。
         缺陷度量是对项目过程中产生的缺陷数据进行采集和量化。将分散的缺陷数据统一管理,使其有序而清晰,然后通过采用一系列数学函数,对数据进行处理,分析缺陷密度和趋势等信息,从而提高产品质量和改进开发过程。一般来说,在软件质量保证过程中,需要度量的缺陷数据包括6大类缺陷发现手段发现所有缺陷。如测试相关的缺陷、成本数据
测试任务完成情况、测试规模数据、测试结果数据(包括缺陷数据,覆盖率数据)。
         那我们要怎么确定这些缺陷度量值呢?有些专家提出按照如下表所示的思路确定组织整体或者项目组、个体使用哪些缺陷度量元。
 


信息需要

可度量概念

度量目的

度量元

派生度量元

通过模块的各类型缺陷数来评价软件质量

模块缺陷分布

反映缺陷按类型、严重程度、所属模块分布情况。通过度量可以客观上看出哪个模块的缺陷比较高,这样可加大对这个模块的开发投入

每个模块的各类缺陷数目

各模块的缺陷个数百分比

通过总体的各类型缺陷数来评价软件质量

总体缺陷分布

反映总体缺陷陷分布情况。可看出软件的缺陷主要是哪些方面的缺陷,可帮助项目组找出问题,提高质量

每类缺陷的数目

每类缺陷占总缺陷的比例

通过缺陷密度评价模块稳定性

缺陷密度

反映新缺陷数、被解决的缺陷数和遗留的缺陷数的趋势,了解缺陷解决是否及时全面

各种状态缺陷的数量

各种状态缺陷的数据的比例

判断缺陷驻留时间

缺陷排除情况

判断缺陷产生的原因

缺陷数量排行、

缺陷发现时间、

缺陷清除时间

整体缺陷清除率、缺陷的驻留时间

确定哪种缺陷发现方式有效

缺陷数量和种类

选择合适的降低缺陷的方法

缺陷种类

缺陷密度、同行评审发现错误率、测试发现的缺陷数


 
         通过这些缺陷度量,我们可以对现有的缺陷进行管理分析,帮助提高改进软件质量。但这些远远还不够,因为越早发现bug,终所发费的成本越少,所以可以测见性发现缺陷受到很大的重视。 软件缺陷预测是根据易于获得的软件产品统计度量,预测软件产品可能发生的缺陷数量或软件模块是否具有较高的缺陷风险的方法。是从常有缺陷数据中发现明确的规律,对软件当前系统和历史数据做出分析,对未来可能发生的缺陷进行分析预测。新系统通过与当前软件系统的测试数据和估算出的数据相比较,会得知开发的系统的程序的质量情况。
         那么什么是数据挖掘呢?
数据挖掘:
         数据挖掘是从大量数据中提取出隐含的过去未知的有价值信息的科学。并把挖掘出来有价值的信息应用到业务流程中,从而达到业务目标的实现。要实现这个过程,不仅需要数据挖掘的各种算法,还有很多其它决定性的因素,如商业问题如何界定、数据如何选取、生成的模型如何嵌入到现有的业务流程等问题,都将直接影响数据挖掘是否能取得成功。所以行业提出了标准方法CRISP-DM(cross-industry standard process for data mining), 即为"跨行业数据挖掘标准流程":从商业理解(business understanding)—数据理解(data understanding)—数据准备(datapreparation)—建立模型(modeling)—模型评估(evaluation)—结果部署(deployment)。这个过程是循环往复的探索过程。
         该模型将一个KDD工程分为6个不同的,但顺序并非完全不变的阶段(如下图所示)。
1: businessunderstanding: 即商业理解. 在第一个阶段我们必须从商业的角度上面了解项目的要求和终目的是什么. 并将这些目的与数据挖掘的定义以及结果结合起来。
2.dataunderstanding: 数据的理解以及收集,对可用的数据进行评估。
3: datapreparation: 数据的准备,对可用的原始数据进行一系列的组织以及清洗,使之达到建模需求。
4:modeling: 即应用数据挖掘工具建立模型。
5:evaluation: 对建立的模型进行评估,重点具体考虑得出的结果是否符合第一步的商业目的。
6: deployment:部署,即将其发现的结果以及过程组织成为可读文本形式.(数据挖掘报告)
 
工具算法介绍:
         建模可以用SPSS、SAS、R(开源软件)软件,IBM SPPS Statistics 作为全球出色的统计分析软件之一,界面友好,使用简单,功能强大,可以编程,且有提供图形化模型与快速可视化报告展示,上手较快。SAS,是全球商业智能和分析软件与服务,功能强大,可编程,是难掌握的软件之一。R是一个自由、免费、源代码开放的软件,处理灵活,但对编程要求较高。
         这里我们使用容易入手的SPSS工具来对度量值计算分析,当然工具只是手段,关键是挖掘的思想。
         用于预测模型有模糊聚类、神经网络的测试模型、还有新型的贝叶斯网络模型。对比这些模型,模糊聚类是没有预先定义的分类来表明数据集中于哪个类;神经网络模型是反映人脑功能的基本特征,自学习高度复杂的非线性学习过程;新型的贝叶斯网络模型是基于概率推理的图形化网络,适合解决不定性问题。结合这些模型完全可以满足我们的挖掘需求。
         本系统以模糊聚类模型为主,对比另外两种模型:
         聚类是将一组对象分成若干个簇或聚类,使簇内的对象尽可能具有大的相似性,不同簇之间的对象尽可能有大的相异性。聚类过程可以看做是一种无监督的学习过程,因为没有预先定义的分类或示例来表明数据集中哪种期望的关系是有效的,多数聚类算法依靠假设和猜测进行。聚类增强了人们对客观实现的认识,是概念描述和偏差分析的先决条件,聚类分析目标是把一个样本集合分割为几个子集或者簇,用聚类生成的子集来表达出实际的数据集,得出一些期望信息。
         再通过偏差分析(是从一堆数据中找出一些不寻常跟需求数据有偏差的数据),判断那些聚类数据偏差较大,说明这些聚类有异常,有异常的类可能有严重bug,反之没有严重bug。
    然后,把新系统的度量数据与已经建立的分类模型均值、方差做马氏距离计算,判断与每个类的距离,如与有严重bug类相距的近,说明该组数据可能有严重bug。
         详细算法过程:略
 
软件度量数据自动收集方法:
         是一种基于SCPB框架的自动数据收集方法[1],根据度量数据的流向,定义了一个四层的度量数据自动收集的框架。该度量数据收集框架包含四个实体层次:数据源、数据收集工具、数据加工工具、和数据库;三个过程:收集过程、加工过程和存储过程;涉及三项重要技术:数据收集,可以编写接口程序与收集数据的Agent来实现;数据交换,可以使用Martin Auer等人提出了不同工具之间数据交换的格式和协议[i][ii]来交换;数据组织存储,采用关系数据库,如mysql。
         其中,使用MartinAuer等人提出了不同工具之间数据交换的格式和协议,该协议利用XML技术定义了数据交换的格式。首先将度量数据转换成预定义的格式,然后把数据封装成SOAP消息送到度量Hub,该度量Hub以Web服务的格式发布这些数据,供其他工具使用。
 
 
结合XX系统的应用
         结合XX系统做软件缺陷度量与数据挖掘,该系统是利用计算互联网技术进行远程教育的新型高等学校系统,包括:前台与后台,前台主要是学生基本信息、学习中心、成绩单与个人信息浏览;后台包括:平台信息、系统管理、教学基本信息、学籍管理和成绩管理等模块。我们从该软件系统开发过程的需求分析、设计、编码、测试等阶段抽取数据、清洗预处理数据、制定数据挖掘计划、聚类分析执行数据挖掘,后评估挖掘结果,下面我们先以软件实现阶段实例来说明这个过程。
         第一步,先定义和设计软件度量内容和缺陷信息结构。以我们的XX系统为例,在软件实现阶段中的软件度量有源代码行数,可执行代码行数,这些值可通过开发人员各自统计代码行;开发人员技术水平,模块设计质量,通过问卷调查、可通过专家评审会估值获取; 通过需求变化率,同一个需求变化次数,配置项变化率,同一配置项变化次数,交流情况等,这些值可通过向策划与测试人员、需求管理系统收集;缺陷数,模块bug数,版本bug数,项目bug数,bug状态统计,bug解决方案统计等,这些数据可以通过PMS系统后台数据库导出获取。缺陷信息结构包括:ID,系统模块,技术水平,代码质量(Sonar),进度压力,交流情况,测试时间,缺陷分类信息,缺陷数,改修次数等。   
         第二步,通过SPSS工具的自动聚类模型(K-Means)把收集的数据集分簇,每个簇都包含:技术水平、进度压力、开发者交流、设计质量、缺陷数据集等,假设个数范围为2到10聚类。对这几个簇分别计算各自的小值,大值,平均值,中值,样本标准偏差和记录个数,还有每个簇的质心变化。缺陷度量值跟数据质心变化是单调的。
         第三步,对这些簇进行比较,会发现每个簇除了有较大的度量值,还有较小的度量值。
值偏高的子集的每个模块变化数比值偏低的数据点大多些,有严重缺陷的模块可能分别在这些值偏高的簇中。在风险模块分析中,这些值偏高的模块需要引起重视,把额外的工作量花在这些模块上,也不仅提高软件开发与测试的工作效率,还保证了软件质量。
    后,对于未来新系统的数据,可以通过与已经分好的类计算马氏距离,如果与分布bug类较近,说明该组数据可能有严重bug分布。再使用神经网络与贝叶斯网络模型做计算,把得出的结果做比较,分析那个模型的准确性更优,我们取优模型的结果为终结果。
风险:
         全个过程先从XX系统做试点,并通过SPSS工具试验来生成的预测模型。其中预测数据的准确性可以通过数据挖掘方法循环往复评估改进,不断提高到达用户期望的准确度。
         其中的主要风险有:
         1、数据准备与清洗过程,对开发人员的技术水平,测试水平,需求、设计文档质量,交流情况的评估有偏差,会影响后预测数据的准确度;
         2、从需求管理系统如PMS系统自动收集数据的接口及系统的开发不好实现;
         3、建立的模型达不到终预测结果的要求,可能只有70%的准备率;