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