謝 雅
(湖南工程學院 計算機與通信學院,湖南 湘潭 411104)
軟件工程是軟件工程、計算機科學與技術等本科專業(yè)的必修課,是一門綜合性、實踐性強的課程,對培養(yǎng)學生的工程思維能力、實踐能力、創(chuàng)新意識、溝通技能和團隊合作精神具有重要作用。[1]該課程從系統(tǒng)工程的角度講述軟件開發(fā)的過程、步驟、方法與技術,要求學生初步掌握軟件開發(fā)的基本理論與方法,了解軟件項目開發(fā)和維護的一般過程,培養(yǎng)學生用工程的方法進行軟件開發(fā)的能力,為更深入地學習和從事軟件工程實踐打下良好的基礎。[2]
目前,國內高校對于該課程的傳統(tǒng)做法是以教師課堂授課為主,學生聽課為輔,教學內容一般側重于理論。即使配備課程實驗,學生也只是編寫一些規(guī)定的文檔,其開發(fā)方式和手段與軟件工程的要求脫節(jié)。[3]很多學生在學習該課程時,感到內容抽象枯燥,常常是似懂非懂,甚至覺得本課程沒什么實用價值,不太喜歡學。
軟件工程是一門理論與實踐并重的課程,有如下三個主要特點。
1.軟件工程是一門研究用工程化方法構建和維護有效的、實用的和高質量的軟件的學科。它涉及到程序設計語言、數(shù)據庫、軟件開發(fā)工具、系統(tǒng)平臺、標準和設計模式等方面。對軟件工程的教學需要構建合理的教學體系結構,結合基礎知識、先進技術和工程實踐等方面組織整個課程內容,使學生掌握軟件工程的基礎知識、先進方法和最新技術。
2.軟件工程不是一門速成的學科,它的基本內容覆蓋軟件工程概述、軟件開發(fā)過程、軟件工程管理、軟件工程技術和軟件工程支持等部分的相關知識。學生很難靠聽講軟件工程的基本原理就學會開發(fā)一個實際的軟件,而是需要在實際的“動手做”和“真正練”中體會和掌握軟件工程的思想。
3.軟件工程實踐課是對軟件工程理論知識的具體綜合應用,使學生在編碼、文檔撰寫和團隊協(xié)作等方面得到綜合訓練,需要構建一個軟件工程支持的開發(fā)環(huán)境,這個環(huán)境應提供軟件開發(fā)所需要的相關硬件和軟件,營造一個適合軟件工程課程實踐項目的軟件工程環(huán)境是軟件工程實踐教學取得良好效果的關鍵。
根據教育學中主要的教學原則有科學性與教育性相結合的原則、理論聯(lián)系實際的原則、直觀性原則、啟發(fā)性原則、循環(huán)漸進原則、鞏固性原則、因材施教原則,結合IEEE 最新發(fā)布的軟件工程知識體系,改革課程體系框架和教學內容,提出基于“做中學”的軟件工程教學模式,該模式包括三點內容。
IEEE 發(fā)布的軟件工程知識體系包括10 個知識領域:軟件需求、軟件設計、軟件構造、軟件測試、軟件維護、軟件配置管理、軟件工程工具和方法、軟件工程過程和軟件質量。[4]參考這10 個領域知識,根據教學目標,結合基礎知識、先進技術和工程實踐等方面組織整個課程內容,建立基于知識、應用、實踐和綜合型軟件項目開發(fā)四維一體的課程教學體系結構(見表一)。
表一 軟件工程課程體系結構
知識體系包括可行性分析、需求分析、總體設計、詳細設計、實現(xiàn)、維護、面向對象分析、面向對象設計、面向對象實現(xiàn)和軟件項目管理。
應用體系包括用例圖、類圖、狀態(tài)圖、順序圖、Rational Rose、能力成熟度模型、軟件重用和軟件構件。
實踐體系包括三個具體的小規(guī)模軟件的設計和開發(fā)。
綜合型軟件2 組開發(fā)體系包括兩個具體的中等規(guī)模軟件的設計與開發(fā)。
該體系結構融合軟件工程基礎知識、軟件工程的開發(fā)應用、軟件工程實踐和綜合型軟件項目開發(fā)四個方面的內容,并建立的一定的層次和融合關系,在該體系結構下,學生不僅能掌握軟件工程的基礎知識、先進方法和最新技術,還具備實際軟件開發(fā)和拓展能力。
軟件工程的理論和方法是從眾多軟件開發(fā)實踐中總結出來的,但是對于缺乏軟件開發(fā)實際經驗的本科生來說,單純地講授理論知識往往使學生感到枯燥無味且難以理解。因此,收集和總結了一些軟件開發(fā)案例,將這些案例貫穿于理論知識的講解中;同時,引入“做中學”教學模式,讓學生在實際的項目開發(fā)中進一步理解這些理論知識,建立軟件開發(fā)的系統(tǒng)化與工程化觀念和質量意識。
1.對于知識內容,引入一些經典案例進行教學,諸如愛國者導彈、網絡病毒攻擊、ARIANE 5 火箭等,從這些經典案例出發(fā),了解軟件危機產生的原因,逐漸了解到軟件危機的產生不僅僅只是程序代碼的錯誤,更多的是設計上的缺陷,認識到軟件工程的重要性,也了解到軟件工程要解決的主要問題,即以軟件工程的原理和方法為指導,嚴格遵循軟件過程規(guī)范和步驟。在這個過程中,案例的選擇非常重要。案例選得過于簡單,不能突出軟件工程的重要性,案例選得過于復雜,又不能提高學生的學習興趣。所以,應選擇一些有代表性的,突出反映軟件工程某一方面且又帶有一定趣味性的案例。
軟件工程里一個重要的內容就是軟件過程,但是對于開發(fā)經驗有限的本科生來說,最容易形成的現(xiàn)象就是:對這些抽象的過程模型很難理解,容易產生枯燥乏味的感覺,很難在頭腦中將軟件過程的抽象模型與實際開發(fā)聯(lián)系起來。針對這樣的情況,應結合軟件工程中的五個基本開發(fā)模型:瀑布模型、原型化方法、增量模型、形式化方法和基于組件的開發(fā)模型設計五個與之相關的軟件系統(tǒng),結合這些系統(tǒng)的特點和開發(fā)策略,讓學生在思考、分析和討論過程中更好地理解和體會軟件過程的基本概念;通過對著五個軟件系統(tǒng)開發(fā)過程的不同比較,學生更能理解這五個模型的優(yōu)缺點,有利于在實際開發(fā)中運用這些過程模型組織開發(fā)過程。
在軟件項目管理方面,引入項目管理的思想,通過諸如微軟公司和IBM 公司等的人員組織與項目管理,使學生了解到成本、人員、進度、質量、風險等因素在軟件開發(fā)過程中的重要性,弄清項目管理中人員、產品、過程和項目之間的關系,特別強調在后期的團隊協(xié)作和項目溝通中這些因素的重要性。
2.在軟件工程的應用方面,設計針對性的案例,重點介紹UML 知識,并結合Rational Rose 講解其具體應用,還應介紹CMM 軟件的重用技術、軟件構件等知識,引導學生自學新知識、新技能。
3.對于軟件工程的實踐教學,對于每一個具體軟件過程階段,應設計具體的應用案例,如:銀行計算機存儲系統(tǒng);機票預訂系統(tǒng);患者監(jiān)護系統(tǒng)等。這些具體的應用案例,雖說不是一個完整的軟件工程開發(fā),但是通過這些具體的應用案例,學生能夠更好的理解和掌握軟件開發(fā)每一個階段的具體任務和方法,也對軟件項目管理有一定的認識。
4.綜合型軟件項目開發(fā)是對軟件工程知識的綜合應用,結合成績管理系統(tǒng)、圖書管理系統(tǒng)、問卷調查系統(tǒng)、視頻游戲軟件等教學案例,論述各個系統(tǒng)在需求分析、體系結構設計、用戶界面設計、詳細設計、軟件測試和軟件維護等等方面所做的具體工作和設計的技術問題。
實踐教學是本課程中一個重要的組成部分,一般在指導老師的帶領下以團隊的方式進行,要求一個團隊通常由3-5 人組成,開發(fā)一個實際的具有一定規(guī)模的軟件系統(tǒng),包括實驗準備、分析設計、編程測試和軟件交付等環(huán)節(jié),最終要提交軟件、開發(fā)文檔和進行答辯。通過實踐環(huán)節(jié),側重培養(yǎng)學生發(fā)現(xiàn)問題、獨立分析問題和解決問題的能力以及團隊合作精神,使學生初步體會到一個軟件開發(fā)項目全過程。同時,在實踐過程中,也要注重將小組協(xié)作、過程管理、成本因素與參與興趣相結合,使學生在一個規(guī)范可控的過程中完成實驗項目的開發(fā)。
對于軟件工程課程實踐環(huán)節(jié)來說,僅僅提供一個軟件開發(fā)項目是遠遠不夠的,學生還需要一個適合協(xié)作式項目開發(fā)的軟件工程環(huán)境。這個環(huán)境應提供軟件開發(fā)所需要的相關硬件和軟件。營造一個適合軟件工程課程實踐項目的軟件工程環(huán)境是軟件工程實踐教學取得良好效果的關鍵。因此,應專門編寫軟件工程的實驗指導書,包括開發(fā)過程模型、系列文檔模板、軟件編碼規(guī)范、階段評審標準等,使實驗和實踐環(huán)節(jié)規(guī)范有序;同時將常用的軟件工程工具引入到課程實驗項目中,使用配置管理工具將所產生的各種制品控制在有序管理之下,使用建模工具和測試工具進行軟件的分析、設計和測試。
在小組式的軟件工程環(huán)境中,使學生真正體驗到一種有序、可控和協(xié)作的軟件開發(fā)過程,在分析問題、解決問題、協(xié)調沖突和消除矛盾的過程中享受軟件開發(fā)成功的最終結果。
筆者連續(xù)幾年從事軟件工程課程的教學,在前文所提的軟件工程教學模式進行了實際應用,具體操作過程包括教學準備、教學過程和教學結果三個方面。
首先,根據教學大綱,在深入分析教學內容的基礎上,列出該課程的知識結構體系,以及與相關課程的聯(lián)系,從而確定該課程的教學目標。該課程的教學目標為:通過本課程的學習,要求學生掌握軟件工程的基本概念、基本原理、實用的開發(fā)方法和技術;了解軟件工程各領域的發(fā)展方向;如何用過程化及面向對象的方法開發(fā)軟件項目,以及開發(fā)過程中應遵循的流程、準則、標準和規(guī)范。
首先,在課堂講授中,所有的講授都是從案例開始,通過分析案例來引入這節(jié)課講授的內容,通過分析解決案例,一步步引入課程教授的知識點。一節(jié)課后,問題解決了,學生對知識點也掌握了。例如在第一節(jié)課時,引入一個軟件工程的經典案例,通過這個案例,讓學生了解軟件工程的重要性,然后從這個案例出發(fā),讓學生了解軟件工程解決的主要問題,從而引入整個課程的結構與重點,以及該課程與其它課程的關系。在深入分析教學內容的基礎上,列出該學科的知識和能力結構體系,以及各單元或章節(jié)之間的邏輯關系,然后再按單元或章節(jié)分別列出知識能力結構體系。按照教科書的章、節(jié)(課)的順序,用簡明扼要的語言列出各知識點的內容,并標出各知識點的學習目標層次,同時注明哪些知識點屬于教學中的重點或難點。
其次,在實踐教學環(huán)節(jié),針對三個具體的項目:計算機儲蓄系統(tǒng)、機票預訂系統(tǒng)和患者監(jiān)護系統(tǒng),學生按教師組要求組成4-6 人的項目小組,扮演項目開發(fā)過程中的不同角色,每一個角色要清楚自己的定位和項目開發(fā)的主要任務,獨立完成相應任務的同時,也要注意分工協(xié)作。每一個學生都要參與項目的開發(fā)和管理,從不同角度全面把握和體會整個軟件工程項目開發(fā)和管理的基本思想,共同完成實驗項目。教師加強在實驗過程中的指導作用,要求各項目小組分階段提交討論記錄和項目工程要求的里程碑成果。項目完成后,每個學生要寫出自己的總結報告,進一步加深對軟件工程知識體系的認識。
連續(xù)兩個學期的軟件工程課程學習結束后,對學生進行了教學效果問卷調查,調查的主要內容包括如下四個方面:(1)學生對本課程的學習興趣;(2)學生對教學方法的意見;(3)學生課后自學本課程的時間;(4)學生對實踐課程教學內容和方法的意見。共對120 名學生進行了問卷調查,收回有效調查問卷118 份。調查結果如下:108 人(占有效總人數(shù)的91.5%)認為對軟件工程這門課程有較高的學習興趣,10 人認為沒有學習興趣;101 人(占有效總人數(shù)的85.5%)認為課后用于自學和復習課程的時間占到了課余時間的30%以上,17 人認為課后沒怎么進行擴展學習;大部分的學生表示基于“做中學”的教學模式讓他們在具體的項目實踐中掌握了與大型軟件系統(tǒng)相關的規(guī)劃、分析、實現(xiàn)、測試、維護和項目管理的基礎知識,也增強了他們實際軟件工程動手能力和綜合應用能力。
問卷調查結果表明,大部分學生對新的教學模式是滿意的,采用新的教學方法,有力的提高了學生對軟件工程專業(yè)課的學習效率和學習熱情。
軟件工程是一門綜合性和實踐性強的課程。結合IEEE 最新發(fā)布的軟件工程知識體系,提出基于“做中學”的軟件工程教學模式,該模式通過構建先進的課程體系、開展案例化教學和構建合理開發(fā)團隊,讓學生在具體的項目開發(fā)環(huán)境中學習軟件工程的知識。最后進行新的教學模式的試點研究和效果問卷調查,調查結果表明,大部分學生對新的教學模式表示滿意,新的教學體系有力的調動了學生的學習積極性,加強學生對知識的理解和掌握。
[1]白曉清.“軟件工程”課程教學改革探索[J].高教論壇,2007,4(2):122-124.
[2]駱 斌.軟件工程專業(yè)課程體系的研究與創(chuàng)新實踐[J].計算機教育,2010,12(23):10-13.
[3]巫華芳.軟件工程課程教學模式探討[J].科技信息(科學教研),2007(17):87-88.
[4]萬江平.軟件工程知識體系指南綜述[J].計算機應用研究,2006(10):1-3.