劉 超



摘要:軟件工程領域的大量最新研究成果源源不斷地轉向實用,成為軟件產業應對新挑戰的重要方法和工具,并因此被納入大學的“軟件工程”課程中,不斷地充實和更新“軟件工程”課程的內容。本文就“軟件工程”課程體系建設中的一些基本問題進行了探討,包括“軟件工程”課程體系建設的總體目標、指導思想、課程體系的總體框架,以及每門課程的講授內容、彼此之間的銜接等,并針對本學科的人才培養目標,提出了一些建議和想法,以供進一步的研究和探討。
關鍵詞:軟件工程;基本架構;課程體系
中圖分類號:G642文獻標識碼:B
1概述
隨著我國現代化和信息化建設的快速發展,計算機軟件產業已初具規模,并呈現持續快速發展的態勢。社會對軟件工程人才有著旺盛的需求,并要求高校培養出基礎理論和專業知識扎實、工程實踐能力強、具有持續創新能力的高層次復合型軟件工程人才。他們需熟練地掌握和運用先進的軟件工程化管理方法和最新的軟件技術,同時,面對新挑戰要善于鉆研、勇于創新,以便能夠很快地成為軟件企業的技術中堅和引領軟件企業發展的領導者。
早在上世紀八十年代初期,“軟件工程”課程便已經成為北京航空航天大學(以下簡稱北航)計算機科學與工程系(現為計算機學院)的研究生學位課,隨后又成為本科生的專業必修課程。九十年代,本科生和研究生課程體系又逐步增加了“軟件測試技術”、“個人軟件過程”、“面向對象技術”、“人機用戶界面設計”、“信息系統分析與設計”、“軟件過程管理”、“軟件體系結構”、“軟件需求管理”、“軟件項目管理”等系列課程,不斷強化對軟件工程技術和管理方面專業知識的講授,以及規范化軟件工程方法的訓練。2001年以來,我們將量化的軟件過程控制思想和一些日趨成熟的工程訓練方法引入到軟件工程課程實踐中,并指導“軟件工程”課程實踐,進一步強化對學生軟件工程實踐能力的培養。
然而,面對不斷涌現出來的軟件工程新概念、新方法、新技術和新工具,如UML、CMM&CMMI、構件化開發等,“軟件工程”課程體系的設計和教學方法的改革依然是一個嚴峻的課題:
(1) 從課程設置和講授方法上看,“軟件工程”學科特有的工程性,技術與管理的綜合性,新興學科的快速發展和變化等特點,使得“軟件工程”課程體系設計面臨一系列突出問題,包括培養目標的確定、授課內容的遴選、課程系列的設計和組織、講授的方法、實踐環節的設計、考核的方式、學習效果的評判、課程體系的評估與持續改進等。特別是在課程設計和軟件開發實踐環節中,由于缺乏對過程的有效指導和控制,難以有效地培養學生的軟件工程能力,包括在軟件過程管理、軟件項目管理、軟件配置管理、軟件質量管理,以及需求分析、體系結構設計、規范的模型構建與分析、文檔撰寫等方面的基本訓練。
(2) 從教學效果上看,來自學生、教師,以及社會各方面的反饋表明,“軟件工程”課程系列的重要性已得到普遍認可,然而實際效果與期望之間還存在著顯著差距,突出表現在“軟件工程”課程大多屬于“基本概念和方法的概論”加上部分“新技術的講座”。這使得學生的學習效果不佳,普遍存在基礎知識掌握不牢固、基本概念的理解含混在后續課程、畢業設計和軟件開發實踐中無法自覺有效地運用成熟的軟件開發方法。
此外,由于“軟件工程”相關課程的設置和內容的選擇主要取決于任課老師的個人觀點,缺乏整體和系統的設計及論證。
針對上述問題,北航軟件工程研究所對“軟件工程”課程體系開展了長期的研究。自2001年以來,以“軟件工程”課程系列的主講教師為主體,我們分別從“軟件工程”課程體系建設的總體目標、指導思想、課程體系的總體框架、每門課程的講授內容、彼此之間的銜接和課程實踐設計等方面進行了反復探討,重點開展了面向本科生和研究生的一體化“軟件工程”課程體系研究與建設,進一步凝練了軟件工程人才培養的基本理念和目標,以及與之相適應的課程體系。
2指導思想和目標
北航計算機科學與技術學科是國家重點一級學科。本學科確定的建設目標是成為國內一流、國際知名的高水平研究型學科,培養高素質、高層次人才。作為本學科的骨干課程,“軟件工程”課程體系的基本定位是面向軟件行業發展的基本需求,培養基礎理論和專業知識扎實、工程實踐能力強并具有團隊協作和創新能力的高層次軟件工程復合型人才。
為此,我們確立了“軟件工程”課程體系建設的指導思想,即從多個層面向學生系統地和漸進式地介紹日漸完善、成熟的主流軟件工程化方法、技術和工具,并強化規范和基于統計過程控制的軟件工程訓練,同時引導學生積極探索最新的研究領域,及時了解最新的研究成果,培養學生在軟件工程實踐中發現問題和解決問題的能力,使學生深刻理解并牢固掌握基本思想和方法,進而逐步培養學生在大型軟件系統開發過程中自覺運用軟件工程化方法的能力、組織管理與團隊協作能力以及對于軟件工程化方法的持續改進與創新能力。
3 “軟件工程”課程體系的基本架構
軟件工程領域的新問題、新概念、新方法、新技術、新工具層出不窮。一方面,軟件工程領域的知識爆炸向課程的設置提出了挑戰;另一方面,其知識結構的相對穩定性和發展規律也提供了構建“軟件工程”課程體系的基本架構的基礎。通過對軟件工程知識體系的深入剖析以及我們20多年軟件工程課程成功教學實踐的凝練,對照軟件工程知識體系SWEBOK、ACM和教育部頒布的本科生軟件工程方向專業規范,本文提出了一種基于軟件工程技術和管理雙主線,面向本科生和研究生兩個層級的“軟件工程”課程體系基本架構,簡稱為指數型(2n)組合架構,如圖1所示。在這個架構下,我們將課程體系的總體目標、講授內容和實踐要點等進行適當的分解,以確定各門課程的目的、主要內容以及相互之間的關聯,并幫助學生根據需求選擇不同的課程組合。
該架構包括如下基本要素:
(1) 兩條主線:軟件工程技術和軟件工程管理;
(2) 兩類學生:本科生和研究生;
(3) 兩個層次:面向本科生的基礎知識和基本訓練、面向研究生的系統化方法與綜合實踐;
(4) 兩種能力:規范化的工程實施(包括開發和管理)能力和持續改進與創新能力;
(5) 兩類課程:軟件工程技術類課程、軟件工程管理類課程;
(6) 兩種教學方法相結合:課堂講授、小型項目實踐的過程追蹤與指導;
(7) 兩方面的考評:基礎知識和基本能力的考試、小型項目實踐的過程結果。
在這種架構下,要素之間彼此交叉支撐,各類課程系列得以分層細化,并具有以下特點:
(1) 主線清楚,面向技術和面向管理的兩類課程的劃分有助于突出各自的側重點,避免教學內容的偏頗和重復,強調彼此的關聯與支撐。
(2) 層次分明,界定了本科生和研究生各自的學習重點和對能力培養的基本要求。
(3) 分級細化,明確專業課程及其定位,優選各類選修課程。
(4) 易于調整,在基本結構保持相對穩定的前提下,可以針對新近的技術發展動態,分層級地對各門課程的內容進行調整,或增減課程。
(5) 易于評估,基于該架構,有助于直觀地評估課程的增減或者課程內容的調整對整個課程體系的影響。
4 “軟件工程”課程系列的設計
上述“軟件工程”課程體系的基本架構可以用來指導課程系列的設計和組織以及對課程系列講授內容的重點、覆蓋面等進行評估。
對于“軟件工程”專業的學生而言,應當學習課程包含了三條課程主線(或稱三類課程),其中計算機科學與技術專業課程是公共專業課程體系,而軟件工程技術和軟件工程管理這兩類課程構成軟件工程課程系列。表1中扼要地列舉了軟件工程方向的本科生和研究生應當選修的課程系列(其中陰影部分為重點課程),包括:
(1) 計算機科學與技術學科/專業公共基礎課程:奠定計算機專業基礎,擴寬知識面。
① 公共課:數學分析/高等代數、大學英語、工程訓練、大學語文、第二外語等。
② 基礎課:
a) 計算機基礎:計算機導論、算法和數據結構、高級語言程序設計(1、2);
b) 計算機理論:數理邏輯、集合論和圖論、組合數學、概率統計(A);
c) 計算機硬件:數子電路和數字邏輯、計算機原理和匯編語言、計算機接口與通訊、計算機體系結構、計算機網絡;
d) 計算機軟件:編譯技術、操作系統、數據庫系統原理。
(2) 軟件工程專業課程,包括:
① 軟件工程技術類課
a) 必修課:面向對象技術;
b) 選修課:
i. 軟件代碼開發技術、軟件質量保證與軟件測試技術、軟件工程工具與應用;
ii. 相關選修課:嵌入式軟件開發技術、Web應用軟件開發技術、信息系統分析與設計。
② 軟件工程管理類課
a) 必修課:軟件工程導論;
b) 選修課:
i. 個體軟件過程、軟件項目管理、軟件配置管理;
ii. 相關選修課:團隊協作與社會實踐、軟件經濟學基礎。
5結論
本文簡要介紹了本學科“軟件工程”課程體系建設中需要考慮的主要問題,給出了一種“軟件工程”課程體系基本框架,分析了其主要特點,并在此基礎上,給出了一個基本的“軟件工程”課程系列。
如前所述,課程體系建設涉及多個要素,“軟件工程”課程體系更受到軟件工程這一新興學科發展的影響,因此,其基本架構應當能夠很好地組織軟件課程系列,并適應軟件工程的發展和變化。在這樣一個基本框架下,能夠比較清晰地判斷課程及其內容的覆蓋面和取舍是否恰當,為課程系列的構建提供了有效的支持。
教學方法的改革,特別是與之配套的教學實踐的設計和對實踐過程的指導,是一項艱巨的、富有挑戰性和長期性的研究課題。多年來,我們針對本科生的軟件工程課、研究生的高級軟件工程課等課程各自的要求和特點,進行了多年的研究和實踐,積累了重要的經驗。實踐證明,參考這樣的架構,有助于相關課程的組織和協調以及持續的改進。
參考文獻:
[1] 北京航空航天大學. 北京航空航天大學計算機學院“十一五”發展規劃[Z]. 2006.
[2]Alain Abran, école, James W. Moore. Guide to the Software Engineering Body of Knowledge, 2004 Version, SWEBOK?[Z]. IEEE Computer Society(2001-2003).
[3] 教育部計算機科學與技術專業教學指導委員會. 計算機科學與技術本科專業規范(軟件工程方向)[Z]. 2004.