徐利軍等
摘 要:軟件工程課程是計算機專業(yè)重要的專業(yè)基礎(chǔ)課,由于其實踐性較強,歷來是教學(xué)的難點。我們基于案例化教學(xué)模式,設(shè)計并實施了一套綜合理論知識、應(yīng)用技術(shù)和項目實踐的教學(xué)模式。實踐表明,這種新的教學(xué)模式有利于培養(yǎng)學(xué)生的團隊合作精神與運用軟件工程技術(shù)和方法解決實際問題的能力。
關(guān)鍵詞:軟件工程 實例化教學(xué) 項目實踐
中圖分類號:G462 文獻標識碼:A 文章編號:1674-2117(2014)16-00-02
1 前言
軟件工程是一門研究用工程化方法構(gòu)建和維護有效的、實用的和高質(zhì)量的軟件的學(xué)科。它涉及程序設(shè)計語言、數(shù)據(jù)庫、軟件開發(fā)工具、系統(tǒng)平臺、設(shè)計模式以及管理、標準、個人技能、團隊協(xié)作和專業(yè)實踐等多方面的知識和技能。它是一門理論性和實踐性并重的重要學(xué)科。
軟件工程課程是計算機專業(yè)重要的專業(yè)基礎(chǔ)課。通過軟件工程課程的學(xué)習(xí),學(xué)生能夠了解和掌握軟件工程的理論、技術(shù)和方法,具備作為軟件工程師所需的專業(yè)能力。由于軟件工程的課程特點,傳統(tǒng)的教師課堂授課為主、學(xué)生被動聽講為輔的教學(xué)模式在實踐環(huán)節(jié)上存在很大不足,軟件工程的理論和方法是從眾多軟件開發(fā)實踐中總結(jié)出來的。但是對于缺乏軟件開發(fā)實際經(jīng)驗的本科生來說,單純地講授理論知識往往使學(xué)生感到枯燥無味且難以理解,這嚴重影響了課程的教育質(zhì)量和教學(xué)效果。近年來,部分學(xué)校采用了案例化教學(xué)的方式改革軟件工程課程教學(xué),在案例化教學(xué)中收集和總結(jié)了若干典型的軟件開發(fā)案例,將這些案例貫穿于理論知識的講解中;同時引入“做中學(xué)”教學(xué)模式,讓學(xué)生在實際的項目開發(fā)中進一步理解理論知識,取得了很好的教學(xué)效果。[1-4]
我們在軟件工程的授課過程中,也引入了案例化教學(xué)模式??傮w來講,學(xué)生的反應(yīng)是積極的,不過也發(fā)現(xiàn)了一些問題。
(1)任課教師本身缺乏使用軟件工程方法開發(fā)一個完整系統(tǒng)的經(jīng)驗,僅限于照本宣科地介紹基本原理和實際案例,不能將當前實際案例和軟件工程方法有機地結(jié)合在一起,與實際的軟件工程實踐有明顯的差距。
(2)大學(xué)階段的課程實踐基本以個人編程完成為主,軟件工程方法起到的作用有限。即使面對需要團隊協(xié)作的作業(yè),也因為規(guī)模小、從頭開發(fā)和無需維護的特點,使得學(xué)生感覺到使用軟件工程方法作用不大,除了增加工作量外,沒有明顯的益處,無法激發(fā)他們進一步學(xué)習(xí)的興趣。
(3)現(xiàn)有的軟件實驗環(huán)境偏重于提供編程工具的支持,缺少一個完整的軟件工程支持環(huán)境,缺少適合教學(xué)使用的實驗環(huán)境和資料,學(xué)生得不到真正的鍛煉。
2 教學(xué)改革
針對現(xiàn)存的問題,結(jié)合ACM和IEEE聯(lián)合發(fā)布的CCSE2005的相關(guān)內(nèi)容[5],我們進一步改革課程體系框架和教學(xué)內(nèi)容,本文將著重介紹我們在軟件工程課程教學(xué)中的經(jīng)驗和成果。
IEEE發(fā)布的軟件工程知識體系包括10個知識領(lǐng)域:軟件需求、軟件設(shè)計、軟件構(gòu)造、軟件測試、軟件維護、軟件配置管理、軟件工程工具和方法、軟件工程過程和軟件質(zhì)量。參考這10個領(lǐng)域知識,根據(jù)教學(xué)目標,結(jié)合理論知識、軟件工具和工程實踐等方面組織整個課程內(nèi)容,在理論、應(yīng)用、實踐三個層次上建立了軟件工程的課程體系。
理論部分以當前流行的統(tǒng)一開發(fā)過程RUP和UML語言為核心,覆蓋IEEE發(fā)布的軟件工程知識體系。包括軟件需求、軟件設(shè)計、軟件實現(xiàn)、軟件測試、軟件演化、軟件質(zhì)量和軟件配置管理等內(nèi)容。
應(yīng)用部分結(jié)合實際案例,覆蓋IEEE的系列軟件工程標準,學(xué)習(xí)RationalRose、ClearCase、ClearQuest、JUnit、MicrosoftProject等常見軟件工程工具和環(huán)境。
實踐部分要求學(xué)生以團隊的方式協(xié)作開發(fā)具有一定規(guī)模的軟件系統(tǒng),并且在實踐過程中能夠熟練使用軟件工程工具。實踐部分著重培養(yǎng)學(xué)生應(yīng)用軟件工程的思想和現(xiàn)代技術(shù)解決軟件開發(fā)問題的能力。
2.1 理論知識
理論部分的教學(xué)仍采用教師授課為主的模式,向?qū)W生講述軟件工程的基本理論,內(nèi)容力求少而精,目的是在較短時間內(nèi)讓學(xué)生了解現(xiàn)階段最廣泛使用的軟件工程技術(shù)的理論基礎(chǔ),為下一步應(yīng)用部分的學(xué)習(xí)奠定基礎(chǔ)。在具體的授課過程中,為避免單純理論學(xué)習(xí)的枯燥性,授課內(nèi)容圍繞典型的軟件開發(fā)案例展開。學(xué)生學(xué)習(xí)的注意力和興趣是影響教學(xué)質(zhì)量的重要因素。我們使用的案例是從國內(nèi)著名的軟件開發(fā)公司得到的真實案例,學(xué)生可以完整地看到項目的全景,這樣既幫助學(xué)生認識到學(xué)習(xí)課程的必要性,又調(diào)動起學(xué)生的學(xué)習(xí)興趣。
2.2 應(yīng)用技術(shù)
軟件工程與其他計算機課程不同,學(xué)生需要面對的不只是單一的軟件工具,而是一組軟件工具組成的軟件支持環(huán)境。為了增強軟件工程課的真實性,我們選用了一組業(yè)內(nèi)流行的軟件工程工具,營造一個適合軟件工程課程項目實踐的軟件工程環(huán)境。使用RationalRose完成需求分析與系統(tǒng)分析和設(shè)計,使用ClearCase完成源代碼管理,使用ClearQuest完成缺陷管理,使用MicrosoftProject完成項目資源調(diào)度等??紤]到相關(guān)軟件工具的復(fù)雜性,為避免學(xué)生陷入單純學(xué)習(xí)軟件功能的誤區(qū),我們堅持“用中學(xué)”的方針,不要求學(xué)生面面俱到掌握軟件功能,而是從實用角度出發(fā),以完成項目為目的,掌握軟件的常用功能。我們會首先演示如何使用相關(guān)軟件完成典型案例,然后要求學(xué)生模仿示例,自行創(chuàng)作設(shè)計。
2.3 項目實踐
大學(xué)階段,大部分計算機課程實踐通過學(xué)生的獨立編程即可完成,軟件工程課程實踐則不同,軟件工程方法和技術(shù)的作用必須在完成項目的過程中通過團隊合作才能體現(xiàn)出來。
我們剛剛開始教這門課的時候,為了便于管理,選擇的項目偏小,一般適合3~5人完成。不過通過幾學(xué)期的實踐,發(fā)現(xiàn)效果不佳。因為規(guī)模不大,通常只會有1~2人來承擔(dān)主要開發(fā)工作,其他學(xué)生通常只起到輔助作用。在開發(fā)過程中,由于核心開發(fā)人員少,口頭溝通遠要比書面溝通簡單有效,沒有認真準備項目文檔的動力;而且項目是從頭做起,不需要利用以前文檔來了解項目情況,無法體會到項目文檔的重要性。在此種情形下,學(xué)生感覺到引入軟件工程只是額外增加了工作負擔(dān),并沒有明顯的益處。endprint
為了更好地幫助學(xué)生認識到這門課的重要性,我們在實踐階段做了若干改進。
(1)有意識地擴大了項目的規(guī)模,開發(fā)團隊的人數(shù)也相應(yīng)增加,通常開發(fā)團隊人數(shù)在10人左右。人數(shù)的增多使得單純的口頭交流很難保證項目的順利進行,從而促使學(xué)生撰寫項目文檔。
(2)分組時,根據(jù)學(xué)生的能力和水平,明確學(xué)習(xí)任務(wù),進行合理有效的分工。在一個項目組內(nèi),應(yīng)該有項目經(jīng)理、系統(tǒng)分析師、軟件工程師、配置管理員、測試工程師等角色。同一名學(xué)生在不同的開發(fā)階段可能會承擔(dān)不同的角色。
(3)項目開發(fā)也分為兩個階段,第一階段完成后,我們會再提出一份更新的需求,要求在第一階段的成果上繼續(xù)開發(fā)。項目組的成員也不是一成不變的,第二階段時每個項目組至少更換50%的成員。
在項目開發(fā)過程中,我們會監(jiān)控項目的開發(fā)過程,參與項目階段成果的評審工作。項目開發(fā)過程盡可能模擬真實軟件企業(yè)的開發(fā)過程,最終使學(xué)生完成需求分析、設(shè)計、代碼編寫、測試、部署全過程,培養(yǎng)學(xué)生的合作意識、責(zé)任感和集體榮譽感。學(xué)生在開發(fā)過程中遇到問題,我們也不會直接給出答案,會建議他們自行討論來解決,提高他們的溝通交際能力,培養(yǎng)其團隊合作精神。
在教學(xué)過程中,理論部分、應(yīng)用部分和實踐部分并不是相互獨立,而是有機地結(jié)合在一起。我們在該課程教學(xué)初期,首先給學(xué)生若干項目課題進行選擇,題目選定后,以自主結(jié)合的方式完成分組。這樣做可以有效地增強學(xué)生學(xué)習(xí)時的目的性。在重要章節(jié)的教學(xué)過程中,遵循先理論知識、再應(yīng)用技術(shù)、最后實踐部分的次序進行。完成某章節(jié)的學(xué)習(xí)后,就應(yīng)該在規(guī)定時間內(nèi)提交項目相應(yīng)階段的工作成果。例如,需求分析章節(jié)的理論知識學(xué)習(xí)安排在第2周、應(yīng)用技術(shù)部分安排在第3周、需求分析說明書要求在第5周提交;系統(tǒng)分析的理論知識學(xué)習(xí)安排在第4周、應(yīng)用技術(shù)部分安排在第5周、系統(tǒng)分析報告要求在第7周提交。我們會及時對每一部分的工作成果進行評講,指出缺陷和不足,保障項目開發(fā)的順利進行。在期末考試結(jié)束之前,結(jié)束第一階段的開發(fā)工作。隨后,我們會給出項目的新增需求,并調(diào)整項目成員,開始第二階段的開發(fā)工作。由于第二階段是在所有課程考試結(jié)束之后,學(xué)生有條件在固定地點集中上機,因此第二階段的工作將盡可能模仿軟件公司的開發(fā)模式。首先,項目經(jīng)理必須和組員共同討論出一份可行的項目開發(fā)計劃。我們將根據(jù)該計劃監(jiān)控項目進展過程,并在重要節(jié)點抽查該項目的進展情況。項目計劃的重大變化,必須及時更新項目開發(fā)計劃。其次,在項目進展過程中,每個開發(fā)階段的工作成果都必須經(jīng)過評審。不評審或者評審不合格,不可以開始下一階段的工作。最后,每個項目成員必須每天提交工作進展報告,內(nèi)部會議也要有會議記錄。所有這些項目管理相關(guān)文檔和項目本身的文檔都需要在項目結(jié)束時一并提交。評定成績時結(jié)果和過程并重,項目管理相關(guān)文檔是過程的重要體現(xiàn)。
3 考核方法和教學(xué)效果分析
為突出實踐環(huán)節(jié)的重要性,我們將項目實踐部分的考核比例增加至總成績的50%,即成績標準為項目實踐成績(50%)+筆試成績(30%)+平時成績(20%)。其中第一階段的項目實踐成績占20%,第二階段占30%。在對學(xué)生的實踐環(huán)節(jié)考核中,我們更側(cè)重于對學(xué)生的實踐操作能力、文檔編寫能力、團隊合作和溝通能力的考核。為避免渾水摸魚,在評定成績時,根據(jù)貢獻不同,組中的不同成員會有不同的權(quán)重,每個學(xué)生的最終成績是團隊成績和權(quán)重的乘積。采用新的考核方法后,極大地調(diào)動了學(xué)生參與項目實踐的熱情,取得了良好的學(xué)習(xí)效果。在隨后的畢業(yè)設(shè)計和程序設(shè)計比賽中學(xué)生都體現(xiàn)出較強的團隊開發(fā)能力。
4 結(jié)語
軟件工程是一門理論和實踐并重的課程,只有加強實踐環(huán)節(jié)的訓(xùn)練,理論知識才能得到有效鞏固。我們在教學(xué)過程中,始終把項目實踐放在突出的地位,通過增大項目規(guī)模和引入兩階段項目開發(fā),讓學(xué)生主動認識到軟件工程課程的重要作用。實踐證明,現(xiàn)階段軟件工程的教學(xué)改革工作,有效地提高了學(xué)生的學(xué)習(xí)興趣,增強了學(xué)生使用軟件工程方法和技術(shù)解決實際問題的能力,培養(yǎng)了學(xué)生團隊合作精神。下一步我們準備通過“校企合作”,增強項目實踐的真實性,使軟件工程的項目實踐更加合理、完善。
(上海海洋大學(xué)信息學(xué)院,上海201306)
參考文獻:
[1]張劍波,方芳,袁國斌.軟件工程專業(yè)實踐教學(xué)體系改革[J].計算機教育,2013(12):37-41.
[2]王衛(wèi)紅,楊良懷,江領(lǐng).軟件工程優(yōu)勢專業(yè)的建設(shè)與發(fā)展[J].計算機教育,2013(10):1-4,9.
[3]湯淼.軟件工程專業(yè)“項目驅(qū)動”實驗教學(xué)模式研究[J].實驗技術(shù)與管理,2012(4):267-271.
[4]吳建斌,陳中育,葉榮華.軟件工程類課程教學(xué)模式改革探索[J].中國信息技術(shù)教育,2013(5):119-121.
[5]IEEE-CS/ACMJointTaskForceonComputingCurricula,SoftwareEngineering2004Volume[R].2004.endprint