青鸟程序分析理解工具集
青鸟程序理解系统JBPAUS (Jade Bird Program Analysis and Understanding System)是一个针对C++语言的程序分析理解系统,由一个C++分析器前端和一组分析工具构成。其体系结构如图所示:

图1.JBPAUS体系结构
分析器前端采用EER(Enhanced Entity-Relationship)为C++程序建立概念模型。该模型较为全面,适合多种程序信息需求。分析器通过增量分析技术静态分析程序源代码,按照概念模型抽取程序信息,并将信息保存在增量数据库中。然后,启动增量库链接器,将各个增量数据库链接成程序信息库。它由信息抽取器和信息管理器组成,如图所示:

图2.JBPAUS分析器前端
分析工具包括:
1. 程序理解工具(Program Understanding Tool):支持用户在程序理解过程中采用的多种理解策略,用多层抽象视图表现程序,并方便程序理解过程中的用户交互。
2. 设计文档逆向生成工具(Reverse Design Document Generator):利用程序信息库中的程序信息,自动生成程序的面向对象设计文档,以维护文档的一致性。
3. 面向对象测试支持工具(Object-Oriented Testing Supporter):利用插装技术跟踪程序的运行,以辅助测试用例的生成。
4. 面向对象度量工具(Object-Oriented Metrics Supporter):收集基于代码的度量数据并按特定的度量准则进行计算,以更好地反映程序的特性。
5. 构件提取工具(Component Extractor):基于类和类树的信息,对类和类树进行再工程以提取可复用的构件。
6. C到C++转换工具(C to C++ Translator):将C程序转换为功能等价的C++程序,以充分利用非OO程序。
7. C++到OLE转换工具(C++ to OLE Translator):辅助程序员将C++应用程序转换为遵从OLE接口标准的OLE构件。
青鸟逆向工程工具JBRET(Jade Bird Reverse Engineering Tool)是一个针对面向对象语言的逆向工程工具,分别实现了针对C++、Java语言的版本JBRET-C++、JBRET-Java。
JBRET系统采用EER(Enhanced Entity Relationship)模型为被分析的源代码建立概念模型,用编译器前端以增量方式静态分析源代码,按照概念模型抽取信息并存入关系数据库。然后,在信息浏览和使用上,建立一组基于程序信息库的工具,包括交互式理解的可视化视图、设计文档逆向生成工具、构件提取工具以及度量工具等。

图3 JBRET体系结构
信息抽取部分定制了包含针对C++的预处理器的词法分析器,因此它充分处理了语言的预编译功能,准确定位了程序实体与源代码之间的位置关系,并有效地抽取代码注释信息。
信息管理部分负责程序信息库的管理,为信息抽取部分和信息表示部分分别提供写入以及读入数据库的接口。它通过链接多个增量数据库来得到最终的程序信息库。
信息表示部分负责从程序信息库中读取程序信息,然后用不同层次的抽象视图从不同侧面表现程序,并支持用户以交互的方式进行程序理解。可视化视图包括文件关系图、类关系图、符号信息浏览、源代码浏览(编辑)器、程序结构图、交叉索引浏览等。同时信息表示部分还能逆向生成OOD文档,包括符合青鸟面向对象规范的JBOO工具的设计文档,以及针对Rational Rose的设计文档。生成的文档能被正向工程工具直接使用,从而有效地促进了逆向工程工具和正向工程工具的集成。
青鸟面向对象度量工具JBOOMT (Jade Bird Object-Oriented Metrics Tool) 是一个针对C++程序的面向对象软件度量工具,用于辅助用户创建、定制、计算以及显示层次型度量模型。如图所示,它由四层组成:代码分析层、模型创建层、模型计算层、模型显示层。

在代码分析阶段,分析前端采用基于编译技术的分析方法来分析C++源代码,并根据基于增强实体关系(EER)模型构建的概念模型抽取程序信息,通过数据库服务模块保存到一个关系数据库——程序信息库中。
在模型创建阶段,度量用户可以从已经实现的度量列表中选择度量类型来创建所需要的度量模型,也可以把已有的模板模型从模板模型表中调出来进行修改,定制自己所需的模型。创建好模型后,模型被存入到模型库中,模型库用来保存层次型模型的定义和模型计算结果。
在模型计算阶段,依据用户从度量模型库选择的模型,工具从程序信息库中统计计算该模型中的底层度量值,然后自底向上地加权计算高层结点值,度量结果被保存回度量模型库中。在模型中,为了使与同一高层质量属性相关的不同度量方法能够组合叠加,从而计算出质量属性值,就必须先要对其进行规整计算。工具提供了两种规整计算类型:绝对规整计算和相对规整计算。
在模型显示阶段,JBOOMT采用树型图作为显示度量模型信息的主要形式,并提供了灵活的界面支持用户修改,调整度量模型的结点信息。用户可以浏览层次型度量模型的每个结点值,也可以方便地设定度量临界阀值和调整度量模型的结构。JBOOMT还提供了模型收藏夹,用来支持用户在多个度量模型间进行浏览、比较。用户可以选择任意一个度量模型加入到已有的或新建的一个收藏夹中。JBOOMT可以把某个收藏夹中的所有模型一起显示在同一个窗口中,方便用户浏览和比较所关注的度量模型。

