鄔保明
(上海邦德職業技術學院,上海 200444)
領域綜述
鄔保明
(上海邦德職業技術學院,上海 200444)
領域是組件的適用范圍,組件開發的設計規模和功能定位取決于領域概念的大小和深度,對領域內涵的研究具有重要意義,可以推動組件開發技術的發展。本文研究從領域概念的產生開始,分析了不同階段的領域概念的演變,以及它們對軟件開發模式和組件設計的影響。在總結埃文斯和斯密特領域概念的基礎上,探討和提出了以研究域為核心的領域概念框架及其特征,并進一步研究了領域跨度及其對軟件開發的影響,領域跨度的界定有助于組件開發的核心技術定位和組件開發的規模調整。
領域;領域工程;組件開發
0 引言
軟件分析是隨著軟件設計技術的發展而不斷變化的,隨著設計技術的進步,項目需求分析方法逐漸進化為面向對象的分析,基于組件的軟件開發出現以后,軟件分析的重心轉移到了領域分析。領域分析的有效性和準確性主要是由軟件分析工作中對領域問題的界定來決定的,因此領域問題又代替了項目的需求問題。近年來,云計算的出現又對領域問題提出了挑戰,云計算模式下,軟件的形式發生了根本變化,除了原來的軟件開發轉化為軟件即服務(SaaS)之外,還出現了新的服務形式,如平臺即服務(Paas)、設施即軟件(IaaS)等。新的服務形式決定了新的領域出現及其領域特征的多變性,研究領域的界定對于領域分析具有極其重要的意義,理清領域概念的演變過程有助于我們更加準確地判斷未來的軟件發展方向。
面向對象分析方法的主要技術是封裝、繼承和多態。在所有的面向對象分析的技術中,對繼承的分析是核心,繼承可以讓一個對象直接使用另一對象的屬性和方法,從而節約了軟件開發的時間和耗費,大大提高了編程的效率。在繼承的基礎上進行增量開發,可以以一種簡單靈活的方式幫助開發人員實現許多功能,繼承的這些優點歸結到一點就是它的可復用特性。除了繼承,封裝和多態的技術也同樣由于具備可復用的優點而被廣泛使用。這3個技術在本質上都具有可復用性的特征,從而面向對象的分析具有了可復用功能。
面向對象的封裝、繼承和多態等技術的可復用特征促進了面向對象的分析方法成為軟件分析的主流方法,而軟件分析的重心也從著重于需求分析轉化為著重于軟件復用功能的分析。同時,面向復用的分析也促進和引導了面向對象的分析方法的產生、發展和日趨成熟。面向復用的分析與面向對象的分析相輔相成、共同發展,到20世紀末,復用分析成為軟件分析的主流。
復用原本是出現在軟件設計過程中的技術,其廣泛地使用形成了設計領域的復用概念,隨著面向對象分析方法的使用和不斷普及,復用進入了軟件分析的范疇。當軟件分析也以復用為目標的時候,在其中最接近用戶需求的分析業務中出現了“領域”一詞。軟件分析的“領域”一詞的出現,讓工程師們和分析人員把目光轉向了領域問題與領域分析,對領域的探討和關注實際上是對復用的研究和關注。
面向對象的分析和設計的可復用性能,是面向對象的分析方法得以普遍使用的主要原因。繼承、封裝、多態的優秀特征很好地實現了可復用性,大大減少了軟件開發的時間、人工耗費等軟件開發成本。面向對象的方法的這些優點,促成了面向對象的分析與設計被軟件開發者普遍接受,而這些方法的普及,正好又從技術的角度較好地解決了軟件工程的關鍵問題。因此在軟件工程中,面向對象的方法成為需求分析方法中最有效的方法,并且不斷地在其他領域得到應用和擴展。
面向對象的分析方法普遍使用以后,復用的思想成為貫穿整個軟件工程過程的核心思想,軟件復用設計技術成為軟件開發技術的焦點,而軟件分析的任務也同樣開始圍繞軟件復用這一中心進行,從項目的模型分析轉向為可復用系統設計提供前序服務,如系統結構分析。
最早的可復用設計是程序代碼的復用,為了復用代碼,工程師們把大的程序劃分為許多子程序,建立子程序庫。軟件開發人員通過對子程序名引用子程序,通過參數的引用來代替相同功能的子程序段的編寫。代碼復用提高了軟件開發的效率和軟件產品的質量。
在代碼復用的基礎上,軟件復用思想和技術不斷發展、不斷深化,復用從設計階段延伸到分析階段,現在已經應用到幾乎所有的軟件開發領域,促成了分層的軟件體系結構的產生和發展。在此基礎上,微軟開發了COM/DCOM,OMG組織開發了CORBA模型,SUN公司開發了JavaBean/EJB,軟件復用技術取得重大突破。軟件復用的理論研究也迅速發展起來,尤其在中國,很多計算機科學領域的專家和學者對軟件復用理論、復用技術、復用構件分類和檢索、復用開發的組織和管理等內容進行了不懈地研究,成果頗豐。
基于復用技術的軟件開發最初是用復用來開發(Development with Reuse)軟件的,在可復用構件的基礎上進行組裝和對已有的系統進行修改?;诮M件的軟件設計(component-based software design)和后來的面向服務的構架(service-oriented architecture)都是在此基礎上發展起來的。一些成功可復用模塊的反復使用提出了對復用技術的專門開發的需求,于是為復用而開發(Development for Reuse)興起,專門開發可復用性較高的構件和軟件生成器。發展到今天,為復用而開發的方向已經成為軟件開發的主流,它的產生和發展改變了軟件開發的流程,最為突出的變化是傳統的軟件需求分析,轉變為目前的借助于領域分析來完成的模式。領域分析成為需求分析中的新主題,發展到獨立成為一個高于需求分析的層次取而代之,領域作為一個組件開發過程中的基本用語,成為軟件分析理論和實踐中的重要概念。
理論上說,領域是一組具有相似或相近軟件需求的應用系統所覆蓋的功能區域[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]他們把領域分為應用領域和解決領域。一般來說,一個應用系統所要表述的問題域可以稱作“應用領域”,應用領域以用戶為中心。而那些以機器為中心的,比如軟件的網絡結構等技術問題或者區域,被稱為“解決領域”。
布施曼等所給出的領域概念,它的外延范圍又回到了問題域和實體域的范疇,這是由于他們提出了面向模式的體系結構理論。這一理論把模式看作語言,把模式語言看作是溝通的工具,在這樣的理論框架下,自然模型就被當作一個相對小一點的概念了。而埃文斯的思想正好是反過來的,他把領域看作是中心的概念,外延上無所不包。他認為模式分為設計模式和分析模式,設計模式在實現環節提供技術解決方案,建模要充分考慮。而分析模式在他看來是與業務相關聯的,可以直接被拿過來作為指引幫助建立清晰的模型的。
目前業界所理解和廣泛使用的領域概念仍然是恰氏的概念,即領域是軟件開發中的需求分析、模型開發和技術設計中遇到的所有的共同知識。這一概念讓領域成為無所不包的萬用范疇,有著較高的哲學層次。筆者認為,這樣對待領域概念不利于軟件的開發和設計,領域概念的界定應該立足于組件的開發這一實際問題。
在軟件復用技術開發的初期,工程師們不懈追求完全通用的軟件開發復用技術。隨著軟件復用技術研究的不斷深入和軟件復用技術應用范圍的不斷擴大,人們發現追求完全通用的軟件復用技術,在具體的不同應用開發中會遇到一些障礙,包括不一致的可變性假設、交互規范的差異等問題,很難找到一致解決的途徑。工程師們開始從另一個角度思考軟件復用的問題,把復用技術的應用范圍限定在特定業務或技術領域內,以一種產品開發生產線的模式系統地、全面地規劃整個領域的可復用構件,從而實現領域內基于復用的應用產品快速定制式開發。大量復用開發實踐表明,只要領域的內聚性和穩定性處理得當,特定領域的軟件復用構件的開發更加容易取得成功。于是,領域分析是否準確有效成為軟件復用開發成敗的關鍵。
筆者認為,現代軟件開發中的領域泛指在構建的應用軟件模型的過程中,對相關同類的分析、設計和編程問題進行歸類,得出它們所屬的抽象問題,以及在此基礎上定義的一組公共的需求、功能和技術方面的概念組成的研究域。
這個研究域的產生是適應軟件復用的需求的發展而產生的,隨著應用軟件系統的規模和復雜程度的不斷提高,軟件開發的時間開銷和經濟成本越來越高,軟件項目的產品的上市時間(time to market)、軟件開發的生產力(productivity)和軟件質量(quality)難以得到保證。針對軟件開發的效率和質量問題,工程師們采用以過去的系統開發中積累的知識和經驗為基礎進行構建開發的模式,除了大量使用復用技術,工程師們還必須進行研究和創新,尋找軟件開發過程中新的公共詞匯和用語。
因此,工程技術人員應該把領域分析的焦點從問題域擴展到研究域。不論是過去的聚焦在某一具體業務領域內的總體或者其中一個部分,或聚焦在屬于同一領域的應用系統在業務需求方面的共性的領域分析,還是現在的正在擴展到體系結構、具體實現以及配置等方面領域分析;不論是需求問題還是設計技術問題,都應該從研究的角度進行創新性分析,找出新的可復用因素、功能和實體等。
將領域概念從問題域抽象到研究域,是對軟件開發理論在新的開發技術背景下發展。目前,云計算的出現正在對軟件的開發和實現提出新的要求,適應云計算技術的開發需求,體系結構變得更加復雜,其內部的各種功能分解需要在層次的模式下進行。在需求分析中必須考慮軟件的技術層次,實際上不同的需求特征和不同的技術功能的組合,形成的交叉領域就是研究域。
聚焦研究域之后,領域的外延可大可小,于是產生領域的跨度問題。研究領域跨度問題有助于分析組件的服務范圍和組件設計的規模大小,組件過大不但耗用開發時間和資源,而且也會損傷其實用性,尋找一個大小適中的組件開發規模,對組件的使用效率起著決定性的作用。
領域跨度是指某個領域內所包含軟件系統的多少,它是一個度量領域大小和描述具體領域特征的概念。領域跨度可以分為水平領域跨度和垂直領域跨度,水平領域跨度來源于領域分析或者需求分析的綜合,它是根本的;垂直領域跨度是由水平領域跨度派生出來的問題,它取決于水平領域跨度,但是垂直領域跨度對組件的開發具有更加直接的決定意義,也就是說,分析領域的垂直跨度對組件開發更加有技術指導意義。
水平跨度是研究域所覆蓋的行業的范圍,或者所解決的需求問題的類別多少。研究域的外延大小決定了領域層次的數量及其結構,不同的領域結構其層次關系決定著各層之間的服務關系和接口關系,這種服務關系和接口關系在軟件復用主導的技術開發環境下也成為研究域。這些研究域是垂直結構的。對某種類的業務需求進行分解,得到的其動態實現的一列前后提供服務的軟件系統所共有的階段性的技術區域,稱之為垂直研究域。一個垂直研究域所涵蓋的技術問題的多少,就是領域的垂直跨度。
筆者認為,與此相對應,構件應當劃分水平領域構件和垂直領域構件。水平領域構件是指領域內相似的應用系統中包含的內部模塊,如各種數據庫系統,又如各種工作流系統,再如各種GUl庫等。對水平領域構件進行功能性分類而得的相似問題所覆蓋的空間稱為水平研究域。垂直領域構件是指具有前后技術支持連貫性的軟件系統之間的共同處理的業務系統、模型或者模式的實現體,如財務管理系統要以進銷存管理系統為基礎。
作為研究域普遍具有3個基本特征,這些特征也是進行領域分析研究和實踐工作的基礎。
(1)可復用信息的特定性??蓮陀眯圆皇切畔⒌囊环N孤立屬性,它往往依賴于特定的研究和特定的問題解決方法,即我們所說某類信息具有可復用性,是指當使用特定的方法解決特定的問題時,它是可復用的。基于這種特征,在識別、獲取和表示可復用信息時,應該采用面向領域的策略,分析出研究域。特定性使得同類的研究問題可以領域化。
(2)研究領域的內聚性和穩定性。關于現實世界問題領域的解決方法的知識是充分內聚和充分穩定的,這些認識是實際觀察的結果,成為基本的研究域,也是知識獲取和表示的意義所在。內聚性使得可以通過一組有限的、相對較少的可復用信息來把握可以解決大量問題的知識。穩定性使得獲取和表示這些信息所付出的代價,可以通過在較長時間內多次復用它們來得到補償。
(3)研究領域的抽象性。從問題域到研究域是領域概念大的一個突破,問題是實實在在的,它是為了克服編程實踐中不斷出現的對效率追求的障礙而產生的,又因為新的效率障礙的不斷變化而變化的。在問題域的不斷變化中,涉及到的概念和技術范疇可能存在相對穩定的部分,這些穩定的內容就是研究域的內容。研究域可以是想象的、形而上的、超前的,它能夠指導組件開發的方向和重心,是前瞻性的。
軟件分析的重心從功能分析逐漸發展成為領域分析的演變過程,是受軟件開發技術的不斷進步的進程影響的,而軟件分析中的概念和理念反過來也促進了軟件開發技術的逐步提高。在今天軟件設計日趨復雜、開發的層次越來越多、規模越來越大的技術發展背景下,研究領域、界定領域這一基礎性的問題不但具有技術上的指導意義,而且也是軟件開發理論發展的要求,是軟件工程中非常重要的一項工作。同時,確定領域跨度也在另一方面是提高領域分析的準確性和有效性的必然要求,是優化軟件設計的前提條件。
[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-),男,內蒙古人,工學博士,上海邦德職業技術學院講師。