论文部分内容阅读
计算机技术的高速发展及用户需求的多样化,对系统的功能和运行效果提出了更高的要求。传统的用单一系统模版满足所有用户需求的开发理念已经远不能满足用户越来越多样化的要求。按照用户的个体需求,为其量身打造产品和服务,即软件客制化成为软件产品开发者的当务之急。客制化为软件产品的质量控制带来了巨大挑战,其主要原因在于传统的软件质量预测方法需要借助已有的缺陷数据,但这一先决条件在客制化过程中无法得到满足。
围绕客制化展开的研究自二十世纪九十年代以来逐渐增加。这些理论主要是针对制造业。在很长一段时期,专门针对软件客制化的研究仍然较少。唯一比较完整阐述软件客制化方法的是威廉姆(William,2000)。在威廉姆理论的基础上,相继有不少学者专门对软件客制化进行了研究。到目前为止,这些研究主要关注软件客制化的功能、流程设计及应用等方面,几乎没有涉及到对客制化过程中系统的质量进行控制。与此同时,屡见不鲜的软件客制化失败的案例为客制化产品的质量控制敲响了警钟。尤其对我国这样实施外向型经济的发展中国家而言,如何在引进国外先进的软件产品时,做到根据我国国情和国内企业的实际情况,按照客户的个性化需求对软件产品进行恰当的调整,从而实现“取其精华,去其糟粕”的管理思想是摆在我国很多企业特别是IT企业面前的一个重大课题。因此,建立一套有效的软件客制化产品质量预测及控制体系就成为本文的主题。
目前关于软件质量预测的研究主要集中在对软件产品“易错”与“不易错”的衡量。这些研究虽然对提高软件度量的准确性,改善度量流程的效果起到了很大的推进作用,但还没有任何专门针对软件客制化过程中的质量预测和度量理论出现。与一般的软件度量不同,客制化过程中的质量预测有几个基本特征:首先,客制化过程要求开发人员按照用户的个性化需求对标准化的软件产品进行改进和调整。调整幅度大小主要取决于客户的需求。因此客制化的过程可能只是功能、结构的局部改造,也有可能是整个产品的二次开发。前者对软件系统的影响不大,客制化的成本也较低。后者则是从根本上对原有的系统模版和框架进行改变,其实质上是新一轮的系统开发。无论是局部的调整还是根本性的改变,开发人员都需要面对以前开发过程中从未遇到过的新系统功能,应用或界面,而这很有可能对随后的质量预测产生影响。主要原因是传统的软件度量基于一个重要的前提,即有完整的缺陷数据作为质量评价参照。这包括两种情况:一种是在系统测试阶段通过测试工具发现各模块中存在的错误,并根据预先设定的错误临界值来判断一个模块或系统是否在将来的运行中容易出错。另一种是采用预测的方式,即在软件测试还未开始前,通过与以前开发的类似系统进行比较来预言某模块或系统的易错性。这两种情况都要求有完整的缺陷数据,否则无法进行质量评估或预测。然而在软件客制化的过程中,这两个条件都无法满足。如前所述,软件客制化带来的对标准软件产品的调整或改变使得开发人员完全没有类似的系统作为质量度量的参照。同时由于资源的限制,开发人员不可能对系统包含的上百个模块逐个测试以评价其易错性。因此,开发者面临的问题是软件度量必须在软件测试前完成,以便提前识别软件测试的重点模块,并集中优势资源(如:人力)对这些未来最有可能犯错误的模块进行改进,从而提高整个软件客制化流程的效率及效益。
本文针对软件客制化的特点,分别提出了基于无缺陷数据的质量预测模型和基于残缺缺陷数据的质量预测模型。前者是在完全没有任何参照系统及缺陷数据的情况下,实现对系统模块易错性的准确预测。换句话说,基于无缺陷数据的质量预测必须依靠建立恰当的度量标准及从待测系统获得的软件测量数据完成。为此,我们首先建立了系统缺陷预测的人力模型及测试效果评估的因果模型,从测试人员组成及其测试经验的角度建立整个测试小组可能发现的缺陷数据的期望方程,并根据该方程推测其对每个模块可能发现的缺陷数。考虑到传统的质量判别标准单纯依靠侦测到的缺陷数量来判断已知模块的易错性,而忽略了模块中错误严重性的弱点,本文引入了一个新的度量指标—变化行数作为判断易错性的标准。该指标是指某模块中检测到的缺陷可能导致开发人员在修改过程中增加,减少或更改的代码行数。经过向开发人员详细咨询,我们根据行业惯例预先设定其临界值为四分之三分位数,并以此判定已知模块的易错性,即凡是变化行数大于或等于临界值的模块就被判定为易错模块,反之则判定为非易错模块。判定标准确定后,接下来就是依据该标准对客制化系统中的各模块的易错性进行判断。由于测试集中有上百个软件模块,逐个判定显然是低效率的方法。为此我们利用数据挖掘中的K均值(K-MEANS)分类方法,将这些模块划分成若干个类(5类),并假设同一个类所包含的模块都具有相同的易错性。因此我们只需判定各类的质量,就可以很容易的知道各类中包含的模块的质量。在判断类的质量时,我们采用了计算类中的“变化行数”均值的方法,只要该均值大于或等于临界值,则该类就是易错的类,反之则是不易错的类。经过检验,这种基于无缺陷数据的质量预测模型对模块质量判定的正确率超过90%,证明预测模型的正确率较高。考虑到K均值分类法无法区分出各模块属性的权重,本文对其进行了改进,并在YALE平台上对改进后的模型进行实现。实验证明,改进后的K均值模型在质量预测的准确性上的确超过了传统的分类模型,是一种更加有效的方法。
与基于无缺陷数据的质量预测不同,开发实践中还有一种情况是参照系统可以获得,但其包含的缺陷数据并不完整。针对这种情况,质量预测的首要任务是建立完整的训练数据集(参照数据集),并依据该数据集完成对待测数据集中模块质量的预测。我们分别用回归分析和期望最大值法模拟出完整的数据集。实验表明,期望最大值法建立的参照数据集具有更高的准确性。因此我们利用该模拟结果作为接下来对测试数据集进行质量度量的参照。为避免逐个进行模块质量判定的低效率,我们仍然预先对测试集进行了分类,并依靠对各类的质量判定来预测各类中模块的易错性。首先我们对数据进行了标准化处理,提取出能代表18个属性的主成分;然后借助传统的K均值法,将测试集分成5个类;接下来我们利用欧几里得距离模型,计算各类中主成分均值与参照数据集各模块之间的距离。最小距离所对应的参照数据集中的特定模块就被判定为与测试集中该类最相似的模块,两者应具有相同的质量特性。按照这一方法,测试集中的各类被分别标上了易错或不易错的质量标签。相应地,各类所包含模块的质量也迎刃而解。经过检验,该模型的质量预测准确率超过95%,证明其可行性。该预测模型的不足之处在于预测过程因为涉及最小距离的计算,比较耗费时间,使整个预测过程的效率下降。针对这一问题,我们对该模型进行了改进。基于贝叶斯网络寻找各模块最大可能性的所属类及各类的最大可能性的包含模块,并利用C语言平台编写了完全自动化的质量判定程序以实现改进的质量预测模型。该程序的自动判定过程分三步。首先基于贝叶斯网络对训练集中的模块进行分类;其次,基于训练集与测试集相似性的假设,利用训练集的分类结果直接对测试集中的模块进行分类;最后将测试集中的模块与同类训练集判定为相同的质量(易错或不易错)。经检验,改进后的预测模型对模块质量判定的准确性达到93.8%,是一种有效的质量预测方法。为进一步验证该预测模型,我们将其与传统的基于神经网络的预测模型的预测效果进行比较。结果证明,我们提出的针对不完整缺陷数据的质量预测模型在预测准确率尤其是对两类质量误判的控制上都有更好的表现。
经过比较发现,改进后的模型效率虽然有大幅度的提高,但预测的准确率有小幅度的下降。这也说明了开发人员必须在准确率与效率之间进行权衡。两者不可能同时达到较高的水平,一个指标的增加可能带来另一指标的降低。
本文提出的模型可以广泛用于软件客制化中的系统质量预测,提高预测效率及效益。