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