朱忠旭(安徽工貿(mào)職業(yè)技術(shù)學(xué)院 計算機技術(shù)系,安徽 淮南232007)
項目驅(qū)動的軟件工程進化式教學(xué)方法
朱忠旭
(安徽工貿(mào)職業(yè)技術(shù)學(xué)院 計算機技術(shù)系,安徽 淮南232007)
將迭代進化的思想引入軟件工程課程的教學(xué)中,提出項目驅(qū)動的進化式的教學(xué)方法。該方法以達到實用程度的軟件項目貫穿教學(xué)過程的始終,根據(jù)該軟件開發(fā)的三次迭代,將教學(xué)過程分為三個階段,各階段分別采用“教師引導(dǎo)學(xué)習(xí)、教師指導(dǎo)實踐、學(xué)生獨立實踐”的教學(xué)方式,使學(xué)生對軟件工程原理和方法達到從認(rèn)知到理解再到應(yīng)用的進化式掌握。
迭代;進化;項目驅(qū)動教學(xué);軟件工程教學(xué)
項目驅(qū)動教學(xué)思想起源于德國,是一種行為引導(dǎo)的教學(xué)方式,即通過組織學(xué)生參加項目設(shè)計、實現(xiàn)和管理,在項目實施過程中完成教學(xué)任務(wù)。①鐘增勝,許江:《項目驅(qū)動教學(xué)的實踐與研究》,《重慶工商大學(xué)學(xué)報》2009年第5期,第159-160頁。②姜大源:《基于工作過程的課程觀》,《中國職業(yè)教育》2005年第8期。軟件工程作為計算機軟件專業(yè)的一門核心課程,主要講授保證大規(guī)模軟件開發(fā)成功的方法和原理。因此,軟件工程課程的教學(xué)案例項目應(yīng)與其他課程(如程序設(shè)計語言等)所采用的示例有很大不同。在實施項目教學(xué)時,必須選擇有實用價值且有較大復(fù)雜度的開發(fā)項目,否則難以實現(xiàn)教學(xué)目標(biāo)。但當(dāng)選擇復(fù)雜的開發(fā)項目作為教學(xué)案例時,如何將理論知識傳授與學(xué)生工程實踐有機結(jié)合,循序漸進地提高學(xué)生的軟件工程理論水平和實踐能力,是一個值得探討的課題。
筆者將當(dāng)前主流的軟件開發(fā)思想——迭代進化式開發(fā)③Craig Larman:Agile&Iterative Development:A Manager's Guide,北京:機械工業(yè)出版社,2006年。,引入軟件工程課程的教學(xué)過程,結(jié)合主流開發(fā)過程,采用從教師主導(dǎo)到教師指導(dǎo)再到學(xué)生獨立完成的三階段進化式的教學(xué)方式,收到了很好的效果。
當(dāng)前,軟件工程這門課程的教學(xué)主要采用傳統(tǒng)的教學(xué)方式,即以老師課堂講授為主,學(xué)生實驗課上練習(xí)為輔的方式組織教學(xué)。教學(xué)內(nèi)容組織及教學(xué)示例的設(shè)計等方面與學(xué)生的學(xué)習(xí)能力及該課程的內(nèi)涵要求不太適應(yīng)。
(一)理論與實踐分離
軟件工程課程理論多、內(nèi)容抽象,教學(xué)難度大。當(dāng)前,軟件工程課程的教學(xué)內(nèi)容組織方式多為“原理+示例”的形式,即前面若干章節(jié)介紹軟件工程的概念、基本原理和方法等理論內(nèi)容,最后介紹一個示例。開發(fā)案例講解往往一帶而過,無法體現(xiàn)軟件工程原理的實用價值,更無法達到訓(xùn)練學(xué)生軟件工程能力的目標(biāo)。這種理論與實踐分離的教學(xué)模式使學(xué)生普遍感到該課程枯燥乏味,難以理解和應(yīng)用,因此教學(xué)效果較差。
(二)教學(xué)案例與實際生產(chǎn)過程脫節(jié)
當(dāng)前的軟件工程教學(xué)中,雖然也引入了一些案例,但這些教學(xué)案例往往是孤立的為闡述某一概念和原理而設(shè)計的,沒有向?qū)W生展示完整的軟件生產(chǎn)過程,導(dǎo)致學(xué)生無法真正體會到軟件生產(chǎn)的實際情境。
(一)思想來源
迭代開發(fā)是RUP①Philippe Kruchten:The Rational Unified Process:An Introduction,Edition 3,Addison-Wesley,December 2003.②Per Koll等著:《Rational統(tǒng)一過程:實踐者指南》,徐正生等譯,北京:中國電力出版社,2004年。和大多數(shù)現(xiàn)代方法中的關(guān)鍵實踐。在這種方法中,開發(fā)過程被組織成一系列短期小項目,稱為迭代;每次迭代都具有各自的需求分析、設(shè)計、實現(xiàn)和測試活動,產(chǎn)生可執(zhí)行的局部系統(tǒng)。每次迭代都是對系統(tǒng)的持續(xù)擴展和精化,隨著時間和一次又一次迭代的遞進,系統(tǒng)增量式地發(fā)展完善,最終成為適當(dāng)?shù)南到y(tǒng)。
這種迭代進化式地完成任務(wù)的思路對改進軟件工程的教學(xué)有很好的指導(dǎo)意義。首先,它符合學(xué)生的學(xué)習(xí)規(guī)律。人們對知識的掌握并不是一步到位的,往往有一個從認(rèn)知到掌握到熟練應(yīng)用的逐步深化的過程。我們可以按此規(guī)律來組織教學(xué)內(nèi)容,制定學(xué)生能力培養(yǎng)目標(biāo)。其次,這種進化式的軟件開發(fā)思想使得我們可以將大規(guī)模的有實際意義的軟件開發(fā)項目作為教學(xué)案例和學(xué)生練習(xí)項目引入教學(xué)中。軟件工程的課程特點決定了以簡化的小項目作為教學(xué)案例或?qū)W生實習(xí)項目不能很好地說明軟件工程原理,訓(xùn)練學(xué)生應(yīng)用軟件工程的能力。教學(xué)項目必須有一定的復(fù)雜度才能顯示軟件工程這門課程內(nèi)容對軟件開發(fā)活動的指導(dǎo)意義。傳統(tǒng)的教學(xué)方式下,教學(xué)項目復(fù)雜度的增加使得教學(xué)內(nèi)容難以組織和實施,也不符合學(xué)生的學(xué)習(xí)習(xí)慣和認(rèn)識規(guī)律。以迭代進化的方式組織教學(xué)案例可以很好地解決這個矛盾。
迭代和進化式開發(fā)是當(dāng)前大規(guī)模軟件開發(fā)普遍采用的方式。軟件工程的核心思想之一是通過軟件開發(fā)過程的管理來保證軟件開發(fā)的成功,因此教學(xué)過程應(yīng)符合主流的軟件開發(fā)過程,必須遵循某一軟件開發(fā)過程來組織教學(xué)案例,并將基本原理的傳授溶入其中。
(二)軟件工程進化式教學(xué)過程的構(gòu)建
該教學(xué)方法將教學(xué)過程與案例的迭代式開發(fā)過程協(xié)同起來,以迭代進化的方式組織教學(xué)內(nèi)容,設(shè)置學(xué)生的能力增長目標(biāo)。整個教學(xué)過程的完成分三次迭代來實現(xiàn):即基本原理與方法的傳授、教師指導(dǎo)下的學(xué)生實踐和學(xué)生自主學(xué)習(xí)、獨立完成案例項目。每一次進化又可細(xì)分為初始、精化、構(gòu)建和交付四個子階段③同②。,整個教學(xué)過程的組織見圖1。
圖1 教學(xué)過程
第一次進化:案例教學(xué)。
本課程教學(xué)的第一階段主要結(jié)合具體案例進行軟件工程基本理論和方法的講解。本輪教學(xué)初始階段首先介紹軟件工程的基本概念、軟件生命周期模型及軟件開發(fā)過程等,在此基礎(chǔ)上探討軟件需求分析,引入用例技術(shù),在所使用的案例中挑選一到兩個用例進行詳細(xì)描述,以此描述作為后繼教學(xué)的需求分析文檔。
本輪教學(xué)的精化階段的主要內(nèi)容是軟件的分析和設(shè)計技術(shù),包括概要設(shè)計、詳細(xì)設(shè)計、UML建模技術(shù)等。本輪教學(xué)的難點是面向?qū)ο蟮姆治龊驮O(shè)計方法,這部分內(nèi)容比較抽象,因此教學(xué)時要緊密結(jié)合教學(xué)案例,向?qū)W生展示從用例文檔得到軟件模型的詳細(xì)過程。
構(gòu)建階段主要講解軟件的實現(xiàn)技術(shù),包括軟件編碼、單元測試、數(shù)據(jù)庫設(shè)計等。
交付階段主要講解軟件的綜合測試技術(shù),包括測試計劃的制定、測試環(huán)境的搭建、測試的策略選擇、測試用例的設(shè)計、測試工具的選擇和使用、測試報告的書寫等。
通過本輪教學(xué),學(xué)生基本掌握了軟件工程的基本理論,具備了初步的應(yīng)用軟件工程原理解決實際問題的能力,為下一輪教學(xué)打下了基礎(chǔ)。
第二次進化:教師指導(dǎo)學(xué)生對案例項目進行第二輪迭代開發(fā)。
本輪教學(xué)的目的是加深學(xué)生對軟件工程原理的理解和應(yīng)用能力。教學(xué)的主體由教師轉(zhuǎn)移到學(xué)生,所采用的教學(xué)方式是教師指導(dǎo)學(xué)生完成本次迭代開發(fā)任務(wù)。將學(xué)生分為若干個小組,每個小組成員為四到五人。教學(xué)過程仍然分為初始、精化、構(gòu)建和交付,教師規(guī)定每個階段的完成時間點,各階段完成時,每個小組提交本階段的成果,由教師統(tǒng)一講評。
本階段教學(xué)中,教師結(jié)合項目進展,補充軟件項目管理、配置管理、設(shè)計模式等知識,以擴展學(xué)生視野,加深學(xué)生對現(xiàn)代軟件技術(shù)的理解。
第三次進化:學(xué)生獨立完成案例項目的第三輪迭代開發(fā)。
通過前二輪的教學(xué),學(xué)生在掌握了軟件工程基本原理的基礎(chǔ)上,具備了應(yīng)用軟件工程原理和方法進行軟件開發(fā)的能力。因此,本輪教學(xué)的目標(biāo)是實現(xiàn)對案例項目的第三次迭代開發(fā),成果為提交一個完整的具有實用價值的項目。本輪教學(xué)任務(wù)由各小
組自行完成,教師主要起到督促檢查的作用。將學(xué)生最后提交的系統(tǒng)質(zhì)量作為評定學(xué)生本門期終成績的主要依據(jù)。
我們在實施該教學(xué)方法時,選取圖書管理系統(tǒng)作為開發(fā)案例。第一輪教學(xué)所用時間為9周左右,在初始階段引導(dǎo)學(xué)生識別出該系統(tǒng)的主要用例,見表1。
表1 圖書管理系統(tǒng)用例表
選擇核心用例借閱圖書和歸還圖書作為本輪教學(xué)要實現(xiàn)的示例,進行詳細(xì)描述,為學(xué)生演示用例的編寫方法。從這兩個用例文本出發(fā),講解如何進行系統(tǒng)分析和設(shè)計。UML已成為面向?qū)ο笤O(shè)計的有效工具,因此本部分教學(xué)中要加入UML的內(nèi)容。結(jié)合兩個用例,詳細(xì)講解如何創(chuàng)建系統(tǒng)的領(lǐng)域模型。得出領(lǐng)域模型后,如何創(chuàng)建系統(tǒng)的動態(tài)模型,進而得到系統(tǒng)的類模型。得出類模型后,使用編程語言進行系統(tǒng)實現(xiàn),創(chuàng)建數(shù)據(jù)庫,最后進行部署和測試。此輪教學(xué)中結(jié)合借閱圖書和歸還圖書兩個功能的從分析到實現(xiàn)的全過程,進行原理和方法的講解,教學(xué)路線如圖2。
圖2 教學(xué)路線圖
第二輪教學(xué)以學(xué)生練習(xí)為主,教師引導(dǎo)為輔,所需時間為4周。教學(xué)過程可概括為“所用知識提示+學(xué)生練習(xí)+集中點評”。 在圖書管理系統(tǒng)中,第一輪迭代完成了系統(tǒng)的基本功能。本次迭代中,學(xué)生要從余下的用例中選擇若干個用例進行詳細(xì)定義、設(shè)計和實現(xiàn),以對系統(tǒng)進行擴展。本次迭代的每個子階段開始前,教師對本階段所要用到的知識進行簡要的回顧,布置本子階段要完成的目標(biāo);然后各小組在規(guī)定的時間內(nèi)完成本階段的開發(fā)任務(wù);各小組提交工作成果后,由教師進行集中點評,以使各小組之間能互相比較,共同提高。
第三輪教學(xué)需時3周左右,各小組將作為獨立的開發(fā)團隊進行開發(fā)工作。他們需要完成圖書管理系統(tǒng)主學(xué)習(xí)的過程,培養(yǎng)動手能力和解決實際問題的能力。
基于案例的進化式教學(xué)方法將抽象的軟件工程原理與具體案例相結(jié)合,降低了學(xué)習(xí)難度,提高了學(xué)生的學(xué)習(xí)興趣。借鑒RUP的迭代式軟件開發(fā)思想,將具有實際應(yīng)用價值的復(fù)雜的軟件案例引入教學(xué)中,克服了軟件工程教學(xué)中示例與實際項目脫節(jié),學(xué)生無法體驗到實際的軟件開發(fā)過程的缺憾。通過“教中學(xué)”、“練中學(xué)”、“做中學(xué)”三階段進化式學(xué)習(xí),使學(xué)生學(xué)習(xí)的知識不停留在紙面上,而具備應(yīng)用這些知識解決實際問題的能力。
A project-driven evolutionary teaching method for software engineering
ZHU Zhong-xu
In this article a project-driven evolutionary teaching method is introduced into the teaching activity of software engineering.The method originates from the thought of iteration and evolution.In this method an actual software project runs through the whole teaching activity which is divided into three periods by the three iterations of the software project developing and adopted leading,guiding and autonomous means respectively.So students can learn the software engineering principles and methods in an evolutionary style which runs from cognition to comprehension and finally to application.
iteration;evolution;project-driven teaching;software engineering teaching
G642
A
1009-9530(2014)02-0136-03
2013-11-10
朱忠旭(1974-),男,安徽工貿(mào)職業(yè)技術(shù)學(xué)院計算機技術(shù)系教師,碩士,研究方向為軟件工程。