羅曉清, 張戰成
(1.江南大學物聯網工程學院,江蘇 無錫 214122;2.中國科學院蘇州納米所,江蘇 蘇州 215123)
基于miniProject的軟件工程教學研究
羅曉清1, 張戰成2
(1.江南大學物聯網工程學院,江蘇 無錫 214122;2.中國科學院蘇州納米所,江蘇 蘇州 215123)
針對軟件工程課程教學實踐性強的性質,提出一套基于miniProject的實踐教學方法,將軟件工程中的軟件生命周期管理、關鍵軟件過程融入項目的實踐中,用一套虛擬團隊的組織規范引導學生開發項目,使得學生在實踐中掌握和理解軟件工程的相關概念,并自覺執行一套標準的軟件過程。
軟件工程;軟件過程;教學研究
軟件工程是一門實踐性很強的課程,在計算機本科專業規劃中,一般在大學三年級第二學期開設,此前學生一般已經學習過C程序設計、數據結構、數據庫原理、編譯原理和操作系統等軟件類專業基礎課程。掌握軟件工程原理和方法對學生將來從事軟件開發有著重要的指導作用。
在教學實踐中,我們感覺很多學生錯誤地認為軟件就是程序,將自己定位為一名程序開發高手。這種認識和定位與現代軟件開發過程以及公司的招聘需求之間還有很大的差距。IT企業對剛畢業進入工作崗位的學生常常不滿意,覺得學生缺少系統地把握問題的能力、缺少團隊合作精神。學生也認為軟件工程的理論太空洞,不像程序設計等課程具體,所以傳統的教學方法很難激發學生的學習興趣,難以達到預期的教學效果。
雖然部分院校也意識到軟件工程教學中存在的問題,從加強實踐環節入手,增加實驗課時,安排大量的上機實驗時間,也鼓勵學生利用課余時間自己開發一些小項目,但是整個授課的過程中,依然是老師布置項目題目,學生完成作業的教學模式,遠遠沒有達到現代軟件工程課程教學的要求,學生無法從中理解軟件工程的思想精髓,其思維方式還停留在實現某個功能的程序的階段,沒有從軟件生命周期和項目管理的角度學習軟件工程[1]。
高校作為培養人才的主要場所,承擔著向社會輸送合格的高素質人才的責任。軟件業的快速發展要求我們的人才培養模式也要與時俱進。基于現代軟件企業越來越重視軟件質量,而高質量的軟件需要有成熟的過程管理,根據CMM的建議[2],企業也成為相應的軟件質量保證角色,將軟件項目的相關指標量化管理。為使我們的課堂教學實踐與企業的實際軟件開發過程更相符,我們提出在軟件工程這門課程的教學實踐環節,以一個小的實際項目(miniProject)的業務需求為背景,指導學生組成團隊,并建立相應的虛擬的質量保證團隊和過程規范,實踐軟件生命周期中的各個階段的工作,整個過程不是單純地追求程序開發的速度,而是更注重流程的符合規范的程度和編寫文檔的質量,讓學生在實踐中理解和掌握軟件工程的相關概念并自覺實踐其中一些關鍵軟件過程。
一個班的學生分成若干虛擬的產品團隊,每個產品團隊按照圖1的組織架構搭建。其中開發代表1人,對這個產品團隊負責,代表用戶的利益;質量設計員1人,負責指導各個小組遵守公司的流程規范;開發小組A和B工作完成某個項目,每個小組人數5~7人,設項目經理、配置管理員、度量協調員各1人,程序員若干;測試小組由1名項目經理和3~5位測試員組成。在此基礎上設置變更控制委員會,由指導老師、質量審計員和開發代表組成,負責對軟件開發過程中的變更進行審核和授權。通過這種架構基本虛擬了一個比較完整的項目團隊。

圖1 虛擬產品團隊組織結構Fig.1 Virtual product team structure
以一個簡單的圖書館圖書管理系統為例,開發小組A完成書刊的借閱歸還管理,開發小組B完成書刊采購入庫管理,兩個小組協同完成一個項目,這樣的項目并沒有標準答案,需要學生積極主動地和開發代表交流完成需求分析,兩個小組之間要協調好接口,同時要和測試團隊配合修改軟件測試發現的缺陷。具體團隊的人選由學生自己討論決定,當然我們在理論教學階段已經把各個角色的職責定義明確,學生可以根據自己的興趣選擇適合自己的角色。為了調動學生的積極性,我們對項目中的關鍵角色:開發代表、質量審計員、項目經理、測試經理、配置管理員、度量協調員采取額外的獎懲措施,即:小組成績在優秀以上的關鍵角色可以獲得加分,否則扣分。在角色選擇時,無法避免地會產生沖突,例如:兩名同學都要爭著當項目經理,這個時候指導老師一般不干預,僅僅規定最后的期限,要求學生在1個小時內組織起團隊,這樣鍛煉學生團隊合作的精神。
3.1 軟件生命周期管理教學
在教學過程中我們需要培養學生軟件生命周期的意識,即讓學生認識到一套軟件不是聽到需求后直接上手寫代碼,代碼寫完就意味著項目結束,而是有一套標準的規范和流程來指導整個軟件的開發過程。總體來看,軟件生命周期由軟件定義、軟件開發和運行維護三個階段組成[3]。
軟件定義階段詳細來說有問題定義、可行性分析和需求分析三個階段,在教學中我們要求開發代表下發“工作任務書”完成問題的定義,因為項目相對比較明確和簡單,我們忽略可行性分析階段,在需求分析階段我們要求小組輸出最終的經過評審通過的需求規格說明書。這個階段主要培養學生將問題和需求文檔化的能力,這個階段學生往往“蠢蠢欲動”,急于編寫代碼,指導老師要參與每個小組需求評審的過程,指出需求中模糊的不夠明確的地方,引導學生輸出規范的文檔。這個階段同時要輸出系統測試用例,系統測試用例要經過測試小組評審和認可。
開發階段由總體設計、詳細設計、編碼和單元測試、集成測試和系統測試以及驗收測試組成。考慮到項目的規模,我們把總體設計和詳細設計合并為一個階段,只要求學生輸出一份設計文檔,這個階段指導老師要關注學生的設計方案是否全面覆蓋需求點,一般通過需求跟蹤矩陣可以看出。編碼和單元測試階段除了要求學生的代碼符合約定的編碼規范外,重點是關注單元測試的覆蓋率是否滿足要求,這個階段鍛煉學生設計和執行白盒測試的能力。集成測試和系統測試因項目規模較小,一般綜合為系統測試,由各自的開發小組完成,驗收測試由測試小組完成。系統測試一般進行三輪,測試過程中的每個問題要都要由測試人員填寫缺陷報告并提交項目經理審核,修改后的驗收測試結果也需要提交項目經理審核。質量審計員需要關注每輪測試的缺陷率是否是收斂的趨勢,并和項目經理一起給出測試分析報告。驗收小組按照項目系統測試用例進行驗收,同時進行發散測試,這個階段鍛煉學生黑盒測試的能力。驗收測試的每個問題也要由測試人員提缺陷報告,測試經理審核后轉開發經理確認是否是問題,由開發經理轉相關開發人員修改,修改后開發經理確認,測試人員回歸測試,這樣保證每個問題都是閉環。
項目的維護階段是一個比較長的階段,在真實項目中,一般占整個軟件生命周期的80%,在miniProject項目中,我們通過軟件的適應性修改來讓學生學習軟件維護階段的相關概念和應該遵守的流程,并強調如何保障軟件維護的質量。
3.2 關鍵軟件過程教學
軟件的質量需要通過一套完整的流程和過程來保障。在教學實踐中,我們把一些軟件中的重要流程固定化,使學生體驗到高質量的軟件項目所必須經歷的過程。
評審在軟件工程貫穿項目的需求、設計、編碼的每個階段,評審組織者一般先進行評審講解,使各位評審者對需要評審的工作有一個明確的認識,各個評審人單獨進行評審后,評審組織者需要對評審意見逐一確認。評審組織者一般為項目經理,需求文檔的評審人一般為開發代表、配合小組和測試團隊,設計文檔的評審人一般為小組內部和需要軟件接口配合的小組。通過評審階段的活動使得學生認識到軟件開發不僅是個體行為,而是這個組織的一套有序行為,個人需要在組織規范內行動,通過嚴格執行組織的流程規范保證軟件的質量。
配置管理是軟件項目管理中一項基本內容,是軟件質量保證的重要一環,這一工作主要由配置管理員執行,其主要職責是控制變更、版本標志、配置審計和配置狀態發布。通過引入配置管理使學生認識到軟件版本變化的可回溯性,可跟蹤性。軟件項目并不僅僅是交付一個產品,其中間的每個階段的歷史、基線和分支對回溯軟件的質量,保證軟件修改的有序進行有重要的作用。試驗中,學生也學會基本軟件版本管理工具(如:SourceSafe、SVN)的使用,掌握Check in、Check out、update等基本操作,了解基本的團隊協作開發的環境。
軟件度量是CMM4級的一個關鍵過程域,為了配合本次課程改革,我們設計了軟件度量表,其中包含:需求點的個數、測試例個數、投入人力、測試發現的缺陷等信息,由度量協調員負責這些數據的收集,質量審計員和項目經理在每個階段需要對收集的這些量化數據分析,分析項目進行過程中存在的問題。通過引入軟件度量,我們使學生理解到軟件開發過程是可控的,通過一些量化的指標可以了解軟件項目的運行狀態,為軟件項目的管理提供決策依據。
變更控制是減少軟件開發的隨意性,保障軟件質量的一項關鍵措施。變更控制是指對每個階段文檔基線化后,因為需求的變化、重大缺陷或相互配合導致的軟件變更作評審、授權的管理活動。為模擬現實中的變更控制,在軟件編碼階段我們假設用戶要求追加一個新的小需求。為滿足用戶的這種變化,開發小組需要評審新增需求對現有軟件項目進度的影響、對設計方案的影響,并向變更控制委員會(由指導老師、開發代表、質量審計員組成)提交變更申請,經評審后修改需求文檔和設計文檔并重新基線化然后配置狀態發布。通過這樣一次變更使得學生認識到軟件項目中的變更是經常存在的,為了使得變更有序和可控,需要一套流程和規范來管理軟件的變更。
通過兩個班級一個學期的教學實踐,學生普遍覺得原來枯燥的軟件工程原理在實踐中學來的和由老師灌輸的有很大區別。所謂“紙上得來終覺淺,絕知此事要躬行”,通過一個miniProject可以將軟件工程課程中的很多內容融入到實訓中,讓學生通過項目實踐理解和體會“工程”的思想,并主動規范地執行一些關鍵的軟件過程,一些同學甚至提出了一些對流程優化的小點子,這實際上已經是CMM5級的持續軟件過程改進的一些苗頭,這說明通過這種方式,學生更愿意積極主動地學習。
在教學中,我們參考了軟件CMM模型、軟件工程實踐方面的很多教材。我們也和國內知名IT公司的一些項目經理深入交流,學習IT公司實際的軟件過程是如何進行的,將這些實踐的經驗融入到教學過程中,豐富了課堂教學的內容。軟件工程是一門不斷與時俱進發展的學科,現有的教材內容總是滯后于軟件工程的實際需求,這就要求我們教師在教學觀念上不斷接受新思想,不斷補充新知識,充實我們的課堂教學內容。
[1] 李廣源,馬楠.國外軟件工程教學法初探[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— ),女,江西南昌人,博士,研究方向:模式識別與圖像處理。