季春艷 馮昕 何靖
摘要軟件工程是大學計算機專業(yè)必修之課。軟件工程教學對于學生建立系統(tǒng)化、規(guī)范化和綜合化計算機理論和應用開發(fā)能力培養(yǎng)具有深遠影響。本文對國內(nèi)外軟件工程課程的教學進行了系統(tǒng)的研究,深入地分析了目前軟件工程教學存在的問題和挑戰(zhàn),提出了角色體驗和工程文檔應用于軟件工程教學的新方法和新思路。我們強調建立理論與實踐相結合的軟件工程知識體系,采用任務驅動的角色體驗方法,加強學生協(xié)同分工和集成創(chuàng)新能力;突出強調工程文檔在軟件工程應用開發(fā)生命周期的重要作用,建立軟件工程中規(guī)范化的任務、知識體和實施培訓的流程。本校已經(jīng)嘗試實施了這種教學模式,各界反饋良好。
關鍵詞軟件工程教育角色體驗軟件工程知識體系工程文檔
1引言
軟件產(chǎn)業(yè)是互聯(lián)網(wǎng)和新一代信息技術發(fā)展的重要基礎,軟件工程作為一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科,始終是軟件產(chǎn)業(yè)發(fā)展的根基。對于計算機專業(yè)人才的培養(yǎng),軟件工程在計算機高等教學中占有重要地位。但是無論從學生、教師還是業(yè)界的反饋都可以看出,軟件工程教學的實際效果遠未達到我們的期望。系統(tǒng)完整的軟件工程知識體系建立仍然面臨眾多挑戰(zhàn),理論與實踐結合的創(chuàng)新人才依然難尋,完整嚴謹和有效的軟件工程架構風格依然遙遠。作為高校教師,我們必須從軟件工程的教、學、研進行深入的研究,探索一條行之有效的教學培養(yǎng)方法。
軟件工程是“將系統(tǒng)性的、規(guī)范化的、可定量的方法應用于軟件的開發(fā)、運行和維護,其重點在于軟件的分析與評價、規(guī)格說明、設計和演化,同時還涉及管理、質量、創(chuàng)新、標準、個人技能、團隊協(xié)作和專業(yè)實踐等”。①相比于其他的計算機專業(yè)課程,軟件工程的教學有很大的不同。軟件工程中重要的技術和開發(fā)原理來源于應用和實際商業(yè)軟件開發(fā),之后這些核心技術被提煉和整合形成原則和理論基礎而引入課堂,教授給學生。通過軟件工程課程的學習,學生需要了解和掌握軟件工程的理論、技術和方法,具備作為軟件工程師所需的專業(yè)能力。優(yōu)秀的軟件工程研究者DavidParnas將軟件工程計劃分成三個階段執(zhí)行:(1)首先,詳細說明軟件工程師可能要執(zhí)行的一些任務;(2)定義軟件工程師需要的知識體;(3)將其實施作為一個培訓計劃。②③由此可見,軟件工程是一門綜合性和實踐性很強的學科,傳統(tǒng)的教學模式和教學方法在軟件工程教學中存在很大不足,人為地強調實踐或者理論基礎無法有效地培養(yǎng)學生的綜合技能和水平,從而直接影響了課程的教育質量和教學效果。
軟件工程課程必須面向解決實際問題,即如何成功地開發(fā)可靠的、可用的、可維護的軟件系統(tǒng),滿足用戶的要求。這包含了需求分析、規(guī)劃說明、設計、構建、測試、操作和維護等軟件生命周期的各個階段。目前,軟件工程教學主要包含兩部分:課堂教學和實踐教學。以傳統(tǒng)的教師為導向的教學方式為主,實踐教學為輔。教師在課堂上講授軟件工程方法、原則、技術等知識;實踐教學主要是采用實驗課的方式,由學生設計完成一個項目。根據(jù)多年教學的經(jīng)驗和我們調查反饋的結果,很多學生在本課程學習時感到茫然和無所適從,理論的東西感覺抽象難以理解,缺乏學習熱情和興趣。針對軟件工程課程的特點,我們認真分析調研了課程教學存在的問題,總結分析導致課程教學效果不理想的主要原因如下:
1.1課程設置安排不盡合理
軟件工程是一門涉及內(nèi)容較多的綜合性學科,所教授的原理、方法較為抽象。軟件工程中核心的技術和開發(fā)原理均來源于實際商業(yè)軟件開發(fā),經(jīng)提煉形成原理和方法而引人課堂。目前,大部分高校將軟件工程課程設置在大三,對于剛剛完成兩年大學公共基礎課和專業(yè)基礎課教育的學生來講,軟件開發(fā)的基礎理論和概念仍然匱乏,與軟件工程相關的前期課程前后脫節(jié)。尤其在計算機科學專業(yè)課程設置中,只有一學期的必修的軟件工程課,在這么有限的時間內(nèi)學生很難掌握軟件工程的理論與實踐的精髓,從而造成大多數(shù)學生認為是在學習枯燥無用的理論。
1.2理論和實踐的脫節(jié)
軟件工程是一門實踐性很強的課程。相比于其他的計算機學科的課程,軟件工程課程核心和精髓不可能從教師的授課和課本的理論學習而獲得,靠“死讀書,讀死書”是無法完成本課程的學習的,實踐和理解相結合的融會貫通非常重要。在實際軟件開發(fā)中真刀真槍的實現(xiàn),在練習中理解基本原理,在真正練的過程中提升理論的水平是軟件工程課程教學和實踐的有效方法。
1.3重代碼,輕文檔
在軟件工程課程的教學中,大部分的學生甚至部分教師都會自然地認為實現(xiàn)高效整齊的代碼是課程學習中最重要的工作,對于文檔工作未有足夠的重視。在實際軟件開發(fā)的工程實踐中,一般認為代碼的工作量只占到整個工程工作量的30%左右,完整、有效的各種文檔,包括設計文檔、算法文檔、說明文檔、維護文檔等是整個軟件工程核心。因而在軟件工程的教學中,我們必須轉變觀念,突出工程文檔的重要性,將各種統(tǒng)一、標準、高效和實用的文檔設計和撰寫方案融匯到課程的教學中,并且與軟件工程理論和代碼編寫結合,形成完整的的理論、算法、代碼和文檔并重的教學新方法。
1.4缺乏軟件工程知識體系的系統(tǒng)概念
商用和實際應用軟件開發(fā)的工作是系統(tǒng)的團隊工作模式,單打獨斗無法完成商業(yè)和實用軟件開發(fā)。然而,現(xiàn)在軟件工程的教學中,教師和學生注重的是單個原理和系統(tǒng)的學習,從而造成了學生軟件編程風格五花八門,程序可讀性差,軟件工程的完整知識體系混亂。團隊工作的模式要求程序員在整個工程中需要承擔不同的角色,不同的角色承擔的任務不同,又同時需要與其他的角色互相配合溝通,從而完成整個工程的開發(fā)。這一點,在目前軟件工程的教學中非常缺乏,為此我們需要建立系統(tǒng)的概念,將角色體驗的模式引入軟件工程課程教學中。
在參考文獻④中,Nurkkala和Brandle對軟件工程教學進行了分析,并對現(xiàn)行軟件工程教學方法中存在的問題進行了總結:(1)沒有產(chǎn)品——學生在學習中僅僅是創(chuàng)建項目,而并非真正地開發(fā)商業(yè)級別的產(chǎn)品;(2)持續(xù)時間短——通常軟件工程課程只安排一或兩個學期,課程受限于時間過短很難真正理解軟件工程的方法、原理等在實際軟件工程項目中如何應用,并完成開發(fā)真正的產(chǎn)品;(3)高流動性——對于一個項目來講,每個學期都有新學生加入意味著人才庫始終只有很少的人,新加入的學生很難基于之前的經(jīng)驗開發(fā)其自身的技能;(4)低復雜性——由于學習必需時間以及學生本身技能的限制,只能開發(fā)簡單的應用;(5)無法維護——作為持續(xù)時間過短結果,學生沒法經(jīng)歷軟件開發(fā)非常重要的一個方面,即系統(tǒng)維護階段;(6)沒有客戶——學習過程中,大多數(shù)軟件工程項目都沒有真正的與客戶進行接觸,而實際的開發(fā)中必須要了解客戶的需求,根據(jù)客戶的需求進行軟件開發(fā)。
綜合上述分析,我們深入調研了現(xiàn)行軟件工程課程教學的困難和挑戰(zhàn),分析了國內(nèi)外報道的先進的軟件工程課程教學的新方法,結合我們幾年來課堂教學的經(jīng)驗大膽改革課程體系框架和教學內(nèi)容,積極探索案例教學和實踐教學模式,提出了角色體驗和工程文檔應用于軟件工程教學的新方法和新思路。我們強調建立理論與實踐相結合的軟件工程知識體系,采用任務驅動的角色體驗方法,加強學生協(xié)同分工和集成創(chuàng)新能力;突出強調工程文檔在軟件工程應用開發(fā)生命周期的重要作用,建立軟件工程中規(guī)范化的任務、知識體系和實施培訓的流程。
本文第二部分將介紹目前報道的國內(nèi)外軟件工程教學的有效方法,第三部分介紹我們探索的引入角色體驗和工程文檔的軟件工程教學新思路,第四部分進行總結。
2國內(nèi)外現(xiàn)行有效軟件工程教學方法
為了解決以上提到的軟件工程教學中存在的不足,目前,國內(nèi)外已經(jīng)提出了多種教學方法來改進軟件工程課程教學。范銳⑤等人提出了基于“做中學”的教學理念的“項目驅動、案例教學”的軟件工程教學模式,其教學理念認為軟件工程教學不能單純依靠理論講解,強調實踐對于軟件工程教學的重要性,在學生的實踐過程中,采用項目團隊方式進行項目開發(fā),學生分組分工,明確每個人所承擔的職責,以此培養(yǎng)團隊意識?!绊椖框寗印钡慕虒W方式,將整個軟件工程教學過程包含于一個完整的項目之中,學生通過完成項目學習和掌握軟件工程的包含的知識,實現(xiàn)對知識的掌握和應用。
陳建國⑥等人針對傳統(tǒng)以教師為主的軟件工程教學方法提出了改進,在傳統(tǒng)的軟件工程教學中引入了集體工作、實驗、案例學習、合作教育相結合的軟件工程教學方法,詳細地論述了這四部分對軟件工程教學作用以及對學生掌握軟件工程方法的幫助。采用了合作教育的方式,學校和企業(yè)合作為學生提供真正的商業(yè)軟件開發(fā)的機會,增強學生理論與實際的聯(lián)系,使得軟件工程教學中的項目管理、軟件過程、質量保證等不再那么抽象難于理解。
近年,國外對于軟件工程教學方法中存在的不足提出了不少有效學習方法,其中相當一部分方法著重強調了協(xié)同工作⑦⑧⑨在軟件工程教學中的重要作用,在教學中分成多個小組,使學生加入其中,這些小組的組織結構與組內(nèi)分工與實際的項目開發(fā)小組完全相同,這樣學生在學習的過程中完全按照實際的工程開發(fā)的需要進行學習,使得學生學習中能充分掌握軟件工程的方法、原則等的實際應用。此外,還提出了一些其他軟件工程教學的有效教學方法,如使用Liu⑩形式化方法教學;Deveaux豘等提出專注于軟件開發(fā)過程中的文檔,Deveaux認為在教學中很難獲得實際的足夠大具有開發(fā)意義的項目,而文檔的學習卻可以使學生充分了解軟件工程項目的基本原則,方法等內(nèi)容;Li豙則成功地將統(tǒng)一過程方法應用于實際的教學當中;Pandey豛在教學中使用競爭的方法教授學生開發(fā)原則;更有一些在軟件工程的教學中采用游戲的方法,豜使學生充當游戲中項目小組的項目經(jīng)理的角色來學習軟件工程。Scott豝等人在本科生的軟件工程教育中采用了開源工具,并將之整合到軟件工程課程中,通過學生的反饋對比,表明此種方法獲得了很好的效果。
3角色體驗與工程文檔結合的軟件工程教學方法
3.1國內(nèi)軟件工程教學現(xiàn)狀
在實際的課程教學中,運用了案例開發(fā),與企業(yè)合作等方法,并結合國內(nèi)外其他一些有效的軟件工程教學法后,我們發(fā)現(xiàn)學生在有限的時間內(nèi)所能理解的軟件工程知識相當有限。在對計算機科學專業(yè)的學生進行調查時,我們發(fā)現(xiàn)大約80%學生對大三進行的軟件工程課程沒什么興趣。他們認為那只是枯燥的理論課學習和繁瑣的文檔編寫。在前兩年專業(yè)基礎課學習中,他們幾乎沒有接觸到文檔編寫,大部分項目的完成都是在草稿紙上設計然后直接進入程序編寫階段。他們認為這樣可以一步到位,省去很多繁瑣的細節(jié)。當然,正如我們前面提到,在本科教學中,學生在課堂上能實現(xiàn)的項目只能是中小型項目,復雜性低。學生無法感受到缺乏軟件工程流程中首要的基礎工作而可能造成的困難和嚴重的后果,所以學生們大多認為寫各種各樣的文檔是在浪費時間。而對于教師來說,到大三軟件工程課時,在沒有大型項目做支持的情況下,再教導學生編寫文檔的重要性,似乎沒有說服力,也很難扭轉學生已經(jīng)形成的直接編程的習慣。所以在計算機學科的學習中,我們大膽改革教育的方式并修訂了階段性的培養(yǎng)目標,形成一種潛移默化提升學生綜合能力和水平的模式。在本科生進入大專院校就讀后,計算機專業(yè)課程,尤其是編程課程的項目設計上需盡早地讓學生接觸到軟件工程知識的基本概念和方法。從大一專業(yè)課開始,學生們就需要開始完成簡單的項目。如果教師們可以從一開始就讓他們了解到軟件工程的生命周期,接觸到軟件工程流程中的各個步驟,從簡單到復雜地進行實踐,到大三的軟件工程課時他們就會對這些知識已經(jīng)有所了解,并不會感覺到枯燥,因為在前兩年的學習中他們一直都使用這些方法,已經(jīng)養(yǎng)成了良好的軟件工程的習慣。
3.2基于文檔撰寫的潛移默化式教學法
我們經(jīng)常只會在軟件開發(fā)或維護過程出現(xiàn)問題時才意識到那些被忽略的文檔的重要性。在我們的調查中,軟件工程師們大約有60%以上都認為自己的文檔的編寫能力只是一般,有些甚至不會撰寫文檔(見表1)。很多工程師在學校并沒有受到專業(yè)的訓練,只有到工作中才開始慢慢學習與實踐,但是經(jīng)常由于時間有限,項目截止日期逼近而只好疏于對文檔的編寫或是只能犧牲其質量。如果我們在本科教學中盡早地讓學生接觸到各類文檔,在撰寫項目文檔的過程中,學生不但能學習到軟件工程的流程,也能把撰寫文檔的技能鍛煉熟練,更重要的是他們會漸漸地把文檔的撰寫與管理當成一種習慣,當成一種必須。這樣,無論是大型項目還是小規(guī)模項目,他們都會用一定的軟件工程流程來完成。一開始的小項目中,也許他們并不能理解為什么要撰寫那么多文檔,但當他們到高年級創(chuàng)建相對復雜的項目時就能體會到文檔的好處。他們就能領會,計算機軟件并不只是程序,還應該有一整套文檔資料。這些資料都是在開發(fā)過程中產(chǎn)生出來的,對軟件管理人員,開發(fā)人員,維護人員,測試人員,客戶,包括程序員自己都是必不可少的。那么如何開始這種潛移默化式教學法呢?教師們要對所有四年的專業(yè)課程進行分析,總結出需要參加這個軟件工程教學計劃課程和項目。加入到這個計劃里的課程教師要設計符合這個計劃的項目,并將文檔撰寫作為對學生必須的要求。在整個計劃中,建議提供一套完整統(tǒng)一的各類文檔的模板以供學生們使用,包括軟件需求說明書,軟件設計說明書,軟件測試說明書,項目開發(fā)計劃書等。這些模板要一致,學生在所有課程中要使用一致的模板,由簡化版到完整版,低年級的學生先使用簡化版的模板,讓他們漸漸地學習撰寫文檔。比如一年級的項目可以只要求寫軟件需求說明書。在模板的設計中,最好是和企業(yè)界運用的文檔保持一致,然后進行簡化,給學生提供一種他們可以勝任的文檔模板,然后逐年增加內(nèi)容,最終可以與業(yè)界使用的文檔保持一致。這個計劃的實施需要得到計劃內(nèi)課程教師們的認同,通力合作,把學生四年的學習列入計劃,并隨時進行監(jiān)督。經(jīng)過四年的訓練,學生的寫作能力一定能得到大幅度提高,對軟件工程的認識也會非常深入,畢業(yè)后能夠勝任商業(yè)軟件和應用軟件的開發(fā)要求。
3.3基于角色體驗的軟件工程課程教學法
上面提到的文檔式教學法是為了訓練學生創(chuàng)建各類軟件工程文檔的能力。在課堂項目中,由于時間有限,一個學生往往不可能完成整套文檔的撰寫。在低年級階段,在小型或中型項目中,學生學習了軟件需求和軟件設計文檔,學生應該可以單獨完成。但當項目變得相對復雜,大多課程項目都是以團隊合作的形式來完成。教師通常知道哪些同學組成一個團隊,但并不清楚或關心這些同學在項目組里擔任的角色。這樣,在四年的學習中,有些同學在項目組里只保持著一種角色,如只擔任了程序員或測試員,并沒有機會對各個相應的角色進行體驗,導致他們知識的不全面。與文檔教學法相結合,我們提出一種叫做角色體驗的教學法,和文檔式教學法同步進行,一同潛移默化地將軟件工程知識注入學生腦海。所有加入計劃的課程要統(tǒng)一安排項目組成員,目的是讓每個學生在這些課程項目完成的過程中能體驗所有的軟件工程角色,并完成這一角色相對應的文檔。這樣不但訓練了每個學生各種文檔的寫法,讓學生了解了軟件工程生命周期整個團隊要進行的工作,而且鍛煉了學生互相合作的團隊精神,避免學生在團隊中只依賴于幾個學習相對比較優(yōu)秀的學生來完成項目。假設我們要訓練學生四個角色:項目經(jīng)理,系統(tǒng)分析設計師,程序工程師,和測試工程師,我們需要至少四門課程加入此計劃。如圖-1所示,四個學生分為一個項目組,經(jīng)過這四門課程項目的訓練,他們可以完成這四個角色的訓練,學會四種文檔的撰寫,體驗各個角色在軟件工程流程中的職責。如果要增加角色和文檔種類的話,可以適當調整學生團隊組員數(shù)目與職責。經(jīng)過這樣的訓練,學生對團隊合作一定會有更加深入的認識,也能提高隊員的溝通能力,以改善畢業(yè)生在企業(yè)界缺乏溝通能力的現(xiàn)狀。
經(jīng)過四年的文檔與角色的潛移默化式訓練,一定能大幅提高學生的軟件工程能力。相比單純的一到兩門軟件工程課程,學生對軟件工程的理解要深入得多,實踐能力也會大幅度提高。由于計算機科學專業(yè)課程設置并不像軟件工程專業(yè)對軟件工程的教學那么有針對性而且課時較少,所以這種方法尤其適合計算機專業(yè)的教學。
4總結
本文對國內(nèi)外軟件工程課程的教學進行了系統(tǒng)的研究,深入地分析了目前軟件工程教學存在的問題和挑戰(zhàn),探索了角色體驗和工程文檔應用于軟件工程教學的新方法和新思路。這種教學方法使學生在專業(yè)課學習過程中不斷積累軟件工程知識,更好地理解軟件工程開發(fā)的理論、方法、過程,具備較好的理論與實踐結合的能力,提升學生協(xié)同分工和集成創(chuàng)新的能力。本學校計算機科學專業(yè)正在進行這種教學方法,意在培養(yǎng)更多適應業(yè)界需求的軟件開發(fā)專業(yè)化的人才。