李 波 聶裕鵬
摘要:軟件體系結(jié)構(gòu)是軟件工程中的一個(gè)新興研究領(lǐng)域,它與軟件工程技術(shù)的發(fā)展有著密切的關(guān)系。首先,從軟件工程技術(shù)的發(fā)展了解軟件體系結(jié)構(gòu)研究的必然性。然后,給出軟件體系結(jié)構(gòu)的概念描述,介紹有關(guān)體系結(jié)構(gòu)研究的內(nèi)容。
關(guān)鍵詞:軟件體系結(jié)構(gòu);軟件工程技術(shù);軟件構(gòu)件
中圖分類號(hào):TP311文獻(xiàn)標(biāo)識(shí)碼:A
文章編號(hào):1674-1145(2009)15-0149-02
一、軟件工程技術(shù)的發(fā)展
軟件工程技術(shù)的基本目標(biāo)就是用抽象的方法將現(xiàn)實(shí)世界(問(wèn)題域)的問(wèn)題轉(zhuǎn)化為程序空間(解題域)的解題程序,通過(guò)程序控制的方式,由計(jì)算機(jī)的執(zhí)行獲得問(wèn)題的結(jié)果。然而,由于人們認(rèn)識(shí)和理解現(xiàn)實(shí)世界的過(guò)程和方法不一致,導(dǎo)致了構(gòu)造軟件系統(tǒng)時(shí)所使用的分析、設(shè)計(jì)和實(shí)現(xiàn)的過(guò)程與方法也不一致,這種不一致是軟件生產(chǎn)效率低下的主要癥結(jié)之一。軟件工程技術(shù)的水平遠(yuǎn)遠(yuǎn)落后于硬件,造成了“軟件危機(jī)”,而軟件工程技術(shù)與開(kāi)發(fā)方法就是在解決“軟件危機(jī)”的過(guò)程中逐步發(fā)展起來(lái)的。
隨著計(jì)算機(jī)硬件的不斷更新,計(jì)算機(jī)程序設(shè)計(jì)語(yǔ)言經(jīng)歷了從匯編語(yǔ)言到高級(jí)語(yǔ)言的發(fā)展過(guò)程,規(guī)模越來(lái)越大,復(fù)雜程度越來(lái)越高。人們逐漸認(rèn)識(shí)到高級(jí)程序設(shè)計(jì)語(yǔ)言只不過(guò)實(shí)現(xiàn)了高級(jí)源程序碼到機(jī)器指令間的自動(dòng)轉(zhuǎn)換,卻仍然缺乏將問(wèn)題域映射到程序空間的方法和工具,即缺乏軟件設(shè)計(jì)的方法和工具。為了改變軟件開(kāi)發(fā)的手工狀況,適應(yīng)大規(guī)模軟件開(kāi)發(fā)的需要,人們開(kāi)始尋找新的適合工程化軟件開(kāi)發(fā)的設(shè)計(jì)方法、工具與管理方式。
1.程序設(shè)計(jì)方法學(xué)的研究。程序設(shè)計(jì)方法學(xué)的研究以結(jié)構(gòu)化程序設(shè)計(jì)為代表,它強(qiáng)調(diào)從程序結(jié)構(gòu)和設(shè)計(jì)風(fēng)格上來(lái)研究程序。E.W.dijkstra首先提出了結(jié)構(gòu)化自頂向下和逐步求精的軟件設(shè)計(jì)方法,即在程序設(shè)計(jì)中將目標(biāo)逐步分解為子目標(biāo)并加以細(xì)化,直至得到可執(zhí)行的程序。20世紀(jì)70年代,Parnas引入信息隱藏作為模塊劃分的基本原則。從Simular 67語(yǔ)言引入類的概念,人們開(kāi)始了有關(guān)抽象數(shù)據(jù)類型ADT的研究。
2.軟件開(kāi)發(fā)方法學(xué)的研究。程序設(shè)計(jì)方法研究的是小規(guī)模的程序,而軟件開(kāi)發(fā)方法學(xué)則是研究大規(guī)模軟件開(kāi)發(fā)應(yīng)遵循的方法和準(zhǔn)則,以及軟件開(kāi)發(fā)項(xiàng)目管理方法。軟件開(kāi)發(fā)方法學(xué)的內(nèi)容包括對(duì)軟件生命周期和其中各階段相應(yīng)的軟件開(kāi)發(fā)方法的研究。軟件生命周期從總體上規(guī)范了軟件開(kāi)發(fā)過(guò)程中各項(xiàng)工作的內(nèi)容及步驟,從而使軟件開(kāi)發(fā)有章可循。從70年代開(kāi)始,人們陸續(xù)提出了一些軟件開(kāi)發(fā)方法,如結(jié)構(gòu)化分析和設(shè)計(jì)方法等。進(jìn)入80年代后期,面向?qū)ο蟮姆治?設(shè)計(jì)(OOA/OOD)逐漸得到了廣泛的重視和研究。目前,面向?qū)ο蠓椒ㄔ诙喾降呐χ拢呀?jīng)初步實(shí)現(xiàn)了標(biāo)準(zhǔn)化的統(tǒng)一建模語(yǔ)言UML,這標(biāo)志著它已成為軟件開(kāi)發(fā)的主流技術(shù),正在大規(guī)模軟件生產(chǎn)方面發(fā)揮越來(lái)越重要的作用。
3.計(jì)算機(jī)輔助軟件工程。在軟件工程學(xué)中,方法和工具是同一問(wèn)題的兩個(gè)方面。方法是工具研制的先導(dǎo),工具是方法的現(xiàn)實(shí)體現(xiàn)。計(jì)算機(jī)輔助軟件工程(CASE)就是為工程化的軟件生產(chǎn)提供計(jì)算機(jī)化的支持,以期提高軟件生產(chǎn)率和軟件產(chǎn)品的質(zhì)量。進(jìn)入90年代以來(lái),結(jié)合面向?qū)ο蠹夹g(shù),各種基于對(duì)象的構(gòu)件標(biāo)準(zhǔn)逐步涌現(xiàn)并走向?qū)嵱茫渲幸詫?duì)象管理集團(tuán)(OMG)制定的CORBA(Common Objec七Request Broker Architecture)工業(yè)構(gòu)件標(biāo)準(zhǔn)和Microsoft公司的COM/DCOM構(gòu)件模型最為著名。這些構(gòu)件標(biāo)準(zhǔn)為不同的構(gòu)件在異構(gòu)環(huán)境下相互操作定義了統(tǒng)一的接口,它們的出現(xiàn)為軟件的開(kāi)發(fā)和設(shè)計(jì)提供了新的平臺(tái)和方式。
使用構(gòu)件技術(shù)開(kāi)發(fā)軟件,對(duì)于軟件系統(tǒng)結(jié)構(gòu)的分析、設(shè)計(jì)與描述比對(duì)算法與數(shù)據(jù)結(jié)構(gòu)的選擇顯得更加重要。這種系統(tǒng)結(jié)構(gòu)上的考慮包括:如何將軟件元素復(fù)合組織成為一個(gè)有機(jī)的系統(tǒng);如何定義全局控制結(jié)構(gòu);如何規(guī)定各元素間的通信、同步協(xié)議;系統(tǒng)功能如何在各組成元素間劃分,以及如何將各元素組織完成某一系統(tǒng)功能;軟件系統(tǒng)各元素如何進(jìn)行物理分布及系統(tǒng)配置;系統(tǒng)的規(guī)模與性能如何;如何選擇系統(tǒng)設(shè)計(jì)方案以及確定系統(tǒng)的演化方向。因此,必須首先確定軟件的總體組織結(jié)構(gòu),選擇或開(kāi)發(fā)完成系統(tǒng)功能所需的構(gòu)件以及構(gòu)件之間的交互關(guān)系,這正是軟件體系結(jié)構(gòu)的研究范疇。
二、軟件體系結(jié)構(gòu)的基本概念
雖然軟件體系結(jié)構(gòu)在軟件工程中已有很深的根基,但由于有關(guān)研究和使用剛剛興起,因而對(duì)它的理解還沒(méi)有達(dá)成共識(shí)。就體系結(jié)構(gòu)而言,它是指建立系統(tǒng)時(shí)的構(gòu)造模型、構(gòu)造風(fēng)格和構(gòu)造模式。軟件體系結(jié)構(gòu)對(duì)于軟件系統(tǒng)的構(gòu)造所起的是指導(dǎo)性的作用,著重于探討軟件系統(tǒng)的總體框架。廣義而言,軟件系統(tǒng)結(jié)構(gòu)涉及多方面的內(nèi)容:(1)軟件的成分及系統(tǒng)框架;(2)軟件成分的選擇,各成分之間的相互作用,軟件成分的進(jìn)一步復(fù)合以及指導(dǎo)軟件復(fù)合過(guò)程的總體模式;(3)系統(tǒng)的功能、性能、設(shè)計(jì)以及從多種方案及選項(xiàng)中進(jìn)行選擇的決策??梢?jiàn),軟件體系結(jié)構(gòu)更為關(guān)注的是系統(tǒng)結(jié)構(gòu)及其成分,而方法更關(guān)心系統(tǒng)的開(kāi)發(fā)過(guò)程。
綜合來(lái)說(shuō),軟件體系結(jié)構(gòu)開(kāi)始于系統(tǒng)的早期設(shè)計(jì),主要描述以下屬性:功能性構(gòu)件和數(shù)據(jù)構(gòu)件;構(gòu)件間的連接,包括數(shù)據(jù)流和控制流;各種約束,包括構(gòu)件通信協(xié)議、構(gòu)件間的同步等;用構(gòu)件及它們之間的連接表示的整體結(jié)構(gòu)的拓?fù)潢P(guān)系等。
三、軟機(jī)體系結(jié)構(gòu)研究目的和內(nèi)容
在使用構(gòu)件技術(shù)的組合軟件工程中,好的軟件體系結(jié)構(gòu)是決定軟件系統(tǒng)開(kāi)發(fā)成敗的關(guān)鍵。然而,許多以前被人們廣泛采用的體系結(jié)構(gòu)如管道、層次系統(tǒng)、客戶機(jī)/服務(wù)器模式等都可能被按照個(gè)人的嗜好做出不同的理解并以不同的方式應(yīng)用到系統(tǒng)設(shè)計(jì)開(kāi)發(fā)上。其結(jié)果通常是軟件系統(tǒng)設(shè)計(jì)人員無(wú)法就系統(tǒng)體系結(jié)構(gòu)的共性達(dá)成共識(shí),因而也沒(méi)有對(duì)軟件系統(tǒng)結(jié)構(gòu)設(shè)計(jì)方案進(jìn)行評(píng)估與選擇的基本原則。
有關(guān)軟件體系結(jié)構(gòu)的研究目前可分為三類:(1)研究體系結(jié)構(gòu)主要目的是使用領(lǐng)域分析技術(shù)和工具獲取有關(guān)軟件體系結(jié)構(gòu)的所有特征,并創(chuàng)建一個(gè)通用的體系結(jié)構(gòu)描述語(yǔ)言ADL (Architectural Description Language),用于刻畫其性質(zhì)。這將為設(shè)計(jì)人員提供一個(gè)嚴(yán)格定義軟件系統(tǒng)結(jié)構(gòu)的統(tǒng)一方法,從而避免了自然語(yǔ)言與框圖描述可能引起的理解上的不一致,即所謂的二義性。(2)體系結(jié)構(gòu)的分類主要研究體系結(jié)構(gòu)專業(yè)的范疇與內(nèi)容,其目的在于通過(guò)大量的實(shí)例,考察體系結(jié)構(gòu)的決策是如何受項(xiàng)目需求、組織目標(biāo)和個(gè)人背景影響的,從而對(duì)軟件開(kāi)發(fā)實(shí)踐中所采用的體系結(jié)構(gòu)劃分原則與模式進(jìn)行分類并理論化,幫助開(kāi)發(fā)人員確定有關(guān)體系結(jié)構(gòu)選擇的工程化原則。(3)第三類研究主要致力于特定領(lǐng)域軟件體系結(jié)構(gòu)框架的研究,如關(guān)于操作系統(tǒng)、數(shù)據(jù)庫(kù)系統(tǒng)及用戶界面等領(lǐng)域的軟件體系結(jié)構(gòu)研究。這一類的研究成果可為某一領(lǐng)域中新產(chǎn)品的開(kāi)發(fā)提供一個(gè)復(fù)用度很高的系統(tǒng)結(jié)構(gòu)與開(kāi)發(fā)模式。
建立完善的體系結(jié)構(gòu)理論不僅適合軟件系統(tǒng)開(kāi)發(fā)的需要,也是軟件維護(hù)的需要。從開(kāi)發(fā)方面考慮:首先,對(duì)軟件體系結(jié)構(gòu)進(jìn)行抽象形成幾類通用的模型,將有利于在較高的抽象層次上理解不同類型系統(tǒng)間的相互關(guān)系;其次,理論的建立為系統(tǒng)設(shè)計(jì)人員確立正確的體系結(jié)構(gòu)提供指導(dǎo)性意見(jiàn);第三,不同類型的體系結(jié)構(gòu)模型是分析一個(gè)復(fù)雜系統(tǒng)高級(jí)性質(zhì)的模型;第四,統(tǒng)一的體系結(jié)構(gòu)描述方式將為軟件開(kāi)發(fā)人員間進(jìn)行交流提供便利;最后,對(duì)于業(yè)已存在的可復(fù)用模塊來(lái)說(shuō),它們可能被包裝成為過(guò)程、進(jìn)程或數(shù)據(jù)轉(zhuǎn)換過(guò)濾器等,它們分別以過(guò)程調(diào)用、進(jìn)程通訊和共享數(shù)據(jù)等方式與其他模塊進(jìn)行交互,體系結(jié)構(gòu)的提出將有利于解決何時(shí)以及如何對(duì)這些可復(fù)用模塊進(jìn)行復(fù)合的問(wèn)題。而從軟件維護(hù)方面考慮,對(duì)軟件的系統(tǒng)結(jié)構(gòu)及其性質(zhì)給出嚴(yán)格的定義并文檔化,非常有利于維護(hù)人員全面理解系統(tǒng)的構(gòu)成。不僅如此,由于組成系統(tǒng)的各成分界限劃分得較為清晰,使得代碼維護(hù)成本降低且容易保持原有的系統(tǒng)設(shè)計(jì)風(fēng)格。
四、結(jié)語(yǔ)
當(dāng)前對(duì)軟件體系結(jié)構(gòu)的研究已經(jīng)從萌芽工作進(jìn)展到對(duì)軟件體系結(jié)構(gòu)風(fēng)格的分類、評(píng)估、形式化及特定領(lǐng)域體系結(jié)構(gòu)的應(yīng)用和基于構(gòu)件的軟件開(kāi)發(fā),而且軟件體系結(jié)構(gòu)描述語(yǔ)言也相繼出現(xiàn),使軟件體系結(jié)構(gòu)的表示更加嚴(yán)謹(jǐn)。但軟件體系結(jié)構(gòu)在一些方面仍然不成熟,很難被一般的開(kāi)發(fā)人員所理解,主要問(wèn)題在于沒(méi)有統(tǒng)一的體系結(jié)構(gòu)劃分標(biāo)準(zhǔn)和設(shè)計(jì)原則,缺乏形式化技術(shù)對(duì)其進(jìn)行完整性和一致性的分析,并且,現(xiàn)有的軟件體系結(jié)構(gòu)模式已無(wú)法適應(yīng)新的軟件開(kāi)發(fā)技術(shù)的需要。另外,開(kāi)發(fā)人員進(jìn)行軟件體系結(jié)構(gòu)的設(shè)計(jì)缺少有效的計(jì)算機(jī)輔助工具的幫助。
為了幫助開(kāi)發(fā)人員有效地使用體系結(jié)構(gòu)模型進(jìn)行軟件設(shè)計(jì),應(yīng)當(dāng)在分析特定領(lǐng)域軟件靜態(tài)結(jié)構(gòu)模型和動(dòng)態(tài)模型的基礎(chǔ)上,以構(gòu)造此類軟件的過(guò)程模型為指導(dǎo),利用形式化方法建立以過(guò)程為中心的軟件開(kāi)發(fā)環(huán)境,為開(kāi)發(fā)人員提供高級(jí)的開(kāi)發(fā)環(huán)境。
參考文獻(xiàn)
[1]梅宏,申峻嶸.Journal of software 軟件學(xué)報(bào) VOL.17,NO.6,June 2006.
[2]Dahl O J,Hoare C A&Dijkstra E W .Structure Programming[M].London; Academic Press,1972.
[3]Pamas D C. A Technique for Software Module Specification, with Examples[J].Communication of the ACM,1972,15(5).
[4]Royce W W.Managing the Development ofLarge Software System:Concepts and Techniques[M].Wescon:Yourdon Press,1970.
作者簡(jiǎn)介:李波,女,湖南商學(xué)院計(jì)電學(xué)院講師,軟件工程碩士;聶裕鵬,男,長(zhǎng)沙商貿(mào)旅游職業(yè)技術(shù)學(xué)院經(jīng)貿(mào)系教師。