時間:2022-08-11 00:55:08
導言:作為寫作愛好者,不可錯過為您精心挑選的10篇軟件工程課程設計總結,它們將為您的寫作提供全新的視角,我們衷心期待您的閱讀,并希望這些內容能為您提供靈感和參考。
一、引言
軟件工程是計算機科學、信息技術、軟件工程等專業的教學計劃中一門重要專業必修課[1],而軟件工程課程設計是針對軟件工程這門課程展開的一項理論與實踐相結合的重要教學活動;它不同于畢業設計,更不同于簡單的實驗過程。它是軟件工程教學的一個重要實踐環節,為學生綜合能力的運用、技術思維的形成、創造能力的培養搭建了一個平臺,使學生除了掌握軟件工程理論和方法外,還能夠綜合運用已學過的程序設計、數據結構、計算機網絡、管理學和經濟學等課程的技能、工具解決與其相關的理論或實際問題。
在軟件工程課程設計中,很多本學科的學者與施教者總結了不錯的經驗,比如“激勵機制”[2]、面向對象的自主實驗教學[3]、課程相關體系研究[4]及相關的案例法教學實踐設計[5]等,這些方法各有所長。我取其所長,結合親身教學實踐,從課程設計的目標要求,設計內容,設計的具體實施,學生成績評價體系等方面,對軟件工程課程設計教學模式作了系統的探討。
二、軟件工程課程設計的教學現狀
長期以來,很多高校培養的學生存在著“什么都學過,卻什么都不會”的尷尬局面,專業教育、教材與實際應用需求嚴重脫節[6]。傳統的軟件工程課程設計雖然也有設計的要求,但一般只是停留在組織學生編寫軟件項目若干設計文檔這個單一環節上,忽略了對教學方法和內容的更新。目前,大多數院校軟件工程課程設計課程教學中普遍存在的問題有以下幾點。
1.課程設計目標不夠明確,實驗和設計不加區別。把軟件工程實驗和設計的要求同等對待,從而使設計內容偏少,驗證性實驗內容和方法偏多,實驗過程變成了重復的復制和操作的過程,實驗教學效果不理想,達不到培養學生獨立思考和創新能力的目的。
2.課程設計內容比較陳舊,不能與時俱進。很多從事軟件工程課程設計教學的教師本身缺乏項目開發的實戰經驗,對課程設計的內容往往從一些參考書籍的實例中拿過來讓學生去做,有的甚至多年不更新設計內容,這樣很容易給學生抄襲的機會,達不到課程設計的要求;同時,很多學生對設計的內容也不一定感興趣,因此也容易扼殺學生的積極性和創新能力。
3.在項目組劃分確定方面,缺乏對學生專業基礎,性格和技能的分析與匹配,導致沒有凝聚整組成員的合作精神和團隊的開發能力。組長的核心作用很重要,但在具體的設計中,一般就是簡單的按學號自然的分化,或者學生的自由組合分組,前者失去了團隊能力的柔化組合與應用,后者導致少數技能較差的學生不能分到組中去而處于孤軍作戰的局面。
4.教師制定課程設計的指導要求目的不明確、不詳細,監管力度不到位,導致項目開發團隊在執行的過程中出現安排任務不合理,出現某些成員任務過重或者過輕的情況。
5.學生成績的評分結果過于單一,評價體系不夠科學合理。對學生的設計成績的評價往往是指導老師根據學生提交的報告和設計結果來評分,這樣容易忽略對學生綜合能力(包括學生的口頭表達能力,組織能力,團隊協調能力等各方面)的評價。
因此,為了培養高素質的綜合型軟件人才,高等學校探索良好的軟件工程課程設計教學模式就顯得十分必要。
三、軟件工程課程設計教學模式的探討
針對當前多數院校軟件工程課程設計課程教學中普遍存在的一些問題,我根據多年的教學經驗,對該課程的教學模式作了如下探討。
1.指導老師根據軟件工程教學的特點,制定出軟件工程課程設計的目標與通過該課程設計后可取得預期的收獲。下面是我對軟件工程課程設計制定的目標和可能的預期收獲。
(1)通過本課程設計的實踐及其前后的準備與總結,復習、領會、鞏固和運用軟件工程課堂上所學的軟件開發方法和知識,比如,軟件項目的完整設計與開發過程、結構化技術、快速原型法和面向對象方法,等等。
(2)為學生適應畢業后團隊合作開發規模稍大項目和綜合應用本專業所學習的多門課程知識(例如,軟件工程、程序設計語言、操作系統、數據庫、網絡編程等)創造實踐機會。為學生提供主動學習(比如,對Web網頁設計、或ASP交互網頁技術、Java開發環境、網站構架如Struts,Hibernate,Spring,商用數據庫應用、電子商務、客戶機/服務器技術、Visio與Rational Rose,Sybase powerdesigner軟件工具等內容的學習)、積極探索與大膽創新的機會。
(3)使學生通過參加小組團隊的開發實踐,了解項目管理、團隊協作、與客戶交流、文檔編寫、口頭與書面表達的重要性。
(4)使每個學生了解軟件工具與環境對于項目開發的重要性,并且重點深入掌握好一、兩種較新或較流行的軟件工具或計算機應用技術、技能。
(5)通過“稍大的”富有挑戰性的軟件設計項目開發實踐,提高學生的自學能力、書面與口頭表達能力、創造能力和與團隊其他成員交往和協作開發軟件的能力,提高學生今后參與開發稍大規模實際軟件項目和探索未知領域的能力和自信心。
2.課程設計內容選擇應該具有科學性和與時俱進性。課程設計內容選擇十分重要,既要體現時代性,又要體現科學性和難度的適當性,因此要求指導老師對當前軟件開發領域的整個動態有總體掌握。下面是我對當前軟件開發領域進行的大致歸類。
(1)網站開發類:包括休閑娛樂(音樂,影視,聊天,休閑運動,旅游景點等)網站;工商經濟網站(攝影,日用家居,玩具等);文學網站(詩詞/韻文,港臺文學,民間文學,科幻文學等);體育與健身網站(極限運動,球類,健美/健身,運動常識,網球,乒乓球等);衛生與健康網站(醫學理論,醫療器械,保健/養生,論壇等);國家地區網站(北京,上海,廣東,江蘇,天津等);教育培訓網站(小學/中學教育,職業教育,高等教育,教育軟件,培訓機構等);其他等類型網站。
(2)應用軟件類:如信息管理系統,漢字輸入,轉換翻譯,文字處理,壓縮解壓,電子閱讀,文檔管理,字體工具,數據恢復等。
(3)系統軟件類:如系統管理,內存管理,文件管理,系統測試工具等。
(4)游戲娛樂類:如網絡游戲,Flash游戲,牌和棋游戲等。
(5)其他:如安全病毒,桌面工具等。
這樣,課程設計的內容可以根據學生的興趣和愛好從以上幾方面進行選擇,也可以由學生自己選擇設計內容,指導老師把握學生選擇的項目難易程度,同時提出所要達到的要求(包括完成日期,演示時間,學生所要提交的成果,文檔資料,等等)。
3.課程設計項目具體實施
(1)確定開發團隊。指導老師在班長和學習委員的協助下充分了解學生的興趣、愛好、基本技能和未來學生的就業意向,學生在教師的指導下,有選擇性地進行分組,一般3至5人為一組,并選定好組長。
(2)確定開發項目。指導老師給小組成員分配好開發任務,組長寫好開發計劃進程安排并提交指導老師檢查以便及時修進。
(3)中期檢查與指導。指導老師根據各個團隊提交的開發計劃,對各團隊開發項目進程定期進行中期檢查,檢查各團隊的項目進展情況,包括各個小組的開會記錄,所查閱的資料,當前所遇到的困難,協助與指導小組面對困難所要采取的解決方法等。
(4)成果提交與演示。課程設計結束時指導老師要求按時提交項目的相關成果,并組織小組團隊進行演示與簡短的答辯。演示過程要求學生用5―10分鐘時間敘述設計原理、過程、系統運行的情況和體會,敘述完畢后由指導老師或其他小組成員提問,指導老師和小組成員記錄該學生演示情況和回答問題的情況,并以此作為下一階段評定該學生成績的一部分。
本文為全文原貌 未安裝PDF瀏覽器用戶請先下載安裝 原版全文
4.建立合理,科學公正的評價體系。為了對每個開發團隊中的成員成績有個公正、公平和合理的成績,因此必須建立合理、科學、公正的評價體系,本文建立的評價體系包括:學生提交成果,學生演示與答辯,學生自評與互評,教師評分。學生提交成果根據表1學生所承擔的角色來交付;學生演示與答辯重點體現對系統的原理、過程、結論,以及開發體會進行表述;學生自評和互評體現了學生的自我認同和互相認同感;最后是教師的評分,教師的評定從以下幾方面全面考慮:(1)學習態度是否端正,總體表現;(2)項目組織是否有條理,協作程度;(3)軟件系統文檔資料表達格式是否規范、符合要求,表達是否準確、完整、簡單明了;(4)系統結構是否合理,功能是否正確,人機界面是否友好;除了符合上列基本要求具體評定可以參見下表1。最后學生的總評定成績為:0.4×教師評定分+0.2×學生互評分+0.2×學生演示與答辯評分+0.2×學生自評分。
表1 評定標準
四、結語
軟件工程課程設計是一門理論與實踐相結合的應用性很強課程,我結合自身從事軟件開發的經驗和多年的教學,從以上幾個方面探索了該課程的教學模式,在實踐工作中雖然取得了一定的成效,獲得了學生的認可與好評,但仍處于嘗試和探索階段。在實際指導過程中還存在不少問題,例如:個別學生的積極主動性不夠,存在抄襲設計成果現象,等等。這些都需要繼續努力,尤其是隨著軟件產業的飛速發展,如何培養高素質軟件人才,對教師來說更是一種挑戰。因此,教師應不斷學習新的知識,提升自身的能力,把握學科的最新發展動態,探索新的教學模式,深化實踐教學改革,為我國教育事業作出更大的貢獻。
參考文獻:
[1]張海藩.軟件工程導論(第5版)[M].北京:清華大學出版社,2008:55-73.
[2]張引,楊小虎,陳越.“軟件工程”課程實踐中激勵機制的探索[J].計算機教育,2007,(5):30-32.
[3]江頡,石曉耀.面向對象的軟件工程自主實驗教學改革[J].實驗技術與管理,2007,24(7):112-114.
[4]王薇.軟件工程課程體系研究[J].計算機教育,2007,(8):31-32.
[5]巫華芳.軟件工程教學案例設計初探[J].教育與職業,2007,(11):139-140.
1背景
中國信息產業部的數據顯示,2008年中國軟件產業整體保持快速增長態勢,累計完成軟件業務收入7572.9億元,同比增長29.8%。與此同時,我國軟件出口142億美元,同比增長39%。企業對軟件人才需求量在增大,估計人才缺口達到20萬,而且這個需求將以每年20%左右的速度增長[1]。但另一方面,多數軟件類應屆畢業生在面臨就業時卻難以感受到這些數字所帶來的欣慰,很多畢業生并沒有順利找到對口的工作。雖然這些學生身份上屬于工程技術類的應用型人才,在目前IT產業蓬勃發展的大環境下理應有自己的一席之地,但結果卻是“畢業即失業”表現得愈加突出。
軟件工程專業具有巨大的發展潛力,但如何建設好軟件工程專業?長期以來,國內高校軟件專業主要以培養研究型人才為重點,以軟件基礎理論和系統軟件設計為主干,目標是培養面向計算機與系統軟件領域的研究型人才[2]。因此如何建立保證軟件工程專業本科學生既具有可持續發展潛力又適應當前產業需求的新型知識體系,如何建立與企業應用緊密結合的先進課程體系、教學理念和教學方法,從而提高學生的綜合能力,使畢業生在跨出校門時具備必需的素質,縮短從學生到企業員工的角色轉換所需的時間,實現就業的“零適應期”是軟件工程專業努力的目標。
國外高校在軟件工程教育方面的一個共同點就是:根據各自國家和學校的特點,立足學生長遠發展,培養適應社會需要與變化的人才。從軟件教育的特點來看,西方著名大學有較完善的教育理念、教學手段和實驗條件,有較長時間的實施經驗,與企業有密切的合作關系,有一大批專家在從事計算機與軟件的教育研究。這些大學的課程與我國現行的計算機和軟件課程體系相比,理論更深,與新技術的接軌更快,實驗和職業實踐的比重更大,通過實驗讓學生掌握基本概念、提高分析問題與解決問題能力的力度更大。
國內高校軟件專業主要以培養研究型人才為重點,以軟件基礎理論和系統軟件設計為主干,目標是培養面向計算機與系統軟件領域的研究型人才。軟件專業學生在學生學科知識與實際運用有一定的距離。因此探討如何建立符合國情,既面向當前產業需要又兼顧本專業學生發展潛力的知識體系、課程體系,是我們研究的主要內容。
2模塊化的課程體系
我校軟件工程專業申辦于2004年,并于2008年開始招生。該專業成立的宗旨是培養高層次、實用型、復合型、具有國際競爭力的軟件人才,要求學生在思維創新的基礎上,提高技術創新和工程創新能力,提高軟件工程實踐和軟件工程管理能力。我校在設置軟件工程專業課程體系方面學習全國名牌大學如復旦、浙大等,并結合自己硬件及師資條件的實際,提出了如下幾個設想:
(1) 合理設置課程模塊,突出核心基礎。
在軟件工程領域,最新的、先進的軟件技術文檔、技術文獻、發展研究等都是英文撰寫的資料;合資、外資公司中的軟件工程人員所使用的工作語言也是英語。因此在第一至第四學期我們對學生的英語能力進行強化訓練,通過閱讀、聽力、寫作和口語交流等方式提高其英語運用能力;在第二學期開始的所有專業基礎課程、專業核心課程和專業選修課程中加入一定比例的專業英語訓練,將英語融入到專業理論知識學習的過程中;同時開設幾門專業課采用全英文教材,實行雙語教學,達到鞏固和不斷提高的目的,為學生動手編寫英文程序代碼,查閱英文技術文獻、文檔掃除語言障礙。
(2) 合理設置專業入門基礎課程模塊,以引導為主。
以計算機導論為主,并以設置類型多樣、專業覆蓋面廣的專業基礎知識講座或新生研討課為輔,學生學習了計算機最基本的概念后,通過生動有趣的講座獲得更廣的認識和了解。
(3) 合理設置專業核心課程模塊,以應用為主。
專業核心課程關系到培養出來的軟件工程人才質量。針對計算機學科需要,應設置相應的軟件系統類課程、軟件實現類課程、軟件工程類課程以及相應課程的課程設計、實際項目開發為核心的軟件設計及實現類的實踐類課程。
(4) 設置專業方向選修課程,突出個性化發展。
結合時代需求,結合學生個性化發展需求,設置多個專業方向的模塊化課程。設置跨大類專業選修課程,如計算機組成原理、編譯原理和軟件體系結構等;設置專業方向選修課程,如軟件開發案例分析、軟件開發新技術、軟件文檔寫作等課程。學生可按需選修1~2個專業方向,有利于其發揮專業創新能力和專業個性化發展。
目前,我校軟件工程專業課程體系架構如圖1所示。
3實踐教學體系
我院除設置模塊化的課程體系外,還非常注重實踐教學,并且構建了以項目為支撐的實踐教學體系,具體開設與實踐教學有關的課程如下:
第二個學期開設認識實習;
第三個學期開設面向對象程序設計課程設計;
第四個學期開設數據庫原理課程設計以及.NET程序開發技術課程設計;
第五個學期開設Java語言課程設計以及UML建模工具及應用課程設計;
第六個學期開設J2EE技術課程設計及大型數據庫課程設計;
第七個學期開設軟件開發新技術課程設計;
第八個學期畢業設計。
針對合格的工程化軟件人才所應具備的個人開發能力、團隊開發能力、系統研發能力和設備應用能力,我們設計了以下4類階梯狀的工程實踐課程。
程序設計實踐課程:培養個人級工程項目開發能力,如面向過程程序設計(C語言),面向對象程序設計(C++語言)等課程設計。
軟件工程實踐課程:培養團隊合作級工程項目研發能力,如.NET程序開發技術、J2EE技術、嵌入式軟件開發(J2ME)等課程設計。
信息系統實踐課程:培養系統級工程項目研發能力,如軟件開發案例分析、面向對象系統分析與設計、大型數據庫應用等課程設計。
畢業設計實踐課程:培養開發軟件所必備的設備應用能力,如軟件開發新技術課程設計、畢業設計實踐等。
我們感覺軟件方面的技術五花八門,因此在專業核心課程設置上,注意其側重點。我們將Java網絡程序開發定為主要的教學方向,其中包括Java程序設計語言、網絡軟件開發技術、J2EE技術、以J2ME為主的嵌入式軟件開發技術等。當然,我們兼顧企業實際用人的情況,開設了.NET程序開發技術等核心課程,詳細的專業課程體系請參見圖1。
4探索式學習
軟件工程的理論和方法是從眾多軟件開發實踐中總結出來的,但是對于缺乏軟件開發實際經驗的本科生來說,單純地講授理論知識往往使學生感到枯燥無味且難以理解。因此,我們收集和總結了一些軟件開發案例,將這些案例貫穿于理論知識的講解中,使學生真正理解這些理論知識,建立軟件開發的系統化與工程化觀念和質量意識。
(1) 從分析歷史上的經典案例入手,諸如愛國者導彈、網絡病毒攻擊等。深入剖析導致軟件失敗的根本原因,從而引出軟件開發的工程化發展方向,即以軟件工程的原理和方法為指導,嚴格遵循軟件過程規范和步驟。通過這些實例的分析,學生們逐漸改變軟件開發等于編寫程序代碼的錯誤觀念,開始認識到軟件工程的重要性,有利于培養工程化的意識和觀念。
(2) 軟件過程是軟件工程課程中的一個重要內容,但是對于開發經驗有限的本科生來說,很難在頭腦中將軟件過程的抽象模型與實際開發聯系起來,容易產生枯燥乏味的感覺。在教學過程中,我們從軟件開發的實際案例中總結出5個不同的軟件系統,結合這些系統的特點和開發策略,講解瀑布模型、原型化方法、增量模型、形式化方法和基于組件的開發模型等。學生在思考、分析和討論過程中更好地理解和體會軟件過程的基本概念,有利于在實際開發中運用這些過程模型組織開發過程。
(3) 研究軟件工程的實踐特點,課程實驗結合實際開發因素和參與樂趣。實踐教學是本課程的一個重要的組成部分,它要求學生以開發團隊(一個團隊通常由3~5人組成)的方式開發一個具有一定規模的軟件系統,側重培養學生發現問題、獨立分析問題和解決問題的能力以及團隊合作精神,使學生初步體會到一個軟件開發項目全過程。
(4) 研究和建立適合小組式開發的軟件工程環境。在小組式的軟件工程環境中,使學生真正體驗到一種有序的、可控的、協作的軟件開發過程,在分析問題、解決問題、協調沖突、消除矛盾的過程中享受軟件開發成功的最終結果。軟件工程實驗要求學生采用“項目小組”的形式,結合具體的開發項目進行設計,班級按項目小組進行分組,每組不得超過4人。每個項目小組選出項目負責人或項目經理,由其召集項目組成員討論、選定開發項目。學生分工合作,學習軟件開發小組的組織和管理,將項目開發各階段的任務明確,熟悉軟件開發環境,培養團隊精神,共同完成該項目的設計任務。項目中的每項任務要落實到個人,實驗在規定的時間內,由學生獨立完成。
在整個教學過程中,我們也十分注重鼓勵和引導探索式學習,學生通過文獻查閱以及與軟件企業人員的接觸交流,真正體會當前軟件工程業界的真實案例和最佳實踐。課堂講解避免“一言談”的死板方式,采取課堂互動討論,營造活躍、寬松的課堂氣氛,鼓勵學生結合課程實踐中的問題進行專題報告和軟件演示。
在常規的課堂教學之外,我們輔之以網絡課程和擴展資源,鼓勵學生根據個人興趣和需要進行自主式的學習。同時,充分利用網絡教學平臺,加強師生之間的交流和學生之間的協作,引導學生積極思考和參與討論,教師由知識的灌輸者成為學習的引導者,學生由被動地接受教育變成主動地探索知識。
5改革目標
我校軟件工程專業以培養掌握計算機科學基礎理論、軟件工程的知識和技能,具有軟件開發能力、軟件開發實踐和項目組織的初步經驗,具有競爭和團隊精神,能在計算機公司及相關企事業單位從事軟件開發、適應軟件技術發展和社會需求的軟件工程應用型高級專門人才為目標。我校在人才培養堅持遵循以下原則。
(1) 堅持通識教育與專業教育結合原則,即通識教育課程要著眼于加強學生的基礎知識教育,著眼于培養學生的科學素養和人文精神[3]。
(2) 堅持以人為本,因材施教原則,即在保證人才培養目標和質量規格要求的基礎上,充分考慮因材施教,注重學生個性的發展,擴大學生自主學習、自主發展的時空,面向社會和學生多樣化需求,提供多樣化的課程體系和教育指導,為不同志向、不同能力和不同潛質的學生創造相應的培養環境和條件。通過柔性設置專業方向模塊,讓學生結合自身興趣、就業志向和人才市場需求,靈活地選擇發展方向,以增強專業方向優勢、職業適應性建立完善的、與課程體系配套的實訓、培訓的“雙訓”教學體系,使培養的人才更加適應社會和企業的需求。
(3) 堅持應用為本,學以致用原則,即以學校辦學定位和服務面向為指南,立足于培養應用型高級專門人才的目標,強化理論與實踐的結合,著力培養學生的創新精神和實踐能力。在實踐教學體系的設計上,按照基礎、提高、綜合3個層次和基本實驗、技能訓練、專業實習、科研訓練、綜合實習、社會實踐6大模塊構建創新精神和實踐能力培養體系。
(4) 建立一套以軟件工程為主線的教學、實訓評估標準,以確保人才培養目標的實現。
6結語
我們認為,計算機科學技術的快速發展以及企業對人才的多元化需求要求我們將新的知識單元及時引進課程體系中,使課程體系的設置要有超前和發展的眼光,隨時將一些新興的、成熟的內容吸收進課堂教學,做到對課程體系、教學計劃動態調整,保持課程體系的動態性、前瞻性。
軟件工程專業課程體系必須建立在對軟件工程專業人才的知識結構和綜合素質的全面研究之上。按照軟件工程專業人才培養目標和國內外軟件工程人才的需求,培養出的人才的知識結構域應該包括軟件開發新技術、現代軟件工程、工程領域背景技術3個主要部分[4]。我們還將在課程體系設置、教學方法、教材編寫等諸多方面,充分學習、借鑒和吸收發達國家計算機教育教學的先進經驗。
注:本文受“以社會需求為導向的軟件工程專業課程體系改革的研究”(校級重點教改課題)支持。
參考文獻:
[1] 王晴. 印度軟件業崛起原因及其對我國產業結構升級的啟示[J]. 生產力研究,2007(3):104-106.
[2] 吳愛華. 全國高校軟件工程專業教育年會論文集(2007)[M]// 適應時展 推進高等理工科教育改革. 北京:高等教育出版社,2008.
[3] 楊芙清. 全國高校軟件工程專業教育年會論文集(2007)[M]// 軟件工程教育的思索與實踐. 北京:高等教育出版社,2008.
[4] 李彤. 軟件工程人才培養的實踐與思考[J]. 計算機教育,2004(10):15-17.
Research on Professional Curriculum Reform of Software Engineering
about Social Requirement-oriented
WEN Zhi-cheng1, CAO Chun-li2
(1.College of Computer and Communication, Hunan University of Technology, Zhuzhou 412008, China;
課堂案例,用于教師理論授課使用,軟件工程課程通常講授兩種軟件開發方法:面向對象的軟件開發方法和面向過程的軟件開發方法,教學中采用一至兩個案例(如:學生學籍管理系統、校園信息服務平臺系統等)貫穿軟件需求到軟件實現每個階段。講面向過程軟件設計方法時,采用Visio、ER-WIN、PowerDesigner等工具,使學生在案例中明白數據流圖、數據字典、E-R圖、軟件模塊圖如何正確、規范的繪制以及它們所起的作用。當講面向對象軟件開發方法時,使用當前工業界公認的最佳軟件開發方法,即UML建模語言與RUP統一過程,采用RationalRose、Star-UML、Eclipse等CASE工具,繪制用例圖、活動圖、分析階段類圖、時序圖(協作圖)、設計階段的類圖、數據庫的邏輯結構圖、構件圖和部署圖。通過一個案例的兩種實現方法,不僅使學生知道它們間的區別和聯系,而且學生更清楚在軟件的生命周期的各個階段建立哪種模型,為何要建立,而不是將所有的圖堆積起來就是為系統分析建模、不是為了畫圖而畫圖,即不僅要知其然,更要知其所以然。
小組項目案例,是在課程的第一節課要求學生以4-5人的規模按照自愿或興趣進行分組,每個小組按照教師布置或自選身邊的、有實際應用價值、可調研的項目,進行分析、設計和實現。小組項目案例是與課堂案例穿行的,即學生在課堂每學完一種軟件開發方法后,課后利用所學的知識(特別強調CASE工具的使用)對本課題小組的項目進行實踐,例如:在課堂上學習了面向對象方法學對“學生學籍管理系統”案例進行規范的需求分析、設計的建模后,要求學生同步完成自己項目相應的內容,即利用CASE工具畫用例圖、類圖等完成系統的需求、設計文檔,其他內容均依此方法開展教學。為了更好激發學生的學習積極性和主動性,同時為了避免學生抄襲現象,利用我們自己開發的隨機選組軟件,讓學生以小組的形式在課堂上進行現場答辯,組長作為該項目的經理,組員作為開發人員,教師和其余學生作為用戶,首先組長介紹項目的開發背景、意義,項目的分工,需求調研的單位、調研對象,與客戶的交流并記錄情況,然后小組成員依次介紹自己的工作,最后由組長總結,并回答用戶提出的問題。通過上述的“實戰”,讓學生加入到評價的行列中來,不僅活躍了課堂氣氛,調動了他們的積極性,強化學生間的競爭意識,而且通過了解其他同學項目完成情況,并與自己做的進行比對,找出差距和不足,同時也挖掘學生的創新能力,提高了教學效果。正像學生事后的總結中這樣寫道:“在小組項目開發期間,我們對軟件工程有了新的理解,軟件開發不僅僅是單一的編程過程,它包括了需求分析,概要設計,詳細設計,編碼,測試,維護,編程只是其中的一小部分……;使我們深深地體會到,理論源于實踐,實踐見真知……;只有真正明白用戶的需求,才能開發出能用,有價值的產品,如果開發出來的產品不能滿足用戶的需求,那么這個產品也就失去了存在的價值……;軟件開發,重在團隊合作,單獨一個人是完成不了任務的,我們真正體會到什么是團隊協作,真正的了解到團隊合作的有利之處,真正感受到團隊成員為了共同的目標聯合在一起時的強大的力量,只有互相之間默契融洽的配合才能換來最終完美的結果”。CDIO所倡導的團隊協作能力、交流能力,創新能力,在小組項目案例實施中得到了很好的鍛煉。
CDIO模式下課程設計的實施
作為宏觀、全局性的教育策略CDIO工程教育理念,強調知識的關聯性,著重培養學生實際問題的解決能力和個人工程素質。軟件工程專業人才培養要求之一就是工程型專業人才培養,教育部的“質量工程”也提出改革與創新實踐教學與人才培養模式。為期2周的軟件工程課程設計是軟件工程課程的延續,是強化實踐環節、培養學生工程素質以及加強學生所學知識的前后關聯的重要舉措。軟件工程課程設計,需要學生能將所學的面向對象的軟件開發方法、開發過程RUP、CASE工具、軟件項目管理CMM、面向對象編程語言和數據庫管理系統SQLServer/Oracle結合起來進行軟件開發,為學生畢業后從事軟件開發和管理工作打下堅實的基礎。
1.課程設計的內容軟件工程課程設計的實施方案見表1-1所示。2.基于CDIO的考核方式CDIO教育模式主要培養學生的八種能力:工程能力、職業道德、學術知識和運用知識解決問題能力、終生學習能力、團隊協作能力、交流能力和大系統掌控能力。
軟件工程課程設計為檢測學生的上述能力搭建了平臺,教師在軟件開發的各階段提出目標和任務,促使學生獨立分析思考、相互交流討論,敢于實踐創新和探索解決問題的途徑,提高了學生工程應用能力,在實踐中理解軟件工程師應該具有的職業道德,較好避免傳統的考試只能單一測試學生對知識的記憶程度。軟件工程課程設計的最終成績評定是:平時成績20%(重點考察學生的職業素養、交流、獨立分析思考能力),設計成績30%(重點考察學生的工程能力、運用知識解決問題能力),答辯成績50%(重點考查學生的團隊協作能力、表達能力、創新能力)。
軟件工程專業在我國高等院校還是一個很不成熟的專業,比起傳統的工科專業來說,軟件工程專業有更多的技術成分,因此,我們的教學體系和模式就要有別于傳統的教學體系和模式。實踐教學體系是否合適將直接影響軟件工程專業畢業生的質量。對于重點院校軟件專業和軟件學院實踐教學體系已有很多專家學者進行了研究與實踐[1-3],而普通院校無論是師資,還是其他教學資源,都不能與重點院校相比[4-5],應該有一套有別于重點院校的實踐教學體系。本文將對普通院校軟件工程專業實踐教學體系的構建進行探討,并結合我院軟件工程專業實踐教學體系進行總結。
1實踐教學體系構建原則
軟件工程專業實踐教學體系構建原則可以從4個方面考慮:軟件工程專業特點、教指委的軟件工程專業規范、軟件工程專業的職業定位、人類認識事物的規律。
1) 軟件工程專業是一個綜合性學科,既有科學的要求,又有技術的要求。從學生的培養目標來看,普通院校軟件工程專業含有更多的技術要求。目前國內大多數普通院校軟件工程專業還是按照傳統的理工科人才培養方式進行學生的培養,忽視軟件工程專業知識體系的特點,從而導致學校的學生大多數隨能按照培養計劃完成學業,成為一名合格的軟件工程專業的畢業生,但與企業的要求相差甚遠,企業找不到合適的人才的現狀。
2) 軟件工程專業規范給定的軟件工程專業知識體系包括:計算機科學與技術知識、軟件工程知識和領域知識。計算機科學與技術專業、軟件工程專業是實踐性、應用性非常強的學科,要使學生掌握好計算機科學與技術的基礎理論知識,應用軟件工程技術的基本技巧與方法,就必須確保實踐教學的教學質量。
3) 按照現在職場流行的說法,人才分為3類:白領、灰領、藍領。根據本地區和學校的特色,我院軟件工程專業的定位是培養“灰領”人才,因此,學生除了學習傳統的計算機科學與技術知識、軟件工程知識外,還要學習管理學知識,同時根據我校的特色與定位,把汽車設計與制造過程中信息結構作為應掌握的領域知識。管理學知識將用于團隊管理、軟件開發過程管理以及信息結構建模等開發活動;汽車設計與制造過程中的信息作為軟件開發實踐的應用對象,是軟件的加工對象。
4) 人類對事物的認識是一個由簡單到復雜,由具體到一般的過程,是一個分析與綜合的過程,將隨著知識的積累逐步深入。這就要求實踐教學要按照培養計劃進度設置不同的實踐內容,而且可以根據學生的個體情況進行少量的調整。
2實踐教學體系構建方案
現在高等教育的教育方式正在從以教師為中心轉變為以學生為中心,既以學生的目的需要為中心、以學生的能力拓展為中心、以學生的知識結構為中心開展實踐教學。因此,我們在設計實踐教學體系時,始終注重按照學生理論學習的進度和學生能力提高的需求,依據軟件開發過程的特點,分層次開設不同的實踐內容。
按照學生能力培養的路線圖,實踐教學體系始終圍繞著培養知識應用能力和創新能力進行構建。能力培養方面分為3個方面,即程序設計能力、軟件開發能力、工程實踐能力。實踐教學課程體系由5個層次的實驗構成:課程實驗、課程設計、項目實訓、開發實踐、畢業設計,如圖1所示。
2.1課程實驗
本類實驗主要是加強學生對所學知識的理解,“聽過的會忘記,看過的會記住,做過的會理解”。實驗內容分為3類。第1類:掌握和運用工具,包括語言類,軟件開發工具類等;第2類:理解所學知識,包括操作系統、編譯原理、設計模式、計算機網絡、數據結構與算法等;第3類:同時兼顧工具學習和知識理解,如數據庫原理。這類實驗主要是學生按照實驗指導書完成規定的實驗內容,但也有一部分內容只給出實驗目的,讓學生自己設計實驗內容(設計型),以兼顧學生的不同層次與興趣。
2.2課程設計
本類實驗的目的就是培養和訓練學生對所學知識的綜合運用能力和學習新技術、新知識的能力,屬于規范中的設計型與綜合型實驗。教師給出課程設計題目、相應的背景描述和課程設計要求,學生在教師的指導下獨立完成課程設計項目,時間一般為1~2周。實驗內容和要求根據學生的理論課進程安排,如VC++課程在數據結構與算法設計之前開設,因此VC++課程設計要求學生做好類的設計、界面設計,數據存儲用文件形式,對軟件的效率不做要求;數據結構與算法設計課程設計,除了VC++課程設計的要求外,要增加對算法的效率和存儲空間的要求;設計模式與UML建模課程設計除了VC++課程設計和數據結構與算法設計課程設計的要求外,增加軟件可靠性與高效的要求等。所有的課程設計都要求界面美觀。同時鼓勵優秀學生應用一些還沒有開設的課程內容。
2.3項目實訓
本類實驗的目的主要是訓練項目的組織能力、工程實踐和團隊協作能力,著重開發過程的訓練,按照軟件生命周期,完成各階段的工作。項目實訓放在軟件工程和數據庫原理等專業基礎課程之后,軟件體系結構之前。同時開展多個項目,把學生分成小組,在不同的項目中擔任不同的角色,教師扮演客戶和技術總監的角色,要求學生按時上下班,實驗室允許學生加班,學生要負責實驗室設備安全。要上交較完整的需求分析與設計文檔,特別是各部分的公共信息要完整。可以只實現部分需求,時間安排為2~4周為宜。
2.4開發實踐
開發實踐在軟件工程的專業實驗室或校外實習基地進行。2008年我們與東風懸架彈簧公司和武漢天喻軟件有限責任公司合作,利用武漢天喻軟件有限責任公司的PLM軟件,裝入東風懸架彈簧公司產品開發的基礎數據。學生通過該平臺,可以了解企業產品的開發流程,不懂的地方隨時可以向企業工程師咨詢;可以選定一個模塊,按照PLM系統接口規范進行設計開發,然后集成到PLM系統中去。可以是替換原來的模塊,也可以是增加新的功能,進行集成測試檢驗程序的可靠性和效率。時間安排為4~8周為宜,由學校教師與企業工程共同指導。
2.5畢業設計
畢業設計是大學教學過程的最后一個環節,是一個學生自主開發的綜合性實踐教學環節。通過畢業設計,能使學生綜合應用所學的各種理論知識和技能,進行全面、系統、嚴格的技術及基本能力的練習。我院畢業設計時間安排為16周,鼓勵學生把就業與畢業設計結合起來。學生在企業實習階段參與項目開發,由企業導師進行項目開發的相關指導,回校在校內教師指導下完成論文和答辯。
3軟件工程專業實踐教學的師資要求
軟件工程專業的實踐教學要求實踐教師既是實踐的指導者,又是直接的參與者。要對學生在實踐中遇到的各種問題給予解答,包括編程語法、算法邏輯、軟件體系結構設計、用戶需求分析、團隊協作方法等;在實踐過程中更多地是站在用戶的角度對學生的成果進行驗收測試,使學生體會到在現實情況下怎樣的軟件才能被用戶接受,體會到用戶怎樣檢查軟件的可靠性、可用性、正確性,用戶怎樣評價軟件的優劣。
軟件工程專業的特征要求從事軟件工程專業教學的師資隊伍是一支具有綜合素質的隊伍,既有專業理論基礎,又要有企業實踐背景;要充當軟件開發過程的各種角色――投資者、使用者、組織者、設計者、編碼者、測試員等。課程實驗主要由理論基礎扎實的教師擔任,課程設計由理論基礎扎實的教師和有企業實踐背景的教師共同指導,項目實訓和開發實踐主要由有企業實踐背景的教師完成。
4結語
本文介紹的軟件工程專業實踐教學體系是我校通過幾年的不斷摸索與改正后形成的。在探索過程中獲得了湖北省教育廳項目(軟件工程創新型人才培養研究)和學校的支持(2007年軟件工程特色專業建設費15萬元)。該實踐教學體系利用一些基礎實驗幫助學生理解和掌握專業理論知識,為今后的發展打下堅實的專業基礎,同時通過參與各種項目,提供了發展其動手能力的環境,貼近了企業需求,提高了就業率。2009年我校軟件工程專業的一次就業率達到了90%。由課程設計、開發實踐和畢業設計構成的創新訓練體系,使學生獲得了科學研究方法和軟件開發活動的工程化的經驗。
參考文獻:
[1] 李紅梅. 面向能力培養的軟件工程實踐教學體系[J]. 高等工程教育研究,2009(2):84-87.
[2] 董瑋. 引入實訓體系,培養應用型軟件人才的探索與實踐[J]. 計算機教育,2007(23):10-19.
[3] 董瑋,邱建華,楊英鵬,等. 培養應用型軟件人才的實踐教學體系的研究與實踐[J]. 計算機教育,2008(10):16-18.
[4] 鄭耿忠,劉秋梅. 地方性院校軟件工程專業建設探討[J].電腦知識與技術,2009,5(30):8477-8478.
[5] 鄭耿忠,劉秋梅. 軟件工程專業實踐教學體系構建探索[J]. 電腦知識與技術,2009,5(27):7690-7691.
[6] 白偉華. 軟件工程專業應用型人才培養模式的思考[J]. 計算機教育,2008(22):35-37.
Practice Teaching System of Software Engineering in General Institutes
FU Yong-zhi, WANG Wen-yan, SHI Lü-hua
(Department of Computer Science School of Electrical & Information Engineering Hubei University of Automotive Technology,
2.評分模式單一軟件工程采用了傳統的閉卷考試方式,平時成績占總成績的30%,期末考試占70%。平時成績=上課出勤情況(10%)+實驗完成情況(10%)+作業完成情況(10%)。任課教師通過對不同的考核內容賦予不同權重來評價學生對軟件工程課程的掌握情況,主要考核學生對課程基本知識的理解。此方法不足以提高學生實際動手的能力,更不利于激發學生實際軟件設計開發的興趣。
二、現有的教學方法的分析
針對上述問題,從事軟件工程的相關教師從不同角度,對軟件工程課程進行了改革。歸納起來主要有如下幾種教學方法改革:
1.自底向上教學法在“軟件工程”課程中應用授課方式主要是用倒敘的方式貫穿完整案例(包含警戒案例),以啟發、討論、辯論的形式講授軟件工程的原理、方法及過程,使學生不覺生疏,易接受,又符合IT從業人員的工作進程。[2]
2.模塊化教學法在“軟件工程”課程中的應用在尊重教學規律和學生個性發展的原則上,根據課程體系和內容之間的關系,將教學部分劃分為若干獨立的模塊,確定模塊之間的關聯,針對不同的教學計劃要求,采用不同的模塊組合有選擇地進行講授和學習。[3]
3.案例教學法在“軟件工程”課程中的應用軟件工程案例教學是根據“軟件工程”課程的教學目的和學生培養目標要求,教師選用相應的案例作為基本素材,引導學生對案例進行調查、思考、分析、討論、設計、開發和交流等相關活動,在活動中教授學生軟件工程的原理、方法及過程,進而提高學生分析和解決問題的能力,加深學生對基本理論知識的理解和掌握。[4]
4.項目驅動教學法在“軟件工程”課程中的應用項目驅動教學法是案例教學法的基礎上采用“案例導向、項目驅動”的教學方法。首先,教師根據要講授的理論知識預先準備一個或者多個小的軟件開發項目;然后,將學生作為主體,以軟件開發項目的研發過程為引導,采用學生小組團隊合作和學生個人獨立完成相結合的教學形式,組織學生開展集體討論并完成相應的實踐性活動,在研發過程中同學和老師要對每位學生所完成的每個階段任務加以點評、督促改進、分享經驗等;最后,學生將成功的軟件給予演示。
5.三位一體式教學法在“軟件工程”課程中的應用根據學生的認識特點和該課程自身的特點以及對“軟件工程”課程在計算機科學專業的定位、教材的選取、課程培養目標的分析下,采取以綜合能力培養為中心、項目實踐為標準,模板、案例、指導說明為輔助的三位一體式的教學思路。[6]對目前在“軟件工程”課程改革中應用的五種方法針對改革側重點進行匯總發現(見表1),單一的教學方法只是在理論教學、實踐教學和考核方式某一方面發揮了很好的作用,而不能從全面發揮效果,而對于“軟件工程”課程來說三者同樣重要。
三、基于多元教學法的課程改革新模式
某一種教學模式改革已經不能滿足現代“軟件工程”課程教學的要求,只有將多元教學模式組合在一起,充分考慮各自對課程教學的優勢,避其缺點,找到一種既能使學生具有良好的理論基礎,又能充分培養學生實踐能力,還能準確地考核學生的教學模式。本次課程改革就是本著這樣一種思想,從理論教學、實踐教學和考核方式三個方面進行多樣化改革。
1.理論教學內容多樣化
理論知識的學習在學生以后軟件項目開發過程中具有必要性和重要性,軟件工程學習過程中要重視基礎和基本技能的培養。學生要具有開發軟件項目的能力,首先要熟悉掌握軟件工程相關的理論知識,特別是對如何按照工程化的方法系統地設計、實現、測試和維護大型軟件,內容包括:軟件開發的基本理論、方法和技術;其次是了解目前已有系統、工具和技術。(1)授課內容引入案例。教師在教學過程中引入與理論知識相匹配的實際案例,將比較抽象的軟件工程原理、方法和技術轉為具體生動的案例進行詮釋,增強理論教學的藝術性、科學性、趣味性、形象性,使學生能夠在課堂上深刻領會和理解軟件工程的思想和方法,教學效果收到了事半功倍。(2)適時更新教學內容。近幾年,軟件原理、方法和技術發展較快,許多適應時展的軟件不斷涌出,而目前的教材雖不斷改版更新,但其更新的速度遠遠跟不上軟件工程的發展。因此,教師在進行理論講解時,除了要教授學生基本原理、技術和方法外,還要時刻關注新內容的出現。(3)制作豐富多彩的課件。采用多媒體教學手段,在課件中插入圖片、動畫、聲音、視頻等多媒體元素,使教學內容更加充實和生動。(4)課堂小組討論。從小問題到大問題,讓學生參與教學過程,有機會發表自己的看法。課堂討論和分析試驗,使理論有實踐作支撐,抽象的知識變得看得見,用得著,大大激發學生學習的興趣和自信。
2.實踐教學內容多樣化
軟件工程理論的講解是課程學習和技能培養的基礎,而軟件工程中許多理論內容如果只是教師講解不加以實踐,內容本身就會變得空洞和不可理解,例如:軟件復雜性計算、軟件可靠性與安全性的測量標準、結構化的實現方法等都需要學生動手實踐才能更好地理解知識本身的內涵。掌握概念、原理、方法和技術,熟練應用軟件開發實踐中的方法和技術是“軟件工程”課程對學生的培養目標。(1)課程角色扮演。教師預先選擇若干小項目,班內學生根據自己對項目熟悉情況選擇項目名稱,劃分項目小組,每組人數不超過6人,每個項目小組成員根據自身特長選擇不同軟件工程角色,例如項目負責人、需求分析負責人、設計負責人、編碼負責人、測試負責人和用戶代表,進行項目分工。項目組成員按時完成自己負責任務,撰寫相應文檔。教師幫助學生分析和解決所遇到問題。在整個開發過程可以體現“學以致用”的思想,實現理論與實踐相結合。(2)課程設計。課程設計主要是針對高年級學生在學習軟件工程課程時開展的專項訓練。課程設計采取在學校內模擬IT企業環境下完成來自企業案例或開發一些具有應用價值項目或學校教師承擔的開發項目的部分開發工作,也可以是學生自選項目,整個課程設計階段嚴格按照工程實施的基本思想來實施。(3)加強校企合作。一方面經常邀請軟件公司長期從事軟件設計、開發和項目管理的工程師和項目經理,給學生講解自己在軟件設計、開發和管理中的經驗,高質量軟件產品需要經過怎樣的開發過程,軟件生命周期中標準文檔如何撰寫等相關內容;另一方面,利用寒暑假時間,讓學生走出去,到軟件產品的研發單位實地實習。
3.考試方式多樣化
傳統的考核方式已經不能反映學生實際軟件開發的水平,也與多樣化的教學模式不相匹配,為此多樣化的考核方式才符合現實需求,主要包括:筆試、課后角色扮演、課程設計和項目總結。(1)筆試占總成績的35%,主要考查學生理論知識的掌握情況和學習效果。(2)課后角色扮演占總成績的15%。由教師根據每位學生在課后角色扮演中的具體表現進行打分,主要由3部分取平均值組成:1/3*(整個項目的成績+自己負責完成的文檔成績+組內其他成員負責完成的文檔的平均成績)。(3)項目總結或心得體會占總成績的15%。根據學生在軟件開發過程中所撰寫的經驗和教訓總結報告、每個小組成員建立的個人開發記錄或日志的實際情況,相互打分。
四、基于多元教學模式課程改革方案
基于上述改革理念,按照軟件工程開發原理、方法和技術,選用典型項目案例,將學生按照項目分成若干個小組,每組人數不超過6人。每個小組對應著一個具體的項目,每個人對應著一個具體工作過程,按照如下步驟進行多元教學。第一步,教師選用合適的教學內容,制作豐富多彩的課件,對學生進行基本理論和基本技能的講解。在每一個軟件生命周期結束后,教師進行案例場景描述。教師按照理論知識的內容,選擇相應的案例進行描述,學生將所學內容運用到相關案例中。教師通過案例讓學生明白理論知識如何應用,學生通過案例體會到小項目中所學的原理、方法和技術是如何實現的。第二步,課后角色扮演。學生通過分組討論的方式,完成項目分工,明確自己在項目中所扮演的角色。所有的任務通過集體討論的方式,決出所要完成的任務,并由相應的角色人實際操作完成。例如,需求分析一章內容,學生課后進行項目小組討論,決定需求分析的內容,進行相應的需求分析,并由扮演需求分析人員的學生完成需求報告。軟件開發過程需要整個團隊的通力合作,根據學生的性格、表達能力、開發能力、理論基礎掌握情況等方面進行人員分組,將具有不同特點的學生組成一個團隊完成項目開發。這種團隊合作的方式,既能發揮學生各自的特長,又能培養學生的團隊合作精神。第三步,課程設計。當全部內容講解完成,就可以開始長達2周的課程設計內容了。這段時間要求項目小組,徹底完成一個由教師虛擬的項目。此步驟中,主要培養學生良好的科研習慣,在開發過程中及時總結經驗和教訓,建立個人開發記錄或日志,理論聯系實際學著開發軟件。第四步,學生總結,教師點評。學生經過多個教學環節后,每個團隊在一定程度上完成了各自的項目任務,對各自團隊的成果進行總結。教師聽取每個團隊的匯報后,從橫向和縱向兩個方面對項目成果之間進行比較,從而讓每一位學生明白自己在團隊中發揮了什么作用,自己哪些方面不足。第五步,請進來,走出去。通過學校和企業合作的方式,一方面經常邀請軟件公司長期從事軟件設計、開發和項目管理的工程師和項目經理,給學生講解自己在軟件設計、開發和管理中的經驗,高質量軟件產品需要經過怎樣的開發過程,軟件生命周期中標準文檔如何撰寫等相關內容;另一方面,利用寒暑假時間,讓學生走出去,到軟件產品的研發單位,實地實習。
“軟件工程”是計算機及相關專業的一門專業課,是培養學生的軟件開發能力和項目管理能力的一門重要課程,反映計算機專業人員綜合應用的素質和能力。它要求學生在學習過程中不僅要注重概念、原理、方法和技術的掌握,還要注重方法、技術的實際應用。然而,在實際教學中,很多學生認為這是一門理論課,內容繁瑣,感到枯燥,學習興趣不大,待到用時又不知如何運用這些知識。同時,軟件工程是計算機科學與技術領域的一個重要的學科,如面向對象的開發方法、CASE工具與環境、軟件重用技術、網絡環境下的軟件開發技術等有了長足的發展,而目前的教材內容、實踐環節等方面存在嚴重的缺陷,制約了軟件工程課程的教學效果。
本文結合作者多年來的軟件工程課程教學和科研的實踐經驗,就軟件工程教學內容、教學方法和手段、實踐環節安排、教學環境乃至考核方式等方面進行了一些探索和研究。
一、結合行業發展,不斷更新教學內容
教學內容是連接教師與學生的紐帶,是教學改革的重要內容,具有開放性、綜合性,應體現學科之間的相互聯系、體現現代性,反映科學發展、知識更新規律。
《軟件工程》課程是一綜合性學科,涉及計算機科學、管理學、數學、心理學等相關學科的知識。隨著計算機科學的迅猛發展,與相關學科的聯系更加密切。為適應21世紀學科發展的需要,要適當壓縮傳統的面向過程方法學內容,力求反映20世紀90年代以來面向對象方法學的最新進展。在教學過程中以軟件開發過程為主線,重點講解軟件開發的分析和設計方法,內容涉及軟件工程方法、工具、過程三要素,使學生從工程的角度認識軟件開發,對軟件開發有比較完整和深入的認識,了解國內外軟件工程學發展的現狀和趨勢,并且在更廣闊和更高層次上加深對軟件工程學的認識,為后續課程及相關工作的開展打下堅實的基礎。
在教材選擇方面,宜采用中英文教材結合的方式。對于基本理論和基本方法部分使用中文教材,對于新方法、新技術以及國際標準等內容則直接使用相關的英文資料,并鼓勵和推薦學生課外閱讀英文資料,更好地了解其最新發展。
二、采用立體化教學手段
在軟件工程的教學過程中,采用多種立體化教學手段,拓寬學生的知識面,以及更強的獨立思考、團隊協作和解決問題的能力。
1.多媒體課件。采用多媒體教學手段,制作內容豐富、形象生動的課件。這些課件不僅能形象地講授軟件工程基本原理,而且使得課堂信息量更大,教師還可以演示和講授軟件工程工具。還有部分課件被制作成自學模式,以便于學生課外擴展知識。
2.雙語教學。對軟件工程可進行雙語教學,采用國外優秀的原版教材,課堂板書和作業都采用英語作為工作語言,并鼓勵學生使用英語解答;同時給學生提供英文的課外閱讀資料,讓他們及時了解國際上學科的最新發展。
3.實踐。在課外,采用大量的項目演練。項目以團隊操練的方式進行,一個項目組由5~6名學生組成,分別擔任項目經理、客戶、上級經理、系統分析員、程序員和測試員等角色。由教師為其提供一個虛擬的項目情景和要求。項目組根據項目需求,制定項目計劃,進行分析、設計、編碼和測試,運用所學知識,分工協作、查資料、探尋問題的解決方案。應注意培養學生遵守職業道德、法律和紀律,尊重知識產權。必須發揮團隊的作用,提高學生在團隊中工作的能力,培養學生交流、溝通、協調及與用戶合作的能力。進入課程設計階段,學生就能夠進行實際軟件項目開發。
4.課程網站。建立軟件工程網站,組織和幫助學生的探索性學習,促進學生的主動發現和主動探索,擴展課堂教學。在網站上課程安排、教學大綱、師資介紹、作業、多媒體課件、實踐要求、常用軟件工程模板、自測題等內容,同時提供大量有價值的參考書籍清單和電子文獻,供學生隨時查閱,學生還可以隨時和教師在網上進行交流和答疑,變學時有限的教學為在讀期間的全程教學。
5.探索校企合作。軟件工程具有顯著的實踐特點,其教學內容必須與當前軟件行業的發展和需求保持同步。因此學校應該與實力雄厚、管理規范的軟件企業建立合作關系,及時了解行業發展動態,調整教學內容。聘請既有理論知識又有開發經驗的軟件工程師為學生做有關先進的工程技術和管理規范方面的專題報告,讓學生了解企業開發軟件項目的全過程、軟件開發的實際問題、行業現狀以及發展趨勢,及時調整學習方向,增強學習的主動性和積極性。
三、進行案例教學
軟件工程講授的原理、技術、方法都很抽象,容易產生枯燥乏味的感覺。為了使學生能深刻領會和理解軟件工程的思想和方法,在教學中引入實際案例,將復雜抽象的概念用具體生動的案例進行詮釋,能夠收到事半功倍的效果。具體可采用以下步驟:
1.設計一個典型的、完整的、易于理解的、實際的軟件項目案例。在整個教學過程中結合該案例講授每個知識點,將實際案例作為貫穿所有知識點的主線。該案例最好來源于授課教師直接參與的軟件項目,授課教師對其全部細節能夠準確掌握。
2.討論案例。在講授一個重要的知識點后,安排一到兩節的案例課,針對知識點設計多個案例。教師用語言敘述案例,其中隱含著有待解決的問題及其所處的客觀條件,學生通過認真閱讀案例,查閱相關資料,理出頭緒,明確給定條件,找出主要問題并做好記錄。然后分析問題,制定針對性的措施,提出解決主要問題的可行方案,并對方案進行初步評價。
3.組織小組討論。將學生分成五至六人的小組,每位學生運用所學知識對案例進行分析、說明,提出解決的措施,重點闡述分析、設計的理由。然后,大家集思廣益,小組內展開討論,并由專人記錄,討論的重點是對各個解決方案的相互對比和分析評價。最后,選出一個較為合理的解決方案,或者對所有方案進行整理和歸納,得到一個最佳方案。
4.小組代表發言,集體討論。每組派一名代表上講臺,講述本組對案例的理解、分析、判斷、論證和決策過程,說明解決問題的方案和分析設計結果。對于同學發言老師要給予必要的引導,鼓勵他們多角度、多因素地觀察分析問題,培養學生的知識遷移和拓寬思維的能力,啟發他們學以致用的意識。然后,組織全體同學進行分析、討論、評價。對于非確定型的決策問題,同學問往往存在著意見分歧,結論很難統一。這一過程可以增加學生對軟件開發項目的感性認識和興趣,提高他們分析問題和解決問題的能力。
5.教師總結。在案例討論結束時教師要進行總結,因為解決案例問題的決策方案不是唯一的,所以教師的總結應是就整個討論情況做出評價。對正確的論點給予肯定和完善,指出一
些原則性的問題,特別是對某些問題可以更深一步思考,進行啟發式誘導。
案例教學法通過案例貫穿軟件工程各知識點的講授,將枯燥的理論與實際緊密結合,變抽象為具體,幫助學生充分理解和掌握各知識點;通過組織學生參與案例討論,讓學生置身于模擬的真實環境中,扮演不同的角色,身臨其境,真正從“工程師”的角度考慮問題,學習如何應用知識解決問題,是軟件工程課程進行實踐性教學改革的一個重要環節。
四、強調實踐教學環節,合理安排課程實踐
軟件工程課的目的是使學生能夠真正在大型軟件開發活動中貫徹軟件工程的思想,正確使用軟件開發方法,提高軟件質量。為加強實踐環節,教學中可采用以下方法:
1.重要的基礎概念和基本方法必須進行實踐。例如,需求分析建模的重要工具數據流圖、實體關系圖和面向對象建模等,這些知識看似容易掌握,但做起來可能會漏洞百出。在講述相關內容時,應及時安排實驗,檢驗學生是否掌握基本工具的使用。
2.將CASE工具貫穿于所有的軟件開發活動。例如,在介紹基于UML的面向對象軟件開發方法時,學生即可通過RationalRose針對實際應用問題構造UML模型。
3.根據軟件工程課程實踐性強的特點,結合教學進度,開設綜合性的設計型實驗一《軟件工程課程設計》。該課程設計與《軟件工程》課程的理論教學內容緊密配合,同步進行,讓學生通過軟件開發的實踐訓練,進一步掌握軟件工程的方法和技術,提高軟件開發的實際能力,培養創造性的工程設計能力和綜合分析、解決問題的能力。
課程設計的具體內容是:在教師指導下,按照軟件工程的開發技術和管理規范,開發小組進行“應用軟件項目開發”。課程設計過程中,開設1~2次“軟件新技術講座”,并提供豐富的“教學資源”,為學生提供幫助。其主要內容是按照“案例導向、項目驅動”的設計思想,模擬軟件企業先進的軟件項目管理和開發過程,進行“應用軟件的開發實踐”。以項目開發帶動軟件工程的理論學習,又以軟件工程的理論來指導軟件開發的實踐。使學生得到較全面、系統和規范的軟件工程實踐的訓練,培養創造性的軟件設計能力和綜合分析、解決問題的能力。
軟件開發是智力活動,同樣的軟件項目,不同的軟件開發組織和人員采用的方案,耗費的時間、資源、成本,軟件產品的質量可能相差很多。一個重要的因素是軟件開發組織和人員的創新能力和水平。因此,在教學和軟件開發活動中應營造一個寬松、和諧的環境,努力培養學生的創新精神和創新能力。
五、重視教學和科研環境建設,建立軟件工程實驗室
有效地使用軟件工具和軟件開發環境,對提高軟件開發質量、效率,保證按時交付具有十分重要的作用,應加大軟件實驗室的建設力度,重視流行軟件工具和軟件開發環境的有效使用,提高學生的軟件開發能力。如面向對象的軟件建模方法、數據建模方法、軟件度量方法、軟件測試方法、現代軟件管理方法、開發工具Rational Rose、Power Designer等不僅教師要掌握,學生也要盡可能熟悉。要熟悉和掌握的軟件工程工具包括:分析設計工具、程序設計工具、軟件測試工具、配置管理工具等。將這些工具貫穿教學及其軟件開發活動,既有利于教師提高自身的研發能力,也能夠讓學生接觸和學習各種CASE技術,鍛煉他們的軟件開發能力。
軟件工程實驗室需要配備適用的軟硬件設施和比較科學先進的軟件開發工具,以便為軟件工程的教學和研究創造『必要的環境與條件。通過實驗室建設,不僅可以加強教學效果,還可以進一步提高教師的科研水平。
中圖分類號:G642 文獻標識碼:A
1 引言(Introduction)
軟件工程作為計算機和軟件本科專業最綜合最系統的一門課程,在促進學生鞏固之前學過的專業知識、掌握軟件開發過程及方法、理解軟件工程實踐等方面發揮了積極作用。但高校特別是三本院校在軟件工程課程講授時理論脫離實際,片面地強調理論學習而忽視實踐能力的培養,理論部分過于抽象,在課程實驗中,沒有把握好課程在人才培養的橋梁和作用,缺乏貫穿縱向知識體系和學科的整體理解和思想,往往只是本課程章節或課程的綜合理論驗證,采用虛擬的實驗案例,甚至將其設計成為章節內容驗證練習,而不是圍繞著軟件工程整本書的整個知識體系進行實際開發項目。導致學生學完軟件工程課程后還是不能理解軟件生命周期、開發過程及相應方法,與社會對軟件人才的需求存在差距,學生難以很快融入現代IT企業的運作[1]。如何培養起適合信息產業所需要的應用型、實踐型人才,已經成為亟待解決的問題。因此要想將學生培養成為符合社會需要的軟件工程人才,就應當改變目前的局面,全面考慮軟件工程課程建設。
本課題研究主要針對目前軟件工程課程理論脫離實際,同時很多教師過分強調軟件工程理論知識的一面,忽視了軟件工程必須有實踐項目還具有經驗性、參與性、發展性的特點,通過理論研究和教學實踐對軟件工程教學實踐提供實踐指導。加強軟件工程實踐教學的改革,通過理論與實踐相結合的方法培養社會需要的應用型軟件工程人才。解決三本院校軟件工程課程教授中理論、實驗與實際相脫離的問題。
2 針對社會需求,制定明確合理的教學計劃
(Formulate a reasonable teaching plan based on
the social needs)
教學計劃是各教學環境的整體設計方案,合理的專業的教學計劃能為教學順利實施提供指導,也是教學過程質量的有力保障,是人才培養的綱領和實施藍圖[2],它規定了課程結構和知識結構,明確了人才培養目標,構建了專業要求的課程體系,限制了教學環節的進程及內容。具體在制定計劃時應秉持以下幾點:
(1)樹立應用型人才培養理念
在培養軟件工程人才過程中要和一二本院校區別開來,我們應當以實際動手為主,培養適合企業操作崗位的技能人才。軟件工程專業應堅持“以市場為導向,以就業為目標,順應IT業發展趨勢,以校企合作為手段,突出技能培養,走應用型開放式道路。”的辦學思路,通過吸收國內外的優質資源,通過校企合作,共建實訓實習基地和技術開發應用等多種合作辦學,提高辦學活力及效率。在人才培養模式上突出以技術應用能力為核心的人才培養特點,課程設置以市場流行的軟件開發技術為主線由淺入深,技術的學習采用項目驅動、案例驅動的方式[3],不斷提高學生實踐動手能力,培養應用型技術人才,適應企業對人才的需求。
(2)構建應用型培養系統工程
學生在學校對知識的儲備與社會對人才的能力需求如何契合的更好是學校應該要慎重考慮的問題。目前,軟件服務外包產業對應用型人才需求量較大,軟件工程專業可以和武漢軟件外包單位合作,全面實施3+1人才培養模式,即,三年基礎、專業課程學習加一年實訓。這種嵌入式教學模式將會極大地提升學生的實際應用能力,他們進入企業后適應能力更強,上手會更快。在教學過程中,軟件工程專業可以構建工程化的實踐教學體系,以軟件項目研發到軟件項目運行的生命周期為載體,讓學生以主動的、實踐的、課程之間有機聯系的方式學習軟件工程,建立試驗―實訓―綜合設計―職業實踐的實踐教學體系,通過引進、開發真實的項目案例,讓學生實際參與項目開發全過程,切實提高學生解決實際問題的能力,培養他們的綜合應用素質。
(3)引入企業,接軌市場需求
基于工程化培養理念建立一批校企聯合實習實訓基地,實現教學過程與生產過程的對接,為應用型技術人才培養提供有力的保障。將一些行業內的企業而不單純是培訓單位引入校園,合作搭建項目開發平臺,形成以研發項目促進學生實習實訓,以研發項目帶動師生科研發展的人才培養新途徑,聯合培養雙師型教師。
3 軟件工程實踐教學采用的主要方法(The main
method of the software engineering practice
teaching)
軟件工程實踐課,包括課程實驗、課程設計、項目實訓和畢業設計等實踐環節。
3.1 實例教學
在教授理論知識時,傳統方法過度的在講授枯燥的理論知識,學生沒有實際的工程項目的經驗,根本無法理解軟件工程課程里的內容,在軟件工程課程理論課上教師要通過典型的軟件項目實例來講解理論知識,將實例貫穿于教學環節,模擬軟件工程項目場景,啟發學生分析問題、進行方案設計,在項目案例講解過程中抽象上升為理論知識,理論知識又反過來指導項目案例。
3.2 實驗教學
相對于計算機科學與技術專業,軟件工程專業更強調實踐性和工程性能力的培養,這都需要在實踐環節中培養,因此實驗與實踐教學是軟件工程專業教學的重要組成部分,其實施質量對專業教學質量具有舉足輕重的影響。軟件工程專業可以構建“課程實驗、課程設計、畢業設計”三級實驗體系[4],三級實驗體系粒度從細到粗,從具體到綜合。教師需要設置好實驗環節的內容、形式,實驗課和課程設計時采用商業軟件的開發模式,以實際項目和企業正常運作時人員的分工配合來進行實驗教學,理論指導實踐,實踐強化理論,將系列的實踐課程提升到工程項目訓練,實際軟件工程項目貫穿同步理論課的知識,讓學生從需求分析、總體設計、詳細設計、編碼、測試到項目交付和管理維護等完整的軟件開發過程進行系統實踐學習,這樣學生在一個真實的場景中實踐,親身體驗并進行反思,只有實際操刀了,學生才能理會并掌握完整的軟件開發流程、軟件開發技術及軟件開發方法。實驗時以小組形式開展工作,四五個學生為一組,每組由組員推薦或自薦一位組長,負責協調、分工,組員在小組長的協作領導下完成項目的開發過程。項目驅動實驗的軟件工程實踐教學可以幫助學生建構良好的軟件開發認知模式并培養一定的軟件工程素養[5]。在學生畢業前,開設項目實訓和畢業設計,旨在培養學生的綜合實踐能力,通過這樣的手段學生能比較真切地理解軟件工程理論知識并掌握軟件開發過程。通過實驗,掌握一個完整軟件開發過程,及過程中的每一個階段的任務、目標、方法、工具,并熟練使用一些CASE(計算機輔助軟件工程)工具來提升軟件開發效率,保證軟件質量。通過集中性的課程設計、畢業設計訓練,使學生逐步培養編程能力、算法分析設計能力、數據庫設計能力,能夠結合專業知識實現用戶需求,形成產品意識而不是作業意識,培養團隊交流協作能力、積累工程經驗、提高工程素養。每一個階段制定可衡量的、明確的目標,激發學生的學習興趣、提高知識的靈活運用能力、創新思維能力、綜合分析能力、系統設計能力等,為培養符合社會需求的人才奠定基礎。最后通過畢業設計綜合性鍛煉,實現學生就業的平滑過渡。
在每一級實驗過程中都采用“教師為主導、學生為主體”的原則,才有利于避免學生在學習上的依耐性、缺乏獨立思考問題和解決問題的能力,因此要充分發揮學生的主體作用,運用教師的專業知識和項目經驗言傳身教地引領、啟發學生學習、動手實踐,不斷引入新技術、新方法引起學生好奇心,激發學生探索學習欲望。教師需要動態地了解學生的接受能力,有針對性地因材施教、指導學生學習,讓學生擁有自主學習、持續學習的能力,意識到自己學得會,也很有利于調動學生學習的主動性,只有這樣,才能達到較好的實驗課教學效果。在每一次實驗后要及時地對本次實驗加以分析和總結,通過本次實驗遇到了什么問題?解決的方法是什么?實現了什么功能?還有哪些有待解決的問題?都要加以總結,并以報告的形式記錄下來,有利于日后開展實驗課程的教學。
3.3 社會實踐教學
一個軟件企業的正常運行需要多方面的人員協作與配合,如財務人員、開發人員、配置管理員、質量保證員、數據庫管理員、網絡維護工程師、系統架構師、軟件測試人員、管理人員等,在學校里學生難以體會到一個軟件開發過程中除編碼測試人員之外的其他崗位的職責和特性,學生只有真正進入企業才能體會并有機會實踐這些崗位。社會實踐教學可以通過校企合作的形式,也可以鼓勵學生自己去找實習單位,學生可以根據自己的興趣和個人發展方向來自由選擇角色,完成不同的任務,教師和公司導師給予引導。社會實踐教學是一次綜合性的實踐活動,是學生走向社會的開始,通過社會實踐教學活動,使學生能夠逐步認識綜合利用所學的專業知識,培養軟件開發的技能,深刻體會企業軟件開發與學習過程中編寫軟件的不同、軟件工程各階段角色任務管理和開發知識,提高自身的創新意識與創新能力,促進團隊之間的溝通協作,為早日踏上工作崗位打下堅實的基礎。
學生進行社會實踐教學活動時,嚴格按照企業的規定,執行、考勤、日志、總結等實際工作環節,廣泛使用協同開發平臺,使學生規范化、有序進行社會實踐活動。
4 結論(Conclusion)
通過對幾年軟件工程課程教學的思考和總結,以及調研一些其他院校軟件工程課程,提出了三本院校中軟件工程實踐教學存在的問題以及軟件工程實踐教學改革的必要性,從課程教學計劃的制訂、實例教學、實驗教學、社會實踐教學等幾個方面給出了切實可行的建議,同時這些建議也可為其他課程提供有意義的借鑒。
參考文獻(References)
[1] 熊偉,洪玫.大學本科軟件工程專業建設的探索與實踐[J].理
工高教研究,2010,(2):59-61.
[2] 晏立.從社會需求的角度探索軟件工程教育[J].教育與教學研
究,2008,(22):141-145.
[3] Roger S.Pressman.軟件工程:實踐者的研究方法[M].北京:機
械工業出版社,2011,(8):32-68.
[4] 熊凡,李偉波.項目驅動的軟件工程實驗教學探討[J].中國電
力教育,2012,(2):77-79.
[5] 丁潔.軟件工程的教學改革與實踐[J].科學與技術信息,2009,
(9):555.
中圖分類號:
1、引言
提起軟件,在當今社會人們并不陌生,正是由于軟件的發展,使計算機應用逐步滲透到社會生活的各個角落,使各行各業都發生很大的變化。這同時也促進人們對軟件的品種、數量、功能和質量等提出了越來越高的要求。然而,軟件的規模越大、越復雜,人們的軟件開發能力越顯得力不從心。于是,人們開始重視軟件開發過程、方法、工具和環境的研究,軟件工程應運而生。
“軟件工程”主要介紹軟件工程的基本原理、開發方法和開發工具,通過本課程的學習,使學生了解和初步掌握開發1個軟件項目所使用的方法和工具,以及“軟件工程”的發展過程和發展趨勢,為進行軟件開發打下1個良好的基礎。
2、課程特點
1。課程綜合性強。
軟件工程與其他計算機課程,如程序設計語言、數據結構、編譯原理、數據庫以及操作系統等課程都是相互作用和影響的。在1定程度上說,軟件工程討論的是在實際開發當中綜合運用這些課程中講過的理論和方法,將這些課程的理論和方法放在1個統1的目標下,這個目標就是在有限的時間及預算條件下,開發出高質量的令用戶滿意的軟件。
2。課程內容不斷更新。
軟件工程課程的教學培養目標應該以市場需求為導向,使課程培養的學生真正能夠在軟件行業中發揮作用。因此,在授課時,我們不能拘泥于教材內容的限制。在講解基本原理、基本概念和基本方法的同時,介紹1些新方法、新技術。這樣,有助于開拓學生的視野和培養創新意識與開發能力,使他們走向社會后不至落伍。
3。課程的實踐性強。
軟件工程是1門實踐性很強的課程,它是各種開發經驗的總結與提煉。在學習過程中不但應注重概念、原理、方法和技術的掌握,更應注重方法、技術的實際應用。學習軟件工程必須投身于軟件開發的實踐,才能真正領悟軟件工程的精髓。
實際教學當中,這門課的教學效果往往不是很理想,教師覺得這門課教起來較困難,學生學習中多數也覺得枯燥無味,很難達到較好的教學效果或獲得較強的實踐能力等預期目的。如何改善?結合軟件工程的課程特點,筆者認為可以從以下幾個方面來改進《軟件工程》的教學質量。三、軟件工程教學改進的內容和方法
1。教學過程引入實際案例
軟件工程課程涉及面很廣,如果不結合實際工程項目進行教學,很難把教學內容教授給學生。因此,在教學過程中引入案例,將復雜抽象的概念用具體生動的實例進行詮釋,能夠收到事半功倍的效果。例如,在授課時教師可結合1個“學校教材購銷系統”實例,給學生介紹具體的開發過程和方法。
另外,學校還可邀請領域內有實際經驗的資深程序員,針對軟件工程中具體理論和方法在實際開發中的應用,在課堂上和學生進行面對面講座,深入淺出地作講解。這樣,學生可以更加熟悉、掌握軟件開發的過程。
2。組織課堂討論,形成教學互動
我國有句名言:“授人以魚,不如授人以漁”。學生是教學活動的核心,教師要利用合適的方法調動學生的積極心理和參與意識,改變傳統的教師高高在上的教學方式,讓學生參與教學過程,有機會發表自己的看法。
比如在講授需求分析這章內容時,可結合“學校教材購銷系統”這個案例,要求學生按照軟件工程教學的思想和方法認真做好需求分析。在實施過程中,首先由學生獨立思考,給出解決方案。然后在課堂上,組織學生進行討論,分析各自解決方案的優劣,并進行綜合。最后由老師進行總結和評價,指出該案例所涉及的理論知識及其應用方法,就學生提出的問題進行解答。這樣通過組織學生討論,可使學生進1步理解和掌握課程內容的方法和步驟,使抽象的知識變得看得見,用得著,大大激發了學生學習的興趣和自信。
3。加強實踐環節
從本質上看,軟件工程的實踐性和綜合性是其他相關課程難以比擬的。因此,必須結合設計項目和實際應用加以施教,才能取得良好的教學效果。那么,在把握教學進度的同時,必須及早安排好課程設計,讓學生同步開展課程設計。這樣,理論課講完了,課程設計也基本結束,學生們能從理論和實踐的結合上,加深對軟件工程知識難點、重點的理解,進1步深刻理解軟件過程和系統消化理論知識,訓練項目設計的思路,鍛煉實際開發能力,培養嚴格規范的項目開發方法和步驟,體驗文檔編寫整理、階段性評審總結以及軟件測試等各個方面的工作流程,直接培養了學生從事實際開發的能力。
四、結束語
在教學中,我們還應根據學生的具體情況,因材施教。總之,通過不斷改進教學,使學生能更好地理解、掌握知識,運用所學服務社會。
參考文獻:
(1)授課內容引入案例。教師在教學過程中引入與理論知識相匹配的實際案例,將比較抽象的軟件工程原理、方法和技術轉為具體生動的案例進行詮釋,增強理論教學的藝術性、科學性、趣味性、形象性,使學生能夠在課堂上深刻領會和理解軟件工程的思想和方法,教學效果收到了事半功倍。
(2)適時更新教學內容。近幾年,軟件原理、方法和技術發展較快,許多適應時展的軟件不斷涌出,而目前的教材雖不斷改版更新,但其更新的速度遠遠跟不上軟件工程的發展。因此,教師在進行理論講解時,除了要教授學生基本原理、技術和方法外,還要時刻關注新內容的出現。
(3)制作豐富多彩的課件。采用多媒體教學手段,在課件中插入圖片、動畫、聲音、視頻等多媒體元素,使教學內容更加充實和生動。
(4)課堂小組討論。從小問題到大問題,讓學生參與教學過程,有機會發表自己的看法。課堂討論和分析試驗,使理論有實踐作支撐,抽象的知識變得看得見,用得著,大大激發學生學習的興趣和自信。
二、實踐教學內容多樣化
軟件工程理論的講解是課程學習和技能培養的基礎,而軟件工程中許多理論內容如果只是教師講解不加以實踐,內容本身就會變得空洞和不可理解,例如:軟件復雜性計算、軟件可靠性與安全性的測量標準、結構化的實現方法等都需要學生動手實踐才能更好地理解知識本身的內涵。掌握概念、原理、方法和技術,熟練應用軟件開發實踐中的方法和技術是“軟件工程”課程對學生的培養目標。
(1)課程角色扮演。教師預先選擇若干小項目,班內學生根據自己對項目熟悉情況選擇項目名稱,劃分項目小組,每組人數不超過6人,每個項目小組成員根據自身特長選擇不同軟件工程角色,例如項目負責人、需求分析負責人、設計負責人、編碼負責人、測試負責人和用戶代表,進行項目分工。項目組成員按時完成自己負責任務,撰寫相應文檔。教師幫助學生分析和解決所遇到問題。在整個開發過程可以體現“學以致用”的思想,實現理論與實踐相結合。
(2)課程設計。課程設計主要是針對高年級學生在學習軟件工程課程時開展的專項訓練。課程設計采取在學校內模擬IT企業環境下完成來自企業案例或開發一些具有應用價值項目或學校教師承擔的開發項目的部分開發工作,也可以是學生自選項目,整個課程設計階段嚴格按照工程實施的基本思想來實施。(3)加強校企合作。一方面經常邀請軟件公司長期從事軟件設計、開發和項目管理的工程師和項目經理,給學生講解自己在軟件設計、開發和管理中的經驗,高質量軟件產品需要經過怎樣的開發過程,軟件生命周期中標準文檔如何撰寫等相關內容;另一方面,利用寒暑假時間,讓學生走出去,到軟件產品的研發單位實地實習。
三、考試方式多樣化
傳統的考核方式已經不能反映學生實際軟件開發的水平,也與多樣化的教學模式不相匹配,為此多樣化的考核方式才符合現實需求,主要包括:筆試、課后角色扮演、課程設計和項目總結。
(1)筆試占總成績的35%,主要考查學生理論知識的掌握情況和學習效果。
(2)課后角色扮演占總成績的15%。由教師根據每位學生在課后角色扮演中的具體表現進行打分,主要由3部分取平均值組成:1/3*(整個項目的成績+自己負責完成的文檔成績+組內其他成員負責完成的文檔的平均成績)。
(3)項目總結或心得體會占總成績的15%。根據學生在軟件開發過程中所撰寫的經驗和教訓總結報告、每個小組成員建立的個人開發記錄或日志的實際情況,相互打分。四、基于多元教學模式課程改革方案基于上述改革理念,按照軟件工程開發原理、方法和技術,選用典型項目案例,將學生按照項目分成若干個小組,每組人數不超過6人。每個小組對應著一個具體的項目,每個人對應著一個具體工作過程,按照如下步驟進行多元教學。第一步,教師選用合適的教學內容,制作豐富多彩的課件,對學生進行基本理論和基本技能的講解。在每一個軟件生命周期結束后,教師進行案例場景描述。教師按照理論知識的內容,選擇相應的案例進行描述,學生將所學內容運用到相關案例中。教師通過案例讓學生明白理論知識如何應用,學生通過案例體會到小項目中所學的原理、方法和技術是如何實現的。第二步,課后角色扮演。學生通過分組討論的方式,完成項目分工,明確自己在項目中所扮演的角色。所有的任務通過集體討論的方式,決出所要完成的任務,并由相應的角色人實際操作完成。例如,需求分析一章內容,學生課后進行項目小組討論,決定需求分析的內容,進行相應的需求分析,并由扮演需求分析人員的學生完成需求報告。軟件開發過程需要整個團隊的通力合作,根據學生的性格、表達能力、開發能力、理論基礎掌握情況等方面進行人員分組,將具有不同特點的學生組成一個團隊完成項目開發。這種團隊合作的方式,既能發揮學生各自的特長,又能培養學生的團隊合作精神。第三步,課程設計。當全部內容講解完成,就可以開始長達2周的課程設計內容了。這段時間要求項目小組,徹底完成一個由教師虛擬的項目。此步驟中,主要培養學生良好的科研習慣,在開發過程中及時總結經驗和教訓,建立個人開發記錄或日志,理論聯系實際學著開發軟件。第四步,學生總結,教師點評。學生經過多個教學環節后,每個團隊在一定程度上完成了各自的項目任務,對各自團隊的成果進行總結。教師聽取每個團隊的匯報后,從橫向和縱向兩個方面對項目成果之間進行比較,從而讓每一位學生明白自己在團隊中發揮了什么作用,自己哪些方面不足。第五步,請進來,走出去。通過學校和企業合作的方式,一方面經常邀請軟件公司長期從事軟件設計、開發和項目管理的工程師和項目經理,給學生講解自己在軟件設計、開發和管理中的經驗,高質量軟件產品需要經過怎樣的開發過程,軟件生命周期中標準文檔如何撰寫等相關內容;另一方面,利用寒暑假時間,讓學生走出去,到軟件產品的研發單位,實地實習。
2CDIO模式下實踐教學體系的構建
軟件工程是一門實踐性很強的專業,應用型、工程型軟件人才的培養定位更加強調學生動手實踐能力的培養和工程方法學的訓練,因此,實踐教學的體系建設和教學效果對學生的培養質量起著至關重要的作用。借鑒和吸收CDIO工程教育理念和標準,我們從教學內容和教學方法兩方面對軟件工程專業實踐教學體系進行了重新構建和實踐。課程實驗、課程設計、綜合實訓、畢業設計四個層次循序漸進、由淺入深、環環相扣;在教學方法的構建上,我們從工程教育的角度出發,形成了“案例牽引、項目驅動、團隊合作、引導互動”的教學模式。
2.1教學內容的構建
在教學內容的構建上,我們按照“以CDIO培養大綱為指南、以項目設計為導向、以工程能力培養為目標”的原則,將軟件工程專業的實踐教學體系分為以下四層次。2.1.1課程實驗課程實驗是單門專業課程教學中的實踐環節,也是整個實踐教學體系的基礎,對學生基礎專業技能的培養具有重要作用。為了加強實踐教學,我們在絕大部分專業課和專業基礎課中都設置了課程實驗,根據教學目標的不同,課程實驗設計為驗證性、設計性和綜合性等不同的層次。對于實踐性很強的專業課程,如程序設計基礎、面向對象程序設計等,采用完全實驗教學的方式,通過一個完整的項目將課程知識結構串聯起來,并通過“分而治之”的形式來學習各個知識點,將教師講解與演示、學生實地操作有機融合起來,最后完成整個項目,以培養學生的動手實踐能力和專業興趣;對于理論性較強的專業課程,如數據結構、操作系統等,采用理論講解與上機實踐并舉的方式,加強學生對專業基礎理論知識的理解與應用。2.1.2課程設計課程設計是實踐教學體系的第二層次,是在課程實驗的基礎上,選擇一些實踐性強且具有代表性的課程作為單獨課程開設綜合性課程設計。例如,Java程序設計課程設計、軟件工程課程設計等。與課程實驗相比,課程設計具有綜合性和實用性的特點,學生在教師的指導下綜合運用相關課程的知識和技術完成一個完整的設計或實現。通過課程設計的訓練,培養學生運用專業知識分析問題和解決問題的能力,使學生的專業技能得到進一步的提升和拓展。2.1.3綜合實訓綜合實訓是以課程設計為基礎,綜合運用多門相關課程知識完成一個工程項目的實戰訓練。綜合實訓以項目為載體構建知識結構,將學科知識、專業技能與工程實踐有效結合,體現軟件工程領域中的工程學和方法學的實施,實施技術與管理能力訓練和職業綜合素質綜合的培養[4]。根據方向不同,我們在軟件工程專業開設了兩門綜合實訓課程:(1)軟件開發綜合實訓。以軟件生命周期為主線,綜合運用程序設計、數據庫應用、軟件工程、軟件項目管理等學科知識,嚴格按照軟件開發的流程與規范,完成一個軟件項目的開發,最后提交軟件產品和相關技術文檔。(2)軟件測試綜合實訓。要求學生以軟件開發綜合實訓所完成的軟件產品為被測對象,綜合運行軟件測試與質量保證、軟件測試流程與方法、測試框架與自動化測試等學科知識,使用軟件測試的方法與技術,設計測試用例和測試腳本,完成被測軟件的功能測試與性能測試,生成測試報告,并對測試結果進行分析。2.1.4畢業設計畢業設計是實現人才培養目標的重要手段,是實踐教學體系中最后一個綜合性、創造性的實踐環節;是對學生基礎理論、專業知識與實踐成果的全面總結,是學生綜合素質與工程實踐能力的全面檢驗[5]。為了提高畢業設計的質量,我們從以下三方面層層把關。(1)在課題選題上,強調選題的可行性和實用性,忌空忌大,選題最好能與指導教師的科研方向或學生的實習工作相關聯;(2)在過程控制上,實行師生定期交流與匯報制度,確保畢業設計按計劃保質保量完成;(3)在畢業設計報告及相關材料的撰寫上,從規范性和科學性兩方面嚴格要求,確保質量。
2.2教學方法的構建
2.2.1案例牽引案例教學是實踐教學中的常用手段,具有直觀性高、互動性強的特點。按照CDIO大綱能力培養的層次要求,結合各實踐課程的教學目標,我們在實踐教學中精心規劃和設置了不同層次、不同復雜度的教學案例,以案例實現過程為驅動來安排教學內容和方法。在教學過程中,以一個具體的案例為線索,把教學內容巧妙地融合在案例之中,學生以完成案例任務為目標,在老師的指引下對目標問題進行分析與分解,并通過動手實踐解決問題,真正做到“做中學”和“學中做”。在完成任務的過程中,不僅使學生的動手實踐能力得以提高,也培養了學生的創新意識、創新能力以及分析問題、解決問題的能力。2.2.2項目驅動工程實踐能力是專業技能的進一步升華和提高,是從整體上對工程項目的一種實做能力,是工程類畢業生必備的核心素質。根據CDIO“做中學”和“基于項目的教育和學習”的思想,我們在實踐教學中廣泛采用項目驅動的教學模式。強調以一個產品或系統從構思、設計、實現到運作的完整的構建過程來培養學生的工程實踐能力。以軟件開發綜合實訓課程為例,在課程中引入“項目驅動”的教學理念,以軟件生命周期為主線,以項目為載體、任務為驅動開展實踐教學。通過一個軟件產品從項目啟動到需求分析、設計、實現、測試、運行維護的整個生產過程的實戰,培養學生的工程能力和綜合素質。2.2.3分組教學團隊能力是CDIO大綱要求工程畢業生必備的一種能力。在實際教學過程中,我們模擬企業的真實環境,將所有學生分為若干項目小組,每組由一名組長和若干名組員構成。根據任務分工不同,每名學生都被賦予一定的角色,組員在組長的指揮協調下通力合作,共同完成實驗項目。實踐表明,分組教學模式能較好地激發學生的學習熱情,組員之間分工協作、互學互助,學生的溝通能力、協作精神和團隊意識大為提升。2.2.4革新考核方式考核是對學生學習成果的認定和評價,良好的考核機制能對學生的學習過程和學習動機產生正確的指引作用,促進教學質量的提高。在實踐課程的考核上,以能力培養為導向,采取多元的考核方式。引導學生在平時項目實訓過程中加強專業技能的訓練、工程能力的培養以及綜合素質的提高。(1)對基礎性的課程實驗,重點考核學生專業知識與技能的掌握情況,采取平時實驗成績與期末上機考試成績相結合的方式。(2)對課程設計和綜合實訓類課程,重點考核學生的工程實踐能力和團隊協作能力。采取以作品演示、項目答辯為主的考核方式,同時規范化的文檔資料也是重要的考評指標。(3)對于畢業設計,重點考核學生的創新能力。科研能力以及分析解決問題的能力,考核方式同綜合實訓。總之,以能力培養為導向,注重能力考評。2.2.5校企合作校企合作是培養學生的綜合素質和實踐能力的重要途徑。為了增強人才培養的針對性和畢業生與工作崗位的無縫對接,我們同中創、中遠等知名軟件公司開展校企合作聯合辦學。充分利用學校和社會兩種教育環境和教育資源,聯合構建工程型實踐教學隊伍與教學平臺。一方面,學校聘請企業一線的工程師作為兼職教師來校授課,不僅充實了實踐教學隊伍,更帶來了企業的最新技術和行業資訊;另一方面,選派優秀教師到企業學習鍛煉,參與企業項目,提升師資隊伍的水平。此外,通過在企業建立校外實訓、實習基地,使學生盡早感受企業文化和接觸到真實的企業項目,也為學生就業積累了豐富的工程實踐經驗。