駱斌+++王浩然+++丁二玉
摘 要:高端軟件設(shè)計人才不僅要有過硬的設(shè)計技能,還要有牢固的工程觀、系統(tǒng)觀和產(chǎn)品觀。本文基于南京大學(xué)軟件學(xué)院的教學(xué)實踐,以軟件系統(tǒng)的設(shè)計與構(gòu)造為主線,提出了圍繞軟件設(shè)計設(shè)置和實施的軟件工程專業(yè)關(guān)鍵課程方案。該方案強(qiáng)調(diào)在專業(yè)入門課程就開始培養(yǎng)學(xué)生的軟件工程觀念和系統(tǒng)觀念,并一以貫之地教授學(xué)生在軟件工程思想的指導(dǎo)下進(jìn)行軟件設(shè)計的能力。
關(guān)鍵詞:軟件工程;軟件設(shè)計;教學(xué)改革;課程建設(shè);教材建設(shè)
一、概述
作為國家戰(zhàn)略性新興產(chǎn)業(yè),軟件業(yè)急需一批領(lǐng)軍型軟件人才。教育部在2002年批準(zhǔn)開辦軟件工程(以下簡稱SE)專業(yè)并設(shè)立國家示范性軟件學(xué)院,2011年批準(zhǔn)設(shè)立軟件工程一級學(xué)科并把軟件工程師培養(yǎng)列入了卓越工程師教育培養(yǎng)計劃。至2013年,我國有425所高校開設(shè)軟件工程專業(yè),設(shè)點數(shù)、招生數(shù)及就業(yè)質(zhì)量均進(jìn)入前十。因此,研究與建設(shè)軟件工程專業(yè)關(guān)鍵課程體系對于軟件人才培養(yǎng)具有重要的現(xiàn)實意義和積極的推動作用。
國際上,IEEE和ACM共同制定了軟件工程學(xué)科教程CCSE[1,2],給出了軟件工程專業(yè)的教育知識體系,提出了組織和設(shè)計課程體系的若干建議,是公認(rèn)的軟件人才培養(yǎng)工作基礎(chǔ)。CCSE推薦課程包括SE基礎(chǔ)課程5門、CS中級課程3門和SE高級課程6門,并提出了SE優(yōu)先的課程方案和CS過渡的課程方案。
但是,SE專業(yè)在教學(xué)實施中面臨以下難題[3]:(1)傳統(tǒng)計算機(jī)科學(xué)(以下簡稱CS)專業(yè)的軟件工程課程如何合理過渡到SE基礎(chǔ)課程和6門SE高級課程;(2)如何落實SE優(yōu)先的教學(xué)理念,解決關(guān)鍵課程的教學(xué)實踐與教學(xué)資源;(3)如何實施軟件工程課程與程序設(shè)計類課程的融合教學(xué)。
具體來說,目前國際國內(nèi)缺乏對SE關(guān)鍵課程的教學(xué)實踐,SE優(yōu)先的基礎(chǔ)課程與部分高級課程屬于全新構(gòu)造,難覓教材和成熟的教學(xué)資源,從而導(dǎo)致SE專業(yè)教學(xué)在實施時面臨很大困難,大多數(shù)學(xué)校只能因循計算機(jī)科學(xué)專業(yè)傳統(tǒng)課程過渡。因此,貫徹SE優(yōu)先的教育理念與落實系統(tǒng)化的SE專業(yè)教學(xué)體系成為擺在廣大SE教育者面前的一個巨大挑戰(zhàn)。針對這些問題,南京大學(xué)軟件工程專業(yè)經(jīng)過多年教學(xué)實踐,以軟件開發(fā)的核心工作——軟件系統(tǒng)設(shè)計與構(gòu)造為主線,提出了面向軟件系統(tǒng)設(shè)計與構(gòu)造的SE專業(yè)關(guān)鍵課程教學(xué)實施方案。
二、設(shè)置思路
CS傳統(tǒng)課程按照知識領(lǐng)域安排,非常適合于培養(yǎng)研究性人才。軟件產(chǎn)業(yè)則迫切需要能夠綜合運用各種工程技術(shù)知識解決具體問題的實用性人才。為此,南京大學(xué)SE專業(yè)教學(xué)體系從能力培養(yǎng)入手,強(qiáng)調(diào)持續(xù)培養(yǎng)學(xué)生的工程觀、系統(tǒng)觀和產(chǎn)品觀;面向“軟件系統(tǒng)設(shè)計與構(gòu)造”主線,規(guī)劃專業(yè)關(guān)鍵課程,實踐并求精CCSE的SE優(yōu)先課程設(shè)置方案;探索關(guān)鍵課程的教學(xué)內(nèi)容與教學(xué)方法,建設(shè)相關(guān)教材與教學(xué)案例。
1.提出軟件工程專業(yè)課程改革的基本策略。在專業(yè)教學(xué)早期開始培養(yǎng)學(xué)生工程觀、系統(tǒng)觀與產(chǎn)品觀,引導(dǎo)學(xué)生持續(xù)以軟件工程觀的角度學(xué)習(xí)與體驗軟件系統(tǒng)分析、設(shè)計與構(gòu)建的過程。在一年級開設(shè)軟件工程課程,專業(yè)入門時就樹立學(xué)生的工程觀和系統(tǒng)觀,將質(zhì)量、成本、度量、折中、決策、紀(jì)律、規(guī)范等工程理念貫穿后續(xù)課程,通過反復(fù)強(qiáng)化來培養(yǎng)學(xué)生牢固的工程理念以及基于工程理念解決問題和進(jìn)行開發(fā)的能力。
2.規(guī)劃與實踐SE優(yōu)先的專業(yè)關(guān)鍵課程。遵循工程的集成與創(chuàng)新特征,面向“軟件系統(tǒng)設(shè)計與構(gòu)造”,按照軟件系統(tǒng)規(guī)模由小及大的次序建立專業(yè)教學(xué)主線,即以小規(guī)模系統(tǒng)、中規(guī)模系統(tǒng)、中規(guī)模產(chǎn)品、大規(guī)模系統(tǒng)技術(shù)、應(yīng)用領(lǐng)域來部署SE專業(yè)課程的展開。在單門課程中強(qiáng)調(diào)構(gòu)建系統(tǒng)的全面知識融合教學(xué),培養(yǎng)學(xué)生解決實際問題的綜合能力。
3.探索適應(yīng)培養(yǎng)卓越軟件人才的教學(xué)方法。軟件人才培養(yǎng)必須重視學(xué)生的工程實踐能力、設(shè)計能力與創(chuàng)新能力培養(yǎng),重視實驗、實訓(xùn)、實習(xí)等培養(yǎng)過程,特別是理論教學(xué)與實踐教學(xué)的完美融合。主要的教學(xué)方法包括:面向具體的軟件系統(tǒng)構(gòu)造項目開展綜合性知識教學(xué);加強(qiáng)課程教學(xué)案例與實踐用例建設(shè),實施理論、案例、實踐相輔相成的教學(xué);探索校企合作教學(xué)、面向問題教學(xué)、體驗式教學(xué)、面向?qū)嶋H教學(xué)、研討式教學(xué)、軟件創(chuàng)新設(shè)計競賽教學(xué)等適合卓越人才培養(yǎng)的新型教學(xué)方法。
三、課程體系框架
下圖給出了南京大學(xué)SE專業(yè)的課程體系框架[4,5],其中左側(cè)為重點建設(shè)的SE專業(yè)關(guān)鍵性基礎(chǔ)課程,右側(cè)為其他SE專業(yè)基礎(chǔ)課程和高級課程,后者在教學(xué)上較為成熟,故不贅述。
面向“軟件系統(tǒng)設(shè)計與構(gòu)造”的SE專業(yè)關(guān)鍵課程共7門,分別為計算系統(tǒng)基礎(chǔ)、軟件工程與計算Ⅰ、軟件工程與計算Ⅱ、軟件工程與計算Ⅲ、軟件需求工程、軟件系統(tǒng)設(shè)計與體系結(jié)構(gòu)、人機(jī)交互的軟件工程方法,分別重點解決學(xué)生計算系統(tǒng)分層構(gòu)建、個人級小規(guī)模軟件系統(tǒng)設(shè)計與構(gòu)造、小組級中小規(guī)模軟件系統(tǒng)設(shè)計與構(gòu)造、模擬團(tuán)隊級中規(guī)模軟件產(chǎn)品設(shè)計與構(gòu)建、大規(guī)模軟件系統(tǒng)的需求技術(shù)、大規(guī)模軟件系統(tǒng)的設(shè)計技術(shù)、交互式軟件系統(tǒng)設(shè)計與評估技術(shù)等關(guān)鍵性能力培養(yǎng)。
南京大學(xué)軟件工程專業(yè)課程體系結(jié)構(gòu)圖
這7門關(guān)鍵課程均圍繞一個具體的軟件系統(tǒng)教學(xué)案例,融合構(gòu)建系統(tǒng)所需的多方面知識展開每門課程的教學(xué)。各課程都精心設(shè)計了一個教學(xué)講解用的軟件系統(tǒng)構(gòu)建案例,并同步設(shè)計了一個培養(yǎng)學(xué)生工程能力的實踐用例。課程圍繞教學(xué)案例和實踐用例的構(gòu)建活動組織課程教學(xué)和實踐教學(xué)。課程同時力圖打破傳統(tǒng)課程的技術(shù)藩籬,將程序設(shè)計、軟件工程、交流與溝通、團(tuán)隊動力學(xué)、職業(yè)素質(zhì)、過程管理、工程經(jīng)濟(jì)學(xué)等知識進(jìn)行融合教學(xué),在案例中引導(dǎo)學(xué)生使用軟件工程的觀念來觀察、體驗和實踐計算系統(tǒng)軟件的設(shè)計與構(gòu)建過程,訓(xùn)練其軟件系統(tǒng)設(shè)計與構(gòu)造的綜合能力。
四、課程描述
“計算系統(tǒng)基礎(chǔ)”,以一個經(jīng)典計算機(jī)指令集MIPS的簡化版本DLX為線索,以C語言為載體,使初學(xué)者可以建立起完整的計算概念,了解經(jīng)典計算系統(tǒng)的工作原理,理解計算系統(tǒng)自底向上、逐次構(gòu)造的過程;理解結(jié)構(gòu)化程序設(shè)計,能夠利用自頂向下、逐步求精的方法完成小規(guī)模的結(jié)構(gòu)化程序。具體教學(xué)內(nèi)容包括:數(shù)據(jù)的機(jī)器級表示、數(shù)字邏輯、馮·諾伊曼模型、機(jī)器語言、匯編語言、輸入和輸出、Trap 機(jī)制和子例程、結(jié)構(gòu)化程序設(shè)計和語言處理。endprint
“軟件工程與計算Ⅰ”,在軟件工程理念指導(dǎo)下,側(cè)重于程序設(shè)計教學(xué)。以一個計算示例和實踐用例的迭代式增量開發(fā)實踐為線索,全面培養(yǎng)學(xué)生在個人開發(fā)級別的小規(guī)模軟件系統(tǒng)構(gòu)建能力,讓學(xué)生初步體驗軟件工程方法與技術(shù)在系統(tǒng)開發(fā)中的關(guān)鍵作用。具體教學(xué)內(nèi)容包括:程序設(shè)計基礎(chǔ)、面向?qū)ο蟪绦蛟O(shè)計語言;OOA、OOD、調(diào)試與測試等軟件工程知識;個人級別的軟件開發(fā)活動管理、個人級別的軟件職業(yè)知識。
“軟件工程與計算Ⅱ”,以經(jīng)典軟件工程方法與技術(shù)為主線,軟件設(shè)計與構(gòu)造知識為教學(xué)重點,軟件系統(tǒng)構(gòu)建實例(計算系統(tǒng)示例與學(xué)生實踐用例)為切入點,培養(yǎng)學(xué)生基于瀑布模型的、簡單小組開發(fā)級別的、中小規(guī)模軟件系統(tǒng)構(gòu)建能力。具體教學(xué)內(nèi)容包括:軟件工程歷史、軟件職業(yè)知識;適用于中小規(guī)模軟件產(chǎn)品開發(fā)的軟件工程方法、原則與實踐;軟件工程方法指導(dǎo)下的程序設(shè)計原則與實踐;小組級別的簡單軟件開發(fā)活動管理;包括代碼和重要文檔在內(nèi)的關(guān)鍵軟件開發(fā)制品。
“軟件工程與計算Ⅲ”,以螺旋模型和團(tuán)隊實踐為特征,通過開發(fā)一個中等規(guī)模軟件產(chǎn)品的方式,培養(yǎng)學(xué)生對程序設(shè)計和軟件工程方法的實際運用能力,同時強(qiáng)化學(xué)生的職業(yè)技能和項目管理能力。將學(xué)生組織成8人左右的團(tuán)隊,按照6個階段(即項目啟動階段、第一循環(huán)、第二循環(huán)、第三循環(huán)、第四循環(huán)、項目部署階段)合作完成一個具有一定復(fù)雜度的具體項目。在項目完成過程中,涉及需求、設(shè)計、實現(xiàn)和質(zhì)量保障,強(qiáng)調(diào)團(tuán)隊協(xié)作、文檔寫作、工具使用、陳述等能力,并在軟件團(tuán)隊中對軟件開發(fā)進(jìn)行管理。
“軟件需求工程”,以需求工程技術(shù)、軟件經(jīng)濟(jì)學(xué)和迭代過程為特征,結(jié)合工業(yè)界實例綜合分析,培養(yǎng)學(xué)生構(gòu)建大規(guī)模軟件系統(tǒng)所需要的需求獲取、分析與建模能力,試圖讓學(xué)生把握需求工程工作給后繼軟件項目工作帶來的影響。具體教學(xué)內(nèi)容包括:需求工程基礎(chǔ)、需求獲取方法與技術(shù)、需求分析方法、需求分析模型與建模技術(shù)、需求管理與需求工程過程知識、軟件工程經(jīng)濟(jì)學(xué)等。
“軟件系統(tǒng)設(shè)計與體系結(jié)構(gòu)”,以軟件設(shè)計、體系結(jié)構(gòu)、可復(fù)用軟件過程為特征,結(jié)合復(fù)雜工程案例及其重構(gòu),培養(yǎng)學(xué)生構(gòu)建大規(guī)模軟件系統(tǒng)所需要的綜合設(shè)計技術(shù)能力。具體教學(xué)內(nèi)容包括:軟件設(shè)計的要素、軟件設(shè)計的支持與評價、軟件設(shè)計方法、體系結(jié)構(gòu)設(shè)計、詳細(xì)設(shè)計、基于中間件的設(shè)計、基于復(fù)用的設(shè)計和設(shè)計演化。
“人機(jī)交互的軟件工程方法”,以用戶為中心的設(shè)計與軟件再工程為特征,培養(yǎng)學(xué)生交互式產(chǎn)品開發(fā)的軟件分析、設(shè)計和評估技術(shù)。具體教學(xué)內(nèi)容包括:可用性工程、人機(jī)交互界面的經(jīng)典模型、人機(jī)交互的需求工程方法、人機(jī)交互的設(shè)計方法以及基于行為觀測與眼動分析的交互評估技術(shù)等。
五、教學(xué)方法
軟件人才培養(yǎng)需要重視教學(xué)方法改革,面向軟件系統(tǒng)設(shè)計與構(gòu)造的SE專業(yè)采用了一系列新型教學(xué)方法。
面向問題教學(xué)要求各課程都以工程問題開始,并依照工程問題的解決過程和活動來組織教學(xué),這既體現(xiàn)了多種知識的融合運用,又培養(yǎng)了學(xué)生的問題解決能力。體驗式教學(xué)要求各課程在實驗設(shè)計時必須考慮模擬現(xiàn)實環(huán)境的不確定性因素,讓學(xué)生體驗真實的開發(fā)氛圍,這既能培養(yǎng)他們綜合運用各種知識與方法解決問題的能力,又能重點訓(xùn)練他們的折中、決策、溝通等非技術(shù)能力。面向?qū)嶋H教學(xué)要求各課程在講授軟件開發(fā)方法與技術(shù)時,要結(jié)合實踐調(diào)查數(shù)據(jù)說明企業(yè)對不同方法、技術(shù)的選擇與權(quán)衡情況以及應(yīng)用效果,要突出企業(yè)界的主流方法與技術(shù),遵循企業(yè)界的行業(yè)標(biāo)準(zhǔn)與規(guī)范,這既能讓學(xué)生更深入地理解方法與技術(shù),又能開拓他們的視野。研討式教學(xué)要求各課程針對教學(xué)難點和重點,給出啟發(fā)式問題,讓學(xué)生自行收集資料,研討解決,這既培養(yǎng)了學(xué)生的問題解決能力,又培養(yǎng)了他們的創(chuàng)新能力?;A(chǔ)課程結(jié)合軟件創(chuàng)新設(shè)計競賽教學(xué)鼓勵低年級學(xué)生在導(dǎo)師指導(dǎo)下,結(jié)合課程教學(xué)內(nèi)容,自由選題,參加軟件創(chuàng)新設(shè)計競賽,鼓勵學(xué)生創(chuàng)新。部分高級課程采取實訓(xùn)實習(xí)后回顧教學(xué),通過理論教學(xué)考試和實訓(xùn)實習(xí)后再回顧總結(jié)報告綜合評定分?jǐn)?shù),促使學(xué)生學(xué)習(xí)理論、實踐體驗、再總結(jié)提高,以提高他們的工程認(rèn)知能力與創(chuàng)新能力。還有部分高級課程采取校企聯(lián)合設(shè)計課程、聯(lián)合實施教學(xué)的校企合作教學(xué)。
這些教學(xué)方法可以培養(yǎng)學(xué)生牢固的工程觀念、綜合運用設(shè)計技術(shù)進(jìn)行創(chuàng)新以解決復(fù)雜工程問題的能力、基本的職業(yè)素質(zhì)與交流溝通團(tuán)隊組織能力以及良好的開發(fā)過程駕馭能力等。
面向軟件系統(tǒng)設(shè)計與構(gòu)造的SE專業(yè)關(guān)鍵課程建設(shè)秉承教材系列化、案例行業(yè)化、實踐系統(tǒng)化、資源公開化的原則,圍繞教材、案例和實踐,打造了軟件工程專業(yè)課程精品教學(xué)資源。多門課程入選國家精品課程,出版系列教材,建設(shè)教學(xué)案例和學(xué)生實驗教學(xué)用例,建設(shè)課程教學(xué)資源示范網(wǎng)站,提供豐富的教學(xué)資源(課件、教學(xué)與實踐案例、實驗設(shè)計、教學(xué)視頻),可供我國軟件工程專業(yè)教育者參考。
參考文獻(xiàn):
[1] ACM/IEEE Joint Task Force on Computing Curricula[EB/OL]. Software Engineering 2004, Curriculum Guidelines for Undergraduate Degree Programs in Software Engineering, http://sites.computer.org/ccse/.
[2] 駱斌,臧斌宇,丁二玉. 軟件工程專業(yè)教學(xué)知識體系的分析、重構(gòu)與求精[J]. 計算機(jī)教育,2010(23):2-8.
[3] 劉強(qiáng),陳越,駱斌等. “軟件工程”課程教學(xué)實施方案[J]. 中國大學(xué)教學(xué),2011(2).
[4] 駱斌,葛季棟,丁二玉等. 軟件工程專業(yè)課程體系的研究與創(chuàng)新實踐[J]. 計算機(jī)教育,2010(23):9-13.
[5] Eryu Ding, Bin Luo, Daliang Zhang, etal. Research and Practice on Software Engineering Curriculum NJU-SEC2006, CSEE&T2011[R]. Proceedings of 24th IEEE-CS Conference on Software Engineering Education and Training.
[責(zé)任編輯:余大品]endprint