Java程序度量工具的实现及案例探讨

2013-11-15 02:07朱云娜
电子测试 2013年17期
关键词:分析器源代码复杂性

朱云娜

(辽宁广播电视大学 110034)

0 引言

在软件工程与技术领域中,传统的软件度量技术与面向对象的软件度量技术之间,最大的不同之处主要表现在面向对象的度量技术在实现定量测量的过程中,需要对于类之间的耦合程度以及类的复杂度、内聚力、继承层次复杂度等进行研究。在面向对象的软件度量体系中,虽然能够应用传统方法进行软件体系中某一模块复杂度的定量测量与度量实现,但是对于软件体系中的某些定义的还需要进行补充。结合当前软件工程以及技术的发展应用情况,国内外已经存在有一些进行计算机程度复杂度计算应用的软件工具,像SafePro/Eval等软件工具就能够实现对于C++以及ADA等语言程序中McCabe以及Halstead、MOOSE、MOOD等计算机程序复杂度的计算测量。此外,在软件工具的设计开发中,通过应用CK度量套件中的度量方法,并利用Delphi进行设计开发出针对Java语言程序的度量工具,在我国也有实现,同时,再加上我国这一时期设计开发出的通过VC++的应用进行McCabe、Halstead复杂度的软件工具,这两种软件工具均在不具有跨平台性的情况下,都涉及到对于计算机数据库的相关操作。最后,在这一时期,国外的Shimba以及Jstyle则是针对Java语言程序的开发设计的两个度量工具,在实际应用中具有不能够实现Halstead复杂度计算的局限性。

1 度量工具的度量算法与度量标准分析

在面向对象的软件度量技术中,面向对象程序的基本单位是类,因此,在面向对象的度量计算中,主要是进行类的规模以及类的层次、类的协作、个体类的度量计算。通常情况下,在进行程序规模的度量计算中多采用行数度量法;对于类之间的继承层次复杂性度量计算,则多采用DIT以及NOC度量法进行度量计算;对于类之间的通信复杂性则多是采用RFC度量法进行度量计算;此外,对于类的逻辑复杂性的度量计算则采用的是WMC度量法;最后,应用McCabe以及Halstead度量法进行方法复杂性的度量计算。

首先,在进行程序规模的度量中,主要是通过对于程序规模的度量,实现对于程序复杂性的度量评价,通常情况下,多采用的是行数度量法,也就是通过对于程序的源代码行数情况进行统计,实现对于程序规模以及程序复杂性的度量。通常情况下,在相关研究中显示,小于100条语句的小程序出错率与可执行代码的行数之间具有一定的线性关联,往往随着程序的增大,程序出错率会呈现出非线性增长变化。因此,使用行数度量法能够非常直观的实现对于程序规模与复杂性的度量。

其次,在进行类之间的继承层次复杂性度量计算中,Java语言程序对于类之间的继承层次要求使用单继承机制实现,也就是说Java语言程序中,类继承树都只存在有一个根结点,不管是J2SE提供的类,还是程序员开发设计的类都继承于这个根结点。由于在进行类之间的继承层次复杂性度量计算中,主要是进行程序开发员所开发程序的复杂度度量计算,因此,多使用DIT以及NOC两种度量方法进行类之间继承层次复杂度的计算,其中,DIT度量法主要是进行继承树的深度度量计算,也就是进行从结点到树根之间最大距离的度量计算;而NOC度量法则是进行直接从属于某类的子类总数的度量计算。

再次,在进行类之间的通信复杂性度量计算中,类的响应集合RFC通常多包含类中被调用的其他类的方法,能够实现对于潜在类之间的通信度量,因此,对于类之间的通信复杂度多使用RFC度量法进行计算。具体度量计算过程如下,假设某类的方法为M1、M2、M3……Mn,{Ri}表示某类中方法i调用的方法集合,{M}表示某类的所有方法的集合,则有RS={M}∪alli{Ri};RFC=|RS|。

在进行类的逻辑复杂性的度量计算中,类的加权方法数WMC主要是对于类所包含的方法数的体现与反映,或者是对于类之间方法的逻辑复杂性进行度量,因此,对于类之间的逻辑复杂性的度量计算多是采用WMC度量法进行。

最后,在进行方法的逻辑复杂性度量计算中,多是使用McCabe以及Halstead度量法进行度量计算。首先,McCabe度量法在进行方法的逻辑复杂性度量计算中,是通过模块的控制流量图,实现对于模块结构复杂性的度量确定,主要是通过下列计算公式(1)进行度量计算实现。

在上述计算公式中,V(G)表示的是强连通有向图G中的环数情况,m则表示G中的弧数,n表示G中的结点数,p则是G中强连通分量的个数。其次,应用Halstead度量法进行方法的逻辑复杂性度量计算时,Halstead软件工具主要是进行软件规模的度量,也就是根据软件的词汇量的相关信息进行软件长度的预测,从而实现对于软件级别等的度量实现。应用Halstead度量法进行度量计算中,主要是根据Halstead度量软件工具中的一系列度量值,通过软件程序代码中出现的不同操作符个数以及不同操作数个数、操作符总数、操作数总数等参数,根据计算公式进行度量计算。

2 Java程序度量工具的设计与案例探讨

2.1 Java程序度量工具的设计

本文中所分析探讨以及设计实现的Java程序度量工具是在对于SafePro/Eval所支持开发的度量工具以及测试工具QE-SAT的集成应用上设计实现的,其中,QE-SAT工具能够对于Java程序项目中的源代码进行分析,并实现动态以及静态的测试。在QESAT工具对于Java程序项目源代码的静态以及动态测试中,静态测试是进行被测试程序的程序结构以及复杂度信息的分析,而动态测试则是进行程序项目源代码中语句以及分支、方法、类的覆盖等测试实现,同时动态测试还能够实现对于程序执行频度的分析测试。Java程序度量工具在通过上述设计组成工具的度量计算后,将计算所得的复杂度信息显示在QE-SAT工具中的图形显示界面中,以实现对于Java程序结构与复杂度的度量测试。如下图1所示,为Java程序度量工具中静态分析器的结构示意图。

图1 Java程序度量工具中静态分析器的结构示意图

根据上示静态分析器的总体结构示意图可以看出,Java程序度量工具中的静态分析器主要由Java语法分析器以及符号表、复杂度信息分析器、语法树四个结构部分组成。Java程序度量工具在度量计算中,Java程序中的源文件在通过语法分析器进行分析后,形成符号表以及语法树,然后再通过复杂度信息分析器对于语法树的各节点进行分析,同时根据符号表中相关的标识符的相关定义信息,将分支作为基本单元结构对于其中的变量操作信息进行提取,以实现对于程序结构与复杂度的度量计算,计算结果将以XML格式存入到计算机的信息库中,以输出应用。在Java程序度量工具中,静态分析器中的语法分析器是基于Java语言并根据相关语法自动生成的一种语法分析器,在对于这种自动生成语法分析器修改的基础上,最终形成静态分析器中的语法分析器。

2.2 案例探讨

Java程序度量工具在进行代码分析时具有较为突出的辅助作用,下文将以Java程序度量工具对于QE-SAT测量工具中jstaticdata数据包源代码的分析为例,进行探讨说明。为运行QE-SAT工具情况下,对被测数据包中的源代码静态分析后,生成信息显示界面。在上述QE-SAT静态分析器分析显示的结果中,用户在项目视图或者是类视图中进行类或者是方法的名称选择,就能够通过信息视图得知所选择的类与方法的相对应各种度量值。

3 结束语

总之,Java程序度量工具在进行软件程序开发设计中,具有帮助程序员分析代码、及时发现软件程序代码中的问题,实现程序的优化,因此,进行Java程序度量工具的实现以及案例探讨,具有积极的作用与价值意义。

[1]王树森,顾庆,陈焘,陈道蓄.基于复杂网络的大型软件系统度量[J].计算机科学.2009(2).

[2]姜元鹏,张永平,姜淑娟.测试Java异常处理机制的方法[J].计算机工程与设计.2010(20).

[3]黄沛杰,杨铭铨.代码质量静态度量的研究与应用[J].计算机工程与应用.2011(23).

[4]徐军,张嫒,叶澄清.Java多线程动态测试中的插装[J].计算机工程与应用.2011(19).

[5]李必信,杨朝晖,谭毅,朱平,李宣东,郑国梁.一种基于切片技术度量Java耦合性的框架[J].计算机学报.2011(3).

猜你喜欢
分析器源代码复杂性
基于TXL的源代码插桩技术研究
PFNA与DHS治疗股骨近端复杂性骨折的效果对比
简单性与复杂性的统一
酒精分析器为什么能分辨人是否喝过酒
软件源代码非公知性司法鉴定方法探析
多边形电极线形离子阱质量分析器的结构与性能
基于语法和语义结合的源代码精确搜索方法
应用于词法分析器的算法分析优化
应充分考虑医院管理的复杂性
揭秘龙湖产品“源代码”