论文部分内容阅读
现代软件制品的代码规模非常巨大,如果一个软件项目完全从零开始开发,那么产品的开发周期将会十分漫长,难以满足现代软件产业快速发展和更迭的需要。幸运的是,现在网上存在大量的开源软件,如果能在开发过程中复用这些开源软件,那么毫无疑问可以极大地提高软件的开发效率。然而对于开发人员来说将已有的开源项目复用到新的软件产品中并不是一件容易的事,开发人员面临着开源软件的检索与搜集、开源项目的理解和复用等一系列的难题。针对开源项目复用的这些难题,一个根据实际需求、由源代码逆向获得的模型组成的模型库,将会是是一个很好的解决方案。由于模型中的系统层次结构更为清晰,包含的对项目检索造成影响的冗余信息较少,因此检索的效率会更高。同时模型库中的模型与源代码一一对应,包含了开源项目的关键性信息,可以辅助开发人员理解开源项目的设计特点。UML语言是当前工业界最主流的模型建模语言,现代软件制品大多都使用UML语言进行系统模型的构建,因此本文将会构建基于UML模型的模型库。本文提出了一种面向开源代码的UML模型库构造方法,该构造方法主要包括以下几个方面的工作:1.设计了一种合理可行的模型库架构。该架构可以分为三个部分,底层是模型库数据获取层,主要用来获取开源项目和生成模型,中间层是数据存储层,主要用来实现模型的持久化,上层是数据使用层,包含了一系列基于模型库的应用。这样的架构使得整个模型库的扩展性和可维护性得到了极大地提高。2.提出了基于逆向工程的模型库构造方法,该方法由四部分组成。首先本文设计了一种面向开源站点的爬虫程序,用于获得特定领域的大量源代码。然后我们使用逆向工程的相关策略生成与源代码相对应的模型。接着本文对每一种类间关系对应的Java代码模式进行了归纳整理,并根据这些信息对模型进行类间关系的精化。最后本文设计了一种基于Neo4j数据库的模型持久化策略,用来存储模型并最终形成可用的模型库。3.提出了一种声明式的模型查询语言MJINS。首先使用BNF精确定义了MJINS的语法,然后研究了 MJINS语言针对不同的模型查询场景的查询描述能力,探讨了 MJINS语言进行模型查询的可行性。最后本文将MJINS语言针对Neo4j数据库进行了适配,使得MJINS语言能够直接应用在模型库上进行模型查询。4.本文还基于SourceForge网站进行了模型库构造的实例研究,在实例研究中本文按照项目需求在SourceForge上总计获取了312个开源项目共计68G的源代码,并选取其中的Java项目逆向生成了 179个UML类图模型。本文还进一步的对这些模型进行了精化,在模型中增加了大量的类间关系信息,最后本文还验证了模型库查询功能的有效性。