佟延秋

摘要:即將推出的軟件工程知識體系SWEBOK V3版,對軟件開發人員的知識體系提出了更加具體的要求。文章在多年教學實踐的基礎上,提出一個基于真實項目的軟件工程課程實習模式,通過基于真實項目的軟件工程實習,極大地提高學生的編碼能力、溝通能力以及對項目的宏觀認知能力一
關鍵詞:PBL;軟件工程;課程實習
0 引言
軟件工程課程實習通常是以完成軟件項目為考核指標。在項目開發過程中,學生必須組成團隊開發出一個完整的軟件系統。即將推出的軟件工程知識體系SWEBOK V3,在SWEBOK 2004的基礎上增加了一個新的部分,即“軟件工程專業實踐”,主要包括專業性(professionalism)、團體動力學(group dynamics)和交流技巧(communications skills)。從中可以看出,滿足SWEBOK 2004的人才是軟件行業的合格人才而小是卓越人才,只有滿足了SWEBOK V3才可稱為卓越人才,這與教育部推行的“卓越工程師教育培養計劃”不謀而合。因此,有必要參照SWEBOK V3的要求,對軟件工程課程實習指導方案進行調整。
1 模式構建依據
美國著名的比較政治學者比爾和哈德格雷夫對模式的定義是:模式是再現現實的一種理論性的、簡化的形式。軟件工程課程實習模式就是在現代教育理論的指導下,為實現軟件行業人才培養目標而建立的一種合理的結構,它能夠對課程實習提供指導并總結經驗。
1.1 理論基礎
基于項目的學習(Proj ect-based learning,PBL)以建構主義學習理論、實用主義教育理論、探究學習理論為基礎,整個學習過程圍繞某個具體的項目進行,學習過程中充分選擇和利用最優化的學習資源,在探索創新中獲得較為完整和具體的知識,形成專門的技能。其中“項目”一詞是管理學科中的“項目”在教學領域中的延伸。學習活動圍繞某個具體項目進行是PBL的核心,要求學生在規定的時間內,通過完成一系列相互關聯的任務,獲得專業知識、提高學習能力。隨著任務的完成,產生特定的產品和服務。在項目的實施過程中,要求學習者充分發揮個人的主動性,在探索中獲得知識、發展能力。PBL的宗旨是把學生融人有意義的任務完成過程中,讓學生主動進行知識建構,把基于真實任務生成的知識和培養起來的能力作為最高的學業績效目標。
1.2 PBL的主要特征
(l)真實的項目情境能夠激發學習者的認知內驅力,使其能夠主動參與項目活動。
(2)學習者完成項目的過程,就是學習者體驗和感悟知識、概念、原理的過程,在此過程中學習者建構學科知識、發展技能、提升高級思維能力。
(3)在項目過程中遇到的實際問題往往是多學科融合的,學習者需要綜合運用多種學科知識解決問題,這在無形中促進了學生自學能力的發展。
(4)以“團隊”為基本組織形式,強調師生、生生以及該項目的所有人員相互合作,形成“學習共同體”。
(5)完成的項目可以是產品或服務,除了具有一定的社會效益,還能有經濟效益。
(6)在完成項目的過程中,學習者要用到多種信息資源和認知工具。
1.3 PBL在軟件工程課程實習中應用的可行性
高等院校本科軟件工程課程實習是一種從教授簡單編程到高級項目開發的多層次教育。軟件工程課程實習必須要與實踐緊密結合,完成從理論到實踐的跨越,這需要學生在課程結束后,以團隊為單位提交一個完整的軟件產品或服務,只要滿足以下目標,就可作為課程實習項目。
1)項目具體而真實。
本科階段的程序設計課程主要將程序設計語言的概念灌輸給學生。然而,單純的編程技術有時并不能解決開發大規模軟件系統中遇到的問題。這是因為學生在學習編程語言的過程中,接觸到的往往是與語言有關的邏輯場景,而缺乏具體真實的業務場景。因此,學生遇到真實的業務場景時往往會無從下手。這也是PBL倡導學習情境一定要真實而具體的原因。
2)項目綜合而開放。
基于項目的學習要求涉及的任務都是綜合開放的,其綜合性體現在BPL融理論知識與實踐技能于一個項目。軟件工程的純理論學習不足以解決軟件項目開發過程中遇到的問題。而學生更傾向于把注意力集中在技術難題上,并認為溝通沖突不會發生在他們的項目開發過程中。
3)學習結果最終表現為一個產品或服務。
軟件工程實習的要求與PBL的觀點是一致的。通過軟件工程課程實習,要求學生在項目開發的各個環節進行交流,在合作中發現問題、解決問題,最終完成系統的開發。
4)學習過程強調交流合作。
交流,不僅是文字或圖片的交換,而是學生借助各種手段有效地表達自己的思路、想法。然而,由于每個學生都有各自的工作習慣,且大部分的交流是不同步的,這就要求學生不僅思路清晰,而且善于表達。
5)學習結果具有一定的社會效益。
基于項目的學習涉及的產品或服務都是真實的,而且在其開發過程中涉及與其他營利性組織或者非營利性機構的溝通交流。因此,這些產品或服務具有一定的社會效益,甚至經濟效益。
6)學習過程運用多種認知工具和資源。
在完成項目的過程中,教師或第三方公司要為學生提供認知工具和資源,以便支持學習者。
2 基于項目的軟件工程課程實習模式構建
眾所周知,PBL中的L被稱為“學習”,但其中的P(項目),不是一般的項目,而是真實的項目。既然項目是真實的,那么就要考慮時間、成本和質量的問題。因此,基于項目的軟件工程課程實習模式的構建就必須要以軟件過程管理為依據。
2.1 模式構建依據
基于項目的軟件工程課程實習需要嚴格的軟件項目管理。實踐表明,使用專門的項目管理軟件作為項目管理的團隊比盲目進行項目管理的團隊效果更好。然而,與專門的項目管理工具相比,那些大型的商業項目管理軟件則顯得過于復雜。鑒于這個原因,筆者選擇SVN作為項目管理工具。SVN是一個開放源代碼的版本控制系統,相對于RCS、CVS,它采用了分支管理系統。目前互聯網上很多版本控制服務已從CVS轉移到SVN版本控制器,與此同時考慮到商業版權問題,其他開發工具也以開源軟件為主。
2.2 模式構建說明
基于PBL的軟件工程課程實習模式分為3個層次,如圖l所示:第一層為項目進度層,主要對項目的進度進行跟蹤;第二層為教師層,主要對教師在實習過程中對學生的指導、溝通以及對項目的貢獻進行展示;第三層為學生層,表明了學生在軟件工程課程實習過程中的工作流程。
2.2.1 項目選擇
項目的選擇將直接影響軟件工程課程實習效果。項目規模太小可能達不到課程實習的要求,規模太大不但會增加學生和教師的壓力,而且項目失敗的風險也會增大。因此,基于PBL的項目要由具有實際開發經驗的指導老師與校外公司項目經理共同討論、確定。
在項目選擇的同時,實習指導教師便可以組織學生分組。由于本研究所選擇的項目以MS系統(管理信息系統)為主,因此學生團隊的組成主要由前端開發和后臺編碼兩部分組成,而數據庫設計則由教師完成。
2.2.2 需求分析
在確定了實習的項目之后,為了避免后期階段可能存在的風險,還需要進行需求分析。需求的采集主要由教師和負責前端開發的學生共同完成。
在需求分析過程中,學生開始接受更貼近項日殲發的技術培訓,如需求文檔的撰寫、用例圖/流程圖等繪圖軟件的使用、熟悉開發技術平臺、編寫測試用例等。由于不同公司的項目管理平臺和開發技術以及軟件過程定義都有所差異,對學生來講是個巨大的挑戰。
2.2.3 項目確認
該階段,軟件工程課程實習的項目才算正式確定下來,這是衡量了項目規模、技術準備、風險評估等因素的結果,算是一個可完成的、對學生能力提高有幫助的項目。
建立項目時,教師必須建立項目描述并標明項目里程碑。項目描述會放在SVN的一個專門目錄中,項目組成員能夠訪問。
在需求分析過程中,學生實際上還未真正了解項目需求,他們需要深入討論、理解需求文檔。為支持團隊成員的討論,需要同步與異步通訊。當學生小組完成需求分析后,便可提交給教師。其實,項目的需求在此之前已由教師完成,這里主要比較學生的需求分析與教師的分析,以便從教師那里得到反饋。當然,也有可能發現教師所做的需求分析報告中的缺陷和不足。
2.2.4概要設計與詳細設計
這個過程雖然主要由教師完成,但學生也必須參與進來,這是學生開始使用軟件工程相關知識的最佳實踐場地。為了更好地交流,筆者使用StarUML作為建模工具,這是一款開源且非常小巧的UML圖繪制工具,可以快速生成UML圖。借助內部通信工具與SVN版本管理工具,結合小組成員間的協作,我們能夠實現不同個體共享彼此的知識,并最終形成一致性的結果‘9]。
這個階段學生接受的技術培訓會更加具體和有針對性,由于學生對將要使用的技術平臺有所了解,一些在開發中常用的技術及設計模式可以通過第三方公司提供的DEMO學習。
2.2.5 接口設計與編碼
當詳細設計和概要設計完成之后,項目便進入到編碼階段,此時留給學生的時間已不多,而且還有可能面臨的需求變更以及原型修改。學生可根據教師設計的接口以及業務邏輯的要求進行編碼。這里需要說明的是,學生是不能夠隨意設計接口的,接口必須由教師設計,即便學生提出新的接口,也必須由教師確認后方可實現。
2.2.6 第三方測試
無論是單元測試還是集成測試均由第三方公司完成。這樣做的原因有三:①學生學到的軟件測試課程課時較短;②第三方公司提供測試可以保證產品質量;③第三方公司提供軟件測試可以減少工作最。
2.2.7 項目實施完畢
當學生團隊將軟件和所需文檔提交后,教師便可對學生進行評價和打分。評價的參考標準如下:①合作技巧;②編碼規范和質量;③按照需求分析文件要求設計;④完成時間。
3 基于項目的軟件工程課程實習模式應用原則
基于項目的軟件工程課程實習模式是在多年軟件工程課程實習的基礎上,整合基于項目學習思想的一次大膽的嘗試,需要遵循以下原則。
1)以過程管理為中心。
雖然基于項目的軟件工程課程實習最終以交付產品或服務為目標,但教師在具體的指導過程中必須嚴格按照軟件項目管理以及CMM 3級的要求進行,而不是僅僅停留在軟件的編碼上。這樣學生會對軟件開發產生一個全新的認識,會將他的編碼技術與實際的業務問題聯系起來,反過來會提高學生的編碼能力。同時,學生在經歷一個完整而真實的軟件開發流程后,既能夠有微觀的開發經驗,還能夠加強學生的管理能力和溝通能力。
2)指導教師就是“防火墻”。
基于項目的軟件工程課程實習指導教師一定要具有實際的項目經驗,包括開發經驗、管理經驗、甚至還包括與客戶溝通的經驗。開發經驗會在開發過程中給學生提供幫助。指導教師即項目經理,他的管理經驗直接影響項目的進度。當學生進入開發團隊后,除了技術上的問題,可能還會遇到心理上的壓力,這時指導教師還要擔負起輔導員的角色。
3)與第三方公司保持良好的溝通。
軟件開發是一個與時間賽跑的工作。同時,由于開發工程中的不確定因素較多,因此,指導教師需要及時與第三方公司保持良好的溝通,以便及時獲得所需資源和技術支持。
4 結語
如今在項目日趨緊張的交付時間的逼迫下,以往的學徒制培養簡直就是一種奢望。在面向“卓越工程師教育培養計劃”的軟件工程專業本科培養方案中的軟件工程實訓課程具體實踐過程中,筆者采用基于真實項目的課程實習方式,通過師生、生生間的協作,最終交付了一個真實的軟件產品。雖然SWEBOK V3對卓越軟件人才的定位更加具體,但僅僅依靠課程實習提高人才培養質量顯然是不夠的,還需要考慮軟件工程人才培養方案的整體。通過課程實習不一定會顯著提高學生的開發方法和實踐,但可以讓學生知道如何成為一名合格的軟件工程師。