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

圖1 啟發式教學模式
《軟件工程》是一門集理論和實踐于一身的學科,是學生在進入社會使用最廣泛的一門學科。筆者從目前 《軟件工程》存在的問題著手分析,總結多年的教學經驗,提出了幾點關于提高教學效果的方法,主要包括教學內容的改革、學習主動性的體現、教學模式的多樣性和加強實踐教學環節,并將其應用于畢業設計。總之,要改進 《軟件工程》課程教學,除了要使用常規的教學方法、合理安排好課程內容外,還要培養學生的學習興趣,重視理論與實踐的結合,讓 《軟件工程》教學越來越合理,才能培養出滿足軟件行業需求的人才。
[1]周學梅 .論網絡教學環境下教師角色的轉換 [J].中國科教創新導論,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.