李天科
(海南熱帶海洋學院 海洋信息工程學院,海南 三亞 572022)
隨著面向對象技術和構件化技術在軟件開發中的應用,軟件的規模越來越大,結構越來越復雜。軟件架構師在復雜軟件的設計實踐中,深切感受到軟件的體系結構設計和規格說明,對提高軟件項目的質量、控制軟件開發的進度、降低軟件項目的成本與風險至關重要。
軟件體系結構在軟件開發中,為不同的風險承擔者提供了共同交流的語言,是對不同風險承擔者的不同功能和質量需求進行折中和權衡,最終形成一個滿足這些需求的全局設計[1-2]。
作為應用型本科院校,軟件工程專業培養的學生不僅要有一定的基礎理論知識,同時也要有較強的工程實踐技能,將來既要能成為合格的程序員,也要逐步成為軟件架構師。因此,在軟件工程專業的教學計劃中,將軟件體系結構作為一門核心課程,總體目標就是為軟件企業初步培養所需的軟件架構設計人才。
(1)軟件體系結構不是一門成熟的學科[3]。主要表現在:目前軟件體系結構的定義不統一;軟件體系結構模型、描述、設計、評估、測試等問題的解決方案不唯一,尋找解決方案也沒有固定統一的途徑可遵循[3-4];如何平衡軟件體系結構與具體軟件質量屬性需求之間的關系,沒有明確答案。
(2)軟件體系結構課程內容抽象程度高。軟件體系結構的基本概念、原則和方法是對諸多不同領域軟件系統共性特征的提取和升華,并不針對某一特定領域或特定系統。這些知識對于大部分從未實際參與過大型軟件研發工作的學生來講難以理解。
(3)缺少成熟、經典的教材及教學案例。目前,國內外學者編著出版了一系列軟件體系結構教材[5]。總體來說,多數教材系統地介紹了軟件體系結構的基本原理,對軟件體系結構的設計方法介紹得不夠細致。另外,教材中的案例比較少,案例的規模也比較小[6]。
(1)教學內容與教學目標有差距。按照軟件體系結構課程教學大綱的要求,軟件體系結構課程的培養目標,應該是通過該門課程培養學生的軟件體系結構分析能力,即從軟件體系結構的角度審視軟件;培養學生軟件體系結構的設計能力,即選擇適合的軟件體系結構風格、設計滿足需求的軟件體系結構的能力。
但是,以往我們基本圍繞軟件體系結構概論、軟件體系結構建模、軟件體系結構風格、軟件體系結構描述、動態軟件體系結構、基于服務的體系結構、軟件體系結構的分析與測試、軟件體系結構評估、基于體系結構的軟件開發等內容[2-3]展開教學。盡管這些內容涵蓋了軟件體系結構的基本概念,以及圍繞軟件體系結構開展的各項活動。但是對軟件體系結構的設計方法和設計過程介紹得比較少,學生學習了軟件體系結構以后,對大型軟件如何從軟件需求規格說明過渡到軟件體系結構沒有深入的了解,對不同的質量需求如何影響軟件體系結構,以及軟件體系結構如何在不同的利益相關者之間進行折中和平衡了解得就更少。
(2)學生學習的主動性不足。主要原因有3方面,一是我們在大三第二學期開設本課程,在此之前學生學習了幾門編程語言、數據庫原理、軟件工程、面向對象的分析與設計以及操作系統和數據結構等課程。在這些課程的學習中,學生遇到的都是規模比較小、問題描述很清楚的軟件項目,學生只需要應用結構化程序設計方法,或者面向對象的程序設計方法就能完成設計,對于軟件體系結構課程中介紹的軟件設計方法不夠重視;二是軟件體系結構設計屬于高層設計,設計結果是否合理沒有直觀印象,學生做完軟件項目的結構設計沒有完成源程序編寫的那種成就感;三是軟件體系結構課程偏重概念、原理的介紹,學生沒有大型軟件項目設計的體驗,很難將軟件體系結構的抽象理論與實際聯系起來,因此,普遍感覺這門課程枯燥乏味。
經過幾年的教學實踐,我們將軟件體系結構課程的教學內容整合為兩大部分,一部分是軟件體系結構的基本概念和原理,包括軟件體系結構概論、軟件體系結構建模、軟件體系結構風格和軟件體系結構描述;另一部分是軟件體系結構設計,包括軟件需求分析、概念架構設計和細化架構[7],具體內容見表1。
(1)軟件體系結構概論介紹了不同學者對軟件體系結構給出的定義,讓學生初步了解復雜軟件體系結構需要從多個不同的視角去理解;然后詳細介紹軟件體系結構在軟件開發各個階段的作用,使學生進一步理解軟件體系結構是早期設計決策的體現,是不同風險承擔者進行交流的手段;最后概括地介紹軟件體系結構的發展和應用現狀。
軟件體系結構建模是軟件體系結構課程的教學重點內容之一,目的是讓學生深入理解復雜軟件體系結構需要應用多視圖建模,其中“一個架構視圖是對于從某一視角或某一點上看到的系統所作的簡化描述,描述中涵蓋了系統的某一特定方面,而省略了與此方面無關的實體”[8]。教學內容包括:“邏輯視圖+物理視圖”模型;“4+1”視圖模型;五視圖模型(邏輯視圖、運行視圖、開發視圖、數據視圖、物理視圖);讓學生了解不同規模的軟件,可以用不同的視圖模型來建模。要求學生掌握“4+1”視圖模型,并能熟練應用UML進行描述。

表1 軟件體系結構教學內容設計表
軟件體系結構風格也是軟件體系結構課程的重點之一,教學內容分為經典軟件體系結構風格;基于網絡的軟件體系結構風格[9];“平臺/插件”體系結構風格[10]。經典軟件體系結構風格包括:調用/返回風格(主程序/子程序風格、面向對象風格);數據流風格(順序批處理體系結構風格、管道/過濾器風格);基于事件系統風格;層次結構風格。基于網絡的軟件體系結構風格包括:B/S風格、C/S風格、P2P風格。通過學習讓學生深刻理解并熟練掌握常用的軟件體系結構風格。
(2)軟件體系結構設計方法是軟件體系結構課程教學的重點。軟件體系結構有多種設計方法[11],包括工件驅動的軟件體系結構設計;用例驅動的軟件體系結構設計;模式驅動的軟件體系結構設計;領域驅動的軟件體系結構設計;需求驅動的軟件體系結構設計等方法。我們在教學實踐中重點給學生介紹需求驅動的軟件體系結構設計方法。軟件體系結構設計的實質是將軟件需求分析所描述的問題空間轉換成軟件體系結構所描述的解空間,要實現轉換,先要有可靠的軟件需求分析結果,然后確定軟件的概念架構。由于我們軟件工程專業的教學計劃里面沒有開設需求工程課程。因此,在軟件體系結構設計的教學內容中包括了軟件需求分析和軟件架構設計兩部分。
軟件需求分析包括[7]:愿景分析;需求獲取和需求分析。愿景分析就是讓學生了解如何確定軟件系統的業務目標、應用范圍;如何進行可行性分析;如何進行風險評估。需求獲取和需求分析介紹了需求捕獲的方法以及需求分析的方法。需求分析的結果采用用例圖和用例規約來描述。
軟件概念架構設計包括[7]:概念架構的概念,概念架構設計方法。重點介紹如何從功能需求向設計過渡,以及如何從質量需求向設計過渡。通過學習讓學生了解軟件概念架構的設計方法、子系統的劃分和架構風格選型等。細化架構設計主要介紹軟件架構的描述方法。
軟件體系結構是一門偏重抽象理論的課程,教學內容中介紹的基本概念和原理都是針對不同領域軟件系統的一般分析和設計方法,并不針對某一特定軟件系統,學生在學習過程中普遍感覺難以理解。因此,我們在教學過程中,盡量采用案例驅動教學。用案例說明基本概念和原理,在案例中展現軟件體系結構的分析方法和設計方法,這樣不僅能給學生以直觀的印象,而且能引導學生積極思考和討論。
我們選取的案例分為3種類型,第一類案例選自現有的教材,這類案例規模小,適合于教學,用于幫助學生理解基本概念和原理。如在講授經典軟件體系結構風格的時候,選取“文章中查找和重組關鍵詞系統”(key word in context,KWIC)作為教學案例,分別采用面向過程、面向對象、基于事件和管道過濾器4種不同的風格進行分析和設計,然后對各種設計方案的優缺點進行比較,讓學生理解不同軟件體系結構風格的特點。第二類案例選自學生的課程設計,圍繞教學內容進行互動式案例教學。如講授軟件需求分析時,讓學生介紹自己完成的“商場倉庫管理系統”的需求分析結果,然后其他同學根據需求規格說明書中的用例圖和用例規約,分析和評價該功能性的需求是否完備;根據非功能需求列表和描述,分析哪些是關鍵性的功能需求,哪些非功能需求之間是相互排斥的。通過討論學生逐漸明白了需求獲取、需求分析、需求描述的方法。第三類案例選自學生畢業實習時參與開發的實際項目,這類項目一般規模比較大,由具有豐富實踐經驗的軟件架構師設計。如為某市政務中心開發的“用戶管理體系大數據管理平臺”,整個系統包括統一認證用戶管理系統、用戶管理體系數據支撐平臺、政務服務數據一表通系統、用戶專屬檔案門戶系統、政務服務數據交換系統、綜合窗口支撐系統、多規合一聯審系統等多個子系統。在教學中將該項目的可行性分析結果、需求分析結果、總體設計方案和每個子系統的設計方案介紹給學生,讓學生了解大規模復雜軟件的分析和設計方法。
通過整合軟件體系結構課程的教學內容,使其更加符合應用型本科軟件工程專業的培養目標,即不僅要讓學生了解軟件體系結構的基本概念和原理,更重要的是要讓學生掌握復雜軟件的設計方法和描述方法。同時采用案例驅動教學,將抽象的理論與實際案例結合起來,激發學生的學習興趣,幫助學生深入理解理論知識,提高學生的應用能力,使軟件體系結構課程的教學不再那么枯燥乏味。與前幾年相比較,近兩年在軟件體系結構教學中逐步整合了教學內容,學習效果有較明顯的改觀,學生在軟件項目開發中能應用軟件體系結構設計方法,完成較規范的軟件體系結構設計。
[1]張友生, 李雄. 軟件體系結構原理、方法與實踐[M]. 北京: 清華大學出版社, 2014.
[2]束永安, 羅斌, 朱方義. 軟件體系結構教學研究[J]. 電腦知識與技術, 2009(28): 7974-7976.
[3]路綱, 裘國永. 軟件體系架構課程本科教學探討[J]. 計算機教育, 2010(24): 128-131.
[4]覃征, 邢劍寬. 軟件體系結構課程教學:抽象與實踐的協調與統一[J]. 中國大學教學, 2009(7): 14-15.
[5]覃征, 邢劍寬, 董金春, 等. 軟件體系結構[M]. 2版. 北京: 清華大學出版社, 2008.
[6]李暾, 文艷軍, 劉萬偉, 等. 軟件體系結構課程教學改革規劃與實施[J].計算機教育, 2015(6): 19-22.
[7]溫昱. 軟件架構設計: 程序員向架構師轉型必備[M]. 2版. 北京: 電子工業出版社, 2012.
[8]Philippe K. Rational統一過程引論[M]. 2版·影印版. 北京: 中國電力出版社, 2003.
[9]孫玉山, 劉旭東. 軟件設計模式與體系結構[M]. 北京: 高等教育出版社, 2013.
[10]李俊娥, 周洞汝.“平臺/插件”軟件體系結構風格[J]. 小型微型計算機系統, 2007(5): 876-881.
[11]王一賓, 李心科. 軟件體系結構設計方法的研究[J]. 計算機工程與設計, 2005(3): 604-607.