潘理虎,解 丹,張 雷,陳立潮,趙淑芳
(太原科技大學 計算機科學與技術學院,山西 太原 030024)
在計算機科學技術快速發(fā)展的過程中,新的技術和理論被越來越多的學者及專業(yè)人員提出,這使得軟件工程課程的知識點也隨之增多[1]。目前,軟件工程課程的教學內(nèi)容大多還停留在傳統(tǒng)的技術和方法上,并且多年來使用同一教學大綱和評價體系。這種長期不進行更新的教學方法使得軟件工程課程在內(nèi)容的數(shù)量和質(zhì)量上均不能緊跟社會發(fā)展。由于沒有實際應用項目,學生只能是紙上談兵,很難深刻理解軟件工程課程中的一些抽象概念,且學到的知識也很容易遺忘,因而難以很好地掌握軟件工程的方法和技術。
由于軟件工程課程的綜合性較強,教師為了讓學生充分理解知識點,大多采用以幻燈片為主,以板書為輔的教學方式。教師為主講者,而學生為聆聽者[2]。這種情況下,面對復雜、枯燥的知識點,學生并不能夠積極主動的思考。教師耗費大量精力精心備課、授課,但實際傳達給學生的知識量卻大大削減。并且,以教師為主的教學體系中,學生僅能獲得教師所教授的知識。這便限制了學生獲取知識的全面性和前沿性。此外,在以教師為中心的課程體系下,學生缺乏對新技術、理論探究的興趣和動力,主觀能動性得不到充分的調(diào)動和發(fā)揮。
現(xiàn)有的評價體系多以考試成績?yōu)橹?,注重形式上的評價,考核方式單一[3]。這種評價體系會造成學生平時不認真學習,考試的前幾天則找平時認真學習的同學詢問重點進行背誦或把固定題型的方法步驟依靠記憶記住。考試中,學生僅憑借幾天的死記硬背就可以進行答題。由于是短期記憶,對知識點并沒有理解或僅僅是表層的理解,對內(nèi)在的深層意義并不知曉。因此,考完試后學生會很容易忘記之前背誦的知識點。這樣一來,學生在專業(yè)知識和能力并沒有得到提高的情況下,依然會因考前突擊而順利通過考試,更有甚者會取得較高的成績。而對于真正用心學習的同學而言,考試成績并不能準確衡量他們的知識水平、技能掌握和能力達成。所以,以考試為主的結果性評價體系極易造成對學生知識水平和能力達成度的不合理評價。
軟件工程課程是一門理論性、實踐性和工程性都很強的課程,在新工科建設的要求下加強軟件工程人才的培養(yǎng)是高校教育面臨的一個重要挑戰(zhàn)[4]。 “一個紐帶,兩個基本點,三個轉(zhuǎn)變,四種能力”的課程教學方法總體思路如圖1所示。其中,項目是紐帶,貫穿整個教學的全過程。在項目實施的過程中,采用CDIO模式和群體化方法進行項目的推進。當項目完成后,進行成果交付,一些好的項目會持續(xù)完善,直至應用。整個教學法實現(xiàn)由以教師、課本和課堂為中心向以學生、項目、實踐經(jīng)驗為中心的轉(zhuǎn)變,從而培養(yǎng)出具有較高專業(yè)能力并達到工程教育認證標準的學生。
圖1 實踐教學法的總體思路
工程教育認證[5]內(nèi)涵的一個重要的核心是OBE(outcome based education,成果導向教育)理念,而軟件項目是軟件工程課程中的一項重要成果,也是軟件工程教學中一種有效的實踐途徑。因此,本教學法以項目為紐帶。 在軟件工程教學中,只有當學生親身參與到項目中或?qū)Π咐M行實踐時,才會通過自身體驗、思考以及探索加深對課程中知識點的理解。隨著項目的實施,學生會考慮如何進行需求分析;用什么樣的開發(fā)模式;用什么樣的編程語言;怎樣測試才更有效等問題,這些問題會使學生主動思考課堂中的知識點,并將實際問題與課堂知識聯(lián)系起來。在實際應用中學生獲取的不僅僅是最終結果,還有整個過程中分析問題、解決問題、團隊協(xié)作等能力提升。并且在項目驅(qū)動下,在鞏固理論知識的基礎上,學生能夠切身體會到知識的效用,在解決問題中獲得成就感和滿足感,從而進一步激發(fā)學習的興趣和動力,形成一個良性循環(huán)。
以能力產(chǎn)出為導向的項目驅(qū)動教學法中的一個關鍵問題是如何合理的安排教學內(nèi)容,以實現(xiàn)理論和實踐的同步性。該課程共設置66個課時(表1),包括44個理論講授課時,8個校內(nèi)教師指導實驗的實踐課時(實驗Ⅰ,包括對軟件項目進行需求分析、結構設計、編碼實現(xiàn)和測試四部分),10個企業(yè)軟件工程師指導項目的實踐課時(實驗Ⅱ,包括對軟件項目的原型設計、模型建立、編碼實現(xiàn)、測試和項目管理情景化五部分),以及4個項目答辯的課時。通過理論課程和實驗的同步進行,使得理論知識隨著項目的推進而應用,而項目的推進又使得理論知識進一步深化??紤]到美國等發(fā)達國家在多年的計算機科學發(fā)展中所沉淀出的經(jīng)典教材依然有很多值得借鑒的地方,并且現(xiàn)在大多開源社區(qū)如GitHub都是英文的,而Ian Sommerville作為英國著名的軟件工程專家和軟件工程知識體系的專家委員會成員,其著作《Software Engineering》已逐漸被許多高校采用為教材。故本教學中的軟件工程教材采用Ian Sommerville的《Software Engineering》,以張海藩的《軟件工程導論》為主要參考教材。
表1 學時分配表學時 學時
軟件項目的開發(fā)過程是一個繁瑣復雜的過程,在軟件項目開發(fā)中我們引入了CDIO模式和群體化方法,并將好的項目與企業(yè)對接。通過這種模式和方法,學生不僅僅是達到課程基本要求,更多的是提高自身能力,為就職之路奠定良好的基礎。
CDIO是近年來國際教育改革中的重要成果[6]。其在本質(zhì)上區(qū)別于傳統(tǒng)的知識本位的培養(yǎng)模式,是一種能力本位的培養(yǎng)模式。借助CDIO倡導的“做中學”和“基于項目教育和學習”的理念,在講授中以“心理健康治療病人信息系統(tǒng)”和“野外氣象站”兩個工程實例貫穿于課程全過程。教師引導學生學習這兩個實例的各階段,之后啟發(fā)學生在課后對項目進行逐步的推進,使學生在構思、設計、實現(xiàn)、運作的4個層面上得到訓練。
實踐中學生經(jīng)常會遇到各種不同的問題,這些問題出現(xiàn)的不確定性和不統(tǒng)一性導致教師難以及時地針對每個學生一一解答。學生遇到的問題長期不能及時得到解答,就會逐漸降低對課程的興趣。針對課程實踐中存在的問題,一種有效的解決途徑是運用群體化開發(fā)方法,即利用互聯(lián)網(wǎng)的群體智慧、資源和支撐平臺解決軟件工程課程在實踐中遇到的問題[7]。一方面,學生可以借助互聯(lián)網(wǎng)的群體智慧,通過類似CSDN這類互聯(lián)網(wǎng)社區(qū)來即時解決在實際開發(fā)中遇到的問題;另一方面,學生可以在GitHub這類軟件項目平臺上下載軟件系統(tǒng)的源碼,并基于這些開源的代碼和方法快速開發(fā),縮短軟件的開發(fā)周期??傊ㄟ^群體化方法不僅可以認識更多軟件開發(fā)人員,還可以借助互聯(lián)網(wǎng)群體的智慧解答問題、提供資源、反饋經(jīng)驗,而且能夠及時掌握先進的軟件開發(fā)等方面的技術,突破在知識、經(jīng)驗等方面的局限性。
在項目驅(qū)動下,課程和項目相繼展開,整個過程中運用群體化的軟件開發(fā)方法和CDIO模式對學生進行綜合能力的培養(yǎng)。采用分組的形式開展項目和課程,5~6位同學為一組共同完成項目。課后的小組作業(yè)也是由小組團體共同完成。在整個項目的開發(fā)過程中需要配置負責前端、數(shù)據(jù)庫設計、后端、文檔撰寫和測試各一人,還需配置一位負責整個項目安排的整體實力較強的人員。每個人能力的側(cè)重點不同,這樣能夠在項目開發(fā)的過程中最大化地發(fā)揮個人能力。在小組的分工協(xié)調(diào)下,學生之間交流經(jīng)驗,共同促進,從單純地依賴教師逐步向依靠團體能力轉(zhuǎn)變,從被動地接收教師的思想向主動思考轉(zhuǎn)變。
在項目驅(qū)動下,學生可以動手實踐軟件系統(tǒng),不再只是停留在課本上的理論知識,而是逐漸向理論應用過渡。實踐過程中學生在問題得不到解決時會通過互聯(lián)網(wǎng)尋求解決方案,通過對實際問題的解決,學生在項目開發(fā)的各個階段獲得了成就感和滿足感。此外,在分組的團體中,既培養(yǎng)了學生的管理能力,又培養(yǎng)了學生的溝通能力和職業(yè)素養(yǎng)。
在實踐中引入校外企業(yè)工程師對學生的項目進行指導,給學生提供系統(tǒng)連貫的實踐機會和創(chuàng)新能力訓練機會。使學生更早了解實際工作中項目開發(fā)的一些關鍵技術和重要理論。加快了由理論向?qū)嵺`的轉(zhuǎn)變,且學生能夠提早向?qū)I(yè)的軟件開發(fā)人員轉(zhuǎn)變。
通過采用群體化方法和CDIO模式,學生逐步將課本的理論知識轉(zhuǎn)化為實際的項目成果,在思考、探索和交流中逐漸取得進步,并獲得大量的實踐經(jīng)驗。最終從根本上改變傳統(tǒng)的軟件工程課程體系,實現(xiàn)以教師為中心向以學生為中心、以課本為中心向以項目為中心、以課堂為中心向以實踐經(jīng)驗為中心的三個轉(zhuǎn)變。
軟件工程課程改革的主要落腳點在于學生,只有學生自身的能力得到提高,才能說改革是較為成功的。本課程旨在培養(yǎng)學生在軟件工程項目的可行性研究、需求分析、系統(tǒng)設計、編碼測試、系統(tǒng)維護等各階段的工程能力。通過整個項目的實現(xiàn),要求學生能夠獨立撰寫各類軟件開發(fā)文檔;能夠設計中小型軟件系統(tǒng)及大型系統(tǒng)的獨立子系統(tǒng);能夠在多學科環(huán)境中組織和管理軟件項目,合理調(diào)配資源,提升工作質(zhì)量和效率。通過以能力產(chǎn)出為目標,反向設計教學內(nèi)容,又通過對已設計的內(nèi)容進行教學實踐,進而評價教學法是否可以實現(xiàn)學生的能力達成目標。
根據(jù)能力的復雜性和側(cè)重性不同,把軟件工程課程培養(yǎng)的能力與該專業(yè)對應的畢業(yè)要求指標點相對應。包括G2.3、G3.1、G10.1、G11.2四種能力,各項能力在畢業(yè)要求中所占權重見表2。其中,G2.3側(cè)重于問題的分析分解能力;G3.1側(cè)重于問題的解決能力;G10.1側(cè)重于書面表達和口語表達能力;G11.2側(cè)重于溝通、管理能力。
能力產(chǎn)出是開設課程的最終目的,而學生的能力達成度如何量化就在于所設計的課程評價體系。一個良好的課程評價體系應該能夠評價學生的綜合能力。評價的關注點不能只是結果,還應該有過程,在形成性考核中,發(fā)現(xiàn)學生的問題,引導學生主動積極地參與到每一階段的知識學習和技能鍛煉中,從而實現(xiàn)對學生綜合職業(yè)能力的培養(yǎng)。
本教學法建立了一種多樣化的評價體系(表3), 以對學生的交流與合作能力、自學與思考能力、創(chuàng)新與管理能力進行綜合性的評價。本教學法的評價環(huán)節(jié)分為形成性考核和總結性考核兩大部分,各占總成績的50%。每種考核形式按2.5節(jié)的內(nèi)容分為四種能力進行考核??偨Y性考核采用閉卷考試形式對學生進行考核。由于大學教育尊重學生自由發(fā)展,因此,考勤不同于其他形式的考核,缺勤一次在總成績上減去1分,一節(jié)課兩個課時,66個課時中全部缺勤,累計計算應減去33分。這樣若學生自己能力足夠強,那么即使不上課也還是有通過考試的希望。各項考核的評價標準見表4。
表2 各項能力的權重分配
表3 評價環(huán)節(jié)及目標分值 分
表4 評價標準
本學期在我學院的計算機科學與技術16級本科生中開展了此次改革,分為兩個班級,共計82名同學,17個小組,每個小組對應一個項目。這17個項目形式多樣,有“人機交互式圖形開發(fā)系統(tǒng)”“微愛——情侶互動聊天APP”“基于聲紋的音樂檢索系統(tǒng)”“XX校園3D建模系統(tǒng)”“零食速遞”等。
圖2 兩類考核成績分布圖
圖3 總成績頻率分布直方圖
本課程通過第三章的評價體系對學生的綜合能力進行評價。最終情況見圖2、圖3和表5。圖2是形成性考核、總結性考核兩類考核成績區(qū)間分布的統(tǒng)計,形成性考核的成績有一半多都在[80,90)區(qū)間內(nèi),可見,大多數(shù)學生都在認真學習軟件工程課程,并積極進行實踐,較好地實現(xiàn)了以學生為中心的學習。而總結性考核成績集中在[60,70)和[70,80)區(qū)間,出現(xiàn)這種情況的原因一方面是本次總結性考核采用了純英文試題,一些學生的英文水平達不到要求;另一方面是一些學生在實踐中對理論的總結稍有不足。圖3是總成績的頻率分布直方圖??梢钥闯隹偝煽兓境尸F(xiàn)正態(tài)分布,學生成績基本集中在[70,80)區(qū)間,學生成績小于60的和大于等于90的都較少。表5是82名學生目標的平均達成度。實踐結果表明,之前設計的目標在項目驅(qū)動的教學法下較好地實現(xiàn)。今后可在課堂中更多地闡述理論和案例;對UML等各種圖更多地進行講解和實操,適時讓學生進行演示;掌握好項目工作量,及時督促學生反饋以達到更好提升學生能力的目的。
表5 課程目標及平均達成度
我們在這一年的探索研究中率先將以項目為紐帶、以CDIO模式和群體化方法為兩個基本點,以實現(xiàn)三個轉(zhuǎn)變和產(chǎn)出四種能力的軟件工程課程實踐教學法在我學院的計算機科學與技術16級本科生中開展。此次課程改革無論從教材的選擇,還是從過程實施以及評價體系,較之前都有進步,作為一門考試課程,對學生的學習過程和能力給予了客觀的評價,對軟件工程課程教學有著示范作用。目前只進行了一個學期的改革實施,項目實踐時間較短,后續(xù)將擴大項目的實施范圍,進一步提升學生的專業(yè)技能。