《动态信息收集与用例模型恢复技术的研究.pdf》由会员分享,可在线阅读,更多相关《动态信息收集与用例模型恢复技术的研究.pdf(7页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、http:/ 一种利用动态信息迭加生成用例模型的方法1 曹翀,陈平 西安电子科技大学软件工程研究所,陕西 西安(710071)E-mail:摘 要:摘 要:在逆向工程中,逆向生成的用例模型可以有效的帮助用户在系统的整体结构上理解软件的功能和行为特点,因此对于理解面向对象的软件系统具有重要意义。本文提出了一种利用动态信息迭加生成用例模型的方法。该方法可以利用多次收集到的动态信息,迭加生成目标系统的用例模型并以 UML 用例图的形式呈现。通过实验测试,使用该方法恢复出来的用例模型接近于实际模型,证明了该方法的有效性。关键词:关键词:逆向工程;UML;用例模型;程序分析;迭加生成 1 引 言 1 引
2、 言 软件逆向工程是分析软件构件和它们的关系,以另一种形式或在更高抽象层次上描述该软件的过程。UML(Unified Modeling Language)用例图是对系统进行动态建模的五种图之一,它主要用于对系统、子系统和类的行为进行建模,描述一组用例、参与者以及它们之间的关系。在逆向工程中,用例模型的恢复技术仍是一个全新领域,但它的重要性却十分突出。通过逆向生成的用例模型,用户能够从系统的整体结构上理解软件的功能和行为特点;在此基础上,用户能够来完成自己所要进行的活动,如系统的维护和升级、系统文档的维护和恢复、再工程以及系统的移植等。目前已有一些针对用例模型逆向生成的研究成果,但这些方法主要基
3、于研究目的,使用比较复杂,实用化难度较高。经过实验研究,曾提出一种基于动态信息并结合静态信息的用例模型恢复方法,该方法能够比较有效的恢复用例模型,且具有较高的生成效率。但是,由于该方法是以单次收集到的动态信息为基础,受限于单次收集到的动态信息的不全面性,导致了该方法不能生成完整的用例模型。经过进一步的实验研究,本文以上述的用例模型恢复方法为基础,提出了一种利用动态信息迭加生成用例模型的方法,该方法可以迭加多次收集到的动态信息,然后以此为基础,并结合适当的静态信息重新生成用例模型。相对于旧有的方法,该方法生成的用例模型更为全面和合理,而且生成效率仍然较高,恢复出的用例模型有助于用户的理解。1基金
4、支持:国家自然科学基金(项目编号:60473063),国家教育部博士点基金(项目编号:20030701009)及“十五”国防预研项目(项目编号:41306060106)http:/ 2 已有的用例模型恢复方法 2 已有的用例模型恢复方法 基于线索的用例模型恢复方法和分支调用图方法,这两种方法都是通过对目标系统的源代码进行静态分析从而恢复用例模型,因此对于规模较大的目标系统效率较为低下。通过对系统用户交互界面的追踪来发掘用例的方法,该方法通过动态分析从系统和用户的交互过程中来发掘用例模型,由于该方法要求系统存在大量的用户交互接口,这样就限制了它的适用范围,对于批处理系统或者是那些不存在或者存在很
5、少用户接口的系统则不能使用该方法来逆向出系统的用例模型。一种基于动态信息并结合静态信息的用例模型恢复方法,此方法利用从目标系统单次运行中收集到的动态信息,并适当结合主要记录类间关系的静态信息,逆向生成用例模型。首先,从收集到的单次动态信息中提取出基本用例序列;其次,按照相应的用例抽取和合并规则,分别抽取出循环、顺序、分支和独立用例;再次,对得到的用例进行适当的调整,补充必要的用例以及对用例分层;最后,以 UML 用例图的形式呈现生成的用例,并可由用户手动修改完善用例模型。由于此方法主要依靠的是单次收集到的动态信息,因此,生成的用例模型往往不够全面,甚至会导致生成的用例模型有一定程度的偏差。3
6、利用动态信息迭加生成用例模型的方法 3 利用动态信息迭加生成用例模型的方法 在提出并实现了 2 中所述的基于动态信息并结合静态信息的用例模型恢复方法后,经过实验研究,本文提出了一种利用动态信息迭加生成用例模型的方法,该方法改进了原有的方法。生成的用例模型仍是属于低层次的,反映系统一定功能特点的功能型用例模型。3.1 整体处理流程 3.1 整体处理流程 1.对收集到的单次动态信息文件进行处理,抽取出其中的关键方法调用序列构成单次基本用例序列;2.读取记录基本用例序列的文件,构成另一个基本用例序列;3.根据得到的两个基本用例序列,按照基本用例序列迭加处理流程,进行迭加处理,得到迭加后的基本用例序列
7、,并存入记录基本用例序列的文件;4.按照用例抽取合并规则,从迭加后的基本用例序列中抽取出用例信息;5.按照用例调整规则,对得到的用例信息进行调整;6.将调整后的用例信息保存为 XML 文件,至此已恢复出了系统的用例模型;7.将恢复出的用例模型交于 Rational Rose 呈现,并通过专家和用户的参与,对用例模型进行进一步的分析、加工和抽象,以得到更为确切的 UML 用例图。-2-http:/ 3.2 基本用例序列的迭加处理 3.2 基本用例序列的迭加处理 提取单次收集到的动态信息文件中的关键方法可以得到单次基本用例序列 Temp,读取记录基本用例序列的文件可以获得记录的基本用例序列 Res
8、ult,获得两个基本用例序列后,按照如下的流程将两个基本用例序列进行迭加:1.判断 Result 是否为空,若是则 ResultTemp 并将 Result 记录文件后退出,否则,执行后面的步骤;2.按照图 1 所示的基本用例序列迭加算法将 Temp 中的基本用例序列迭加入 Result 中;3.调整生成的基本用例序列 Result:统计每个基本用例的出现频度,对出现频度为 2 的基本用例只保留第一次出现的位置其余均删除,并将相邻的同一基本用例合并为一个基本用例,然后,再重新统计每个基本用例的出现频度并记录;4.将调整后的 Result 存入记录基本用例序列的文件,以备以后有新的动态信息时可以
9、继续迭加。在基本用例序列的迭加处理算法中,最重要的就是图 1 所示的基本用例序列迭加算法,该算法将 Temp 中的基本用例加入 Result 中,以实现对 Temp 和 Result 的迭加。输入:基本用例序列和),(21mtttTempL=),(Re21nrrrsultL=输出:迭加后的基本用例序列),(ReLLLjirtsult=步骤:1Index指示 Temp 下标范围,指示 Result 下标范围,2IndexNpT 且指向Temp,且指向,代表子串的频度,NpRsultReNaS NaT 代表指向的基本用例的频度 pT1pR while do Temp;1pTaTaS;pTttsub
10、StringL1;while do/寻找子串第一次出现位置),(ResubStringsulttPositionLookupFirspR=1+pTpTif AND 1IndexpTaSaT=then if CompName(pT)then break;/pT 指向的用例名是否与的某用例同名11pTtt else do 1+pTpT if then 1IndexpTpTttsubStringL1;else break;fi od fi else break;fi-3-http:/ od while AND 1IndexpTaSaTpT1 pTpT插入()pTtt,1L至 pR 处并从 Temp
11、中删除()pTtt,1L;pTpRpR+;od 图 1 基本用例序列迭加算法 设 Temp 的基本用例个数 m,Result 的基本用例个数 n,则算法的平均时间复杂度为,在实际工程中,基本用例序列的个数有限,所以,该算法收敛。)(nmO3.3 用例合并规则 3.3 用例合并规则 得到经过 3.2 所述流程处理调整的基本用例序列后,则由用例合并过程对其中的循环、顺序、分支和独立关系进行认定和抽取,从而构成目标系统的用例模型。用例合并规则如下:1.对基本用例序列,按照循环、顺序、分支、独立的次序进行识别和合并;2.对于存在循环关系和顺序关系的基本用例集合,将整个集合作为一个用例,内部的每个基本用
12、例作为其包含的子用例,父子用例间存在包含关系;3.对于多个单元之间存在的分支关系,以代表发散节点的那个基本用例作为一个用例,而那些代表各个分支的基本用例则作为子用例在其内部体现出来,父子用例间存在延伸关系;4.剩下的是具有独立关系的基本用例,将每个相邻的基本用例集合均作为一个用例。在整个基本用例合并抽象算法中,最为重要的部分就是蕴含循环、顺序、分支和独立关系的基本用例集合的抽取合并算法。图 2、3、4、5 分别简要阐述了这些算法。输入:基本用例序列()nuuuU,21L=输出:蕴含循环关系的基本用例集合构成的集合mIIII,21L=步骤:while do Uunow 寻找出子序列,要求其中用例
13、频度均相同且大于 1,每个用例均未被访问,且无用例同名,合并为新用例并放入),(inowuuL),(1inowuuLI中,同时替换U中同样的用例序列为该新用例,设置用例的访问标志及记录频度,nextnowuu od 图 2 蕴含循环关系的基本用例集合抽取合并算法 输入:基本用例序列()nuuuU,21L=输出:蕴含循环关系的基本用例集合构成的集合mIIII,21L=步骤:while do Uunow-4-http:/ 寻找出子序列,要求每个用例均未被访问,并且每两个用例间满足下列条件之一:用例的关键方法所属类相同,或这些类具有泛化、关联、依赖三种关系之一,或用例的关键方法名相同),(inowu
14、uL合并为新用例并放入),(1inowuuLI中,设置用例的访问标志及记录频度,nextnowuuod 图 3 蕴含顺序关系的基本用例集合抽取合并算法 输入:基本用例序列()nuuuU,21L=输出:蕴含分支关系的基本用例集合构成的集合mEEEE,21L=步骤:while do Uunow寻找出子序列,要求且均未访问,合并该子序列并放入到 E 中,设置用例的访问标志及记录频度,),(inowuu的频度的频度inowuunextnowuu od 图 4 蕴含分支关系的基本用例集合抽取合并算法 输入:用例序列()nuuuU,21L=输出:蕴含独立关系的用例集合构成的集合mAAAA,21L=步骤:w
15、hile do Uunow寻找出子序列,要求每个用例均未被访问,合并该子序列并放入到 A 中,设置用例的访问标志及记录频度,),(inowuuLnextnowuu od 图 5 蕴含独立关系的基本用例集合抽取合并算法 3.4 用例调整规则 3.4 用例调整规则 基本用例序列在经过合并处理后,形成了新的用例集合,该集合构成了目标系统的用例模型,为了方便用户的理解,需要对已得到的用例模型进行调整。调整后的用例模型信息,将记录在 XML 文件中并交由 Rose 呈现。用例调整规则如下:1.将包含关系和扩展关系中相同名字的用例进行合并;2.根据目标系统的具体情况,适当的增减生成的用例。4 实验研究 4
16、 实验研究 实验用例选取的是一个停车场仿真程序,该系统是 MFC 程序,用户输入仿真参数后,系统仿真停车场的车辆进出情况。实验中,进行了两次动态信息收集。根据第一次收集到的动态信息文件生成的用例图的-5-http:/ 主要部分如下图 6 所示。CenterCtrl-Init(CDC*pDC,int nCarCount,.CEmulatorView-GetDocument()CenterCtrl-CreateMotor()Park-SetCardRange(int nStart,int nCou.CenterCtrl-Display(CDC*pDC)CEmulatorView-DriveEven
17、t()Park-SetCardRange(int nStart,int nCount)Park-Statistic()图 6 根据第一次收集到的动态信息生成的用例模型 这样生成的用例模型并不利于用户的理解,而且,仅仅依靠单次的动态信息生成的用例模型,也必然不够全面,故而,对目标系统进行了第二次动态信息收集,迭加后得到如图 7所示的新的用例模型。Park-SetCardRange(intnStart,int nCou.CEmulatorView-GetDocument()Center CEmulatorView-GetDocument()CenterCtrl-Display(CDC*pDC)Pa
18、rk-Statistic()用例 1 表示初始化用例 2 表示模拟运行和呈现 CEmulatorView-DriveEvent()CenterCtrl-CreateMotor()Park-SetCardRange(int nStart,int nCount)CenterCtrl-Init(CDC*pDC,int nCarCount,.图 7 根据两次收集到的动态信息迭加后生成的用例模型 经过迭加后得到的用例模型,更为全面,而且对于用例间关系的认定也更为合理,有助于用户的理解。其中,生成的用例 1 表示的是系统的初始化,而生成的用例 2 则表示了整个仿真的运行过程以及呈现部分。5 结束语 5 结
19、束语 本文提出的利用动态信息迭加生成用例模型的方法,不再仅仅依赖于单次收集到的动态信息,而能够迭加多次得到的动态信息,并从中获得迭加后的基本用例序列。由迭加后的基本用例序列,最终生成目标系统用例模型。通过实验研究发现,该方法执行效率较高,生成-6-http:/ 的用例模型更加全面、合理,而且也更接近于实际模型,有利于用户对目标系统的理解。参考文献 参考文献 1 Elliot J.Chikofsky,James H.Cross II.Reverse engineering and design recovery:a taxonomy J.IEEE Software,1990,Vol.7(No.1
20、):13-17.2 Giuseppe Antonio Di Lucca,Anna Rita Fasolino,Ugo de Carlini.Recovering Use Case Models from Object-Oriented Code:a Thread-based Approach.Proc.7th Working Conf.On Reverse Engineering(WCRE00),2000:108-177.3 Tao Qin,Lu Zhang,Zhiying Zhou,Dan Hao,Jiasu Sun.Discovering Use Case from Source Code
21、 using the Brach-Reserving Call Graph.10th Asia-Pacific Software Engineering Conference(APSEC03),2003:60-67.4 Mohammad El-Ramly,Eleni Stroulia,Paul Sorenson.Mining system-User Interaction Traces for Use Case Models.10th International Workshop on Program Comprehension(IWPC02),2002:21-26.5 李青山面向对象软件的动
22、态模型设计恢复与体系结构抽象D西安电子科技大学,2003 6 Martin Pinzger,Harald Gall:Pattern-Supported Architecture Recovery CIWPC2002:53-64 An Approach to Incremental Construction of Use Case Model from Dynamic Information CAO Chong,CHEN Ping Institute of Software Engineering,Xidian University,Xian(710071)Abstract In the fie
23、ld of reverse engineering,recovered use case model can effectively help users to comprehend functions and behavioral features of software from the angle of software architecture.As a result,recovery of use case model is of great importance for the comprehension of Object-Oriented software.An approac
24、h to incremental construction of use case model from dynamic information is brought forward.Making use of dynamic information gathered during the running of the target system for many times,use case model of the system can be incrementally constructed and presented in the form of UML use case diagra
25、m.Finally,an experiment is conducted.The experimental results show that the approach is correct and the recovered use case model is close to the actual model.Keywords:Reverse Engineering;UML;Use Case Model;Program Analysis 作者简介:作者简介:曹翀,男,陕西西安人,硕士研究生,主要研究领域为逆向工程,面向对象技术和软件体系结构;陈平,男,博士,教授,博士生导师,主要研究领域为电子信息系统软件开发理论与技术,面向对象技术,软件工程,逆向工程。-7-