摘要:隨著軟件工程專業的出現,高校中計算機專業的傳統基礎課程“軟件工程”的教學面臨著更多的挑戰。本文討論該課程的教學中出現的典型問題和解決辦法。在分析該課程特點的基礎上,指出必須面向需求、突出重點,然后結合實例,提出了一個面向普通高校、針對不同地區特點的軟件工程課程的教學方案,并與SWEBOK2004進行了對比和分析。
關鍵詞:軟件工程;教學設計;教學實踐;SWEBOK
中圖分類號:G642文獻標識碼:B
文章編號:1672-5913 (2007) 20-0029-03
“軟件工程”課程在國內的計算機科學與技術專業以及國際上2001年的計算機科學教學體系(IEEE CC2001)中都是不可或缺的核心專業知識課程,其主要內容也是2004年由IEEE-CS/ACM/AIS建議的計算科學教學體系的關鍵知識域(CC2004)。近年來,軟件工程的知識已經成熟和系統化,足以構成一個專業的知識體系,在國內外大學的計算學科下面相繼出現了“軟件工程專業”。在這種情況下,傳統的“軟件工程”課程出現的新老問題更加凸顯,急需高校、特別是我國普通高等院校探討,盡快地提出解決問題的途徑和辦法。
1 “軟件工程”的教學難點
“軟件工程”課程的內容廣博,涉及軟件開發的基本概念、原理、過程、方法、技術、標準、管理和工具等廣泛的技術與管理知識。作為一門課程,“軟件工程”所包含的知識面面具到,卻又難以深入。由于課程內容不如數學嚴謹,不如編程具體,不如數據庫實用,不如圖形學生動,加之學生基本上沒有參與過大型軟件開發的實踐,這就使得學生難以在一個學期就深入理解軟件工程中龐雜、抽象的內容。在傳統的考試方式下,學生只能死記硬背,使得“軟件工程”課程變成了“第二政治課”。此外,由于軟件工程的理論和技術發展迅速,教材總是跟不上技術的發展;如果教師缺乏理論研究和實踐經驗,教學就變得更加困難。
自2002年起,“軟件工程”在全國35所學校成為一個專業之后,龐大復雜的“軟件工程”從一門課程變成了一系列課程,知識的傳授相對容易起來。可是對其它專業而言,則又面臨新的問題:如何在學時不變甚至減少的條件下,把一個專業的知識濃縮在一門課程中,完整而有效地傳授給學生。
2 “軟件工程”課程之管見
“軟件工程”研究的是如何系統地構造軟件的知識,是計算學科中唯一涉及管理學的課程,內容獨特,不可或缺。2004年IEEE和ACM的聯合公布的軟件工程知識體系(SWEBOK04)將其內容概括為十個知識域,每個知識域又分若干子域,每個子域分為若干知識點,等等。SWEBOK04的出現標志著軟件工程知識的成熟和一門專業的誕生。
筆者根據對軟件工程的多年研究、對該課程的中英文教學,以及給二學位本科和研究生講授“軟件設計方法”、“組件開發技術”、“軟件體系結構”、“軟件項目管理”等相關課程的經歷,認為根本不可能在一門課程中把軟件工程的所有知識都讓學生掌握!前人嘗試的結果導致了無論是教材、還是教學,都只能是走馬觀花、蜻蜓點水,造成教與學的困惑。SWEBOK04及其教學指南提出了軟件工程的基本知識范圍,卻沒有明確規定教學的詳細程度,允許靈活掌握。作為一門課程,我們應該、而且必須結合實際、面向需要,合理地取舍傳授知識的寡眾與深淺。
事實上,國內外的經典與新近出版的“軟件工程”課程的教材基本上都可以覆蓋要求的知識內容。但是,在選材的深度與廣度、知識的更新以及組織方面有明顯的側重。以軟件分析與設計為例,有些教材注重知識的全面性,把結構化方法與面向對象技術并重地講解(如Pressman的最新版本,國防科大齊治昌、譚慶平和寧洪的教材);有些教材只講最新穎、更實用的基于UML的面向對象建模方法(作者如Sommerville,清華大學的孫家廣與劉強)。
我們認為,“軟件工程”作為一門課程是計算學科的入門課,可以借鑒管理學科,將其稱之為“軟件工程導論”或“軟件工程概論”。區分對待SWEBOK04中的知識點,確定出了解、理解和掌握等不同程度的教學要求。下面就結合實例介紹一個具體的教學設計和實施。
3 “軟件工程”課程教學內容的一個設計
3.1背景
筆者所在大學是一所省屬綜合性大學,界于教學型與研究型大學之間,目前更偏重于教學型。畢業生多數在省內、特別是在青島工作。自2003年起青島市把軟件列為優先發展產業,重點扶持軟件外包、信息家電等產業領域。我校是全國35所成立了軟件學院的院校之一,負責培養軟件工程專業的本科學生。工程碩士的培養仍由筆者所在的信息工程學院負責。
我院最近5年的考研率在20%左右,大多數本科生畢業后面臨就業問題。除升學與出國外,我院近80%學生的就業去向包括:軟件企業、非軟件企業、政府部門與事業單位、自謀職業等。只有在軟件企業或者大型傳統企業IT部門的畢業生從事軟件開發,其它大多數計算機畢業生從事與軟件開發無關的職業,如市場、銷售、采購、管理等。為了滿足社會需要,更好地為地方經濟發展服務,我院經將計算機科學與技術分為3個方向供學生選擇:軟件技術與理論、嵌入式系統和網絡工程。“軟件工程”課程是所有專業方向的必修基礎課。
3.2需求分析與教學內容的設計
在這些背景下,我們的“軟件工程”課程的教學方針是:滿足社會需求、面向學生未來;將課程定位為:全面地介紹軟件工程學的基本知識,突出大型軟件開發和管理的基本原理、方法和實用技術,滿足計算學科對系統化軟件構造知識的基本要求,同時成為學習軟件工程專業的先導課程。課程名稱也相應地改為“軟件工程導論”;在滿足軟件工程知識點和學科體系的同時,根據市場需求,適當增減內容,把具體的實用技術講深講透,同時介紹前沿課題,提高學生的學習興趣。
表1是我院“軟件工程導論”課程的理論授課內容與課時安排(不含課程緒論與課堂練習、總結的4個學時),按照SWEBOK04提出的10個知識域進行了重新組織。由于選用的教材以及實際教學內容的組織與SWEBOK04的知識域并非完全一致,因而出現小數點學時。如“軟件工程工具與方法”知識域,我們在授課章節介紹相關的軟件工具,如在軟件需求和設計中使用了ROSE和MS Visio;在講解項目進度中示意了MS Project;在軟件測試中提到了JUnit。此外,還按照教材集中地講解了CASE概念與工具,補充了Eclipse以及最新的青鳥系統。

為便于對比,我們將“軟件工程導論”的教學內容按照SWEBOK04的知識域計算出每個知識域所用學時占總課時的百分比;同時計算出SWEBOK04中10個知識域中的子知識域在整個子知識域中的百分比,如圖1所示。

從圖1可以看大:我們對產品工程的設計和測試講授了更多的內容。相比于SWEBOK04,我們的設計部分超出一倍,軟件測試的內容則多出三分之二。對于同樣重要的需求分析則沒有增加更多的內容,這主要是考慮到需求分析是超越初級軟件工程師的知識,需要溝通技巧、領域知識和實踐經驗等綜合知識與能力,屬于系統分析員的職責,應屆本科畢業生基本上達不到。對軟件構造以及軟件支持方面的知識(如軟件配置管理)則縮減了學時,一個原因與所選教材有關。在軟件質量方面,則補充了CMMI的過程改進及其結合TSP/PSP的內容,使得我們的學時略微高出。
在處理知識域時,我們遵循了“突出重點、面向實用”的指導思想,舉例如下。我們在軟件建模和測試方面加大了學時,以便學生掌握這兩個領域的技術;同時減弱了對其它知識域的學習要求,只需要理解、甚至了解有關的知識。例如,我們在需求分析與設計中都講解了結構化方法和面向對象方法,但是,所分配的時間差別巨大。對于結構化方法,主要介紹其基本思想、常用工具及其簡單應用,如DFD圖、數據字典、程序結構圖、判定樹、PDL等。對面向對象技術,則大大地擴充了選用教材的內容,加上相應的實驗課程,共有近30學時,可以當作一個“基于UML的軟件建模”的小型課程。目的是使學生認識到軟件工程并非是空虛無物的條條框框,開發軟件的工作在編程之外還有分析、設計和測試等。而且希望學生通過該導論課程實實在在地掌握一種當前常用的軟件建模技術,以便能夠在實際工作中盡快地熟練使用。圖2示意了“軟件工程導論”中對軟件設計有關知識點分配學時的比例。

4實踐與體會
教學內容的變更僅僅是改善教學質量的一個方面,還需要改變教學方式,舉例如下。
例1:傳授知識的過程要從日常生活到軟件領域。在講解過程改進時,我們以劉翔為例提出問題:劉翔身后的科研小組和上百萬元的投資,包括攝像、動作分解和分析是為了什么?表面上看是為了改進跨欄和起跑的動作(軟件開發過程),實質上最終是為了改進其跨欄成績(軟件產品)。從學生們比較熟悉、容易理解的事情開始,立刻就吸引了他們的注意力,進而簡化了對軟件過程及其改進的講解。
例2:綜合運用學過的知識。在講開發高可信軟件時,把容錯技術與面向對象編程中異常處理的機制結合起來,加深了學生對容錯技術的理解、對異常處理的認識;在介紹形式化技術時,通過演示斷言在Java中的實現,使學生認識到這些看起來玄乎的理論正在逐步實現。
例3:不失時機地簡單介紹相關的研究動向以及國內的相關工作,讓學生了解軟件工程學最新的理論研究,對少數優秀的學生指出鉆研方向、提高研究興趣。例如,我們在課堂上簡介了最近三年中國首次主辦的“軟件工程國際大會”,“軟件過程改進”和“軟件工程理論”等國際高規格專業會議,包括其中的主題報告。
教學內容和教學方法的改進,極大地提高了學生的學習熱情,成績也顯著提高。限于篇幅,我們在考試、課程設計以及實踐教學方面的嘗試不在本文討論范圍。
我們將繼續搜集和分析不同專業方向的學生對該導論課程的反應,針對性地調整有關內容,以便更好地滿足社會的需要,如針對嵌入式系統的軟件開發,增加實時系統的分析與設計技術方面的知識。
參考文獻
[1] 麥中凡. 解讀SWEBOK 2004[J]. 計算機教育,2004,(10).
[2] Computing Curricula 2004.Overview Report. November 22, 2004, http://www.acm.org.
[3] Software Engineering 2004. CC 2004 Series, August 23, 2004, http://www.acm.org.
[4] 劉洪、舒堅、羅海平. 一般工科院校軟件工程專業課程體系設置[A].大學計算機課程報告論壇論文集[C]. 北京:高等教育出版社,2006. 465-469.
作者簡介
李勁華(1963—)男,博士,副教授,主要從事軟件工程的教學與研究。
楊厚俊(1965—)男,碩士,副教授,分管教學副院長。
通信地址:青島大學信息工程學院 266071
電話:13969678995
E-mail:lijh@qdu.edu.cn, qduli@126.com