引言項目驅動教學思想起源于德國,是一種行為引導的教學方式, 即通過組織學生參加項目設計、實現和管理,在項目實施過程中完成教學任務.
①②軟件工程作為計算機軟件專業的一門核心課程,主要講授保證大規模軟件開發成功的方法和原理. 因此, 軟件工程課程的教學案例項目應與其他課程\\(如程序設計語言等\\)所采用的示例有很大不同.在實施項目教學時,必須選擇有實用價值且有較大復雜度的開發項目,否則難以實現教學目標. 但當選擇復雜的開發項目作為教學案例時,如何將理論知識傳授與學生工程實踐有機結合,循序漸進地提高學生的軟件工程理論水平和實踐能力,是一個值得探討的課題.
筆者將當前主流的軟件開發思想---迭代進化式開發③,引入軟件工程課程的教學過程,結合主流開發過程,采用從教師主導到教師指導再到學生獨立完成的三階段進化式的教學方式,收到了很好的效果.
一、軟件工程教學現狀分析.
當前,軟件工程這門課程的教學主要采用傳統的教學方式,即以老師課堂講授為主,學生實驗課上練習為輔的方式組織教學.教學內容組織及教學示例的設計等方面與學生的學習能力及該課程的內涵要求不太適應.
\\(一\\)理論與實踐分離.
軟件工程課程理論多、內容抽象,教學難度大.
當前,軟件工程課程的教學內容組織方式多為“原理+示例”的形式,即前面若干章節介紹軟件工程的概念、基本原理和方法等理論內容,最后介紹一個示例. 開發案例講解往往一帶而過,無法體現軟件工程原理的實用價值,更無法達到訓練學生軟件工程能力的目標.這種理論與實踐分離的教學模式使學生普遍感到該課程枯燥乏味, 難以理解和應用,因此教學效果較差.
\\(二\\)教學案例與實際生產過程脫節.
當前的軟件工程教學中,雖然也引入了一些案例,但這些教學案例往往是孤立的為闡述某一概念和原理而設計的,沒有向學生展示完整的軟件生產過程,導致學生無法真正體會到軟件生產的實際情境.
二、進化式教學的基本思想.
\\(一\\)思想來源.
迭代開發是 RUP①②和大多數現代方法中的關鍵實踐. 在這種方法中,開發過程被組織成一系列短期小項目,稱為迭代;每次迭代都具有各自的需求分析、設計、實現和測試活動,產生可執行的局部系統. 每次迭代都是對系統的持續擴展和精化,隨著時間和一次又一次迭代的遞進,系統增量式地發展完善,最終成為適當的系統.
這種迭代進化式地完成任務的思路對改進軟件工程的教學有很好的指導意義. 首先,它符合學生的學習規律.人們對知識的掌握并不是一步到位的,往往有一個從認知到掌握到熟練應用的逐步深化的過程. 我們可以按此規律來組織教學內容,制定學生能力培養目標. 其次,這種進化式的軟件開發思想使得我們可以將大規模的有實際意義的軟件開發項目作為教學案例和學生練習項目引入教學中.軟件工程的課程特點決定了以簡化的小項目作為教學案例或學生實習項目不能很好地說明軟件工程原理,訓練學生應用軟件工程的能力. 教學項目必須有一定的復雜度才能顯示軟件工程這門課程內容對軟件開發活動的指導意義.傳統的教學方式下,教學項目復雜度的增加使得教學內容難以組織和實施, 也不符合學生的學習習慣和認識規律.以迭代進化的方式組織教學案例可以很好地解決這個矛盾.
迭代和進化式開發是當前大規模軟件開發普遍采用的方式.軟件工程的核心思想之一是通過軟件開發過程的管理來保證軟件開發的成功,因此教學過程應符合主流的軟件開發過程,必須遵循某一軟件開發過程來組織教學案例,并將基本原理的傳授溶入其中.
\\(二\\)軟件工程進化式教學過程的構建.
該教學方法將教學過程與案例的迭代式開發過程協同起來, 以迭代進化的方式組織教學內容,設置學生的能力增長目標.整個教學過程的完成分三次迭代來實現:即基本原理與方法的傳授、教師指導下的學生實踐和學生自主學習、獨立完成案例項目.每一次進化又可細分為初始、精化、構建和交付四個子階段③,整個教學過程的組織見圖 1.
第一次進化:案例教學.
本課程教學的第一階段主要結合具體案例進行軟件工程基本理論和方法的講解.本輪教學初始階段首先介紹軟件工程的基本概念、軟件生命周期模型及軟件開發過程等,在此基礎上探討軟件需求分析,引入用例技術,在所使用的案例中挑選一到兩個用例進行詳細描述,以此描述作為后繼教學的需求分析文檔.
本輪教學的精化階段的主要內容是軟件的分析和設計技術,包括概要設計、詳細設計、UML 建模技術等.本輪教學的難點是面向對象的分析和設計方法,這部分內容比較抽象,因此教學時要緊密結合教學案例,向學生展示從用例文檔得到軟件模型的詳細過程.
構建階段主要講解軟件的實現技術,包括軟件編碼、單元測試、數據庫設計等.
交付階段主要講解軟件的綜合測試技術,包括測試計劃的制定、測試環境的搭建、測試的策略選擇、測試用例的設計、測試工具的選擇和使用、測試報告的書寫等.
通過本輪教學,學生基本掌握了軟件工程的基本理論,具備了初步的應用軟件工程原理解決實際問題的能力,為下一輪教學打下了基礎.
第二次進化:教師指導學生對案例項目進行第二輪迭代開發.
本輪教學的目的是加深學生對軟件工程原理的理解和應用能力. 教學的主體由教師轉移到學生,所采用的教學方式是教師指導學生完成本次迭代開發任務. 將學生分為若干個小組,每個小組成員為四到五人.教學過程仍然分為初始、精化、構建和交付,教師規定每個階段的完成時間點,各階段完成時,每個小組提交本階段的成果,由教師統一講評.
本階段教學中,教師結合項目進展,補充軟件項目管理、配置管理、設計模式等知識,以擴展學生視野,加深學生對現代軟件技術的理解.
第三次進化:學生獨立完成案例項目的第三輪迭代開發.
通過前二輪的教學,學生在掌握了軟件工程基本原理的基礎上,具備了應用軟件工程原理和方法進行軟件開發的能力. 因此,本輪教學的目標是實現對案例項目的第三次迭代開發,成果為提交一個完整的具有實用價值的項目.本輪教學任務由各小組自行完成,教師主要起到督促檢查的作用. 將學生最后提交的系統質量作為評定學生本門期終成績的主要依據.
三、教學過程實施示例.
我們在實施該教學方法時,選取圖書管理系統作為開發案例. 第一輪教學所用時間為 9 周左右,在初始階段引導學生識別出該系統的主要用例,見表 1.
選擇核心用例借閱圖書和歸還圖書作為本輪教學要實現的示例,進行詳細描述,為學生演示用例的編寫方法. 從這兩個用例文本出發,講解如何進行系統分析和設計. UML 已成為面向對象設計的有效工具,因此本部分教學中要加入 UML 的內容. 結合兩個用例,詳細講解如何創建系統的領域模型. 得出領域模型后,如何創建系統的動態模型,進而得到系統的類模型. 得出類模型后,使用編程語言進行系統實現,創建數據庫,最后進行部署和測試. 此輪教學中結合借閱圖書和歸還圖書兩個功能的從分析到實現的全過程,進行原理和方法的講解,教學路線如圖 2.
圖 2 教學路線圖第二輪教學以學生練習為主, 教師引導為輔,所需時間為 4 周. 教學過程可概括為“所用知識提示+學生練習+集中點評”. 在圖書管理系統中,第一輪迭代完成了系統的基本功能. 本次迭代中,學生要從余下的用例中選擇若干個用例進行詳細定義、設計和實現,以對系統進行擴展.本次迭代的每個子階段開始前,教師對本階段所要用到的知識進行簡要的回顧,布置本子階段要完成的目標;然后各小組在規定的時間內完成本階段的開發任務;各小組提交工作成果后,由教師進行集中點評,以使各小組之間能互相比較,共同提高.
第三輪教學需時 3 周左右,各小組將作為獨立的開發團隊進行開發工作.他們需要完成圖書管理系統主學習的過程,培養動手能力和解決實際問題的能力.
四、總結.
基于案例的進化式教學方法將抽象的軟件工程原理與具體案例相結合,降低了學習難度,提高了學生的學習興趣. 借鑒 RUP 的迭代式軟件開發思想,將具有實際應用價值的復雜的軟件案例引入教學中,克服了軟件工程教學中示例與實際項目脫節, 學生無法體驗到實際的軟件開發過程的缺憾.
通過“教中學”、“練中學”、“做中學”三階段進化式學習,使學生學習的知識不停留在紙面上,而具備應用這些知識解決實際問題的能力.