首页> 中国专利> 一种基于逆向工程自动生成软件文档的方法及装置

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

摘要

本发明涉及一种基于逆向工程自动生成软件文档的方法及装置,包括:扫描源程序,获得函数注释、函数详细信息、函数间相互调用关系和相互包含关系;通过自然语言识别提取函数功能信息;基于函数详细信息、函数间相互调用关系和相互包含关系分别生成全局函数调用关系图和全局函数包含关系图;基于函数功能信息、函数详细信息和全局函数调用关系图生成自动生成软件设计说明文档;基于函数功能信息和全局函数包含关系图生成系统功能图;基于系统功能图自动生成软件需求规格说明文档。本发明自动生成软件需求规格说明文档和软件设计说明文档,实现了由代码到文档的逆向工程,应用广,适用性强。

著录项

  • 公开/公告号CN103336760A

    专利类型发明专利

  • 公开/公告日2013-10-02

    原文格式PDF

  • 申请/专利权人 北京信息科技大学;牟永敏;

    申请/专利号CN201310289817.0

  • 发明设计人 牟永敏;

    申请日2013-07-11

  • 分类号G06F17/21(20060101);

  • 代理机构北京远大卓悦知识产权代理事务所(普通合伙);

  • 代理人贺持缓

  • 地址 100085 北京市海淀区清河小营东路12号

  • 入库时间 2024-02-19 20:16:50

法律信息

  • 法律状态公告日

    法律状态信息

    法律状态

  • 2018-07-27

    未缴年费专利权终止 IPC(主分类):G06F17/21 授权公告日:20161228 终止日期:20170711 申请日:20130711

    专利权的终止

  • 2016-12-28

    授权

    授权

  • 2013-11-06

    实质审查的生效 IPC(主分类):G06F17/21 申请日:20130711

    实质审查的生效

  • 2013-10-02

    公开

    公开

说明书

技术领域

本发明涉及逆向工程技术领域,特别是涉及一种基于逆向工程自动生成软 件文档的方法及装置。

背景技术

逆向工程来自于硬件领域,是指通过检查样品开发复杂硬件系统归约的过 程,主要指研究他人的系统,发现其工作原理,以达到复制硬件系统的目的。 随着软件业的发展,逆向工程这一术语被引入软件工程领域,逆向工程用于从 源程序代码的低级的抽象层次转换为更高抽象层次的表示,如控制流图、数据 流图、类关系图等。逆向工程是一个设计恢复过程,逆向工程工具从现在的程 序中抽取数据、体系结构和过程的设计信息分析程序,以在比源代码更高的抽 象层次上创建程序的某种表示的过程。

程序理解是一个从计算机程序中获得知识信息的过程。这些知识信息可以 用于程序排错、增强程序、重用程序以及整理文档等方面的工作上。程序理解 是软件工程领域的一个重要部分。软件工程最为关心的是如何提高软件开发过 程的生产效率和软件产品质量,但是,就目前实际情况来看不容乐观。大多数 软件开发精力花费在维护老系统上,而不是在开发新系统上,用户维护方面的 资源和时间占了很大比例。

逆向工程技术中涉及的自然语言识别是指:采用人工智能(Artificial Intelligence,AI)的理论和技术将设定的自然语言机理用计算机程序表达出来, 从而构造出能够理解和识别自然语言的人工智能系统。自然语言识别作为人工 智能的一个重要分支,同时也是语言信息处理的一个重要组成部分。自然语言的 识别是对语言多种表达方式的识别和处理。自然语言识别要求进算计通过对一 些常用进行识别和处理,使得计算机能够懂得该语言的含义,并通过一定的方 式进行展现。具体来说,这一过程即是计算机对字、词、句进行输入、输出、 识别、分析、理解和生成等一系列的操作和加工,从而建立起以重任与机器之 间的密切而友好的关系,加快了人类的信息传递和认知活动。

现有的逆向工程和程序理解的系统也比较多,如 Rigi,Javadoc,Doxygen,JBPAS-C++等等。这些工具都能够根据源代码生成一些 视图、文档等来描述软件系统的信息。但是这些系统使用起来有很多限制,且 比较复杂,难以理解。

例如Javadoc只能用于Java语言,它是Sun公司在其NetBeanIDE中内嵌 的文档自动生成工具,是Java开发平台的一部分。Javadoc使用Java编译器扫 描Java源文件集,从源代码中的doc注释生成类似于javaapi document的HTML 格式的API文档。因此其对注释的格式要求很高,只有按照其要求进行书写的 注释,才能进行提取。

Doxygen是一种开源的、跨平台的文档生成系统。由荷兰人Dimitri van Heesch开发,在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外部接口需求,即按标准生成软 件需求规格说明文档。

以上所述仅为本发明的较佳实施例,并不用以限制本发明,凡在本发明的 精神和原则之内,所作的任何修改、等同替换、改进等,均应包含在本发明的 保护范围之内。

去获取专利,查看全文>

相似文献

  • 专利
  • 中文文献
  • 外文文献
获取专利

客服邮箱:kefu@zhangqiaokeyan.com

京公网安备:11010802029741号 ICP备案号:京ICP备15016152号-6 六维联合信息科技 (北京) 有限公司©版权所有
  • 客服微信

  • 服务号