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