APP下载

领域综述

2015-06-18邬保明

中国管理信息化 2015年5期
关键词:复用技术跨度组件

邬保明

(上海邦德职业技术学院,上海 200444)

领域综述

邬保明

(上海邦德职业技术学院,上海 200444)

领域是组件的适用范围,组件开发的设计规模和功能定位取决于领域概念的大小和深度,对领域内涵的研究具有重要意义,可以推动组件开发技术的发展。本文研究从领域概念的产生开始,分析了不同阶段的领域概念的演变,以及它们对软件开发模式和组件设计的影响。在总结埃文斯和斯密特领域概念的基础上,探讨和提出了以研究域为核心的领域概念框架及其特征,并进一步研究了领域跨度及其对软件开发的影响,领域跨度的界定有助于组件开发的核心技术定位和组件开发的规模调整。

领域;领域工程;组件开发

0 引言

软件分析是随着软件设计技术的发展而不断变化的,随着设计技术的进步,项目需求分析方法逐渐进化为面向对象的分析,基于组件的软件开发出现以后,软件分析的重心转移到了领域分析。领域分析的有效性和准确性主要是由软件分析工作中对领域问题的界定来决定的,因此领域问题又代替了项目的需求问题。近年来,云计算的出现又对领域问题提出了挑战,云计算模式下,软件的形式发生了根本变化,除了原来的软件开发转化为软件即服务(SaaS)之外,还出现了新的服务形式,如平台即服务(Paas)、设施即软件(IaaS)等。新的服务形式决定了新的领域出现及其领域特征的多变性,研究领域的界定对于领域分析具有极其重要的意义,理清领域概念的演变过程有助于我们更加准确地判断未来的软件发展方向。

1 面向对象分析的可复用特征

面向对象分析方法的主要技术是封装、继承和多态。在所有的面向对象分析的技术中,对继承的分析是核心,继承可以让一个对象直接使用另一对象的属性和方法,从而节约了软件开发的时间和耗费,大大提高了编程的效率。在继承的基础上进行增量开发,可以以一种简单灵活的方式帮助开发人员实现许多功能,继承的这些优点归结到一点就是它的可复用特性。除了继承,封装和多态的技术也同样由于具备可复用的优点而被广泛使用。这3个技术在本质上都具有可复用性的特征,从而面向对象的分析具有了可复用功能。

面向对象的封装、继承和多态等技术的可复用特征促进了面向对象的分析方法成为软件分析的主流方法,而软件分析的重心也从着重于需求分析转化为着重于软件复用功能的分析。同时,面向复用的分析也促进和引导了面向对象的分析方法的产生、发展和日趋成熟。面向复用的分析与面向对象的分析相辅相成、共同发展,到20世纪末,复用分析成为软件分析的主流。

复用原本是出现在软件设计过程中的技术,其广泛地使用形成了设计领域的复用概念,随着面向对象分析方法的使用和不断普及,复用进入了软件分析的范畴。当软件分析也以复用为目标的时候,在其中最接近用户需求的分析业务中出现了“领域”一词。软件分析的“领域”一词的出现,让工程师们和分析人员把目光转向了领域问题与领域分析,对领域的探讨和关注实际上是对复用的研究和关注。

2 领域概念的产生

面向对象的分析和设计的可复用性能,是面向对象的分析方法得以普遍使用的主要原因。继承、封装、多态的优秀特征很好地实现了可复用性,大大减少了软件开发的时间、人工耗费等软件开发成本。面向对象的方法的这些优点,促成了面向对象的分析与设计被软件开发者普遍接受,而这些方法的普及,正好又从技术的角度较好地解决了软件工程的关键问题。因此在软件工程中,面向对象的方法成为需求分析方法中最有效的方法,并且不断地在其他领域得到应用和扩展。

面向对象的分析方法普遍使用以后,复用的思想成为贯穿整个软件工程过程的核心思想,软件复用设计技术成为软件开发技术的焦点,而软件分析的任务也同样开始围绕软件复用这一中心进行,从项目的模型分析转向为可复用系统设计提供前序服务,如系统结构分析。

最早的可复用设计是程序代码的复用,为了复用代码,工程师们把大的程序划分为许多子程序,建立子程序库。软件开发人员通过对子程序名引用子程序,通过参数的引用来代替相同功能的子程序段的编写。代码复用提高了软件开发的效率和软件产品的质量。

在代码复用的基础上,软件复用思想和技术不断发展、不断深化,复用从设计阶段延伸到分析阶段,现在已经应用到几乎所有的软件开发领域,促成了分层的软件体系结构的产生和发展。在此基础上,微软开发了COM/DCOM,OMG组织开发了CORBA模型,SUN公司开发了JavaBean/EJB,软件复用技术取得重大突破。软件复用的理论研究也迅速发展起来,尤其在中国,很多计算机科学领域的专家和学者对软件复用理论、复用技术、复用构件分类和检索、复用开发的组织和管理等内容进行了不懈地研究,成果颇丰。

基于复用技术的软件开发最初是用复用来开发(Development with Reuse)软件的,在可复用构件的基础上进行组装和对已有的系统进行修改。基于组件的软件设计(component-based software design)和后来的面向服务的构架(service-oriented architecture)都是在此基础上发展起来的。一些成功可复用模块的反复使用提出了对复用技术的专门开发的需求,于是为复用而开发(Development for Reuse)兴起,专门开发可复用性较高的构件和软件生成器。发展到今天,为复用而开发的方向已经成为软件开发的主流,它的产生和发展改变了软件开发的流程,最为突出的变化是传统的软件需求分析,转变为目前的借助于领域分析来完成的模式。领域分析成为需求分析中的新主题,发展到独立成为一个高于需求分析的层次取而代之,领域作为一个组件开发过程中的基本用语,成为软件分析理论和实践中的重要概念。

3 领域概念的演变

理论上说,领域是一组具有相似或相近软件需求的应用系统所覆盖的功能区域[1](曹晓兰,焦海星,等,2006);用来表示一个与主题有关的概念、知识或者其他术语[2](Buschmann F,1996)。它的命名来自于20世纪70年代软件复用开发中经常使用的概念,问题域、应用领域等术语。随着软件复用技术的不断发展,领域的概念也不断演化,先后经历了问题域、应用域、技术域、组织域、知识域、真实世界域、语言域等阶段,每一次领域概念的拓展或升华,都会促进领域分析和领域工程技术的进步以至突破。

1977年,Shapere[3]说:“在给定的社群中,把真实世界的信息条目联结起来形成的信息域或者问题领域具有如下特征:①信息条目之间的关系深入而周全,可以义指或者建议用在某些类别的问题上;②社区成员感觉到有意义的问题”。[3]这里虽然没有明确指明这是领域的定义,但是从基本意义上看是领域定义的解释,②明显说到是社群的概念。

1990年,K.Kang,S.Chen等在FODA Feasibility Study一文中说:“共享一套功能和数据的那些现在的和未来的应用的集合。”[4]这是是关于应用领域的领域概念。

1992年,Bailin S Captur说:“领域是相似的系统的家族。”[5]这个概念比较注重技术的凝聚力,也进一步引申出知识域的概念。

1993年,Tansley和Hayball提出“领域是专家的领地,也是建议使用基于知识的系统应用的区域。”[6]首次把领域的概念扩展到知识域。

1997年,UML Glossory给出的定义是“被区域内的从业人员理解的一套概念和术语形成的知识域或者活动域”。[7]

2000年,恰尔内茨基提出“领域是让软件相关人员的需求满意度最大化的、包含开发人员用于理解的概念和术语的、包含如何构建软件系统及其部件的知识的知识域。”[8]这一概念是集大成者,它既包含了技术人员的技术知识,也包含了开发人员的建模知识,还包含不只限于用户的所有环节的需求知识。

2004年,埃文斯(Eric Evans)出版了他的名著《领域驱动设计》,[9]详细讲解了领域模型的概念、构建技术、使用方法以及使用环境。核心思想是解决软件开发的复杂性,是领域模型的集大成者。尽管埃文斯没有给出明确的领域概念,但是可以从他的著作的前三章推断出他的领域的概念,即知识、语言或可以延伸到软件实现阶段的沟通空间。因此,他的领域概念是沟通域。

2007年,布施曼(Frank Buschmann)、亨利(Kevlin Henley)和施密特(Doglas C Schmidt)给出这样的定义“领域是一个规则之下的区域,(作者注:意即这一区域之上使用同一规则)其中,规则这一词的意义可以因软件开发的具体应用的不同而不同。”[10]他们把领域分为应用领域和解决领域。一般来说,一个应用系统所要表述的问题域可以称作“应用领域”,应用领域以用户为中心。而那些以机器为中心的,比如软件的网络结构等技术问题或者区域,被称为“解决领域”。

布施曼等所给出的领域概念,它的外延范围又回到了问题域和实体域的范畴,这是由于他们提出了面向模式的体系结构理论。这一理论把模式看作语言,把模式语言看作是沟通的工具,在这样的理论框架下,自然模型就被当作一个相对小一点的概念了。而埃文斯的思想正好是反过来的,他把领域看作是中心的概念,外延上无所不包。他认为模式分为设计模式和分析模式,设计模式在实现环节提供技术解决方案,建模要充分考虑。而分析模式在他看来是与业务相关联的,可以直接被拿过来作为指引帮助建立清晰的模型的。

目前业界所理解和广泛使用的领域概念仍然是恰氏的概念,即领域是软件开发中的需求分析、模型开发和技术设计中遇到的所有的共同知识。这一概念让领域成为无所不包的万用范畴,有着较高的哲学层次。笔者认为,这样对待领域概念不利于软件的开发和设计,领域概念的界定应该立足于组件的开发这一实际问题。

4 领域的发展趋势

在软件复用技术开发的初期,工程师们不懈追求完全通用的软件开发复用技术。随着软件复用技术研究的不断深入和软件复用技术应用范围的不断扩大,人们发现追求完全通用的软件复用技术,在具体的不同应用开发中会遇到一些障碍,包括不一致的可变性假设、交互规范的差异等问题,很难找到一致解决的途径。工程师们开始从另一个角度思考软件复用的问题,把复用技术的应用范围限定在特定业务或技术领域内,以一种产品开发生产线的模式系统地、全面地规划整个领域的可复用构件,从而实现领域内基于复用的应用产品快速定制式开发。大量复用开发实践表明,只要领域的内聚性和稳定性处理得当,特定领域的软件复用构件的开发更加容易取得成功。于是,领域分析是否准确有效成为软件复用开发成败的关键。

笔者认为,现代软件开发中的领域泛指在构建的应用软件模型的过程中,对相关同类的分析、设计和编程问题进行归类,得出它们所属的抽象问题,以及在此基础上定义的一组公共的需求、功能和技术方面的概念组成的研究域。

这个研究域的产生是适应软件复用的需求的发展而产生的,随着应用软件系统的规模和复杂程度的不断提高,软件开发的时间开销和经济成本越来越高,软件项目的产品的上市时间(time to market)、软件开发的生产力(productivity)和软件质量(quality)难以得到保证。针对软件开发的效率和质量问题,工程师们采用以过去的系统开发中积累的知识和经验为基础进行构建开发的模式,除了大量使用复用技术,工程师们还必须进行研究和创新,寻找软件开发过程中新的公共词汇和用语。

因此,工程技术人员应该把领域分析的焦点从问题域扩展到研究域。不论是过去的聚焦在某一具体业务领域内的总体或者其中一个部分,或聚焦在属于同一领域的应用系统在业务需求方面的共性的领域分析,还是现在的正在扩展到体系结构、具体实现以及配置等方面领域分析;不论是需求问题还是设计技术问题,都应该从研究的角度进行创新性分析,找出新的可复用因素、功能和实体等。

将领域概念从问题域抽象到研究域,是对软件开发理论在新的开发技术背景下发展。目前,云计算的出现正在对软件的开发和实现提出新的要求,适应云计算技术的开发需求,体系结构变得更加复杂,其内部的各种功能分解需要在层次的模式下进行。在需求分析中必须考虑软件的技术层次,实际上不同的需求特征和不同的技术功能的组合,形成的交叉领域就是研究域。

5 领域跨度

聚焦研究域之后,领域的外延可大可小,于是产生领域的跨度问题。研究领域跨度问题有助于分析组件的服务范围和组件设计的规模大小,组件过大不但耗用开发时间和资源,而且也会损伤其实用性,寻找一个大小适中的组件开发规模,对组件的使用效率起着决定性的作用。

领域跨度是指某个领域内所包含软件系统的多少,它是一个度量领域大小和描述具体领域特征的概念。领域跨度可以分为水平领域跨度和垂直领域跨度,水平领域跨度来源于领域分析或者需求分析的综合,它是根本的;垂直领域跨度是由水平领域跨度派生出来的问题,它取决于水平领域跨度,但是垂直领域跨度对组件的开发具有更加直接的决定意义,也就是说,分析领域的垂直跨度对组件开发更加有技术指导意义。

水平跨度是研究域所覆盖的行业的范围,或者所解决的需求问题的类别多少。研究域的外延大小决定了领域层次的数量及其结构,不同的领域结构其层次关系决定着各层之间的服务关系和接口关系,这种服务关系和接口关系在软件复用主导的技术开发环境下也成为研究域。这些研究域是垂直结构的。对某种类的业务需求进行分解,得到的其动态实现的一列前后提供服务的软件系统所共有的阶段性的技术区域,称之为垂直研究域。一个垂直研究域所涵盖的技术问题的多少,就是领域的垂直跨度。

笔者认为,与此相对应,构件应当划分水平领域构件和垂直领域构件。水平领域构件是指领域内相似的应用系统中包含的内部模块,如各种数据库系统,又如各种工作流系统,再如各种GUl库等。对水平领域构件进行功能性分类而得的相似问题所覆盖的空间称为水平研究域。垂直领域构件是指具有前后技术支持连贯性的软件系统之间的共同处理的业务系统、模型或者模式的实现体,如财务管理系统要以进销存管理系统为基础。

6 研究域的特征

作为研究域普遍具有3个基本特征,这些特征也是进行领域分析研究和实践工作的基础。

(1)可复用信息的特定性。可复用性不是信息的一种孤立属性,它往往依赖于特定的研究和特定的问题解决方法,即我们所说某类信息具有可复用性,是指当使用特定的方法解决特定的问题时,它是可复用的。基于这种特征,在识别、获取和表示可复用信息时,应该采用面向领域的策略,分析出研究域。特定性使得同类的研究问题可以领域化。

(2)研究领域的内聚性和稳定性。关于现实世界问题领域的解决方法的知识是充分内聚和充分稳定的,这些认识是实际观察的结果,成为基本的研究域,也是知识获取和表示的意义所在。内聚性使得可以通过一组有限的、相对较少的可复用信息来把握可以解决大量问题的知识。稳定性使得获取和表示这些信息所付出的代价,可以通过在较长时间内多次复用它们来得到补偿。

(3)研究领域的抽象性。从问题域到研究域是领域概念大的一个突破,问题是实实在在的,它是为了克服编程实践中不断出现的对效率追求的障碍而产生的,又因为新的效率障碍的不断变化而变化的。在问题域的不断变化中,涉及到的概念和技术范畴可能存在相对稳定的部分,这些稳定的内容就是研究域的内容。研究域可以是想象的、形而上的、超前的,它能够指导组件开发的方向和重心,是前瞻性的。

7 结 语

软件分析的重心从功能分析逐渐发展成为领域分析的演变过程,是受软件开发技术的不断进步的进程影响的,而软件分析中的概念和理念反过来也促进了软件开发技术的逐步提高。在今天软件设计日趋复杂、开发的层次越来越多、规模越来越大的技术发展背景下,研究领域、界定领域这一基础性的问题不但具有技术上的指导意义,而且也是软件开发理论发展的要求,是软件工程中非常重要的一项工作。同时,确定领域跨度也在另一方面是提高领域分析的准确性和有效性的必然要求,是优化软件设计的前提条件。

[1]曹晓兰,焦海星,等.领域分析方法研究及应用[J].科学技术与工程,2006,17(9):2666-2668.

[2]F Buschmann,R Meunier,H Rohnert,et al.Pattern-oriented Software Architecture,volume 1:A system of patterns[M].NewYork,NY:John Wiley&Sons 1996:435.

[3]D Shapere.Scientific Theories and Their Domains.[c]//The Structure of Scientific Revolutions,1977:518–599.

[4]K C Kang,S Cohen,et al.Feature-Oriented Domain Analysis(FODA) Feasibility Study-CMU[R].SEI-90-TR-021.Pittsburgh,PA:Carnegie Mellon Software Engineering Institute,1990:2

[5]S C Bailin,S Henderson.Towards a Case-Based Software Engineering Environment[C]//Fifth Annual Workshop on Software Reuse.1992

[6]D S W Tansley,C C Hayball.Knowledge-based Systems Analysis and Design[M].Upper Saddle River,NJ:Prentice-Hall,Inc.,1993:115.

[7]Domain.UML Glossary Version 1.0[EB/OL].[1997-01-13].www.iai.uni

bonn.de/III/lehre/vorlesungen/SWT/SS96/Material/UML1.0/glossary.html.

[8]K Czarnecki,K sterbye,M V.lter.Generative programming[C]//Object

Oriented Technology ECOOP 2002 Workshop Reader.Springer Berlin Heidelberg,2002.

[9]E Evans.Domain-driven Design:Tackling Complexity in the Heart of Software[M].Boston,MA:Addison-Wesley Professional,2004.

[10]F Buschmann,K Henney,D Schimdt.Pattern Oriented Software Architecture:On Patterns and Pattern Language[M].NewYork,NY:John Wiley&Sons,2007:182-188.

[11]N M EL-Gohary,EL-Diraby T E.Domain Ontology for Processes in Infrastructure and Construction[J].Journal of Construction Engineering and Management,2010,136(7):730–744.

[12]F Buschmann,K Henney,D C Schmidt.Patter Oriented Software Architecture:a Pattern Language for Distributed Computing,Volume 4 [M].New York,NY:John Wiley&Sons,2007.

[13]J S Kim,D Garlan.Analyzing Architectural Styles[J].Journal of Systems and Software,2010,83(7):1216–1235.

[14]M Armbrust,A Fox,R Griffith,et al.A View of Cloud computing[J]. Communication of the ACM,2010,53(4):50–58

[15]M Strembeck,U Zdun.An Approach for the Systematic Development of Domain Specific Languages[J].Software:Practice andExperience, 2009,39(15):1253-1292.

[16]C L Simons,I C Parmee,R Gwynllyw.Interactive,Evolutionary Search in Upstream Object Oriented Class Design[J].Software Engineering,IEEE Transactions on,2010,36(6):798-816.

[17]L Cao,S Y Philip,C Zhang,et al.Domain Driven Data Mining[M]. Berlin:Springer Publishing Company,2010.

[18]Wu Baoming.General Analysis of Requirements for Risk Oriented Financial Data Modeling[C]//Proceedings 2nd International Conference on Modeling,Simulation,and Visualization Methods,2010.

10.3969/j.issn.1673-0194.2015.05.110

TP3

A

1673-0194(2015)05-0230-03

2014-12-20

邬保明(1967-),男,内蒙古人,工学博士,上海邦德职业技术学院讲师。

猜你喜欢

复用技术跨度组件
电动汽车电机驱动系统零转矩充电复用技术简介
无人机智能巡检在光伏电站组件诊断中的应用
大跨度连续刚构桥线形控制分析
新型碎边剪刀盘组件
U盾外壳组件注塑模具设计
组合铝合金立柱在超大跨度玻璃幕墙中的应用
软件工程领域应用复用技术的分析
“猎鹰”9号的复用技术与展望
第5代移动通信基本要求与新型多址复用技术
风起新一代光伏组件膜层:SSG纳米自清洁膜层