李天科
(海南熱帶海洋學院 海洋信息工程學院,海南 三亞 572022)
隨著面向?qū)ο蠹夹g(shù)和構(gòu)件化技術(shù)在軟件開發(fā)中的應(yīng)用,軟件的規(guī)模越來越大,結(jié)構(gòu)越來越復雜。軟件架構(gòu)師在復雜軟件的設(shè)計實踐中,深切感受到軟件的體系結(jié)構(gòu)設(shè)計和規(guī)格說明,對提高軟件項目的質(zhì)量、控制軟件開發(fā)的進度、降低軟件項目的成本與風險至關(guān)重要。
軟件體系結(jié)構(gòu)在軟件開發(fā)中,為不同的風險承擔者提供了共同交流的語言,是對不同風險承擔者的不同功能和質(zhì)量需求進行折中和權(quán)衡,最終形成一個滿足這些需求的全局設(shè)計[1-2]。
作為應(yīng)用型本科院校,軟件工程專業(yè)培養(yǎng)的學生不僅要有一定的基礎(chǔ)理論知識,同時也要有較強的工程實踐技能,將來既要能成為合格的程序員,也要逐步成為軟件架構(gòu)師。因此,在軟件工程專業(yè)的教學計劃中,將軟件體系結(jié)構(gòu)作為一門核心課程,總體目標就是為軟件企業(yè)初步培養(yǎng)所需的軟件架構(gòu)設(shè)計人才。
(1)軟件體系結(jié)構(gòu)不是一門成熟的學科[3]。主要表現(xiàn)在:目前軟件體系結(jié)構(gòu)的定義不統(tǒng)一;軟件體系結(jié)構(gòu)模型、描述、設(shè)計、評估、測試等問題的解決方案不唯一,尋找解決方案也沒有固定統(tǒng)一的途徑可遵循[3-4];如何平衡軟件體系結(jié)構(gòu)與具體軟件質(zhì)量屬性需求之間的關(guān)系,沒有明確答案。
(2)軟件體系結(jié)構(gòu)課程內(nèi)容抽象程度高。軟件體系結(jié)構(gòu)的基本概念、原則和方法是對諸多不同領(lǐng)域軟件系統(tǒng)共性特征的提取和升華,并不針對某一特定領(lǐng)域或特定系統(tǒng)。這些知識對于大部分從未實際參與過大型軟件研發(fā)工作的學生來講難以理解。
(3)缺少成熟、經(jīng)典的教材及教學案例。目前,國內(nèi)外學者編著出版了一系列軟件體系結(jié)構(gòu)教材[5]??傮w來說,多數(shù)教材系統(tǒng)地介紹了軟件體系結(jié)構(gòu)的基本原理,對軟件體系結(jié)構(gòu)的設(shè)計方法介紹得不夠細致。另外,教材中的案例比較少,案例的規(guī)模也比較小[6]。
(1)教學內(nèi)容與教學目標有差距。按照軟件體系結(jié)構(gòu)課程教學大綱的要求,軟件體系結(jié)構(gòu)課程的培養(yǎng)目標,應(yīng)該是通過該門課程培養(yǎng)學生的軟件體系結(jié)構(gòu)分析能力,即從軟件體系結(jié)構(gòu)的角度審視軟件;培養(yǎng)學生軟件體系結(jié)構(gòu)的設(shè)計能力,即選擇適合的軟件體系結(jié)構(gòu)風格、設(shè)計滿足需求的軟件體系結(jié)構(gòu)的能力。
但是,以往我們基本圍繞軟件體系結(jié)構(gòu)概論、軟件體系結(jié)構(gòu)建模、軟件體系結(jié)構(gòu)風格、軟件體系結(jié)構(gòu)描述、動態(tài)軟件體系結(jié)構(gòu)、基于服務(wù)的體系結(jié)構(gòu)、軟件體系結(jié)構(gòu)的分析與測試、軟件體系結(jié)構(gòu)評估、基于體系結(jié)構(gòu)的軟件開發(fā)等內(nèi)容[2-3]展開教學。盡管這些內(nèi)容涵蓋了軟件體系結(jié)構(gòu)的基本概念,以及圍繞軟件體系結(jié)構(gòu)開展的各項活動。但是對軟件體系結(jié)構(gòu)的設(shè)計方法和設(shè)計過程介紹得比較少,學生學習了軟件體系結(jié)構(gòu)以后,對大型軟件如何從軟件需求規(guī)格說明過渡到軟件體系結(jié)構(gòu)沒有深入的了解,對不同的質(zhì)量需求如何影響軟件體系結(jié)構(gòu),以及軟件體系結(jié)構(gòu)如何在不同的利益相關(guān)者之間進行折中和平衡了解得就更少。
(2)學生學習的主動性不足。主要原因有3方面,一是我們在大三第二學期開設(shè)本課程,在此之前學生學習了幾門編程語言、數(shù)據(jù)庫原理、軟件工程、面向?qū)ο蟮姆治雠c設(shè)計以及操作系統(tǒng)和數(shù)據(jù)結(jié)構(gòu)等課程。在這些課程的學習中,學生遇到的都是規(guī)模比較小、問題描述很清楚的軟件項目,學生只需要應(yīng)用結(jié)構(gòu)化程序設(shè)計方法,或者面向?qū)ο蟮某绦蛟O(shè)計方法就能完成設(shè)計,對于軟件體系結(jié)構(gòu)課程中介紹的軟件設(shè)計方法不夠重視;二是軟件體系結(jié)構(gòu)設(shè)計屬于高層設(shè)計,設(shè)計結(jié)果是否合理沒有直觀印象,學生做完軟件項目的結(jié)構(gòu)設(shè)計沒有完成源程序編寫的那種成就感;三是軟件體系結(jié)構(gòu)課程偏重概念、原理的介紹,學生沒有大型軟件項目設(shè)計的體驗,很難將軟件體系結(jié)構(gòu)的抽象理論與實際聯(lián)系起來,因此,普遍感覺這門課程枯燥乏味。
經(jīng)過幾年的教學實踐,我們將軟件體系結(jié)構(gòu)課程的教學內(nèi)容整合為兩大部分,一部分是軟件體系結(jié)構(gòu)的基本概念和原理,包括軟件體系結(jié)構(gòu)概論、軟件體系結(jié)構(gòu)建模、軟件體系結(jié)構(gòu)風格和軟件體系結(jié)構(gòu)描述;另一部分是軟件體系結(jié)構(gòu)設(shè)計,包括軟件需求分析、概念架構(gòu)設(shè)計和細化架構(gòu)[7],具體內(nèi)容見表1。
(1)軟件體系結(jié)構(gòu)概論介紹了不同學者對軟件體系結(jié)構(gòu)給出的定義,讓學生初步了解復雜軟件體系結(jié)構(gòu)需要從多個不同的視角去理解;然后詳細介紹軟件體系結(jié)構(gòu)在軟件開發(fā)各個階段的作用,使學生進一步理解軟件體系結(jié)構(gòu)是早期設(shè)計決策的體現(xiàn),是不同風險承擔者進行交流的手段;最后概括地介紹軟件體系結(jié)構(gòu)的發(fā)展和應(yīng)用現(xiàn)狀。
軟件體系結(jié)構(gòu)建模是軟件體系結(jié)構(gòu)課程的教學重點內(nèi)容之一,目的是讓學生深入理解復雜軟件體系結(jié)構(gòu)需要應(yīng)用多視圖建模,其中“一個架構(gòu)視圖是對于從某一視角或某一點上看到的系統(tǒng)所作的簡化描述,描述中涵蓋了系統(tǒng)的某一特定方面,而省略了與此方面無關(guān)的實體”[8]。教學內(nèi)容包括:“邏輯視圖+物理視圖”模型;“4+1”視圖模型;五視圖模型(邏輯視圖、運行視圖、開發(fā)視圖、數(shù)據(jù)視圖、物理視圖);讓學生了解不同規(guī)模的軟件,可以用不同的視圖模型來建模。要求學生掌握“4+1”視圖模型,并能熟練應(yīng)用UML進行描述。
表1 軟件體系結(jié)構(gòu)教學內(nèi)容設(shè)計表
軟件體系結(jié)構(gòu)風格也是軟件體系結(jié)構(gòu)課程的重點之一,教學內(nèi)容分為經(jīng)典軟件體系結(jié)構(gòu)風格;基于網(wǎng)絡(luò)的軟件體系結(jié)構(gòu)風格[9];“平臺/插件”體系結(jié)構(gòu)風格[10]。經(jīng)典軟件體系結(jié)構(gòu)風格包括:調(diào)用/返回風格(主程序/子程序風格、面向?qū)ο箫L格);數(shù)據(jù)流風格(順序批處理體系結(jié)構(gòu)風格、管道/過濾器風格);基于事件系統(tǒng)風格;層次結(jié)構(gòu)風格?;诰W(wǎng)絡(luò)的軟件體系結(jié)構(gòu)風格包括:B/S風格、C/S風格、P2P風格。通過學習讓學生深刻理解并熟練掌握常用的軟件體系結(jié)構(gòu)風格。
(2)軟件體系結(jié)構(gòu)設(shè)計方法是軟件體系結(jié)構(gòu)課程教學的重點。軟件體系結(jié)構(gòu)有多種設(shè)計方法[11],包括工件驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計;用例驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計;模式驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計;領(lǐng)域驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計;需求驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計等方法。我們在教學實踐中重點給學生介紹需求驅(qū)動的軟件體系結(jié)構(gòu)設(shè)計方法。軟件體系結(jié)構(gòu)設(shè)計的實質(zhì)是將軟件需求分析所描述的問題空間轉(zhuǎn)換成軟件體系結(jié)構(gòu)所描述的解空間,要實現(xiàn)轉(zhuǎn)換,先要有可靠的軟件需求分析結(jié)果,然后確定軟件的概念架構(gòu)。由于我們軟件工程專業(yè)的教學計劃里面沒有開設(shè)需求工程課程。因此,在軟件體系結(jié)構(gòu)設(shè)計的教學內(nèi)容中包括了軟件需求分析和軟件架構(gòu)設(shè)計兩部分。
軟件需求分析包括[7]:愿景分析;需求獲取和需求分析。愿景分析就是讓學生了解如何確定軟件系統(tǒng)的業(yè)務(wù)目標、應(yīng)用范圍;如何進行可行性分析;如何進行風險評估。需求獲取和需求分析介紹了需求捕獲的方法以及需求分析的方法。需求分析的結(jié)果采用用例圖和用例規(guī)約來描述。
軟件概念架構(gòu)設(shè)計包括[7]:概念架構(gòu)的概念,概念架構(gòu)設(shè)計方法。重點介紹如何從功能需求向設(shè)計過渡,以及如何從質(zhì)量需求向設(shè)計過渡。通過學習讓學生了解軟件概念架構(gòu)的設(shè)計方法、子系統(tǒng)的劃分和架構(gòu)風格選型等。細化架構(gòu)設(shè)計主要介紹軟件架構(gòu)的描述方法。
軟件體系結(jié)構(gòu)是一門偏重抽象理論的課程,教學內(nèi)容中介紹的基本概念和原理都是針對不同領(lǐng)域軟件系統(tǒng)的一般分析和設(shè)計方法,并不針對某一特定軟件系統(tǒng),學生在學習過程中普遍感覺難以理解。因此,我們在教學過程中,盡量采用案例驅(qū)動教學。用案例說明基本概念和原理,在案例中展現(xiàn)軟件體系結(jié)構(gòu)的分析方法和設(shè)計方法,這樣不僅能給學生以直觀的印象,而且能引導學生積極思考和討論。
我們選取的案例分為3種類型,第一類案例選自現(xiàn)有的教材,這類案例規(guī)模小,適合于教學,用于幫助學生理解基本概念和原理。如在講授經(jīng)典軟件體系結(jié)構(gòu)風格的時候,選取“文章中查找和重組關(guān)鍵詞系統(tǒng)”(key word in context,KWIC)作為教學案例,分別采用面向過程、面向?qū)ο?、基于事件和管道過濾器4種不同的風格進行分析和設(shè)計,然后對各種設(shè)計方案的優(yōu)缺點進行比較,讓學生理解不同軟件體系結(jié)構(gòu)風格的特點。第二類案例選自學生的課程設(shè)計,圍繞教學內(nèi)容進行互動式案例教學。如講授軟件需求分析時,讓學生介紹自己完成的“商場倉庫管理系統(tǒng)”的需求分析結(jié)果,然后其他同學根據(jù)需求規(guī)格說明書中的用例圖和用例規(guī)約,分析和評價該功能性的需求是否完備;根據(jù)非功能需求列表和描述,分析哪些是關(guān)鍵性的功能需求,哪些非功能需求之間是相互排斥的。通過討論學生逐漸明白了需求獲取、需求分析、需求描述的方法。第三類案例選自學生畢業(yè)實習時參與開發(fā)的實際項目,這類項目一般規(guī)模比較大,由具有豐富實踐經(jīng)驗的軟件架構(gòu)師設(shè)計。如為某市政務(wù)中心開發(fā)的“用戶管理體系大數(shù)據(jù)管理平臺”,整個系統(tǒng)包括統(tǒng)一認證用戶管理系統(tǒng)、用戶管理體系數(shù)據(jù)支撐平臺、政務(wù)服務(wù)數(shù)據(jù)一表通系統(tǒng)、用戶專屬檔案門戶系統(tǒng)、政務(wù)服務(wù)數(shù)據(jù)交換系統(tǒng)、綜合窗口支撐系統(tǒng)、多規(guī)合一聯(lián)審系統(tǒng)等多個子系統(tǒng)。在教學中將該項目的可行性分析結(jié)果、需求分析結(jié)果、總體設(shè)計方案和每個子系統(tǒng)的設(shè)計方案介紹給學生,讓學生了解大規(guī)模復雜軟件的分析和設(shè)計方法。
通過整合軟件體系結(jié)構(gòu)課程的教學內(nèi)容,使其更加符合應(yīng)用型本科軟件工程專業(yè)的培養(yǎng)目標,即不僅要讓學生了解軟件體系結(jié)構(gòu)的基本概念和原理,更重要的是要讓學生掌握復雜軟件的設(shè)計方法和描述方法。同時采用案例驅(qū)動教學,將抽象的理論與實際案例結(jié)合起來,激發(fā)學生的學習興趣,幫助學生深入理解理論知識,提高學生的應(yīng)用能力,使軟件體系結(jié)構(gòu)課程的教學不再那么枯燥乏味。與前幾年相比較,近兩年在軟件體系結(jié)構(gòu)教學中逐步整合了教學內(nèi)容,學習效果有較明顯的改觀,學生在軟件項目開發(fā)中能應(yīng)用軟件體系結(jié)構(gòu)設(shè)計方法,完成較規(guī)范的軟件體系結(jié)構(gòu)設(shè)計。
[1]張友生, 李雄. 軟件體系結(jié)構(gòu)原理、方法與實踐[M]. 北京: 清華大學出版社, 2014.
[2]束永安, 羅斌, 朱方義. 軟件體系結(jié)構(gòu)教學研究[J]. 電腦知識與技術(shù), 2009(28): 7974-7976.
[3]路綱, 裘國永. 軟件體系架構(gòu)課程本科教學探討[J]. 計算機教育, 2010(24): 128-131.
[4]覃征, 邢劍寬. 軟件體系結(jié)構(gòu)課程教學:抽象與實踐的協(xié)調(diào)與統(tǒng)一[J]. 中國大學教學, 2009(7): 14-15.
[5]覃征, 邢劍寬, 董金春, 等. 軟件體系結(jié)構(gòu)[M]. 2版. 北京: 清華大學出版社, 2008.
[6]李暾, 文艷軍, 劉萬偉, 等. 軟件體系結(jié)構(gòu)課程教學改革規(guī)劃與實施[J].計算機教育, 2015(6): 19-22.
[7]溫昱. 軟件架構(gòu)設(shè)計: 程序員向架構(gòu)師轉(zhuǎn)型必備[M]. 2版. 北京: 電子工業(yè)出版社, 2012.
[8]Philippe K. Rational統(tǒng)一過程引論[M]. 2版·影印版. 北京: 中國電力出版社, 2003.
[9]孫玉山, 劉旭東. 軟件設(shè)計模式與體系結(jié)構(gòu)[M]. 北京: 高等教育出版社, 2013.
[10]李俊娥, 周洞汝.“平臺/插件”軟件體系結(jié)構(gòu)風格[J]. 小型微型計算機系統(tǒng), 2007(5): 876-881.
[11]王一賓, 李心科. 軟件體系結(jié)構(gòu)設(shè)計方法的研究[J]. 計算機工程與設(shè)計, 2005(3): 604-607.