羅曉清, 張戰(zhàn)成
(1.江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122;2.中國科學(xué)院蘇州納米所,江蘇 蘇州 215123)
基于miniProject的軟件工程教學(xué)研究
羅曉清1, 張戰(zhàn)成2
(1.江南大學(xué)物聯(lián)網(wǎng)工程學(xué)院,江蘇 無錫 214122;2.中國科學(xué)院蘇州納米所,江蘇 蘇州 215123)
針對軟件工程課程教學(xué)實踐性強的性質(zhì),提出一套基于miniProject的實踐教學(xué)方法,將軟件工程中的軟件生命周期管理、關(guān)鍵軟件過程融入項目的實踐中,用一套虛擬團隊的組織規(guī)范引導(dǎo)學(xué)生開發(fā)項目,使得學(xué)生在實踐中掌握和理解軟件工程的相關(guān)概念,并自覺執(zhí)行一套標(biāo)準(zhǔn)的軟件過程。
軟件工程;軟件過程;教學(xué)研究
軟件工程是一門實踐性很強的課程,在計算機本科專業(yè)規(guī)劃中,一般在大學(xué)三年級第二學(xué)期開設(shè),此前學(xué)生一般已經(jīng)學(xué)習(xí)過C程序設(shè)計、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫原理、編譯原理和操作系統(tǒng)等軟件類專業(yè)基礎(chǔ)課程。掌握軟件工程原理和方法對學(xué)生將來從事軟件開發(fā)有著重要的指導(dǎo)作用。
在教學(xué)實踐中,我們感覺很多學(xué)生錯誤地認(rèn)為軟件就是程序,將自己定位為一名程序開發(fā)高手。這種認(rèn)識和定位與現(xiàn)代軟件開發(fā)過程以及公司的招聘需求之間還有很大的差距。IT企業(yè)對剛畢業(yè)進入工作崗位的學(xué)生常常不滿意,覺得學(xué)生缺少系統(tǒng)地把握問題的能力、缺少團隊合作精神。學(xué)生也認(rèn)為軟件工程的理論太空洞,不像程序設(shè)計等課程具體,所以傳統(tǒng)的教學(xué)方法很難激發(fā)學(xué)生的學(xué)習(xí)興趣,難以達(dá)到預(yù)期的教學(xué)效果。
雖然部分院校也意識到軟件工程教學(xué)中存在的問題,從加強實踐環(huán)節(jié)入手,增加實驗課時,安排大量的上機實驗時間,也鼓勵學(xué)生利用課余時間自己開發(fā)一些小項目,但是整個授課的過程中,依然是老師布置項目題目,學(xué)生完成作業(yè)的教學(xué)模式,遠(yuǎn)遠(yuǎn)沒有達(dá)到現(xiàn)代軟件工程課程教學(xué)的要求,學(xué)生無法從中理解軟件工程的思想精髓,其思維方式還停留在實現(xiàn)某個功能的程序的階段,沒有從軟件生命周期和項目管理的角度學(xué)習(xí)軟件工程[1]。
高校作為培養(yǎng)人才的主要場所,承擔(dān)著向社會輸送合格的高素質(zhì)人才的責(zé)任。軟件業(yè)的快速發(fā)展要求我們的人才培養(yǎng)模式也要與時俱進?;诂F(xiàn)代軟件企業(yè)越來越重視軟件質(zhì)量,而高質(zhì)量的軟件需要有成熟的過程管理,根據(jù)CMM的建議[2],企業(yè)也成為相應(yīng)的軟件質(zhì)量保證角色,將軟件項目的相關(guān)指標(biāo)量化管理。為使我們的課堂教學(xué)實踐與企業(yè)的實際軟件開發(fā)過程更相符,我們提出在軟件工程這門課程的教學(xué)實踐環(huán)節(jié),以一個小的實際項目(miniProject)的業(yè)務(wù)需求為背景,指導(dǎo)學(xué)生組成團隊,并建立相應(yīng)的虛擬的質(zhì)量保證團隊和過程規(guī)范,實踐軟件生命周期中的各個階段的工作,整個過程不是單純地追求程序開發(fā)的速度,而是更注重流程的符合規(guī)范的程度和編寫文檔的質(zhì)量,讓學(xué)生在實踐中理解和掌握軟件工程的相關(guān)概念并自覺實踐其中一些關(guān)鍵軟件過程。
一個班的學(xué)生分成若干虛擬的產(chǎn)品團隊,每個產(chǎn)品團隊按照圖1的組織架構(gòu)搭建。其中開發(fā)代表1人,對這個產(chǎn)品團隊負(fù)責(zé),代表用戶的利益;質(zhì)量設(shè)計員1人,負(fù)責(zé)指導(dǎo)各個小組遵守公司的流程規(guī)范;開發(fā)小組A和B工作完成某個項目,每個小組人數(shù)5~7人,設(shè)項目經(jīng)理、配置管理員、度量協(xié)調(diào)員各1人,程序員若干;測試小組由1名項目經(jīng)理和3~5位測試員組成。在此基礎(chǔ)上設(shè)置變更控制委員會,由指導(dǎo)老師、質(zhì)量審計員和開發(fā)代表組成,負(fù)責(zé)對軟件開發(fā)過程中的變更進行審核和授權(quán)。通過這種架構(gòu)基本虛擬了一個比較完整的項目團隊。
圖1 虛擬產(chǎn)品團隊組織結(jié)構(gòu)Fig.1 Virtual product team structure
以一個簡單的圖書館圖書管理系統(tǒng)為例,開發(fā)小組A完成書刊的借閱歸還管理,開發(fā)小組B完成書刊采購入庫管理,兩個小組協(xié)同完成一個項目,這樣的項目并沒有標(biāo)準(zhǔn)答案,需要學(xué)生積極主動地和開發(fā)代表交流完成需求分析,兩個小組之間要協(xié)調(diào)好接口,同時要和測試團隊配合修改軟件測試發(fā)現(xiàn)的缺陷。具體團隊的人選由學(xué)生自己討論決定,當(dāng)然我們在理論教學(xué)階段已經(jīng)把各個角色的職責(zé)定義明確,學(xué)生可以根據(jù)自己的興趣選擇適合自己的角色。為了調(diào)動學(xué)生的積極性,我們對項目中的關(guān)鍵角色:開發(fā)代表、質(zhì)量審計員、項目經(jīng)理、測試經(jīng)理、配置管理員、度量協(xié)調(diào)員采取額外的獎懲措施,即:小組成績在優(yōu)秀以上的關(guān)鍵角色可以獲得加分,否則扣分。在角色選擇時,無法避免地會產(chǎn)生沖突,例如:兩名同學(xué)都要爭著當(dāng)項目經(jīng)理,這個時候指導(dǎo)老師一般不干預(yù),僅僅規(guī)定最后的期限,要求學(xué)生在1個小時內(nèi)組織起團隊,這樣鍛煉學(xué)生團隊合作的精神。
3.1 軟件生命周期管理教學(xué)
在教學(xué)過程中我們需要培養(yǎng)學(xué)生軟件生命周期的意識,即讓學(xué)生認(rèn)識到一套軟件不是聽到需求后直接上手寫代碼,代碼寫完就意味著項目結(jié)束,而是有一套標(biāo)準(zhǔn)的規(guī)范和流程來指導(dǎo)整個軟件的開發(fā)過程??傮w來看,軟件生命周期由軟件定義、軟件開發(fā)和運行維護三個階段組成[3]。
軟件定義階段詳細(xì)來說有問題定義、可行性分析和需求分析三個階段,在教學(xué)中我們要求開發(fā)代表下發(fā)“工作任務(wù)書”完成問題的定義,因為項目相對比較明確和簡單,我們忽略可行性分析階段,在需求分析階段我們要求小組輸出最終的經(jīng)過評審?fù)ㄟ^的需求規(guī)格說明書。這個階段主要培養(yǎng)學(xué)生將問題和需求文檔化的能力,這個階段學(xué)生往往“蠢蠢欲動”,急于編寫代碼,指導(dǎo)老師要參與每個小組需求評審的過程,指出需求中模糊的不夠明確的地方,引導(dǎo)學(xué)生輸出規(guī)范的文檔。這個階段同時要輸出系統(tǒng)測試用例,系統(tǒng)測試用例要經(jīng)過測試小組評審和認(rèn)可。
開發(fā)階段由總體設(shè)計、詳細(xì)設(shè)計、編碼和單元測試、集成測試和系統(tǒng)測試以及驗收測試組成??紤]到項目的規(guī)模,我們把總體設(shè)計和詳細(xì)設(shè)計合并為一個階段,只要求學(xué)生輸出一份設(shè)計文檔,這個階段指導(dǎo)老師要關(guān)注學(xué)生的設(shè)計方案是否全面覆蓋需求點,一般通過需求跟蹤矩陣可以看出。編碼和單元測試階段除了要求學(xué)生的代碼符合約定的編碼規(guī)范外,重點是關(guān)注單元測試的覆蓋率是否滿足要求,這個階段鍛煉學(xué)生設(shè)計和執(zhí)行白盒測試的能力。集成測試和系統(tǒng)測試因項目規(guī)模較小,一般綜合為系統(tǒng)測試,由各自的開發(fā)小組完成,驗收測試由測試小組完成。系統(tǒng)測試一般進行三輪,測試過程中的每個問題要都要由測試人員填寫缺陷報告并提交項目經(jīng)理審核,修改后的驗收測試結(jié)果也需要提交項目經(jīng)理審核。質(zhì)量審計員需要關(guān)注每輪測試的缺陷率是否是收斂的趨勢,并和項目經(jīng)理一起給出測試分析報告。驗收小組按照項目系統(tǒng)測試用例進行驗收,同時進行發(fā)散測試,這個階段鍛煉學(xué)生黑盒測試的能力。驗收測試的每個問題也要由測試人員提缺陷報告,測試經(jīng)理審核后轉(zhuǎn)開發(fā)經(jīng)理確認(rèn)是否是問題,由開發(fā)經(jīng)理轉(zhuǎn)相關(guān)開發(fā)人員修改,修改后開發(fā)經(jīng)理確認(rèn),測試人員回歸測試,這樣保證每個問題都是閉環(huán)。
項目的維護階段是一個比較長的階段,在真實項目中,一般占整個軟件生命周期的80%,在miniProject項目中,我們通過軟件的適應(yīng)性修改來讓學(xué)生學(xué)習(xí)軟件維護階段的相關(guān)概念和應(yīng)該遵守的流程,并強調(diào)如何保障軟件維護的質(zhì)量。
3.2 關(guān)鍵軟件過程教學(xué)
軟件的質(zhì)量需要通過一套完整的流程和過程來保障。在教學(xué)實踐中,我們把一些軟件中的重要流程固定化,使學(xué)生體驗到高質(zhì)量的軟件項目所必須經(jīng)歷的過程。
評審在軟件工程貫穿項目的需求、設(shè)計、編碼的每個階段,評審組織者一般先進行評審講解,使各位評審者對需要評審的工作有一個明確的認(rèn)識,各個評審人單獨進行評審后,評審組織者需要對評審意見逐一確認(rèn)。評審組織者一般為項目經(jīng)理,需求文檔的評審人一般為開發(fā)代表、配合小組和測試團隊,設(shè)計文檔的評審人一般為小組內(nèi)部和需要軟件接口配合的小組。通過評審階段的活動使得學(xué)生認(rèn)識到軟件開發(fā)不僅是個體行為,而是這個組織的一套有序行為,個人需要在組織規(guī)范內(nèi)行動,通過嚴(yán)格執(zhí)行組織的流程規(guī)范保證軟件的質(zhì)量。
配置管理是軟件項目管理中一項基本內(nèi)容,是軟件質(zhì)量保證的重要一環(huán),這一工作主要由配置管理員執(zhí)行,其主要職責(zé)是控制變更、版本標(biāo)志、配置審計和配置狀態(tài)發(fā)布。通過引入配置管理使學(xué)生認(rèn)識到軟件版本變化的可回溯性,可跟蹤性。軟件項目并不僅僅是交付一個產(chǎn)品,其中間的每個階段的歷史、基線和分支對回溯軟件的質(zhì)量,保證軟件修改的有序進行有重要的作用。試驗中,學(xué)生也學(xué)會基本軟件版本管理工具(如:SourceSafe、SVN)的使用,掌握Check in、Check out、update等基本操作,了解基本的團隊協(xié)作開發(fā)的環(huán)境。
軟件度量是CMM4級的一個關(guān)鍵過程域,為了配合本次課程改革,我們設(shè)計了軟件度量表,其中包含:需求點的個數(shù)、測試?yán)齻€數(shù)、投入人力、測試發(fā)現(xiàn)的缺陷等信息,由度量協(xié)調(diào)員負(fù)責(zé)這些數(shù)據(jù)的收集,質(zhì)量審計員和項目經(jīng)理在每個階段需要對收集的這些量化數(shù)據(jù)分析,分析項目進行過程中存在的問題。通過引入軟件度量,我們使學(xué)生理解到軟件開發(fā)過程是可控的,通過一些量化的指標(biāo)可以了解軟件項目的運行狀態(tài),為軟件項目的管理提供決策依據(jù)。
變更控制是減少軟件開發(fā)的隨意性,保障軟件質(zhì)量的一項關(guān)鍵措施。變更控制是指對每個階段文檔基線化后,因為需求的變化、重大缺陷或相互配合導(dǎo)致的軟件變更作評審、授權(quán)的管理活動。為模擬現(xiàn)實中的變更控制,在軟件編碼階段我們假設(shè)用戶要求追加一個新的小需求。為滿足用戶的這種變化,開發(fā)小組需要評審新增需求對現(xiàn)有軟件項目進度的影響、對設(shè)計方案的影響,并向變更控制委員會(由指導(dǎo)老師、開發(fā)代表、質(zhì)量審計員組成)提交變更申請,經(jīng)評審后修改需求文檔和設(shè)計文檔并重新基線化然后配置狀態(tài)發(fā)布。通過這樣一次變更使得學(xué)生認(rèn)識到軟件項目中的變更是經(jīng)常存在的,為了使得變更有序和可控,需要一套流程和規(guī)范來管理軟件的變更。
通過兩個班級一個學(xué)期的教學(xué)實踐,學(xué)生普遍覺得原來枯燥的軟件工程原理在實踐中學(xué)來的和由老師灌輸?shù)挠泻艽髤^(qū)別。所謂“紙上得來終覺淺,絕知此事要躬行”,通過一個miniProject可以將軟件工程課程中的很多內(nèi)容融入到實訓(xùn)中,讓學(xué)生通過項目實踐理解和體會“工程”的思想,并主動規(guī)范地執(zhí)行一些關(guān)鍵的軟件過程,一些同學(xué)甚至提出了一些對流程優(yōu)化的小點子,這實際上已經(jīng)是CMM5級的持續(xù)軟件過程改進的一些苗頭,這說明通過這種方式,學(xué)生更愿意積極主動地學(xué)習(xí)。
在教學(xué)中,我們參考了軟件CMM模型、軟件工程實踐方面的很多教材。我們也和國內(nèi)知名IT公司的一些項目經(jīng)理深入交流,學(xué)習(xí)IT公司實際的軟件過程是如何進行的,將這些實踐的經(jīng)驗融入到教學(xué)過程中,豐富了課堂教學(xué)的內(nèi)容。軟件工程是一門不斷與時俱進發(fā)展的學(xué)科,現(xiàn)有的教材內(nèi)容總是滯后于軟件工程的實際需求,這就要求我們教師在教學(xué)觀念上不斷接受新思想,不斷補充新知識,充實我們的課堂教學(xué)內(nèi)容。
[1] 李廣源,馬楠.國外軟件工程教學(xué)法初探[J].計算機教育,2011,133(1):86-90.
[2] Mark C.Paulk.The Capability Maturity Model:Guidelines for Improving the software Process[M].Addison-Wesley Pub.Co.,2001.
[3] Roger S.Pressman.Software Engineering:A practitioner’s Approach[M].McGraw-Hill,2002.
The Teaching Research of Software Engineering Based on MiniProject
LUO Xiaoqing1, ZHANG Zhancheng2
(1.School of IoT Engineering,Jiangnan University,Wuxi 214122,China;2.Suzhou Institute of Nano-tech and Nano-bionics,Chinese Academy of Sciences,Suzhou 215123,China)
For the practice of software engineering curriculum,a new teaching method based on miniProject is introduced,in which software lifecycle quality management and key software process are applied,also a virtual development group and regulations are built to guide the students to follow the software specification.As a result,the students can quickly learn the concepts of advanced software engineering and actively develop the software based on a standard software process.
software engineering;software process;teaching study
G 712
A
1671-7880(2012)04-0070-03
2010-04-06
羅曉清(1980— ),女,江西南昌人,博士,研究方向:模式識別與圖像處理。