孫小兵,李 斌,李 云,朱俊武
(揚州大學 信息工程學院,江蘇 揚州 225127)
《軟件工程》是軟件工程專業(yè)重要的基礎(chǔ)課之一,這是由軟件工程在軟件產(chǎn)業(yè)中的重要地位決定的。針對60年代“軟件危機”爆發(fā),1968年在NATO (北大西洋公約組織)召開的學術(shù)會議上,F(xiàn)eitz Bauer首次提出了“軟件工程”概念,后來,軟件工程作為一門學科迅速發(fā)展起來[1-2]。它以提高質(zhì)量、降低成本為目的,將系統(tǒng)化、規(guī)范化、可度量的工程化方法應用于軟件開發(fā)、運行和維護過程,從而使正確的管理方法和當前最好的開發(fā)技術(shù)結(jié)合起來[1-2]。但是軟件產(chǎn)業(yè)發(fā)展日新月異,已經(jīng)從傳統(tǒng)的單機軟件開發(fā),到后來的面向互聯(lián)網(wǎng)的軟件開發(fā),到現(xiàn)在的面向物聯(lián)網(wǎng)的軟件開發(fā)等[3-5],軟件開發(fā)環(huán)境和應用環(huán)境也不斷變化,例如面向移動互聯(lián)的軟件開發(fā)、云環(huán)境下的軟件開發(fā)、眾包環(huán)境下的軟件開發(fā)、面向大數(shù)據(jù)處理的軟件開發(fā)、基于DevOps的軟件開發(fā)、智能化軟件開發(fā)等等,這些變化都要求軟件工程專業(yè)學生具有扎實的基礎(chǔ)和學習實踐能力[6-8]。
我國2011年將軟件工程設(shè)為一級學科,教育部專門成立了軟件工程教學指導委員會,相關(guān)大學都將《軟件工程》課程作為重點課程進行建設(shè)[9-10]。而在課程建設(shè)過程中,各高校都花費了大量的精力建設(shè)一系列案例資源庫,針對軟件工程特點設(shè)計了一系列案例結(jié)合教學,著力提高學生的軟件工程實踐能力[11-12]。通過這些案例的教學和實踐,使學生具備軟件工程開發(fā)的基本素質(zhì)[13-14]。
基于軟件工程環(huán)境和技術(shù)的發(fā)展,《軟件工程》課程教學很難滿足專業(yè)能力需求,出現(xiàn)了一些案例或項目驅(qū)動教學改革方案:孫明等[15]提出設(shè)計型項目驅(qū)動的軟件工程實踐教學改革模式,該模式以學生為主體,構(gòu)造實用的軟件項目案例簇進行分階段教學設(shè)計,實現(xiàn)軟件人才的動態(tài)培養(yǎng)。張佩云等[16]提出項目驅(qū)動的軟件工程課程案例式分段情景教學法,該方法實現(xiàn)了分段式情景教學過程管理的系統(tǒng)框架。孫小兵等[17]提出面向?qū)嵺`的軟件項目管理課程建設(shè),重在建設(shè)一批適用于軟件項目管理課程的案例庫。吳志輝等[18]提出進行項目驅(qū)動的軟件工程課程教學模式改革,將小型軟件項目用于課堂教學和學生上機作業(yè),提高教學效果和質(zhì)量。王靜[19]探索了以案例庫為導向的“現(xiàn)代軟件工程”教學模式,要求在完善教學內(nèi)容的同時,使課程內(nèi)容更接近企業(yè)和社會需求。彭煥峰等[20]探討了如何面向卓越工程師培養(yǎng)進行軟件工程案例庫建設(shè),主要從能力知識點矩陣、案例-能力知識點矩陣、案例收集與更新、案例庫平臺構(gòu)建等方面討論案例庫建設(shè)。陳鄞等[21]提出基于校企合作進行軟件工程專業(yè)系列的案例教材建設(shè),將企業(yè)實際項目按照知識點體系引入到軟件工程案例教學中。
隨著軟件工程的快速發(fā)展,已有案例顯得有些過時,不能適應新的社會應用和軟件工程本身發(fā)展需求。為突出軟件工程能力培養(yǎng),強化軟件工程實踐教育[22-23],本文提出針對軟件工程課程構(gòu)建實踐驅(qū)動的軟件工程課程案例庫設(shè)想。該案例庫基于成熟的在線資源平臺[24],方便教師和學生管理與使用,實現(xiàn)案例庫的動態(tài)更新。這些案例來源多樣,滿足軟件工程環(huán)境和技術(shù)發(fā)展的多樣化要求。
《軟件工程》課程主要圍繞軟件生存周期介紹軟件開發(fā)、維護、管理等方面的基本概念、標準、規(guī)范、方法、技術(shù)、過程、工具和環(huán)境。學生要重點掌握如何從工程的實踐角度高質(zhì)量、高效率地開發(fā)、跟蹤和維護軟件項目。因此,本課程教學內(nèi)容將以軟件生存周期知識體系為線索,講解如何進行需求分析、軟件設(shè)計、軟件實施、軟件測試、軟件維護等內(nèi)容,并介紹相關(guān)的規(guī)范、方法和技術(shù)。要求學生掌握核心知識,熟悉相關(guān)應用領(lǐng)域,在某個知識域上追求深度,理解職業(yè)道德,明白系統(tǒng)工程和軟件工程的區(qū)別,能夠利用系統(tǒng)工程原則指導軟件工程,具有團隊合作精神,具有交流表達能力,具有協(xié)調(diào)、折衷能力,具有綜合能力,具有終身學習能力,具有對新技術(shù)的分析和應用能力。因此,課程案例建設(shè)應當體現(xiàn)社會需求、軟件開發(fā)環(huán)境的變化需求、軟件不斷演化和升級的需求。
《軟件工程》課程主要特點如下:
(1)知識碎片化。《軟件工程》課程內(nèi)容既包括軟件工程開發(fā),如需求分析、軟件設(shè)計、軟件測試等內(nèi)容,還有軟件工程管理,如成本管理、質(zhì)量管理等內(nèi)容。各部分內(nèi)容之間既具有獨立性,又有一定的關(guān)聯(lián)性,例如軟件測試和質(zhì)量管理是相關(guān)的。
(2)標準、規(guī)范、方法、技術(shù)多。如在軟件開發(fā)方法中,有結(jié)構(gòu)化的開發(fā)方法、面向?qū)ο蟮拈_發(fā)方法、基于組件的開發(fā)方法等。
(3)知識更新快。軟件工程的一個顯著特點就是工程性,而工程性就是要不斷適應社會需求、適應環(huán)境變化。例如軟件開發(fā)環(huán)境不斷發(fā)生變化,從傳統(tǒng)的單機軟件開發(fā),到后來的面向互聯(lián)網(wǎng)的軟件開發(fā),到現(xiàn)在的面向物聯(lián)網(wǎng)的軟件開發(fā)等。
(4)實踐性強。軟件工程除了關(guān)注軟件項目的開發(fā)和實施外,還包括軟件項目的管理,軟件項目的維護與演化。軟件的工程性要求高效開發(fā)高質(zhì)量的軟件,以及不斷滿足用戶需求的軟件。
(5)團隊的突出性。軟件工程不僅在于開發(fā)軟件項目,還重在團隊的組織和管理。開發(fā)一個工程項目不是單兵作戰(zhàn),而是由不同角色人員組成的團隊合作。
根據(jù)《軟件工程》課程的教學內(nèi)容及特點,簡單的課程講解和實驗實踐并不能讓學生真正了解和掌握該課程要求的知識。因此,需要建立一套適合軟件工程的案例庫,幫助學生更好地鍛煉軟件工程能力。根據(jù)教學經(jīng)驗得到軟件工程需(并不限于)建立如下案例庫:
(1)失敗軟件產(chǎn)品開發(fā)案例庫:收集各種失敗的軟件產(chǎn)品案例,如vista系統(tǒng)、ARIANE火箭、美國停電事件、臨床醫(yī)療系統(tǒng)事故等等,通過失敗軟件產(chǎn)品案例,讓學生認識軟件失敗的因素和可能帶來的損失,從事故中汲取教訓,認識軟件工程的重要性,了解軟件產(chǎn)品質(zhì)量的重要性。
(2)軟件工程標準與規(guī)范庫:實時收集當前軟件工程相關(guān)的國內(nèi)外標準與規(guī)范,讓學生了解并學習這些規(guī)范,結(jié)合相應的實際應用標準,開發(fā)符合規(guī)范的軟件產(chǎn)品。
(3)軟件工程新技術(shù)發(fā)展庫:實時收集當前軟件工程發(fā)展最新技術(shù),讓學生及時了解并學習這些新技術(shù),充分運用新技術(shù)進行軟件開發(fā)和軟件環(huán)境搭建,讓學生認識軟件新技術(shù)發(fā)展的快速性,鍛煉學生學習新技術(shù)的能力。
(4)軟件開發(fā)模型庫:提供常用的軟件開發(fā)過程模型,讓學生理解這些開發(fā)模型并嘗試遵循這些模型進行軟件開發(fā),實踐中理解不同模型的適用性和不同點。
(5)在線互動平臺和資源庫:構(gòu)建針對課程的各種在線資源、最新技術(shù)進展等,增加課程互動,鍛煉溝通能力。
(6)課程內(nèi)容建設(shè)庫:建設(shè)相應的《軟件工程》課程內(nèi)容,讓學生自主學習并提供可能的延伸內(nèi)容,更深層次理解課程。
(7)面向移動應用開發(fā)的項目案例庫:不斷更新現(xiàn)有的移動項目案例庫,讓學生選擇不同的平臺,如Andriod和iOS,將相應項目開發(fā)出來并打包發(fā)布,發(fā)布后由用戶評論。由學生不斷維護和更新,鍛煉其軟件開發(fā)能力、發(fā)布能力、軟件維護能力。
(8)云環(huán)境下的軟件項目開發(fā)庫:針對當前云環(huán)境下的軟件開發(fā),建立一些案例,讓學生參與云環(huán)境下的項目開發(fā),充分利用云資源,開發(fā)云環(huán)境下運行的軟件。
(9)面向特定領(lǐng)域的大數(shù)據(jù)處理軟件開發(fā):利用學校高性能計算環(huán)境,開發(fā)一系列面向特定領(lǐng)域的大數(shù)據(jù)處理軟件,如農(nóng)業(yè)數(shù)據(jù)處理、生物信息數(shù)據(jù)處理、水資源信息數(shù)據(jù)處理等。
(10)更新已有開源代碼環(huán)境下的軟件測試和bug修正跟蹤案例庫:針對不斷更新的開源軟件,讓學生參與測試,發(fā)現(xiàn)其中的bug,然后嘗試去改進這些bug,鍛煉學生的閱讀軟件能力、軟件測試能力、軟件演化能力、領(lǐng)域?qū)W習能力。
(11)眾包環(huán)境下的軟件開發(fā):讓學生參與在線眾包環(huán)境下(如Topcoder)的軟件開發(fā),參與國際項目的軟件開發(fā)競賽,鍛煉團隊合作能力和英文溝通能力。
(12)合作企業(yè)問題庫:不斷收集與學院有合作的一些軟件企業(yè)設(shè)計開發(fā)中的一些問題,發(fā)布一系列軟件開發(fā)項目,讓學生參與實踐,鍛煉分析問題和解決問題的能力。
(13)企業(yè)項目經(jīng)理庫:建立有關(guān)企業(yè)的項目經(jīng)理庫,邀請這些經(jīng)理參與學生實際項目的指導和開發(fā),提出新的維護需求,傳授職業(yè)道德,分享軟件項目開發(fā)的經(jīng)驗。
(14)軟件職業(yè)道德案例庫:收集關(guān)于軟件開發(fā)的法律或道德問題,培養(yǎng)學生良好的職業(yè)道德、素養(yǎng)和習慣。
揚州大學《軟件工程》課程分配48課時,由32課時的課堂教學和16課時的實驗組成,還有32學時的課程實踐。16學時的實驗可有效幫助學生進行軟件工程基本知識點實踐, 32學時的課程實踐可結(jié)合軟件工程項目開發(fā)進行工程項目鍛煉。
對上述14個案例庫的實施和使用主要采用課后自主學習、課程討論以及項目實踐的方式。學校建立了課程教學綜合平臺THEOL (http://eol.yzu.edu.cn),該平臺用于支持專業(yè)精品課程建設(shè)、研究性教學建設(shè)以及資源共享等,支持軟件工程課程的知識體系和經(jīng)驗庫建立。該平臺不僅用于教師發(fā)布案例庫,還可用于學生討論和項目提交。目前,基于揚州大學在線教育綜合平臺開發(fā)設(shè)計了10個案例庫,設(shè)計思路如圖1所示。
案例庫收集來源于4個方面:①校內(nèi)教師項目案例收集,即面向?qū)W校教師收集最新的項目進行實戰(zhàn),吸引學生參與并持續(xù)跟蹤;②面向行業(yè)案例收集,即收集與學校合作的企業(yè)案例進行案例建設(shè);③軟件工程會議文獻收集和獲取,即收集近年來在軟件工程知名國際會議(如國際軟件工程大會ICSE、國際基礎(chǔ)軟件工程會議FSE、自動化軟件工程國際會議ASE)上關(guān)于軟件工程技術(shù)和管理的最新技術(shù)進展;④在線資源收集和獲取,即從公網(wǎng)收集相關(guān)案例資料以更新案例庫。教師和學生都可使用該平臺進行案例的導入、更新和獲取,該平臺還能針對學生的學習情況和學習結(jié)果進行監(jiān)控、跟蹤和量化統(tǒng)計。

圖1 案例庫設(shè)計
通過使用這些案例庫,學生認識到軟件工程不是空洞的課程,而是實踐性課程,甚至比以往學習編程語言課程更強調(diào)實踐的重要性、有效性,由此更深地了解軟件工程相關(guān)知識和方法。
《軟件工程》課程是計算機和軟件工程專業(yè)的重要專業(yè)必修課,傳統(tǒng)的教學方式僅僅簡單地將課程教學和項目實踐結(jié)合,教學效果不是很理想。有些案例教學方法側(cè)重項目開發(fā),不能滿足軟件工程各個知識點的實際需求。根據(jù)《軟件工程》課程特點,本文探討了實踐驅(qū)動的案例庫建設(shè)經(jīng)驗,介紹了14種面向?qū)嵺`的《軟件工程》課程案例庫建設(shè)方法。基于這些案例庫,學生能更深地了解軟件工程的知識和方法,并運用這些知識開展軟件工程實踐。