软件体系结构评价平台设计与实现

2019-05-24 14:17高雄张贵友唐秀莲
软件导刊 2019年5期

高雄 张贵友 唐秀莲

摘 要 :现有评估方法很少考虑模块间依赖关系程度,导致软件结构评估结果不能准确反映软件质量。基于PageRank思想计算软件中各模块的依赖关系权重,改进解耦水平(DL)的结构评价,开发了一个软件结构质量评价平台,并分别在6个数据集上实验,比较改进前后DL的准确度。实验结果表明,改进的DL在4个指标上都有较大提高,更能准确反映软件质量状况。

关键词:软件质量评价;传播代价;独立水平;解耦水平;PageRank

DOI:10. 11907/rjdk. 182348

中图分类号:TP319 文献标识码:A 文章编号:1672-7800(2019)005-0137-05

Abstract: In order to improve the situation that the lack of attention on the module dependency in the software leads to the inaccurate evaluation result of the software quality, we calculate the dependency weight of each module in the software on the basis of the PageRank idea to improve the decoupling level (DL) structural evaluation. We establish a software structure quality evaluation platform and experimentally compare the accuracy of DL before and after the improvement on six data sets. The experimental results show that the improved DL has a greater improvement in the four indicators, so it can reflect the quality of the software more accurately.

Key Words: software quality evaluation; propagation cost; independency level; decoupling level; PageRank

0 引言

随着软件产业飞速发展,软件规模越来越大,功能越来越复杂,代码量也随之越来越大。因此,反映软件模块间关系的结构好坏直接影响软件质量。结构好的软件凭借其良好扩展性和模块独立性,不仅可以简化开发人员的工作量,而且可以保证软件质量。

在实际开发过程中,由于开发任务繁重,开发者很难保证每次都能遵循设计好的软件结构,但仅凭观察代码很难评价软件结构好坏,因此设计软件体系结构评估方法是至关重要的一环。现有软件结构评价技术侧重于通过计算软件系统中各模块间耦合程度评鉴软件的结构质量,即通過传播代价(Propagation Cost,PC)[1]、独立水平(Independency Level,IL)[2]和解耦水平(Decoupling Level,DL)[3]定量地评价出软件结构质量。在上述3个指标中,DL指标是最具代表性的,但它分配给软件中各模块的权重由模块中文件数量得到,没有考虑模块间不同依赖关系对软件质量的影响程度不同。本文提出通过PageRank算法计算出软件中各模块的依赖关系权重,从而提高DL度量准确性,并结合PC、IL、DL以及改进的DL(Improved DL,IDL)4种评价指标开发出一个软件结构质量评价平台。实验结果表明,IDL度量结构有较好效果。

1 研究现状

一直以来,代码质量度量方法都是软件质量领域研究热点,常见度量元有McCabe循环复杂度[4]、Halstead度量元[5]、代码行等。还有许多度量元专用于度量面向对象开发的软件,如CK度量元[6]、LK度量元[7]、MOOD度量元[8]等,可以用来预测质量问题或者定位缺陷位置[9-12]。此外,还有部分研究人员将不同度量元结合起来,用于度量软件可维护性,例如Oman[13] & Hagemeister[14]提出了可维护性指标(MI),Bijlsma等[15]、Heitlager等[16]也进行了类似工作。

虽然目前面向代码质量的度量方法已经相当丰富,但是Nagappan等[17]指出,在不同软件中,最合适的度量元并不一定相同;Menzies[18] 也指出从一个项目中收集到的数据在另一个项目中并不一定适用。所以,提出一个相对普适的软件度量或评价方法成为当下需要解决的关键问题。

为了科学有效地研究软件体系结构,建立合适的模型描述软件各个模块间关系十分必要。Parnas等[19]提出的 information hiding principle把模块当作一个独立的分配任务。另外,Baldwin等[20]提出的design rule theory理论表明,独立模块是由系统设计规则(DRs)解耦创建的,只要DRs保持稳定,某个独立模块的改变就不会影响到其它模块;Sullivan等[21]将该项理论引入软件设计中来,在软件中design rule常常体现为接口和抽象类,当接口和抽象类不变时,满足design rule的接口实现类的增加、删除、更新,都不会影响到系统其它部分。这些理论虽然可以一定程度体现软件结构质量,但是还不全面,并且没有实际操作或算法体现。

为了在软件系统中监测设计规则和独立模块,Cai等[22-23]利用聚类算法提出了设计规则等级(DRH),它把一个软件分成若干层,其中最顶层往往是接口或抽象类等一些最重要的文件。文献[24]将DRH用于软件恢复。此后,相关学者又对DRH进行了可视化,形成了设计结构矩阵(DSM)。

在上述理论基础上,相关专家分别基于传播代价、独立水平、解耦水平提出了一些可行方案。具体有:

(1)基于传播代价的结构评价。为了测量系统变化的修改性和影响,MacCormack等[1]提出的传播代价是一种依赖结构矩阵度量软件系统可变性的方法。研究者可从架构的依赖结构矩阵视图中提取稳定性和传播成本指标,表明变更传播的可能性,因此它对未来维护成本和修改易用性产生了影响。提供一个依赖结构矩阵,首先计算传递闭包添加间接依赖关系,然后计算矩阵中存在依赖关系的节点占总关系节点的比例。传播代价数值越低,说明软件系统耦合性越低,结构就越好。

(2)基于独立水平的结构评价。由于环境因素的高度波动性,模块化和稳定软件开发对软件架构师来说是一个越来越大的挑战。利益相关者关注是影响架构决策的经典外部因素,影响软件的模块性和稳定性。因此,驱动软件变化的环境条件是推理传统和现代架构设计替代方案的关键步骤。直接受环境因素影响的架构级决策对于在整个软件开发生命周期中保持模块化和稳定性至关重要。因此,需要从体系结构模型而不是源代码评估和权衡模块化替代品。Cai等[22-23]提出的独立水平,以量化设计支持模块式独立搜索和替换的程度,揭示哪种模块化替代方案可以从高级模型中生成更稳定的模块化设计。

(3)基于解耦水平的结构评价。Baldwin等[20]认为一个高可用模块应该是足够小的并很少具有依赖性,设计规则的层次结构允许人们评估软件架构潜力,以生成选项值,因为其显式地识别模块、大小以及它们之间是如何解耦的。因此,Cai等[22-23]提出了结构水平以度量体系结构与模块的耦合程度。具体地,按设计规则的层次结构将模块划分为层,计算每一层的结构水平,然后求平均值。

虽然基于解耦水平(DL)的结构评价很好地实现了软件分层计算,但是它分配给软件中各模块的权重是由模块中文件数量得到的,没有考虑到模块间不同依赖关系对软件质量的影响程度不同,对一些核心文件是不公平的,例如被多次实现的接口类。针对该问题,本文提出通过PageRank算法计算出软件中各模块依赖关系权重,以提高DL度量的准确性。

目前软件结构评价只停留在度量指标设计上,没有一个开放平台供开发者们检验自己的软件结构是否足够好,并且,基于PageRank算法改进DL的评价指标理论上可以提高评价准确度。本文从解决以上问题入手开展实证研究,对得到的数据进行合理分析,并开发出一个可供任意用户使用的软件质量评价平台。本文贡献主要有:①基于PageRank算法改进DL评价算法,并通过实验比较改进前后的评价结果;②利用调研过程中得到的结论,实现了一个简单的软件结构评价平台。该平台基于B/S架构,具有用户管理模块、文件上传模块和结构度量模块等,可对用户提交的软件进行质量评价。

2 DL算法演化

2.1 DL介绍

DL(Decoupling Level)是一个对Baldwin and Clark的Design Rule Theory与Parnas's Information Hiding Principle以及DRH理論的结合,是一个用来衡量软件去偶成模块后软件结构好坏程度的指标。基于DRH理论,一个软件被分为n个层,根据Baldwin and Clark的Design Rule Theory,在每层产生一些模块,这些模块根据Parnas理论是独立的。一个软件的DL,应是经过DRH分层之后每层[DLLi](0

将[#AllFiles]定义为系统中文件的总数,将[#File(Mj)]定义为DRH模块中的文件数[Mj]。给定具有n层的DRH,其DL等于所有层DL的总和。

3 改进DL软件质量评估平台

本文搭建了一个B/S架构的软件结构评价平台,专门用于评价Java项目。该平台具有完善的用户模块和结构质量评价模块,用户登录后,可以提交检测软件源码压缩包,服务器对其进行解压,分析出软件中各模块的依赖关系,然后计算PC、IL、DL、IDL,将计算结果保存到数据库,最终将评价结果展示在用户页面上。

3.1 设计目的

平台开发应着重两点:对提交软件进行PC、IL、DL、IDL分析。由于软件结构指标是一个较新的技术,现在也没有较为成熟的平台或软件提供对PC、IL、DL的分析,所以平台最初目的是给开发者们提供一个能够分析软件结构指标的便捷途径,另一个目的是为改进的DL收集更多检测数据。由于改进的DL测试样本较少,希望通过该平台收集大量样本数据,以论证改进DL相较于原始DL的优越性。在实验验证时发现,改进的DL在实际运行过程中存在耗时较长的问题,希望通过检测数据进行测试和改进。

3.2 数据集

本文使用了6个不同的真实代码,以比较改进前后DL的准确度,其中包括:Apache Ant、ElasticSearch、Guava、Tetris、AircraftBattle、CRM。

3.3 网站组织结构

如图1所示,软件质量评测网的主要页面是首页和个人中心页。首页是软件质量评测的门户页面,为了便于开发者使用,首页风格简洁,只提供上传检测、登录和注册功能。个人中心页面提供与开发者个人信息相关的页面,如查看个人信息、修改密码和查看检测记录等。

3.4 网站功能模块

从开发角度考虑整个网站,使用图2刻画网站内部结构。

网站主要由5个模块组成:用户模块、上传模块、分析依赖模块、结构度量模块、视图模块。