鄭珂暉
(福建農(nóng)林大學(xué) 計(jì)算機(jī)與信息學(xué)院軟件工程系,福建 福州)
21世紀(jì)以來(lái),人類(lèi)進(jìn)入了信息化時(shí)代,對(duì)軟件開(kāi)發(fā)提出了更高的要求:能夠及時(shí)響應(yīng)用戶需求變化,提升開(kāi)發(fā)效率、保證開(kāi)發(fā)質(zhì)量,交付有效的、可用的軟件產(chǎn)品。為了實(shí)現(xiàn)這一目標(biāo),近些年來(lái),有些學(xué)者[1-2]提出軟件開(kāi)發(fā)應(yīng)當(dāng)“以構(gòu)造為中心”的觀點(diǎn),認(rèn)為軟件構(gòu)造是軟件開(kāi)發(fā)的中心,應(yīng)該將軟件開(kāi)發(fā)的重心放在軟件構(gòu)造上。
根據(jù)2013年IEEE發(fā)布的SW EBOK3.0的定義[3],軟件構(gòu)造是指通過(guò)詳細(xì)設(shè)計(jì)、編碼、單元測(cè)試、集成測(cè)試、調(diào)試和驗(yàn)證相結(jié)合,創(chuàng)建出具有意義的、可以正常工作的軟件,知識(shí)域可以分成五個(gè)子域,即:軟件構(gòu)造基礎(chǔ)、管理構(gòu)造、構(gòu)造技術(shù)、構(gòu)造工具和實(shí)際考慮。
案例教學(xué)法聚焦于明確的教育目標(biāo),通過(guò)將實(shí)際教育過(guò)程中真實(shí)的情境,引導(dǎo)學(xué)生思考和判斷,進(jìn)而通過(guò)獨(dú)立研究和相互討論,提高學(xué)生分析問(wèn)題和解決問(wèn)題的能力,在實(shí)際教學(xué)中,得到了廣泛的應(yīng)用,近些年來(lái),有不少教師將案例法應(yīng)用于實(shí)際教學(xué)中,取得了較好的教學(xué)效果:唐玲、尹珧人[4]綜合應(yīng)用分組、案例、項(xiàng)目等教學(xué)方法,大大提升了學(xué)生學(xué)習(xí)計(jì)算機(jī)基礎(chǔ)課程的興趣。白守英[5]分析了案例教學(xué)的特征,指出教學(xué)案例要做好選擇,對(duì)構(gòu)建數(shù)學(xué)思維等手段提升學(xué)生學(xué)習(xí)高等數(shù)學(xué)課程的興趣,其中,課后案例教學(xué)等是高等數(shù)學(xué)教學(xué)中應(yīng)用案例教學(xué)的主要策略,有力提升了教學(xué)效果。高涵[6]在教學(xué)實(shí)踐中,通過(guò)分析案例教學(xué)法實(shí)際運(yùn)用中存在的不足,提出應(yīng)該將實(shí)踐和理論相結(jié)合,以此加強(qiáng)案例教學(xué)法與統(tǒng)計(jì)學(xué)教學(xué)的聯(lián)系,使案例教學(xué)法更好地應(yīng)用于統(tǒng)計(jì)學(xué)教學(xué)中。李昕、辛元芳[7]等提出結(jié)合虛擬仿真進(jìn)行案例教學(xué)驅(qū)動(dòng)方法,激發(fā)學(xué)生的學(xué)習(xí)的主動(dòng)性,以“數(shù)字控制直流穩(wěn)壓電源”為案例進(jìn)行“嵌入式系統(tǒng)”課程教學(xué),學(xué)生不僅牢牢掌握大部分知識(shí)點(diǎn),還培養(yǎng)了應(yīng)用開(kāi)發(fā)技能和創(chuàng)新思維,教學(xué)效果顯著提升。
因?yàn)檐浖?gòu)造對(duì)于軟件開(kāi)發(fā)人才的培養(yǎng)是十分重要的,在軟件工程的課程體系中處于核心課程的地位,涵蓋了軟件構(gòu)造的基礎(chǔ)、管理軟件構(gòu)建、構(gòu)造技術(shù)、實(shí)踐問(wèn)題以及軟件構(gòu)造工具等,即包含軟件開(kāi)發(fā)的基本理論、原則,又有軟件開(kāi)發(fā)的最佳實(shí)踐經(jīng)驗(yàn)等,是理論與實(shí)踐相結(jié)合的課程。有關(guān)《軟件構(gòu)造》的課程教學(xué)改革研究在課程專家的努力下,也得到了許多成果。彭鑫[8]結(jié)合與企業(yè)產(chǎn)學(xué)合作的經(jīng)驗(yàn),提出要以軟件構(gòu)造活動(dòng)為中心、突出實(shí)踐化培養(yǎng)特色、體現(xiàn)軟件工程師成長(zhǎng)路徑的軟件工程教學(xué)指導(dǎo)思想,通過(guò)實(shí)踐化教學(xué)方式幫助學(xué)生更好地理解與掌握軟件工程思想和方法。潘家輝、張洋[9]提出在《軟件構(gòu)造》教學(xué)中采用型混合教學(xué)的新模式,以提升教學(xué)水平。李勁華、陳宇[10]提出在軟件工程的課程體系中可以設(shè)置綜合軟件開(kāi)發(fā)技術(shù)、工具和各種應(yīng)用技術(shù)實(shí)踐的《軟件構(gòu)造》課程設(shè)計(jì)及其課程群,可以更好地培養(yǎng)軟件開(kāi)發(fā)的人才。
上述工作對(duì)《軟件構(gòu)造》課程教學(xué)水平的提升起了重要的作用,但是有關(guān)《軟件構(gòu)造》課程中案例教學(xué)的報(bào)道目前相對(duì)較少,具有一定的研究?jī)r(jià)值。在教學(xué)中采用案例式教學(xué)法來(lái)進(jìn)行講解,可以使學(xué)生能夠更好地理解軟件構(gòu)造的基本原理、工具應(yīng)用和實(shí)踐技巧。本文主要介紹了在《軟件構(gòu)造》課程中案例設(shè)計(jì)的一些經(jīng)驗(yàn),分析了《軟件構(gòu)造》教學(xué)中存在的一些問(wèn)題和解決方法,并對(duì)教學(xué)案例設(shè)計(jì)的原則、方法和教學(xué)實(shí)際應(yīng)用效果做些介紹,以期可以拋磚引玉。
在軟件工程課程體系設(shè)置中,一般會(huì)在學(xué)生修完程序設(shè)計(jì)基礎(chǔ)、數(shù)據(jù)結(jié)構(gòu)、數(shù)據(jù)庫(kù)、軟件工程等科類(lèi)基礎(chǔ)課后才進(jìn)入到軟件構(gòu)造的學(xué)習(xí)。學(xué)生經(jīng)過(guò)前面的學(xué)習(xí),已經(jīng)具備了軟件開(kāi)發(fā)的基本要求,但相關(guān)課程的知識(shí)還不能有效地融合在一起為軟件開(kāi)發(fā)服務(wù)。由于大多數(shù)院校開(kāi)設(shè)《軟件構(gòu)造》課程時(shí)間較短,在組織課程教學(xué)時(shí),常存在一些問(wèn)題,主要有:
(1)教學(xué)資源相對(duì)匱乏,缺少相對(duì)權(quán)威的教材和課程配套資源,授課內(nèi)容各有側(cè)重,在教學(xué)大綱的編寫(xiě)、課程教案等還缺少統(tǒng)一、規(guī)范的共識(shí)。
(2)課程講解的主要形式是理論講解。而《軟件構(gòu)造》課程是在相關(guān)理論基礎(chǔ)上實(shí)踐性相對(duì)強(qiáng)的一門(mén)課程,但苦于缺少足夠的案例支撐,對(duì)實(shí)踐講解往往只停留在教材提供的例子上,這些例子有的相對(duì)孤立,較難將不同章節(jié)的知識(shí)內(nèi)容串連在一起。
(3)在實(shí)驗(yàn)課中,要求學(xué)生完成的實(shí)驗(yàn)內(nèi)容與教材提供的案例相似,學(xué)生在完成實(shí)驗(yàn)時(shí)往往直接按照教材提供的代碼來(lái)完成實(shí)驗(yàn),缺少主動(dòng)思考。
為了解決上述問(wèn)題,可以考慮采用案例教學(xué)的方法。因?yàn)閷W(xué)生在前續(xù)課程的學(xué)習(xí)中已經(jīng)有了一定的基礎(chǔ),能夠理解軟件開(kāi)發(fā)中的常見(jiàn)案例,那么,在教學(xué)中建設(shè)從淺入深、不斷推進(jìn)的增量式案例群,可以很好地解決《軟件構(gòu)造》教學(xué)中遇到的上述問(wèn)題,采用案例教學(xué)具有如下優(yōu)點(diǎn):案例如能選擇適當(dāng),可以貫穿于學(xué)習(xí)課程的全程,將各章節(jié)的知識(shí)形成一個(gè)有機(jī)整體;此外,案例講解有助于學(xué)生理解復(fù)雜的、抽象的概念;在基礎(chǔ)案例群上進(jìn)行適當(dāng)?shù)膹V度和深度的擴(kuò)充,有利于學(xué)生在完成實(shí)驗(yàn)時(shí),既有一定的基礎(chǔ),又能主動(dòng)思考,使得構(gòu)造的能力得到切實(shí)的培養(yǎng)。
由于《軟件構(gòu)造》的課程內(nèi)容有涉及模塊化、面向?qū)ο?、?shù)據(jù)庫(kù)、圖形用戶界面、交付使用等內(nèi)容,知識(shí)面較廣,而構(gòu)造活動(dòng)在軟件開(kāi)發(fā)中的重要地位也確定了課程的培養(yǎng)目標(biāo),所以在進(jìn)行教學(xué)案例設(shè)計(jì)前,需要明確案例設(shè)計(jì)的原則,根據(jù)確定的原則,就可以查找素材、依據(jù)教學(xué)內(nèi)容對(duì)素材進(jìn)行編輯,使得案例設(shè)計(jì)能夠直接服務(wù)于教學(xué)。一般認(rèn)為,教學(xué)案例的設(shè)計(jì)要貼近生活,響應(yīng)教學(xué)目標(biāo),有利于學(xué)生理解等[11-12]。對(duì)于《軟件構(gòu)造》課程而言,教學(xué)案例設(shè)計(jì)的主要原則有:
(1)目的性原則:教學(xué)案例設(shè)計(jì)以提升教學(xué)質(zhì)量為根本目的,要緊緊圍繞講授的知識(shí)內(nèi)容來(lái)進(jìn)行案例設(shè)計(jì),幫助同學(xué)們理解,更好地掌握構(gòu)造原理。
(2) 中心性原則:以學(xué)生為中心,做好學(xué)情分析,對(duì)參加課程學(xué)習(xí)的學(xué)生已修課程和掌握的情況要了解,確保案例建立在學(xué)生已有的知識(shí)架構(gòu)之上。
(3)生活化原則:案例選取貼近生活,不要涉及太多的專業(yè)領(lǐng)域知識(shí),一般采用常見(jiàn)的、簡(jiǎn)單的架構(gòu),開(kāi)發(fā)過(guò)程符合《軟件構(gòu)造》規(guī)范化的要求,突出現(xiàn)代增量式軟件開(kāi)發(fā)技術(shù)的應(yīng)用。
(4)集成性原則:案例中要考慮集成若干不同的軟件開(kāi)發(fā)技術(shù),這是因?yàn)楝F(xiàn)代軟件構(gòu)造往往不是只采用單一技術(shù)來(lái)實(shí)現(xiàn)的,需要學(xué)生了解如何整合不同的技術(shù)。
(5)串連性原則:整門(mén)課程不同章節(jié)的案例要能串連起來(lái),從而體現(xiàn)了現(xiàn)代軟件開(kāi)發(fā)的進(jìn)化演變的特征。
上述的原則并不是孤立的,而是一個(gè)有機(jī)的整體,在進(jìn)行案例設(shè)計(jì)時(shí),應(yīng)當(dāng)要依據(jù)授課內(nèi)容和知識(shí)點(diǎn),加以綜合考慮。
在《軟件構(gòu)造》課程中,根據(jù)具體教學(xué)內(nèi)容,按照上述的設(shè)計(jì)原則進(jìn)行教學(xué)案例設(shè)計(jì),可以根據(jù)教學(xué)過(guò)程,即課前、課中、課后和實(shí)驗(yàn)環(huán)節(jié)分段組織實(shí)施。
(1)根據(jù)教學(xué)目標(biāo)、教學(xué)對(duì)象和教學(xué)內(nèi)容,精心設(shè)計(jì)教學(xué)案例,可以在課程組內(nèi)組織《軟件構(gòu)造》任課教師共同編寫(xiě)案例,并對(duì)案例進(jìn)行集體評(píng)審,投票選出最佳的案例。并在最佳案例的基礎(chǔ)上進(jìn)一步細(xì)節(jié),做到案例符合教學(xué)目標(biāo),貼近生活,難度適中。案例設(shè)計(jì)之后,還要根據(jù)使用的效果,進(jìn)行動(dòng)態(tài)更新,及時(shí)將案例中學(xué)生不太容易理解、教學(xué)效果不好的部分進(jìn)行修正,形成真正服務(wù)于教學(xué)、服務(wù)于學(xué)生的金案例。
(2)課前發(fā)布案例包含的問(wèn)題,使得學(xué)生能夠自學(xué)并發(fā)現(xiàn)問(wèn)題。在課程開(kāi)始以前,可以將班級(jí)學(xué)生分組,在每次課前通過(guò)課程QQ群、各慕課平臺(tái)等將案例中的問(wèn)題先發(fā)布出來(lái),引導(dǎo)同學(xué)們做好課前準(zhǔn)備,對(duì)將要講解的內(nèi)容做到“存疑”,帶著解決問(wèn)題的懸念,激發(fā)聽(tīng)課的興趣。而分組的方式,可以保證小組內(nèi)的同學(xué)能夠互相監(jiān)督,共同解決案例中的問(wèn)題,任課教師在課前可以通過(guò)每個(gè)組的小組長(zhǎng)收集同學(xué)們?cè)诶斫獍咐龝r(shí)提出的問(wèn)題。
(3)在課堂講解時(shí),任課教師針對(duì)同學(xué)們?cè)谡n前準(zhǔn)備中提出問(wèn)題,在案例講解時(shí),對(duì)典型的問(wèn)題逐一講解,注重將軟件構(gòu)造的基本理論與工程實(shí)踐相結(jié)合,例如在講解到案例中實(shí)際構(gòu)造的實(shí)例時(shí),要站在同學(xué)的角度來(lái)分析為什么要這么構(gòu)造,這么做的原理是什么,有沒(méi)有可替代的方案,這些方案中哪些最優(yōu),等等,通過(guò)啟發(fā)和引導(dǎo)學(xué)生學(xué)習(xí),從而達(dá)到“釋疑”的效果。
(4)在課程結(jié)束后,任課教師應(yīng)當(dāng)將案例的構(gòu)造思路、構(gòu)造涉及的知識(shí)(如算法、數(shù)據(jù)結(jié)構(gòu))等內(nèi)容作為參考資料發(fā)布在課程群或慕課平臺(tái)上,供學(xué)生下載復(fù)習(xí),而案例提供給學(xué)生的最好是用偽代碼表示的方案,請(qǐng)同學(xué)們用熟悉的編程語(yǔ)言來(lái)實(shí)現(xiàn),同學(xué)們可以按照小組來(lái)提交自己模仿案例構(gòu)造的軟件,提交給教師后,可以采用互評(píng)與教師評(píng)閱相結(jié)合的方式對(duì)同學(xué)們提交的作品打分,以促進(jìn)學(xué)生學(xué)習(xí)的興趣。
(5)在實(shí)驗(yàn)環(huán)節(jié),可以在課堂案例的基礎(chǔ)上,舉一反三,在原有案例的功能、性能等方面進(jìn)行適度的擴(kuò)展,讓同學(xué)們?cè)谇捌谕瓿傻能浖?gòu)造模塊的基礎(chǔ)上,達(dá)到在鞏固所學(xué)知識(shí)的同時(shí)有新的進(jìn)步。
這樣,就可以將教學(xué)案例貫穿于整個(gè)教學(xué)環(huán)節(jié),但在每個(gè)環(huán)節(jié)中,又有所側(cè)重,學(xué)生在課前、課中、課后、實(shí)驗(yàn)環(huán)節(jié)中都能領(lǐng)會(huì)到軟件構(gòu)造的基本原理與思想,并能動(dòng)手實(shí)踐,在案例中學(xué)習(xí),在學(xué)習(xí)中理解案例中包含的軟件構(gòu)造的基本原理、構(gòu)造工具和復(fù)用方法等。
筆者開(kāi)設(shè)的《軟件構(gòu)造》課程的學(xué)生為軟件工程專業(yè)大三的學(xué)生,軟件工程的相關(guān)專業(yè)基礎(chǔ)課也已經(jīng)修完,已經(jīng)具備了較好的編程基礎(chǔ)。掌握學(xué)生學(xué)情以后,考慮采用一個(gè)貫穿課程全程的案例來(lái)輔助教學(xué)。根據(jù)教學(xué)大綱的要求,課程章節(jié)的設(shè)置,案例采用一個(gè)大家熟悉的數(shù)字計(jì)算器開(kāi)發(fā)作為案例。案例設(shè)置如表1所示。
表1 軟件工程專業(yè)《軟件構(gòu)造》課程章節(jié)知識(shí)與案例
這樣,從一個(gè)簡(jiǎn)單的沒(méi)有圖形界面的數(shù)字計(jì)算器逐步演化為一個(gè)功能齊全的可以使用的軟件產(chǎn)品,在案例演化的過(guò)程中,同學(xué)們可以較好地理解各章節(jié)的知識(shí)點(diǎn),并能舉一反三,在實(shí)際的軟件開(kāi)發(fā)中能夠掌握軟件構(gòu)造的基本原理,應(yīng)用好軟件構(gòu)造的基本方法、工具。
在課前、課中、課后和實(shí)驗(yàn)環(huán)節(jié)使用案例,可以采用形式多樣的方法。例如:在課前,提出數(shù)字計(jì)算器的案例時(shí),可以先將問(wèn)題發(fā)布出來(lái),由于課程聚焦于軟件構(gòu)造,所以軟件的需求任課教師可以先整理好提供給學(xué)生,學(xué)生們可以根據(jù)數(shù)字計(jì)算器開(kāi)發(fā)提出開(kāi)發(fā)方案,如采用什么樣的數(shù)據(jù)結(jié)構(gòu)、采用什么樣的算法等,并對(duì)方案進(jìn)行評(píng)估,每個(gè)小組給出一個(gè)建議的構(gòu)造方案。在課堂上,教師講解案例時(shí),采用信息化的工具用形象化的方法來(lái)演示案例中的構(gòu)造方案,和學(xué)生課前預(yù)習(xí)提出的方案進(jìn)行比較,解釋學(xué)生的疑問(wèn)。而在課后,可以請(qǐng)每個(gè)小組將案例的構(gòu)造用具體的編程工具(如Java)實(shí)現(xiàn),并將每個(gè)構(gòu)造都發(fā)布在Git等平臺(tái)上,方便同學(xué)們交流學(xué)習(xí)。而在實(shí)驗(yàn)課環(huán)節(jié),則在前期學(xué)習(xí)的基礎(chǔ)上,給出開(kāi)放性的實(shí)驗(yàn),要求在普通數(shù)字計(jì)算器的基礎(chǔ)上,從不同的層面考慮構(gòu)造。
通過(guò)這樣的形式,同學(xué)們都能較好地完成數(shù)字計(jì)算器的構(gòu)造,各小組提交的構(gòu)造都能做到源于案例、高于案例,達(dá)到了教學(xué)效果。
由于軟件構(gòu)造已經(jīng)成為現(xiàn)代軟件開(kāi)發(fā)的重要階段,構(gòu)造質(zhì)量直接決定了軟件產(chǎn)品的質(zhì)量和用戶使用體驗(yàn)等。而構(gòu)造本身是理論與實(shí)踐高度結(jié)合的活動(dòng),采用純理論教學(xué),學(xué)生學(xué)習(xí)起來(lái)較為困難。實(shí)際教學(xué)中,注重將學(xué)生之前所學(xué)的知識(shí)整合在一起,按照軟件構(gòu)造的原理、采用各種構(gòu)造技術(shù)和工具,完成軟件產(chǎn)品的開(kāi)發(fā),是實(shí)踐性較強(qiáng)的課程,通過(guò)設(shè)計(jì)較好的案例能夠幫助學(xué)生掌握好該門(mén)課程。
在案例的選擇和設(shè)計(jì)時(shí),要按照五個(gè)基本原則,進(jìn)行合理設(shè)計(jì),并且通過(guò)適當(dāng)?shù)臋C(jī)制,如課程組內(nèi)部評(píng)審等來(lái)保證案例能夠較好地符合課程需要,此外要加強(qiáng)案例在實(shí)驗(yàn)環(huán)節(jié)的作用,在實(shí)驗(yàn)中源于案例,而實(shí)驗(yàn)后學(xué)生構(gòu)造成果高于案例。
此外,還需要注意到,軟件構(gòu)造的新技術(shù)、新方法不斷涌現(xiàn),在進(jìn)行教學(xué)引入案例時(shí),要將最新的構(gòu)造方法、構(gòu)造工具、構(gòu)造思想引入到案例中,使同學(xué)們能夠較好地掌握軟件構(gòu)造技術(shù)發(fā)展的最新前沿,更好地為軟件工程培養(yǎng)大量合格人才。