基于本体的需求分析和软件体系结构设计研究
2017-07-12江东宇康达周王顺
江东宇+康达+周王顺
摘要:传统的软件开发模式下,从提出需求到完成设计之间跨越的鸿沟是降低开发效率的主要因素。为了辅助设计人员进行高效的软件开发,文中提出一个基于本体的需求分析和软件体系结构设计方法。首先建立领域本体模型、需求本体模型和软件体系结构本体模型;接着在需求分析阶段,通过本体映射将用户需求映射到本体概念上,进行准确地需求质量评估;然后在体系结构设计阶段,通过对网上共享的设计文档进行五种维度的语义标注生成语义索引,实现跨领域的语义搜索,为设计人员提供更全面、更详细的设计文档作为参考;最后结合自己项目的特点,逐步构建、完善系统体系结构。本文将本体作为描述需求和体系结构的基础,实现了需求到设计的平滑过度,减少了设计人员和用户进行交流的时间开销,对于整体提高软件开发效率来说具有一定的帮助。
关键字:本体;语义网;语义标注;语义搜索;软件体系结构设计
中图法分类号:TP311文献标识码: A doi:
Abstract:In the traditional software development mode,the wider gap betweenrequirementanddesign which is the main factor to reduce the development efficiency. In order to assist designers to carry out efficient software development, this paper addressedaframeworkwithontologytechnology. Firstly, theDomainOntologyModel, Requirement OntologyModel and SoftwareArchitectureOntologyModelware built.Then in the requirements analysis phase, userrequirementswaremappedto the ontologynode inorder to moreaccuratelyassessneeds.During the summary design phase, it achieved interdisciplinarysemanticsearch through multidimensional semanticannotationof the design document and provided a more comprehensive and detailed template for designers, then using it to completesystems or subsystemarchitecturedesign.This paperdescribes the ontology as thebasis for the requirementsandarchitecture, not only to achieve a smooth transition from requirements to design, but also reduces the time overhead of the communication between the designer and the user.It is helpful to improve the efficiency of software development.
Keywords:Ontology;Semantic Web;Semantic Annotation; Semantic Search;Software ArchitectureDesign
1. 引言
隨着软件的普及,用户对系统提出的需求也在与日俱增,软件开发过程变得越来越复杂。一个良好的需求规格说明对于成功的软件开发项目来说是至关重要的。但是需求工程阶段是既耗时又容易出错的,主要表现在如何获取用户的真实需求以及如何发现需求中存在的错误,这需要开发人员与客户不断的沟通交流,并且许多错误是在执行或测试阶段才被检测出来,这大大增加了软件开发周期,降低了整体开发效率[1-4]。在需求分析完成之后,接下来就要进行系统体系结构设计,这一阶段要求开发人员从整个系统的角度进行考虑,设计一个从整体到部分的最高层次的划分[5]。在这过程中,面临的最困难的问题就是如何满足用户需求和常见的体系结构设计目标,如可靠性、安全性、可扩展性、可维护性等。除了提升设计人员自身的知识能力水平之外,另一种办法就是调研同类产品的情况以及技术特征[6]。通过了解当前世界上对这种产品所能提供的理论支持和技术平台支持,再结合自己项目的特点,逐步构建完善系统体系结构,但是如何理解设计文档中的领域词汇,如何从网上海量的数据中高效的选择和自己项目类似的文档,这些都是我们所要解决的问题。
近几年研究人员探讨使用人工智能技术,用以解决这些问题[1][2]。Avgeriou P等人在文献[1]中将软件工程定义为一个跨学科的问题,与大量的情景、社会学、心理学、人类学和教育因素等有关,并且分析了其中可能产生的问题,例如需求是不完整的、模糊的、不精确的等。针对这些原因,Hany H Ammar等人在文献[3]中分析并提出有必要探索一个新的技术和方法,用于整合在软件工程中积累的理论、技术和资源,提供一个统一的、共享的、公认的知识基础设施。因此他们将人工智能技术引入软件工程,具体包括自然语言需求处理(NLR)、知识库系统(KBS)、本体和智能计算。
本体作为人工智能技术的一种,能够用于复用、集成、合并数据和知识,构建一个统一的、共享的、公认的知识基础设施,并且通过推理得到信息中蕴含的隐藏信息或错误信息。M. P. S. Bhatia等人在文献[4]中详细介绍了软件工程领域中各个本体的定义和实际应用价值,包括Upper Ontology、Domain Ontology、Architecture and Design Ontologies等,但仅仅是一些概要性描述,没有给出一个完整的知识体系来实现在整个软件开发周期中理解和沟通的共享。
针对本体在软件工程中应用的研究方向,LI Zong-yong等人在文献[7]中提出一个多本体框架用于辅助设计人员进行需求获取,并且对框架中提及的多种本体进行了描述,但是该研究只是理论阶段,没有对本体中的概念进行形式化描述,也没有验证本体如何对需求进行质量评估。R?ih? O.等人在文献[8]中提出一种基于基因遗传算法的软件体系结构设计,它将设计过程看成是一个搜索问题,即寻找一个应用通用方案的组合,能够以最优的方式满足质量要求。通过基因遗传的启发式搜索方法,自动生成一个合理的软件体系结构。但是该方法的出发点是一个已经满足功能需求的概念体系结构,对于需求与体系结构之间的平滑过度没有很好地解决。H. Duran-Limon等人将本体引入软件产品线工程中,在文献[9]中提出一种基于本体的产品导出方法,用本体作为描述需求模型的基础,然后利用本体的逻辑推理能力,在需求模型到产品体系结构模型转换过程中提供推理服务,以此减少手动导出的开销,但是该方法只考慮了本体对需求模型的重构,没有考虑质量属性在产品体系结构推导过程中对结构变化的影响。
本文利用本体作为描述需求和体系结构的基础,通过建立领域本体模型、需求本体模型和软件体系结构本体模型,帮助分析人员在需求分析阶段更准确的捕获和评估用户需求;在体系结构设计阶段利用语义标注和语义搜索技术,辅助设计人员从海量的设计文档库中选择具有语义相似的系统体系结构文档作为参考,对实现需求到设计的平滑过度和提高软件开发效率来说都起到一定的帮助。
文章其余部分结构如下:第二节概述了我们提出的整个框架以及框架中用到的本体的构建。第三节详细介绍本体在需求分析和体系结构设计阶段是如何发挥作用的。第四节总结我们的工作并讨论今后工作的研究方向。
2. 框架概述
2.1 总体框架
软件开发是一个复杂的、不断演变的社会活动,涉及了许多层次和方面。为了能够帮助开发人员更准确地理解整个系统,我们提出了一个基于本体的需求分析和软件体系结构设计框架。
图1描述了整个框架,其中可大致分为两阶段,第一阶段:根据用户给出的需求文档,结合领域本体和需求本体进行语义映射,为其添加语义信息,同时利用这些语义信息进行需求质量评估,用以修改、完善用户需求。第二阶段:通过软件体系结构本体,对网上共享的软件设计文档进行语义标注,建立体系结构本体和领域本体以及需求本体的一种内在语义关联,再根据系统的功能性和非功能性需求以及架构限制和目标的系统高层架构,通过这种语义关联进行语义搜索,按照搜索条件返回相应的结果,例如整个设计文档、文档中部分段落或者图表等,用于辅助构建、完善系统的体系结构。
文中提出的方法是针对传统的瀑布式开发模型,但是在实际开发过程中很少完全采用瀑布模型,因此在接下来的研究中,将进一步探讨如何在当前一些流行的开发模型中使用这种本体辅助设计思路,如敏捷开发模型、RUP模型、CMMI模型等。
在框架中一共使用了四个本体:顶层本体、领域本体、需求本体和软件体系结构本体。前三个本体在文献[7][10][11]中已经进行了详细的定义,我们对其只进行简单的介绍,这里主要对软件体系结构本体的构建进行详细描述。
2.2本体构建
2.2.1顶层本体、领域本体和需求本体
首先我们介绍一个顶层本体[10]。顶层本体描述的是通用的基本概念和它们之间的关系,例如object、environment、goal、task等都是独立于特定的应用程序的基本概念,其他本体中的概念都是顶层本体中的概念的实例。
领域本体描述的是一种静态的、可重用的领域概念和关系,例如汽车行业领域本体就表示了有关汽车部件的知识[7]。在需求分析阶段扮演了一个领域字典的角色。
仅仅使用领域本体无法很好地表达出用户指定的系统功能需求和非功能需求,因为在领域本体中无法对用户的业务目标、质量属性等进行语义描述,因此还需要构建一个需求本体,也可以叫做系统行为本体[4][11]。需求可以分为两种类型:功能需求和非功能需求,功能需求可以描述为系统执行的操作序列,非功能需求表达了系统质量相关的方面。系统行为本体是对软件系统的行为进行建模,例如在特定情况下系统将要执行什么操作,它还定义了在一个操作执行之前需要满足的条件,以及操作执行时系统的状态等。
2.2.2软件体系结构本体
为了能够对网上共享的设计文档进行语义标注,我们需要建立一个软件体系结构本体[12][13]。图2中描述了该本体的高层视图。我们使用UML图表示该本体的结构,包含的类有:SoftwareArchitecturePattern,SoftwareArchitectureVocabulary,SoftwareArchitectureStyle,Problem。
我们使用本体开发工具Protégé来构建该本体。首先根据《Software Modeling& Design》[14]书中介绍,将软件体系结构模式分为三类:结构模式、通信式和事务模式,将每一个类别中包含的模式概念作为SoftwareArchitecturePattern的子类进行描述,然后以一些常用的软件体系结构风格为基础,例如B/S风格、管道和过滤器风格、面向对象风格、仓库风格等,进行归纳总结,作为SoftwareArchitectureStyle的子类。我们将每种风格中包含的 构件、连接件和拓补结构作为SoftwareArchitectureVocabulary的子类,并且与SoftwareArchitectureStyle的关系是isPartOf。对于每一种软件体系结构模式或架构风格来说,都是一些经过实践证实的解决方案,可用于解决领域中的某些核心问题,因此我们将这些问题描述为Problem类,与SoftwareArchitecturePattern和SoftwareArchitectureStyle的关系是isSolutionTo,图3表示Protégé中的软件体系结构本体类和对象关系。
为了更全面地描述该本体包含的内容,这里我们使用了一个本体可视化插件OntoGraf,图4表示了软件体系结构本体可视化结果。
3. 基于本体的需求和设计方法
3.1基于本体的需求获取和评估
当拿到用户需求文档之后,分析人员首先要做的就是挖掘用户的真实需求,这是由于人与人之间的交流沟通无法达到100%,因此这一步也是最重要的。对于分析人员来说,要想挖掘出真实的需求,就要求对业务和技术都有所了解,这往往也是最难的,借助本体的辅助或许能够解决这方面问题。
借助领域本体和需求本体的辅助,可以从用户的角度来进行需求获取,用户参与需求分析主要有两种方法:一是在领域本体的指导下填写问卷调查,意味着通过问题解决法来表达用户的真实需求。二是借助CASE工具,使用领域本体和需求本体中的领域知识进行需求建模。可以看出领域本体和需求本体的作用不仅是指导用户快速的提出需求,而且还能够保证最终的需求模型没有违反领域标准和规范。
除此之外,通过领域本体和需求本体的结合使用,还能够对用户需求的准确性、完整性、一致性、无二义性进行评估分析。为了能够分析出这些用户需求的质量属性,必须先建立需求和本体之间的一种映射关系。首先对于用户提供的非结构化需求文档进行文字预处理,针对每个需求进行实体和关系的抽取,然后将其映射到领域本体和需求本体的概念上,如图5所示。
完成映射后,也就意味着将用户的需求描述转换为用本体中的概念和关系进行表示,即为需求文档中的用户需求添加了语义信息。在假定映射正确的情况下,接下来可以利用这些语义信息进行需求质量的评估,并且反馈给用户和分析人员执行不同的解决措施。
(1)准确性检测:当一个需求条目能够被映射到本体元素上时,我们认为它是针对一个问题域的准确的需求。对于无法映射到本体的需求,反馈给用户询问其是否是有必要的,若是由于其中包含的概念是该领域的新型词汇,那么就交由技术人员对本体进行添加修改,再重新进行需求的准确性检测。
(2)一致性检测:如果在两个需求条目映射的本体元素之间,存在“矛盾”约束属性,例如两个类是互斥类(Disjoint classes),那么我们认为这两个需求是不一致的。通过在映射的本体元素中搜索“矛盾”关系来发现不一致性的需求条目,根据需求的优先关系来帮助用户和分析人员进行删改。
(3)完整性检测:在理想状态下,对于所有相关联的本体中的元素,都应该出现在映射的需求条目中,例如一个用户管理系统的需求“Userscanchange the phonenumber for the binding”映射到本体中的元素为{change, phonenumber},而在需求本体中这些元素与{Add, phone}和{Unbind,phonenumber}存在Complementary(互补的)关系,这意味着
(4)无二义性检测:如果一个需求条目被映射为若干个没有语义关系的概念,那么可以认为该需求存在歧义,拥有多重含义。针对这种情况需要将存在歧义的需求进行修改、移除或者分解成多个需求,以此消除歧义。
3.2 基于本体的软件体系结构设计
软件体系结构对于软件开发有着举足轻重的作用,只要需求和体系结构确定之后,这个软件就基本上可以定型了。这就好比骨骼确定了,这个人的体形就不会有很大的变化。
但是在实际项目开发中,很少有团队会注重系统体系结构设计,甚至会忽略这一过程,主要原因是需求是从用户角度看待系统,体系结构是从设计角度看待系统,因此在需求和设计之间存在着巨大的鸿沟,这对设计人员来说不仅要有丰富的软件开发经验,还需要拥有一定的领域知识。这里我们希望通过本体将需求和设计进行抽象化,在抽象出的需求模型和设计模型之间建立语义关联来缩小这个鸿沟。
在前一节中介绍了如何将需求映射到本体中的概念和关系上,这也意味着我们已经将用户需求抽象为一个需求模型。接下来我们将探讨如何利用语义标注[15]技术来对体系结构进行抽象。
3.2.1使用软件体系结构本体的语义标注
如果说本体的构建主要是关于领域知识的抽象表示,那么语义标注可以看作是丰富本体的过程,即添加、扩展本体实例。因此语义标注所要做的工作就是将现实应用中涉及的实例和抽象的本体概念联系在一起。
这里我们使用的是GATEdeveloper,一个应用于自然语言处理领域,尤其是信息标注与抽取环节的开放源码架构。根据前面建立的软件体系结构本体,对匹配的概念、实例等元素进行语义标注,其流程如图6所示:
执行该流程,为资源文本添加语義信息,这里我们提出可以按照表1中几个维度进行语义标注:
内容类型
例如我们按照文档结构维度,即标题、段落和句子三个方面进行语义标注,对标题进行标注的内容主要是关于系统或子系统使用的体系结构风格,对段落进行标注时主要注重整段内容语义的索引,对句子进行标注时主要注重相关概念的提取。其中语义索引包含的内容为本体中出现的概念,索引的键是概念及概念的属性,索引的值是文档的位置、文档的内容、文档的语义信息。这种标注方法适用于结构化的设计文档,对于无结构化的文档需要先根据经验对文档进行理解、总结,再按照上面介绍的三个方面进行标注。
利用本体直接标注资源的优势在于标注方式灵活,并且能够确保语义标注准确率,进而充分挖掘资源语义,增强语义标注效果。经上述过程完成的语义标注结果是形成设计文档的语义索引,语义索引主要保存了一个文档的三个主要信息:1.文本的层次级别(篇章、段落、句子)。2.文本段落的内容。3.文本段落的语义。标注后应将文本的索引结构以一定的形式保存起来,以供下一节的语义搜索使用。我们将标注信息以可视化方式显示在文档资源中,如下图所示:
我們希望能够对每个文档都按照上面五种维度进行标注,但是这样一来标注过程就变得十分繁琐,下一步我们将参考近几年提出的一些新的语义标注方法对其进行改进,例如Rajput等人提出的一种基于贝叶斯网络的语义标注框架[16];Nguyen等人提出一种基于朴素贝叶斯和关联规则,并结合本体结构图和交互网络的语义标注方法[17]等。
在标注完成后,将新的实例信息抽取到本体,即保存在本体类的实例信息中作为新的个体,在下次加载本体时应用,通过这种信息抽取也可以促进本体进化。最后将含有语义标注信息的文本资源解析为XML文件格式存储,形成语义标注库,代码片段如下:
……
……
3.2.2设计文档的语义搜索
在执行完语义标注和信息抽取之后,下一步便根据标注生成的语义索引以及前面抽象出的需求模型进行设计文档搜索,我们将上一节描述的标注对象作为搜索条件,根据不同的搜索条件返回相应的搜索结果。例如需要搜索使用了某个体系结构风格的整个项目设计文档,便可以通过计算文档与查询实例的语义相关度,以及查询实例与文档的相似度后,得到各个文档的排序得分,按得分高低将排好序的搜索结果返回给用户。
这里我们主要探讨如何在需求模型和设计文档之间建立一种语义关联,实现跨领域的语义搜索。关于搜索步骤、使用何种搜索算法、如何计算文档的排序得分、搜索返回的相关文档的数量有多少、正确率有多少以及如何评估返回的结果等问题是接下来我们研究的重点,可以参考第二节中介绍的基因遗传算法的使用,以及[18]中介绍的一种设计模式的匹配搜索。
为了建立这种语义关联,我们需要找到需求本体和软件体系结构本体之间的关系。在第三节中,我们构建软件体系结构本体时,将每一种体系结构模式或架构风格所能够解决的某些方面的问题归纳总结为Problem类,而这些问题是从设计人员角度来进行描述的。如果从客户的角度来看待这些问题,那么Problem类描述的其实就是用户希望系统能够实现的功能。因此可以将体系结构本体和需求本体,通过对系统行为的不同角度的描述来建立一种关联,从而使本体映射后的语义需求模型和语义标注后的软件体系结构设计文档之间产生关系,为实现跨领域的语义搜索提供条件。
3.2.3 系统体系结构设计过程
接下来我们将利用搜索出的软件设计文档,结合自己项目的特点,逐步构建、完善系统体系结构,具体步骤如下:
第一步建立系统体系结构元模型。由于设计文档中的概念是跨领域跨平台的,所以先从中抽象出一个领域无关、平台无关的系统体系结构元模型是有必要的。这里我们参考OMG组织提出的MOF四层模型结构[19],所建立的系统体系结构元模型不仅仅是为了描述系统或子系统的体系结构,更重要的是它是从软件设计文档库中抽象而来的,这意味着我们可以将它看作一个“设计蓝图”,更有效、更直观的指导设计人员理解、构建系统体系结构。
关于如何构建以及构建什么样的元模型将是我们接下来要解决的问题,可以借鉴一些相关的研究思路,例如[20]中介绍的通过构建系统特征模型来完成概念体系结构设计的方法以及[21]中提出的一种基于本体模型的架构知识管理框架等。
第二步建立系统体系结构模型。从系统的整体角度出发,结合用户需求进行体系结构设计,这里主要考虑的是系统的非功能需求。
第三步建立子系统(子模块)体系结构模型。这里可以根据用户对子系统的功能需求,有针对性的再次进行语义搜索,然后对子系统进行元模型建模,进而完成子系统体系结构的构建。
4. 结束语
对于大多数系统的体系结构设计,我们都可以从现有的项目寻找共同点。鉴于此,本文从本体技术入手,先利用本体在领域知识表达方面的优势,帮助用户提出更加标准化和规范化的需求。再利用本体内在的逻辑推理能力,通过本体映射进行需求质量评估,快速的找到存在错误的需求,减少和用户交流的时间开销。然后利用本体在知识统一和共享方面的优势,对网上共享的设计文档进行语义标注,实现跨领域的语义搜索,从而更好地理解和构建系统(子系统)体系结构,缩短需求与设计之间的鸿沟。
在接下来的研究中,我们将进一步细化框架中的每个细节,对多个本体进行完善修改。针对设计文档的语义搜索方面,改进多维度的语义标注方法,研究智能搜索算法的应用,设计并开发支持该框架的软件平台。
参考文献:
[1] Avgeriou P, Grundy J, Lago P, et al. Relating Software Requirements and Architectures[J]. IEE Proceedings Software, 2005, 152(4):141-142.
[2] Falbo R A, Guizzardi G, et al. Towards semantic software engineering environments[C]// 14th inter1national conference on Software engineering & knowledge engineering, 2002:477-478.
[3] Ammar H H, Abdelmoez W, Hamdi M S. Software Engineering Using Artificial Intelligence Techniques: Current State and Open Problems[C]//Proceedings of the First Taibah University International Conference on Computing and Information Technology, Al-Madinah Al-Munawwarah, Saudi Arabia. 2012:52.
[4] Bhatia M P S, Kumar A, Beniwal R. Ontologies for Software Engineering: Past, Present and Future[J]. Indian Journal of Science & Technology, 2016, 9(9).
[5] Outi, Koskimies K, Kinen E. Multi-objective genetic synthesis of software architecture[C]//Conference Companion on Genetic and Evolutionary Computation. ACM, 2011:249-250.
[6] R?ih? O, Kai K, M?kinen E. Scenario-Based Genetic Synthesis of Software Architecture[C]// International Conference on Software Engineering Advances, Icsea 2009, 20-25 September 2009, Porto, Portugal. 2009:437-445.
[7] Zong-Yong L, Zhi-Xue W, Ying-Ying Y, et al. Towards a Multiple Ontology Framework for Requirements Elicitation and Reuse[C]// International Computer Software & Applications Conference. IEEE Computer Society, 2007:189-195.
[8] R?ih? O, Kundi H, Kai K, et al. Synthesizing Architecture from Requirements: A Genetic Approach[M]// Relating Software Requirements and Architectures. Springer Berlin Heidelberg, 2011:307-331.
[9] Duranlimon H, Garciarios C, Castillobarrera F, et al. An Ontology-based Product Architecture Derivation Approach[J]. IEEE Transactions on Software Engineering, 2015, 41(12):1-1.
[10] Kaiya, H, Saeki, M. Using Domain Ontology as Domain Knowledge for Requirements Elicitation[C]// 14th IEEE International Conference on Requirements Engineering, 2006:189-198.
[11] Jiang H, Yang X. Performance requirement elicitation for financial information system based on ontology[C]//Tencon IEEE Region 10 Conference, 2009, 30(3):1 - 5.
[12] De Graaf K A, Liang P, Tang A, et al. An exploratory study on ontology engineering for software architecture documentation[J]. Computers in Industry, 2014, 65(7):1053-1064.
[13] Akerman A, Tyree J. Using ontology to support development of software architectures[J].IBM Systems Journal, 2006, 45(4):813-825.
[14] 戈馬 H. 软件建模与设计[M].彭鑫,吴毅坚,赵文耘,等译.北京:机械工业出版社,2015.
[15] Fernández M, Cantador I, López V, et al. Semantically enhanced Information Retrieval: An ontology-based approach[J]. Web Semantics Science Services & Agents on the World Wide Web, 2011, 9(4):434-452.
[16] Rajput Q, Haider S. BNOSA: A Bayesian network and ontology based semantic annotation framework[J]. Web Semantics Science Services & Agents on the World Wide Web, 2011, 9(2):99-112.
[17] Cao D N, Gardiner K J, Cios K J. Protein annotation from protein interaction networks and Gene Ontology[J]. Journal of Biomedical Informatics, 2011, 44(44):824-9.
[18] Harb D, Bouhours C, Leblanc H. Using an Ontology to Suggest Software Design Patterns Integration[M]// Models in Software Engineering. Springer Berlin Heidelberg, 2009:318-331.
[19] Tang W. Meta object facility[M].Encyclopedia of Database Systems. Springer US, 2009: 1722-1723.
[20] 彭鑫,赵文耘, 刘奕明. 基于特征模型和构件语义的概念体系结构设计[J],软件学报, 2006, 17(6):1307-1317.
[21] 张纯, 张敬周, 宋俊典. 基于本体的软件密集型系统架构知识管理研究[J]. 计算机工程与设计, 2011, 32(6):2050-2053.