李亞紅 (南陽理工學(xué)院計算機與信息工程學(xué)院,河南 南陽473004)
《軟件工程》是高等院校計算機專業(yè)教學(xué)中的一門必修課程,涉及計算機、數(shù)學(xué)、管理等多個學(xué)科的領(lǐng)域知識,是在軟件開發(fā)過程中不斷總結(jié)經(jīng)驗而獲取的理論課程。在當(dāng)前市場情況下,無論是軟件管理者,還是項目開發(fā)者、測試者都需要掌握軟件工程的原理、方法和技術(shù)。否則,這個項目就有可能呈現(xiàn)出 “軟件危機”的特性,即項目的延期、費用的超支、質(zhì)量的降低甚至最后的軟件失敗。作為一名《軟件工程》的教師,如何培養(yǎng)學(xué)生具備有軟件工程的開發(fā)思想,如何搞好這門課的教學(xué),是擺在面前的一道難題。
實際教學(xué)中,《軟件工程》課程的教學(xué)效果也并不如人意,學(xué)生很難掌握過多的知識點,即使掌握,也只能是從理論記憶方面,針對軟件工程本身的抽象性和應(yīng)用性,又很難將其應(yīng)用到具體實例當(dāng)中,致使學(xué)生所學(xué)和社會所需很難接軌,不能滿足市場的需求,不能獲得較強的實踐能力。下面,筆者根據(jù)自身從事軟件工程的教學(xué)經(jīng)驗,就 《軟件工程》課程特點、學(xué)生學(xué)習(xí)和教學(xué)安排等幾個方面闡述了自己的想法。
軟件工程的目的是生產(chǎn)出有正確性、可用性以及開銷合宜的產(chǎn)品。圍繞這個目標,經(jīng)過總結(jié)而得出的適用于所有項目的原則、方法和技術(shù)的相關(guān)理論知識,是所有項目的抽象。
軟件工程的應(yīng)用體現(xiàn)在項目的整個開發(fā)過程中,包括可行性分析、需求分析、設(shè)計、編碼、測試、運行與維護。每一個階段的結(jié)果都直接影響到下一個階段的成敗。例如在需求分析階段產(chǎn)生的一個小決定,發(fā)生的一個小變化,都可能對軟件的后期階段產(chǎn)生嚴重的影響,即錯誤的放大效應(yīng)。
另外,軟件工程是經(jīng)驗的總結(jié),它既包括成功項目的經(jīng)驗,又包括失敗項目的經(jīng)驗。要從實際項目中不斷總結(jié)經(jīng)驗,不斷提升課程內(nèi)容。尤其軟件工程適用在一些較大型軟件項目中更顯示出它的意義。例如建大廈必須進行設(shè)計,而建寵物窩則不需要設(shè)計。
所以軟件工程的課程內(nèi)容來源于實踐、高于實踐又要應(yīng)用于實踐。
根據(jù) 《軟件工程》課程內(nèi)容的特點和多年教學(xué)的實際情況,發(fā)現(xiàn)學(xué)生在學(xué)習(xí)的過程中存在的問題主要表現(xiàn)課程內(nèi)容的枯燥乏味、學(xué)習(xí)中的被動性等方面。
1)學(xué)生對 《軟件工程》的抽象理論容易感到枯燥乏味 《軟件工程》主要講解的是原則和方法,不怎么涉及軟件算法,也沒有較強的邏輯推理。不能帶給學(xué)生智力上的快感,也不能激發(fā)學(xué)生的興趣和熱情。而且由于缺乏開發(fā)經(jīng)驗,學(xué)生很難在頭腦中將 《軟件工程》的抽象理論和實際情況聯(lián)系起來,因此較難對這門課產(chǎn)生興趣。
2)學(xué)生難以參與軟件開發(fā)的全過程 學(xué)生在學(xué)習(xí)的過程中,僅能抽象的學(xué)習(xí)軟件開發(fā)的過程,很少有機會參與軟件開發(fā)的整個過程。學(xué)生開發(fā)的系統(tǒng)大多只是應(yīng)付教師的檢查,一般不會交付使用,沒有經(jīng)受客戶的真正檢測,代碼里面的很多錯誤也被隱藏。但是這些錯誤有可能是編碼前面的各個階段所隱藏的。如果學(xué)生看不到錯誤,也就不能體會到自己在需求分析、設(shè)計等各個階段工作對軟件成果造成的影響。另外,一些實踐環(huán)節(jié)如課程設(shè)計等,涉及的大部分是小型軟件項目,使得學(xué)生容易輕視軟件工程的學(xué)習(xí),甚至?xí)X得沒有作用。
1)采用案例教學(xué) 《軟件工程》講授的原理、方法和技術(shù)都具有抽象性,容易產(chǎn)生枯燥乏味的感覺,為了使學(xué)生深刻領(lǐng)會軟件工程的思想和方法,在教學(xué)中引入案例教學(xué),將復(fù)雜抽象的概念用具體生動的案例進行詮釋,能夠收到很好的效果。具體可采用以下步驟:①設(shè)計一個典型的、完整的、易予理解的、實際的軟件項目案例。在整個教學(xué)過程中,結(jié)合案例講解每一個知識點,將實際案例作為雜亂知識點的主線,教師可以從案例的細節(jié)出發(fā),從具體的分析出發(fā),完成整個課程的講解。另外在難度系數(shù)比較高的知識點上,可以引入生活的實際應(yīng)用,加深學(xué)生的理解。例如模塊之間的耦合性,可以將其利用人的肢體去表示每一個模塊,然后肢體和肢體之間的關(guān)聯(lián)描述耦合度的強弱。這樣方便學(xué)生記憶,也易于掌握。②小組討論案例。將學(xué)生分組,然后每位學(xué)生對要解決的問題進行分析和說明,利用所學(xué)知識點提出解決的措施、方法,并要求每組做好記錄。最后由小組推薦一位同學(xué)來發(fā)言說明小組的解決方法,使得學(xué)生體會到軟件開發(fā)中成員合作的重要性,并學(xué)會知識的應(yīng)用。③教師總結(jié)。在學(xué)生討論完后,教師要進行總結(jié),對于學(xué)生提出的解決方案給與補充或者添加新的解決方案,畢竟在軟件開發(fā)過程中,解決方案并不是唯一的。教師在總結(jié)過程中要注意強調(diào)所學(xué)知識如何應(yīng)用到案例,加深學(xué)生的理解。其次要強調(diào)原則性的問題,進而誘發(fā)出學(xué)生更進一步的思考。
案例1 在傳統(tǒng)的開發(fā)方法和面向?qū)ο蟮拈_發(fā)方法中,采用 《網(wǎng)上購物系統(tǒng)》作為案例教學(xué),使得學(xué)生從中體會到軟件開發(fā)的流程。同時將學(xué)生分組,每小組跟隨課程的進度完成軟件的整體開發(fā),包括可行性分析、需求分析、概要設(shè)計、詳細設(shè)計、編碼、測試直至最終提交的各種文檔。每個階段都要有成果展示,最后進行評分總結(jié)。這樣,學(xué)生邊聽課,邊實踐,從而正確地運用教師傳授的理論知識包括結(jié)構(gòu)化的開發(fā)方法和面向?qū)ο蟮拈_發(fā)方法設(shè)計出一個比較科學(xué)、合理的系統(tǒng)。這種案例模擬教學(xué)使得學(xué)生能將理論和實踐結(jié)合起來,加深對理論知識難點和重點的理解,鍛煉了實際開發(fā)能力。
2)被動式學(xué)習(xí)轉(zhuǎn)換為主動式學(xué)習(xí) 它是對教師和學(xué)生關(guān)系的重新定位。教師應(yīng)該轉(zhuǎn)變角色,激發(fā)學(xué)生自主學(xué)習(xí)的興趣和信心,要讓學(xué)生由原來的 “要我學(xué)”的被動式學(xué)習(xí)逐漸轉(zhuǎn)換為 “我要學(xué)”的主動學(xué)習(xí),是要學(xué)生由 “學(xué)會”到 “會學(xué)”。從以下幾個方面來提高學(xué)生主動性學(xué)習(xí)的習(xí)慣:①尊重每一個發(fā)言者,讓學(xué)生掌握一些主動學(xué)習(xí)的技巧,并在實踐中逐漸提高。②教師注意自己在教學(xué)過程中的指令性語言,要盡量使用有利于對話活動開展的指令。比如,“請大家一起來思考這個問題”、“大家可以針對前面同學(xué)的發(fā)言來表達自己的想法”等等。③變 “教師講解”為 “學(xué)生主講”,從根本上解決了 “以學(xué)生為主題”這一課堂的基本問題,它把整個教學(xué)過程設(shè)計為幾個階段,每一個階段都由學(xué)生自行設(shè)計,自我調(diào)控,自主完成,自我評價,學(xué)生真正成了課堂教學(xué)的主人。
另外,教師可以通過設(shè)立多級學(xué)習(xí)目標和多樣的學(xué)習(xí)方式,讓不同的學(xué)生都能根據(jù)自己的實際需要選擇到合適的內(nèi)容;教師還應(yīng)給學(xué)生提供多樣化的自主探索空間,鼓勵不同意見和創(chuàng)造性思路的迸發(fā),鼓勵多樣化的問題解決方法。教師可以根據(jù)學(xué)生的能力差異、水平差異針對性地實施分層次教學(xué),增強其學(xué)習(xí)的信心;也可以采用伙伴教學(xué)的方法,變學(xué)生的個體差異為資源,讓學(xué)生在參與合作中互相學(xué)習(xí)并充分發(fā)揮自己的長處,協(xié)同完成學(xué)習(xí)任務(wù)。
案例2 在面向?qū)ο筌浖_發(fā)過程中,引入點是面向?qū)ο蟮幕靖拍?(類、對象和消息)和特征(抽象性、封裝性、繼承性和多態(tài)性)。因為學(xué)生已學(xué)習(xí)過面向?qū)ο蟮拈_發(fā)語言,所以給出學(xué)生實例,讓學(xué)生自己來分析其中存在的概念和特征的體現(xiàn),并鼓勵學(xué)生自己講解。如 “昨天我的一個朋友結(jié)婚了”,讓學(xué)生采用想象的思維模型體現(xiàn)在這個描述中,可以想到的概念,描述概念的屬性以及概念和概念之間存在的關(guān)系、概念的表示形態(tài)等等。加深面向?qū)ο蟾拍畹牧私?,并通過概念之間的關(guān)系等引出建模思想,進而講解面向?qū)ο蟮拈_發(fā)方法。
3)改變單一的教學(xué)模型 在教學(xué)模型改變中,要從教學(xué)實際出發(fā),根據(jù)不同的教學(xué)目標、內(nèi)容、對象和條件等,靈活、恰當(dāng)?shù)剡x用教學(xué)方法,并善于將各種方法有機地結(jié)合起來[1]。任何一種方法和模式的選擇和使用,都應(yīng)該建立在深入理解其內(nèi)涵的基礎(chǔ)上。如啟發(fā)式教學(xué)模式,就是根據(jù)教學(xué)目的、內(nèi)容、學(xué)生的知識水平和知識規(guī)律,運用各種教學(xué)手段,采用啟發(fā)誘導(dǎo)辦法傳授知識、培養(yǎng)能力,使學(xué)生積極主動地學(xué)習(xí),以促進身心發(fā)展。這里要著重說明,啟發(fā)式教學(xué)不僅是教學(xué)方法,更是一種教學(xué)思想,是教學(xué)原則和教學(xué)觀。將其應(yīng)用到 《軟件工程》教學(xué)中,主要模式見圖1。
案例3 在軟件工程的教學(xué)過程中,針對不同的教學(xué)目標和教學(xué)重點、難點,可以采用如下模式:①在講解軟件生命周期時,可以采用引導(dǎo)教學(xué)方式。“人的生命是有限的,整個生命過程可以劃分為哪些階段呢”,進而引出問題 “軟件項目的生命是否有限呢?”“如果是有限了,它可能包括哪些階段呢?”通過這些問題引入學(xué)生不斷去思考。②在需求分析階段,可以采用情景教學(xué)法。對于需求的獲取,引入電影 《誰能讀懂他的心》,讓同學(xué)們分析電影中的情節(jié),了解演員的心理,進而引入到軟件中,分析客戶的心理,分析客戶的需求,并能采用語言復(fù)述的能力表達,鍛煉學(xué)生的分析能力和語言表達能力。
4)加強實踐教學(xué) 以畢業(yè)設(shè)計為項目的軟件工程教學(xué),優(yōu)點主要有:①提高了學(xué)生的綜合分析、設(shè)計能力。學(xué)生從基礎(chǔ)的市場調(diào)研開始,完成可行性分析、需求分析、設(shè)計、編碼等工作,對軟件項目開發(fā)的整個生命周期有了一定的了解和認識,加深課堂學(xué)習(xí)的理論知識,從實踐中再一次獲取知識。②提高了學(xué)生團隊協(xié)作能力。項目的完成是多個人齊心協(xié)作的工作結(jié)果,是一個團隊協(xié)作能力和分工能力的體現(xiàn),也是于社會接軌的一個中間環(huán)節(jié)。所以在這個方面,可以充分鍛煉學(xué)生的團隊合作能力和組織分工能力。這樣也有利于提高學(xué)生高層次的思維能力、解決問題的能力,能夠在團隊合作中學(xué)會容忍他人的缺點,吸取他人的優(yōu)點,體會到團隊的力量[2]。③提高了教學(xué)效果。以畢業(yè)設(shè)計為項目的軟件工程教學(xué)法將畢業(yè)設(shè)計和軟件工程課程有機結(jié)合起來,它以教師為導(dǎo)向,以學(xué)生為主體,改變被動式學(xué)習(xí)為主動式學(xué)習(xí)。而且,學(xué)生在學(xué)習(xí)中體會到軟件開發(fā)之間互相約束,前后知識點之間的連貫等,進一步激發(fā)學(xué)生的求知欲望,調(diào)動學(xué)習(xí)積極性,既能提高課程的教學(xué)質(zhì)量,又能保證畢業(yè)設(shè)計的質(zhì)量。
圖1 啟發(fā)式教學(xué)模式
《軟件工程》是一門集理論和實踐于一身的學(xué)科,是學(xué)生在進入社會使用最廣泛的一門學(xué)科。筆者從目前 《軟件工程》存在的問題著手分析,總結(jié)多年的教學(xué)經(jīng)驗,提出了幾點關(guān)于提高教學(xué)效果的方法,主要包括教學(xué)內(nèi)容的改革、學(xué)習(xí)主動性的體現(xiàn)、教學(xué)模式的多樣性和加強實踐教學(xué)環(huán)節(jié),并將其應(yīng)用于畢業(yè)設(shè)計??傊?,要改進 《軟件工程》課程教學(xué),除了要使用常規(guī)的教學(xué)方法、合理安排好課程內(nèi)容外,還要培養(yǎng)學(xué)生的學(xué)習(xí)興趣,重視理論與實踐的結(jié)合,讓 《軟件工程》教學(xué)越來越合理,才能培養(yǎng)出滿足軟件行業(yè)需求的人才。
[1]周學(xué)梅 .論網(wǎng)絡(luò)教學(xué)環(huán)境下教師角色的轉(zhuǎn)換 [J].中國科教創(chuàng)新導(dǎo)論,2010(13):139-140.
[2]Vicente F de Lucena Jr,Alysson Brito,Peter Gohner.A Germany-Brazil experience report on teaching software engineering for electrical engineering undergraduate students [A].Proceedjngs of the 19th Conference on Software Engineering Education & Training(CSEET’06)[C].2006:69-76.