盧慧雅,王 磊
(北京信息科技大學(xué) 信息管理學(xué)院,北京 100192)
理工類院校的面向?qū)ο蟪绦蛟O(shè)計(jì)課程普遍選取Java 作為授課語言,Java 具有語法嚴(yán)謹(jǐn)、與平臺(tái)無關(guān)、安全性和健壯性良好等特點(diǎn),同時(shí)也是JavaWeb 開發(fā)的前導(dǎo)課程。傳統(tǒng)的實(shí)驗(yàn)教學(xué)模式是在理論授課結(jié)束后,安排一定學(xué)時(shí)的綜合實(shí)驗(yàn),試圖達(dá)到理解和鞏固知識(shí)模塊、提高設(shè)計(jì)與編碼的能力。然而,部分實(shí)驗(yàn)存在過程單一、內(nèi)容枯燥乏味、綜合拓展不足的問題,造成學(xué)生興趣下降,教師的教學(xué)效果和學(xué)生的動(dòng)手能力都不盡如人意。
以信管專業(yè)面向?qū)ο蟪绦蛟O(shè)計(jì)課程的綜合實(shí)驗(yàn)為例,通常教師下發(fā)實(shí)驗(yàn)任務(wù)后不再手把手指導(dǎo),學(xué)生依據(jù)需求規(guī)格說明自行設(shè)計(jì)、編碼、調(diào)試、發(fā)布。學(xué)生反映知識(shí)點(diǎn)龐雜、晦澀,設(shè)計(jì)理念不清晰,不知從何著手,普遍感到邏輯思維難度大,基本都是以“做完”實(shí)驗(yàn)為目的,而不是追求“做好”實(shí)驗(yàn)。實(shí)驗(yàn)答辯審核時(shí),教師限于時(shí)間和精力,也是快速檢查學(xué)生的系統(tǒng)功能和界面是否符合要求,很少關(guān)注編碼細(xì)節(jié)。學(xué)生的設(shè)計(jì)思路五花八門,代碼質(zhì)量參差不齊,很難達(dá)到實(shí)驗(yàn)設(shè)定目標(biāo)。傳統(tǒng)的實(shí)驗(yàn)步驟如下:首先對系統(tǒng)需求進(jìn)行功能梳理,沒有模塊化設(shè)計(jì),少數(shù)類文件承擔(dān)全部功能;接著完成臃腫的源程序編碼,對系統(tǒng)功能進(jìn)行抽樣檢查;最后發(fā)布可能有隱患的系統(tǒng)。
出現(xiàn)上述問題的主要原因在于:雖然某些章節(jié)結(jié)束后會(huì)有對應(yīng)的實(shí)驗(yàn)課時(shí),但不是綜合實(shí)驗(yàn),知識(shí)點(diǎn)串結(jié)較少,僅需少量源文件就能完成功能要求,系統(tǒng)設(shè)計(jì)隨意、粗糙。最后在綜合實(shí)驗(yàn)環(huán)節(jié),學(xué)生還沒有訓(xùn)練好軟件工程化的思想,不懂得模塊的概念和重要性,自然沒有能力進(jìn)行分層設(shè)計(jì),軟件質(zhì)量差強(qiáng)人意。
實(shí)驗(yàn)初期,教師不刻意教授模塊化設(shè)計(jì)思想,讓學(xué)生通過自主探索或者依據(jù)經(jīng)驗(yàn)進(jìn)行系統(tǒng)設(shè)計(jì)和開發(fā),當(dāng)大部分同學(xué)出現(xiàn)思維混亂、編碼亂套的時(shí)候,教師適當(dāng)介入,引導(dǎo)學(xué)生思考問題出現(xiàn)的原因,查閱資料并討論可行的解決方案。
教師此時(shí)引入一種基于MVC 思想[1]的設(shè)計(jì)方案,讓學(xué)生初步認(rèn)知概念和模式。MVC 是model,view,controller 的簡稱,強(qiáng)調(diào)以業(yè)務(wù)功能為核心,將系統(tǒng)在邏輯上分為視圖表現(xiàn)層、業(yè)務(wù)控制層和實(shí)體模型層,各層彼此獨(dú)立又相互協(xié)作。不同層各司其職,有利于通過工程化、工具化管理程序代碼,可維護(hù)性好、復(fù)用性高、部署快速,具有較低的生命周期成本。
優(yōu)化后的實(shí)驗(yàn)步驟在梳理系統(tǒng)功能后,進(jìn)行模塊劃分和組件設(shè)計(jì),對模塊實(shí)施迭代編碼,接著開展單元測試,測試通過才能持續(xù)集成,直至系統(tǒng)功能檢查無誤,然后發(fā)布穩(wěn)定的系統(tǒng)。
實(shí)驗(yàn)內(nèi)容強(qiáng)化模塊化思想,結(jié)合案例驅(qū)動(dòng)[2]或者項(xiàng)目導(dǎo)向[3]的教學(xué)模式,引導(dǎo)學(xué)生理解設(shè)計(jì)模式,訓(xùn)練學(xué)生一步步迭代完成實(shí)驗(yàn)。
實(shí)驗(yàn)方式由原先的線下編碼、線下提交、教師人工審核升級為線下編碼、線上提交、平臺(tái)自動(dòng)審核。考慮信管專業(yè)特點(diǎn),選取信息處理類的典型實(shí)驗(yàn)案例,經(jīng)過裁剪、整合后部署到學(xué)院的實(shí)訓(xùn)教育平臺(tái)[4]上。系統(tǒng)經(jīng)過科學(xué)的模塊化設(shè)計(jì),每個(gè)模塊再被拆分為若干子任務(wù),子任務(wù)有順序要求,掛接在里程碑節(jié)點(diǎn)上。按照軟件工程化的要求,依次進(jìn)行迭代開發(fā),學(xué)生不能任意選擇某個(gè)節(jié)點(diǎn),必須嚴(yán)格按照開發(fā)流程進(jìn)行。教師從繁瑣的輔導(dǎo)和答疑中解脫出來,隨時(shí)在后臺(tái)查看實(shí)驗(yàn)進(jìn)展情況,有針對性地提醒和講解,能夠?qū)W⒂趯?shí)驗(yàn)案例的業(yè)務(wù)規(guī)則定制,提高教學(xué)效率。實(shí)驗(yàn)進(jìn)度如圖1 所示。
圖1 實(shí)驗(yàn)進(jìn)度
課題組選擇模擬文本界面的“團(tuán)隊(duì)開發(fā)人員調(diào)度軟件”作為綜合實(shí)驗(yàn)案例,系統(tǒng)以實(shí)現(xiàn)員工顯示及團(tuán)隊(duì)人員調(diào)度為目標(biāo),以數(shù)組作為存儲(chǔ)數(shù)據(jù)的載體,完成數(shù)組的創(chuàng)建、顯示、查詢、增加、刪除等操作,考查多個(gè)知識(shí)點(diǎn)的掌握情況:多態(tài)、對象的關(guān)聯(lián)、異常的發(fā)生與處理[5]等。學(xué)生在實(shí)驗(yàn)過程中理解面向接口的編程方法,學(xué)習(xí)模塊化設(shè)計(jì)。實(shí)驗(yàn)過程采取單人單組、獨(dú)立開發(fā)的方式,要求實(shí)現(xiàn)以下功能。
(1)軟件采用單級菜單方式工作。當(dāng)軟件運(yùn)行時(shí),在主界面根據(jù)指定的數(shù)據(jù)顯示公司所有成員列表。
(2)根據(jù)菜單提示,基于現(xiàn)有的公司成員,組建一個(gè)開發(fā)團(tuán)隊(duì)。組建過程包括將成員插入團(tuán)隊(duì)中,或從團(tuán)隊(duì)中刪除某成員,還可以列出團(tuán)隊(duì)中現(xiàn)有成員。
(3)開發(fā)團(tuán)隊(duì)成員包括架構(gòu)師、設(shè)計(jì)師和程序員,既有總?cè)藬?shù)限制,也有人員類型數(shù)量限制,如果操作不符合預(yù)設(shè)規(guī)則,將觸發(fā)和拋出自定義異常。
(4)菜單某項(xiàng)操作成功后,按回車鍵將重新顯示主界面。
教師依托實(shí)訓(xùn)教育平臺(tái),詳細(xì)講解模塊化分層的概念和設(shè)計(jì)方案,指導(dǎo)學(xué)生完成實(shí)驗(yàn)步驟的調(diào)整,即將系統(tǒng)劃分為list 視圖模塊(對應(yīng)表現(xiàn)層V)、manage 管理模塊(對應(yīng)控制層C)和domain 實(shí)體模塊(對應(yīng)模型層M),如圖2 所示。
圖2 系統(tǒng)模塊分層結(jié)構(gòu)
其中l(wèi)ist 視圖模塊為主控模塊,由界面顯示類負(fù)責(zé)顯示菜單和退出系統(tǒng),通過調(diào)用服務(wù)模塊提供的方法完成人機(jī)交互功能;manage 管理模塊為實(shí)體對象的管理層,響應(yīng)視圖模塊發(fā)送的請求,由公司員工管理類維護(hù)公司員工、團(tuán)隊(duì)人員管理類維護(hù)團(tuán)隊(duì)成員,同時(shí)處理由異常類傳遞的各種失敗信息;domain 實(shí)體模塊包含員工類及使用的設(shè)備信息,起到基礎(chǔ)數(shù)據(jù)支撐作用。這里體現(xiàn)了分而治之的MVC 設(shè)計(jì)思想,組織結(jié)構(gòu)清晰、系統(tǒng)功能明確,使學(xué)生基于問題驅(qū)動(dòng)加深認(rèn)識(shí)和理解模塊化的軟件工程思想。
每個(gè)模塊再依據(jù)子任務(wù),設(shè)計(jì)不同數(shù)量的組件類即單元文件。學(xué)生在“學(xué)練問”的過程中腦海已有比較清晰的認(rèn)識(shí),所以組件類的創(chuàng)建就不感覺難度了。指導(dǎo)學(xué)生繼續(xù)完成實(shí)驗(yàn)步驟的調(diào)整,即每一個(gè)單元文件迭代編碼結(jié)束后都使用模擬數(shù)據(jù)進(jìn)行測試,檢查功能是否正確和健壯,既要選擇合理的模擬數(shù)據(jù)驗(yàn)證功能是否完整,還要使用非法的模擬數(shù)據(jù)檢驗(yàn)異常的捕獲和處理情況。學(xué)生在不同場景中深刻理解異常的發(fā)生原因,能夠掌握異常的捕獲和處理方法,同時(shí)也能滲透單元測試[6]的概念和方法,體會(huì)軟件質(zhì)量的重要性。
節(jié)點(diǎn)分配的任務(wù)經(jīng)過編碼和測試后,進(jìn)行線上提交,實(shí)訓(xùn)教育平臺(tái)預(yù)置的評價(jià)規(guī)則對源文件自動(dòng)審核,若不符合規(guī)范將拒絕提交操作,直至學(xué)生的修改符合要求為止。經(jīng)過若干任務(wù)的迭代,系統(tǒng)搭建比較完整了,實(shí)驗(yàn)進(jìn)入驗(yàn)收和總結(jié)階段。
MVC 設(shè)計(jì)思想在高年級的Java Web 課程才會(huì)詳細(xì)講解,嘗試將知識(shí)點(diǎn)進(jìn)行適度前移,并與實(shí)驗(yàn)融合,以問題為導(dǎo)向激發(fā)學(xué)生對模塊分層的興趣,理解“良好的設(shè)計(jì)是成功的一半”“MVC設(shè)計(jì)思想是系統(tǒng)的核心”[7]。
實(shí)驗(yàn)依托實(shí)訓(xùn)教育平臺(tái),將系統(tǒng)功能劃分為若干模塊,使用分層迭代的軟件開發(fā)思路,模塊結(jié)構(gòu)符合MVC 設(shè)計(jì)思想,為學(xué)生以后進(jìn)行Java Web 的學(xué)習(xí)打下扎實(shí)基礎(chǔ),起到水平提升和能力拔高的作用。
教師在實(shí)驗(yàn)過程中循序漸進(jìn)地引導(dǎo)學(xué)生發(fā)現(xiàn)問題,培養(yǎng)學(xué)生主動(dòng)思考的習(xí)慣,能夠有效提升Java 實(shí)驗(yàn)教學(xué)的質(zhì)量和效果,使學(xué)生真正具備解決復(fù)雜問題的工程能力。
該實(shí)驗(yàn)案例已應(yīng)用在信管專業(yè)不同年級的實(shí)驗(yàn)教學(xué)中,實(shí)驗(yàn)學(xué)時(shí)可自適應(yīng)裁剪和擴(kuò)充??紤]低年級學(xué)生的理解程度與知識(shí)儲(chǔ)備,可以選取前4 學(xué)時(shí)作為章節(jié)實(shí)驗(yàn),只完成公司員工的列表功能,即將靜態(tài)字符串?dāng)?shù)組中的數(shù)據(jù)逐項(xiàng)構(gòu)建為具有繼承結(jié)構(gòu)的員工對象,加載到動(dòng)態(tài)對象數(shù)組中,由公司員工管理類負(fù)責(zé)把對象信息打印在屏幕上。團(tuán)隊(duì)人員管理類和異常類不參加系統(tǒng)工作,也沒有人機(jī)交互功能,但MVC 設(shè)計(jì)思想依然能夠嵌入實(shí)驗(yàn)?zāi)繕?biāo)和內(nèi)容里;還可以將完整項(xiàng)目放入高年級的專業(yè)實(shí)訓(xùn)中,合計(jì)16 學(xué)時(shí)作為綜合實(shí)驗(yàn),要求實(shí)現(xiàn)全部業(yè)務(wù)邏輯,即系統(tǒng)提供數(shù)組的維護(hù)操作,從而完成團(tuán)隊(duì)的人員調(diào)度。團(tuán)隊(duì)人員管理類和異常類參加系統(tǒng)工作,人機(jī)交互功能豐富,MVC 設(shè)計(jì)思想更加深入。
教學(xué)實(shí)踐表明,大部分學(xué)生普遍感到實(shí)驗(yàn)的形式有趣、內(nèi)容新穎,對理論知識(shí)的掌握以及對動(dòng)手能力的提高幫助很大,同時(shí)能夠進(jìn)一步消化理解抽象的模塊化編程理念,熟悉軟件項(xiàng)目的工程化規(guī)范。
教學(xué)模式與信息技術(shù)與時(shí)俱進(jìn),可以繼續(xù)探討如果實(shí)訓(xùn)教育平臺(tái)使用大數(shù)據(jù)的方式,采集和存儲(chǔ)多維教學(xué)信息,輔以人工智能進(jìn)行決策分析,個(gè)性化的教學(xué)效果和反饋會(huì)更加突出,以便盡早實(shí)現(xiàn)專業(yè)知識(shí)與技能素養(yǎng)的雙向思維貫通。