一种基于逆向工程自动生成软件文档的方法及装置与流程

文档序号:12039479阅读:327来源:国知局
一种基于逆向工程自动生成软件文档的方法及装置与流程
本发明涉及逆向工程技术领域,特别是涉及一种基于逆向工程自动生成软件文档的方法及装置。

背景技术:
逆向工程来自于硬件领域,是指通过检查样品开发复杂硬件系统归约的过程,主要指研究他人的系统,发现其工作原理,以达到复制硬件系统的目的。随着软件业的发展,逆向工程这一术语被引入软件工程领域,逆向工程用于从源程序代码的低级的抽象层次转换为更高抽象层次的表示,如控制流图、数据流图、类关系图等。逆向工程是一个设计恢复过程,逆向工程工具从现在的程序中抽取数据、体系结构和过程的设计信息分析程序,以在比源代码更高的抽象层次上创建程序的某种表示的过程。程序理解是一个从计算机程序中获得知识信息的过程。这些知识信息可以用于程序排错、增强程序、重用程序以及整理文档等方面的工作上。程序理解是软件工程领域的一个重要部分。软件工程最为关心的是如何提高软件开发过程的生产效率和软件产品质量,但是,就目前实际情况来看不容乐观。大多数软件开发精力花费在维护老系统上,而不是在开发新系统上,用户维护方面的资源和时间占了很大比例。逆向工程技术中涉及的自然语言识别是指:采用人工智能(ArtificialIntelligence,AI)的理论和技术将设定的自然语言机理用计算机程序表达出来,从而构造出能够理解和识别自然语言的人工智能系统。自然语言识别作为人工智能的一个重要分支,同时也是语言信息处理的一个重要组成部分。自然语言的识别是对语言多种表达方式的识别和处理。自然语言识别要求进算计通过对一些常用进行识别和处理,使得计算机能够懂得该语言的含义,并通过一定的方式进行展现。具体来说,这一过程即是计算机对字、词、句进行输入、输出、识别、分析、理解和生成等一系列的操作和加工,从而建立起以重任与机器之间的密切而友好的关系,加快了人类的信息传递和认知活动。现有的逆向工程和程序理解的系统也比较多,如Rigi,Javadoc,Doxygen,JBPAS-C++等等。这些工具都能够根据源代码生成一些视图、文档等来描述软件系统的信息。但是这些系统使用起来有很多限制,且比较复杂,难以理解。例如Javadoc只能用于Java语言,它是Sun公司在其NetBeanIDE中内嵌的文档自动生成工具,是Java开发平台的一部分。Javadoc使用Java编译器扫描Java源文件集,从源代码中的doc注释生成类似于javaapidocument的HTML格式的API文档。因此其对注释的格式要求很高,只有按照其要求进行书写的注释,才能进行提取。Doxygen是一种开源的、跨平台的文档生成系统。由荷兰人DimitrivanHeesch开发,在GNU公共许可正(GPL)下发布,目前已经成为各主要的Linux发行版的附带组件。Doxygen支持的语言有C++、C、Java、Objeetive-C、Python、和IDL,并在一定程度上支持PHP、C#和D。Doxygen生成的文档格式有:HTML,Latex,RTF(MS-Word),Postscript,PDF,压缩HTML和UNIXmall。并且支持类层次图、类继承图、依赖图、调用图和合作图的生成,此外生成的文档可用三十多种语言显示。Doxygen的文档注释方法分为详细和简约两种,Doxygen可以根据注释生成文档,如果文档中没有注释,Doxygen生成其他类型的文档。该系统使用起来配置比较复杂,并且有很多种情况会处理错误。如voidf(int);f会被认为是一个没有返回值的函数声明。而constint(a);这句话a也会被认为是名字为a的函数声明。这样的基本错误,显然会导致提取出的文档不准确。Risils,ol:一个支持逆向工程的程序理解工具,它的工作由两部分组成:1.剖析阶段。2.发掘阶段。剖析阶段主要的工作是:剖析源程序,用自带的图像编辑器生成一个能够操作和浏览的资源流平面图。随后的发掘阶段是一个半自动化的阶段,涉及了一些模式识别技巧和领域知识。此阶段中逆向工程人员通过剖析阶段建立的平面图,确定源程序中含有的子系统,构造出有意义的高层抽象模型。这些子系统能够递归地收敛和打开,形成一个层次结构。Rigi能够通过根据用户关心的类型过滤掉不需要的信息,方便用户的浏览。Rigi主要的工作放在揭示系统的抽象和子系统层次的生成。这些层次结构为在工具中从容地浏览起到了重要的作用,这些信息在软件维护过程中能够作为并发程序理解的文档,以供参考。不过,Rigi不支持直接地搜索源代码文本。JBPAS-C++是青鸟Ⅱ型系统的逆向工程组成部分,JBPAS-C++支持C/C++语言和Windows平台,能够生成OOD(Object-OrientedDesign)文档和Rose文档。但是该系统生成的文档在理解性上仍然难以理解,存在着不足。综上,本发明提出了一种新的应用于逆向工程中的自动生成软件文档的方法及装置。

技术实现要素:
本发明所要解决的技术问题是提供一种基于逆向工程自动生成软件文档的方法及装置,用于解决现有技术中存在的逆向工程中生成软件文档方法的不足。本发明解决上述技术问题的技术方案如下:一种基于逆向工程自动生成软件文档的方法,包括:步骤1,对源程序进行扫描分析,获得函数注释、函数详细信息、函数间相互调用关系和函数间相互包含关系;步骤2,对函数注释和函数详细信息进行自然语言识别,提取出函数功能信息;步骤3,基于函数详细信息,并结合函数间相互调用关系和函数间相互包含关系,分别生成全局函数调用关系图和全局函数包含关系图;步骤4,基于函数功能信息、函数详细信息和全局函数调用关系图生成自动生成软件设计说明文档;步骤5,基于函数功能信息和全局函数包含关系图,生成系统功能图;步骤6,基于系统功能图自动生成软件需求规格说明文档。在上述技术方案的基础上,本发明还可以做如下改进。进一步,所述函数详细信息包括函数名、起始位置、函数所在类、返回值、参数列表、接口和内部实现逻辑。进一步,所述步骤3中采用面向函数级节点的全局路径分析方法生成全局函数调用关系图。进一步,所述基于逆向工程自动生成软件文档的方法还包括:若源程序是面向对象的程序,则还通过对源程序进行扫描分析获得类信息,并基于类信息和类注释生成类图和类调用关系图。对应上述的基于逆向工程自动生成软件文档的方法,本发明的技术方案还包括一种基于逆向工程自动生成软件文档的装置,该装置包括源代码静态分析扫描器、函数功能信息提取器、全局函数关系图生成器、软件设计说明生成器、系统功能图生成器和软件需求规格说明生成器:所述源代码静态分析扫描器,其用于对源程序进行扫描分析,获得函数注释、函数详细信息、函数间相互调用关系和函数间相互包含关系,并将函数注释和函数详细信息传输给所述函数功能信息提取器,将函数详细信息、函数间相互调用关系和函数间相互包含关系传输给所述全局关系图生成器;所述函数功能信息提取器,其用于对接收的函数注释和函数详细信息进行自然语言识别,提取出函数功能信息,并将函数功能信息传输给所述软件设计说明生成器和所述系统功能图生成器;所述全局函数关系图生成器,其用于根据接收的函数详细信息,并结合接收的函数间相互调用关系和函数间相互包含关系,分别生成全局函数调用关系图和全局函数包含关系图,并将生成的全局函数调用关系图传输给所述软件设计说明生成器,将生成的全局函数包含关系图传输给所述系统功能图生成器;所述软件设计说明生成器,其用于根据接收的函数功能信息、函数详细信息和全局函数调用关系图自动生成软件设计说明文档;所述系统功能图生成器,其用于根据接收函数功能信息和全局函数包含关系图,生成系统功能图,并将生成的系统功能图传输给所述软件需求规格说明生成器;所述需求规格说明生成器,其用于根据接收的系统功能图自动生成软件需求规格说明文档。进一步,所述源代码静态分析扫描器获得的函数详细信息包括函数名、起始位置、函数所在类、返回值、参数列表、接口和内部实现逻辑。进一步,所述全局函数关系图生成器包括有全局路径分析模块,该全局路径分析模块用于通过面向函数级节点的全局路径分析方法来生成全局函数调用关系图。进一步,所述基于逆向工程自动生成软件文档的装置还包括类关系生成器,其用于在源程序是面向对象的程序时,基于类信息、类注释和全局函数调用关系图生成类图和类调用关系图。本发明的有益效果是:本发明通过对函数注释和函数详细信息等进行信息提取,获得函数与功能的对应关系,通过函数与功能对应关系和函数包含关系获得系统功能图,自动生成软件需求规格说明文档,从而实现由代码到文档的逆向工程。再通过函数与功能的对应关系、函数调用关系及函数实现信息,自动生成软件设计说明文档,从而实现由代码到文档的逆向工程。该方法应用广,适用于vista、win7等常用系统,对应的装置配置简单,生成软件文档的过程简单且严谨,生成的软件文档错误率低,支持直接搜索源代码文本,且结果易于理解。附图说明图1为本发明所述基于逆向工程自动生成软件文档的方法的流程示意图;图2为本发明所述基于逆向工程自动生成软件文档的装置的原理示意图。具体实施方式以下结合附图对本发明的原理和特征进行描述,所举实例只用于解释本发明,并非用于限定本发明的范围。如图1所示,本实施例给出了一种一种基于逆向工程自动生成软件文档的方法,包括:步骤1,对源程序进行扫描分析,获得函数注释、函数详细信息、函数间相互调用关系和函数间相互包含关系;步骤2,对函数注释和函数详细信息进行自然语言识别,提取出函数功能信息;步骤3,基于函数详细信息,并结合函数间相互调用关系和函数间相互包含关系,分别生成全局函数调用关系图和全局函数包含关系图;步骤4,基于函数功能信息、函数详细信息和全局函数调用关系图生成自动生成软件设计说明文档;步骤5,基于函数功能信息和全局函数包含关系图,生成系统功能图;步骤6,基于系统功能图自动生成软件需求规格说明文档。本实施例中,所述函数详细信息包括函数名、起始位置、函数所在类、返回值、参数列表、接口和内部实现逻辑;所述步骤3中采用面向函数级节点的全局路径分析方法生成全局函数调用关系图;所述基于逆向工程自动生成软件文档的方法还包括:若源程序是面向对象的程序,则还通过对源程序进行扫描分析获得类信息,并基于类信息和类注释生成类图和类调用关系图。如图2所示,对应上述的基于逆向工程自动生成软件文档的方法,本实施例还给出了一种基于逆向工程自动生成软件文档的装置,该装置包括源代码静态分析扫描器、函数功能信息提取器、全局函数关系图生成器、软件设计说明生成器、系统功能图生成器和软件需求规格说明生成器:所述源代码静态分析扫描器,其用于对源程序进行扫描分析,获得函数注释、函数详细信息、函数间相互调用关系和函数间相互包含关系,并将函数注释和函数详细信息传输给所述函数功能信息提取器,将函数详细信息、函数间相互调用关系和函数间相互包含关系传输给所述全局关系图生成器;所述函数功能信息提取器,其用于对接收的函数注释和函数详细信息进行自然语言识别,提取出函数功能信息,并将函数功能信息传输给所述软件设计说明生成器和所述系统功能图生成器;所述全局函数关系图生成器,其用于根据接收的函数详细信息,并结合接收的函数间相互调用关系和函数间相互包含关系,分别生成全局函数调用关系图和全局函数包含关系图,并将生成的全局函数调用关系图传输给所述软件设计说明生成器,将生成的全局函数包含关系图传输给所述系统功能图生成器;所述软件设计说明生成器,其用于根据接收的函数功能信息、函数详细信息和全局函数调用关系图自动生成软件设计说明文档;所述系统功能图生成器,其用于根据接收函数功能信息和全局函数包含关系图,生成系统功能图,并将生成的系统功能图传输给所述软件需求规格说明生成器;所述需求规格说明生成器,其用于根据接收的系统功能图自动生成软件需求规格说明文档。对应于本实施例的方法步骤,这里所述基于逆向工程自动生成软件文档的装置还包括类关系生成器,其用于在源程序是面向对象的程序时,基于类信息、类注释和全局函数调用关系图生成类图和类调用关系图。参照图2,本实施例对系统源代码进行分析和处理,获得软件需求规格说明和软件详细设计,具体实现方法如下:步骤A,对源程序进行扫描分析,获得每个函数的局部调用路径图,然后根据函数入口连接顺序执行的函数,得到全局函数调用关系图,这里的详细实现方案可借鉴(专利系统测试方法及装置,查专利号:CN101876939A)。按照面向函数级节点的全局路径分析方法对源程序进行扫描分析的过程中,可获得每个函数的名称及其定义的起始位置、函数的返回值、参数列表、该函数附近的注释等信息,还能获得函数之间的相互调用关系及相互包含关系等。如果是面向对象的程序,还可以获得类的信息、实现的接口及类之间的继承关系等。步骤B,根据获得每个函数的信息以及函数之间的相互调用关系,可以获得一个全局函数调用关系图和全局函数调用路径。如果是面向对象的程序,可以获得类图。根据函数调用关系,可以获得类之间的相互调用关系,得到类调用关系图。步骤C,根据函数间的相互包含关系,可以获得一个全局函数包含关系图。步骤D,对于源代码中所定义变量名和函数名等标识符,如果都使用了有意义的名称,那么则可以使用中英文间的翻译,获得变量和函数所代表的意义。同时,通过自然语言识别,对函数周围的注释进行处理,抽取相关的功能信息,与获得的变量和函数所代表的意义结合可获得每个函数所对应的功能。步骤E,结合获得的函数详细信息、函数间调用关系和函数对应的功能,能够获得系统的详细设计信息。根据GJB438B-2009军用软件开发文档通用要求,将这些信息填入《软件详细设计》文档的4CSCI体系结构设计中,即按照标准自动生成软件详细设计文档。同时能够获得系统功能的内聚度和系统功能间的耦合度,可作为评测系统质量的一个度量。步骤F,根据获得的函数间的包含关系及函数对应的功能,可获得系统功能图,根据GJB438B-2009军用软件开发文档通用要求,将这些信息填入《软件需求规格说明》文档的3.2CSCI能力和3.3CSCI外部接口需求,即按标准生成软件需求规格说明文档。以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的保护范围之内。
当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1