
摘要:軟件工程實踐作為軟件工程專業本科生企業實習前的綜合實踐課程在培養體系中占有重要地位,其教學過程不但使學生在編碼、文檔撰寫和團隊協作等方面得到了綜合訓練,而且也為大四學生進入企業實習提供了很好的崗前培訓。為在校內營造更貼近實際的軟件開發氛圍,需要從實踐內容、組織方式、實施過程、教師作用以及考核標準等方面進行精心設計。本文論述了北航軟件學院本科生軟件工程實踐課程的建設思路,介紹了實施情況,并對實施中的優缺點進行了總結。
關鍵詞:軟件工程實踐;實踐內容;領域知識
2004年8月,軟件工程知識體(SWEBOK)、軟件工程教育知識體(SEEK)兩個文件最終版的發布,標志著軟件工程學科在世界范圍內的正式確立,以及在本科教育層次上的迅速發展。軟件工程、計算機科學、信息系統、信息技術并列成為計算學科下的獨立學科。其實從2002年7月起,我國首批35所示范性軟件學院就開始正式招收軟件工程專業本科學生,但我國軟件工程學科的創立則在2004年才陸續啟動。北航軟件學院從2002年建院起就一直在探索軟件工程專業本科層次人才的培養體系,目前基本框架明確,內容建設正在逐步完善。在北航軟件學院軟件工程本科的4年學制中,以學年為單位將專業培養重點劃分為4個層次:大一為公共基礎、大二為計算機軟件基礎、大三為軟件工程專業基礎,大四為軟件工程實習。在大三下學期課程結束后,所有軟件工程專業基礎課程,如系統分析與設計、軟件測試、軟件工程過程和軟件項目管理等都已修完。為了使學生能更好地適應接下來一年的企業實習工作,在大三的暑期集中安排了軟件工程實踐課程,對學生進行規范化軟件開發與管理訓練。
由于軟件開發
本身受諸多因素影響,為了能營造一個盡可能接近企業實際的軟件開發環境,需要從實踐內容、學生組織方式、資源配備等方面精心安排。為此,學院專門立項并成立了由 3 位軟件系統應用開發經驗豐富的中、青年教師組成的課題組,負責該課程的建設工作。
1教學目標
軟件工程實踐作為軟件工程專業本科的必修課程,其目標是[1]:
?培養學生的文檔撰寫能力和團隊合作精神。
?對學生進行規范化軟件開發和管理的訓練。
軟件工程實踐的過程是培養學生綜合運用所學知識,解決實際問題的過程,是當前貫徹規范化軟件開發、管理的有效的途徑。
2實踐內容
為實現上述目標,本課程的教學內容將緊緊圍繞軟件開發中涉及的方法、過程、管理及相應支持工具展開,因此實踐的載體——實踐題目是關鍵。題目過于簡單,無法體現團隊開發優勢,過于難又會因超出學生現有能力和時間限制而無法完成,挫敗學生的積極性。在實踐題目選擇中需要綜合考慮如下方面:
1) 業務易理解。
軟件工程的應用與實際應用領域相關,實踐題目的選擇要能體現某一應用領域的典型業務流程。所涉及的領域知識既要專業,又要讓學生稍花時間就能快速理解其業務。
2) 規模適中。
實踐題目的規模要適中,在實踐中,既要讓學生認識到業務理解和系統實現上都有難度,又不至于難以完成,同時還要讓學生深刻體會文檔撰寫能力、團隊協作能力、一定的技術開發能力在整個項目開發過程中的作用。
3) 技術難度適中。
考慮到本科學生其興趣點主要是編碼,故完成實踐題目所涉及的技術不宜過于簡單,挫傷其編碼積極性;又不易過難,要使其所需技術或工具能在借助現有資源(如網絡、同學和任課教師)的情況下在短期內掌握。這樣通過實踐,不但體驗了規范化軟件開發流程,還拓展了技術能力。
4) 題目數量適中。
在指導教師能承受的工作量范圍內,為充分調動學生的積極性,實踐題目、數量要適中,使學生能根據其團隊興趣有所選擇。
5) 教師領域知識豐富。
在整個實踐中教師的作用不僅僅是提供指導,還扮演客戶/用戶角色,因此授課教師要對實踐題目所涉及的業務知識很熟悉,能夠解答實踐題目所涉及的應用領域的相關知識,促使學生能在短期內獲取某一領域的業務知識,理解問題背景,為成功解決問題創造有利條件。理解業務背景的過程也是有目的地培養學生解決實際問題的過程。
6) 源于實際。
為了增強實踐的真實性,要選擇源于實際的項目,并以教師整理過的“原始需求”作為原始的用戶輸入。選擇實際項目既有實際意義,又能激發學生們的主動參與意識。如在做需求分析時,面對用戶“含糊不清”的原始需求,同學們需要做很多背景知識的鋪墊才能做到“準確理解”。這些尷尬問題,在軟件開發中經常發生,作為軟件從業人員必須面對。也正因為如此,需求分析在軟件開發中的地位越來越重要。
實踐題目可以由教師自己收集,亦可以向學生征集。匯總的實踐題目,要根據上述要點進行遴選,適當剪裁,使其更適合于課程要求。在實踐前,要求學生必須從確定的實踐題目中選擇其一作為實踐項目。這樣做主要有兩點好處,一是在實際應用中,大多數情況下,承擔任務的團隊選擇余地較小,這比較符合實際;二是教師團隊需要對授課過程中可能出現的各種問題提前做好準備,以便掌控整個實踐過程。
3組織形式
實際的軟件開發過程大多是集體行為,因此以團隊形式組織實踐過程是最佳選擇。在教師給定實踐項目集合中,要求學生組成團隊,選擇其中一個實踐題目,在規定的時間內模擬實際項目的開發過程,實施實踐活動。
每個學生團隊由5~6人(不得低于5人)組成,以確保在實踐中能體會到溝通的重要性。團隊形成過程可以采取學生自由組合提出申請,教師根據實際情況進行微調的方式進行,這樣可以在一定程度上規避團隊成員溝通風險。組內人員建議角色:需求1人、設計1人、編碼1~2人、測試1人、項目經理1人。
4實施策略
在軟件企業中,大多數人都是遵循企業現有的軟件過程實施軟件開發。為了讓學生通過本次實踐能很好地體會軟件開發過程,即從用戶的原始構想到最終可運行系統的演進過程,同時考慮到多數大三學生都沒有實戰經驗,在實踐開始前,教師組要精心策劃,依據實際項目的特點、學生團隊的整體情況及時間等綜合因素,選定軟件過程模型,確定必須執行的活動和任務,形成“軟件工程實踐課程實施計劃”。為提高可實施性,計劃應該詳盡。要根據實踐的持續時間,在計劃中詳細列出各團隊每周或每天應完成的工作及作為工作成果的提交物。階段提交物也是重要的過程考核點,要合理、可行,使各團隊稍作努力即可完成。每個團隊要依據此計劃來精細化團隊成員的具體任務。要花一點時間向學生推銷該計劃,給學生以信心:只要按照計劃每一步都落實到位,實踐項目的成功率就會提升。
5教師作用
軟件工程實踐應該以學生實踐為主,教師講評、答疑為輔的方式實施教學[1]。在實踐過程中,沒有學生的積極主動參與,無法達到目的;教師的指導作用不容忽視,學生因軟件開發技能、過程理解與項目管理等方面的經驗不足,需要教師及時引導而少走彎路。為了幫助學生更好地工作,在實踐中,教師作用主要體現在如下方面:
1) 適時提供講座。
在實施計劃中應明確給出教師什么時間提供相應的講座,如在團隊組建前,教師先做“項目啟動”需要考慮的問題的講座,在需求分析期間,教師做需求分析與文檔撰寫方面的講座等。
2) 提供文檔撰寫模板[2]。
軟件文檔,如需求分析規格說明書等是用戶也是軟件項目管理者關注的重要提交物,項目成員必須認真對待。在實踐開始前,教師組對每一提交物都應提前給出相應的撰寫模板,要求學生按規定的模板撰寫文檔。文檔撰寫過程也是對學生進行規范化訓練的一個方面。
3) 及時評審文檔并反饋。
作為階段提交物的文檔是項目開發過程中的重要成果,教師應及時對各團隊提交的各類文檔逐一進行評審,以了解項目的進展狀況。同時,教師對文檔的及時反饋,能很好地解決學生實踐中的遇到的困惑,同時為了激勵學生的工作熱情也要對學生取得的階段性成果及時給予肯定。
4) 隨時隨地答疑。
加強教師在實踐過程中的指導力度是本課程確定成功的關鍵。為此,要求在實踐過程中,教師的時間投入要足夠,使學生有任何問題都可隨時與教師交流,尋求幫助。
5) 監控各團隊項目進展。
項目管理是軟件工程實踐的重要內容,也是軟件開發過程中的核心活動,為了模擬實際環境,教師要通過工作日志隨時了解各團隊進展狀況,并根據需要適時干預,保證各組基本按計劃進行。
總之,在實踐過程中,教師承擔起了“客戶”、“外援”和“高層項目管理”的職責。實踐期間要求小組每天提交工作日志,總結一天的項目實施情況,并明確下一天的實施計劃。
6考核方式
體驗軟件開發過程、提高文檔撰寫、團隊協作能力是本課程的授課目標,而軟件開發的最終目的是要向用戶提交可運行的軟件。考核方式是實踐參與者的指揮棒,它充分體現了實踐的最終意圖。因此考核方式既要注重結果又要注重過程,既要考核團隊協作又要注重個體能動性,同時又要盡量與社會接軌。為此本課程的考核以團隊為單位從兩個方面進行課程考核:
1) 過程實施成績部分。
該部分主要考核各團隊是否按時提交階段性成果以及階段性成果的撰寫質量。
2) 最后成果演示部分。
該部分主要考核各團隊最后的交付軟件或原型系統及其相關文檔的最終稿。
將過程實施和最后成果演示兩部分成績按一定比例形成團隊成績。
學生個人的最終成績則以個人所在團隊成績為基礎,根據組員個人對團隊貢獻業績系數進行調整,得到個人成績。個人對團隊的業績系數由每組組長(項目經理)根據組員工作的完成情況給出每個人的業績系數,要求組員成績不得高于小組成績。
7實踐支持平臺
在整個實踐過程中,教師與學生之間需要頻繁交流:教師需要定期發布通知、上傳文檔模板、監控交付物提交時間、解答學生問題;學生需要根據計劃按時提交階段成果,為尋求老師或其他學生的幫助及時提出實踐中遇到的問題。為了教師與學生順暢交流,實時監控整個實踐過程,實踐支持平臺必不可少。
8課程實施情況
2010年7月1日至7月15日,依照上述思想我們對大三143名本科生組成的24個團隊講授了軟件工程實踐課程。在實踐中我們選定了專利應用領域的兩個實際的項目:這兩個項目的共同特點是需求中流程的概念比較強,涉及業務知識不復雜,實現中主要涉及的技術有Web編程、數據庫、郵件收發、界面處理,團隊成員技術熟練者可輕松在15天內完成,技術儲備不足的團隊,時間有些緊張。在實踐開始前,我們向學生公布了詳盡到天的具體日程安排,明確給出了教師、團隊的具體工作內容和階段提交物。具體提交物集合是軟件文檔(開發類、過程管理類和用戶類)+可演示的原型或實際系統(最終文檔和代碼)。依據教師給定的日程安排,各團隊分別細化其具體實施計劃,明確團隊成員每天的任務安排。要求團隊每天提交工作日志,總結當天項目實施情況,并給出下一天的實施計劃。教師通過各組的工作日志、階段提交
物評審、不定期抽查等方式了解各團隊項目進展情況,逐項對各考核點進行打分,形成實踐過程部分的成績。在實踐結束后,采用各小組答辯和演示等方式逐一考察各組的實踐成果——所開發的軟件。從最終提交的軟件成果看,有5個組(占20.8%)提交的軟件系統從功能到界面都相對比較完整,接近實際用戶要求,可以做進一步完善成為實際的軟件系統;有14個組(占58.4%)的軟件系統已實現了用戶的基本功能;有4個組(占16.7%)的軟件系統尚處于界面原型階段;還有1個組(占4.1%)因團隊協作問題,導致軟件系統尚未成型。無論從學生提交的階段性文檔還是最后的成果演示結果,都達到了我們的預期目標。
9調查問卷
為了能準確了解學生的真實感受,我們做了調查問卷,從教師的教學態度、教學內容(包括實踐題目的選取和講評內容的針對性)、方式與方法(包括實踐能力、文檔撰寫能力和團隊協作精神的培養)、實踐效果(包括學生的主動參與度和學生對實踐效果的認可度)4個方面收集了學生們的反饋。表1給出了調查問卷的統計結果。
從表1可以看出,同學們對本課程的整體滿意度還是很高的。其中,對教師的教學態度和在實踐中的作用給與了充分肯定,以教學為輔、實踐為主的教學方式對學生各方面能力的培養是非常有效的。
從學生反饋信息看,在實踐中大家遇到的主要問題中,技術方面占27.7%、文檔撰寫方面占22.0%、團隊協作方面占14.9%和時間緊張問題占14.2%。
在“你認為本課程在教學內容、組織形式、實踐安排等方面有哪些值得發揚之處”的調查中,同學們從14個方面給出了158條反饋意見,其中,認為教學內容、授課方式、組織形式、考核方式、課程計劃安排及支持平臺好的占73.4%,認為教學效果好的26.6%。
在“你認為本課程哪些方面需要改進”的調查中,同學們主要提出了如下改進建議:1)拓寬實踐題目覆蓋的應用領域、增加實踐題目數量。2)延長實踐持續時間。3)針對學生在實踐中遇到的技術問題,增加有針對性的技術講座。4)適當增加文檔撰寫案例等。
10結語
軟件工程實踐課程,是對學生三年來所學的軟件工程理論的綜合訓練,這一綜合訓練對即將進入企業實習的本科生非常重要。實踐過程越接近目前軟件開發企業現狀,越能縮短學生適應社會的時間。但這無疑也對教師本身提出了更高的要求,也對軟件工程實踐課程的建設提出了更高的要求。為了使該課程能持續地提高教學效果,尚需要在教學內容與教學案例建設、實施過程改進等方面繼續投入更多的努力。
參考文獻:
[1]