摘要:如何培養(yǎng)社會(huì)需要的軟件人才,是大學(xué)教育需要探索的問題之一。本文根據(jù)SE2004對(duì)軟件工程的畢業(yè)生的要求,提出了一些加強(qiáng)學(xué)生能力的方法和建議,包括實(shí)例教學(xué)、分組學(xué)習(xí)、軟件工程實(shí)驗(yàn)室的建設(shè)等多方面的內(nèi)容。
關(guān)鍵詞:軟件工程教育;實(shí)例教學(xué);分組學(xué)習(xí);實(shí)驗(yàn)室建設(shè)
中圖分類號(hào):G642文獻(xiàn)標(biāo)識(shí)碼:A
1引言
我國絕大部分院校都開設(shè)了計(jì)算機(jī)專業(yè),每年有數(shù)以萬計(jì)的畢業(yè)生。然而,許多計(jì)算機(jī)專業(yè)畢業(yè)的學(xué)生卻面臨就業(yè)時(shí)難以找到合適工作的問題。一方面是學(xué)校竭盡全力地培養(yǎng)人才,另一方面是IT產(chǎn)業(yè)的用人單位痛感IT人才的缺乏。旺盛而迅速變化的市場(chǎng)需求和正規(guī)學(xué)校教育的IT人才供給之間形成了巨大的缺口,這說明了學(xué)校的教育與市場(chǎng)的需求存在著很大的鴻溝。
軟件工程無疑是計(jì)算機(jī)科學(xué)中最重要的學(xué)科之一,也是實(shí)踐性最強(qiáng)的學(xué)科之一。但目前在計(jì)算機(jī)類本科生以至研究生教育中,仍是最薄弱的環(huán)節(jié)之一。特別是近幾年,許多院校都開設(shè)了軟件工程專業(yè),如何進(jìn)行課程建設(shè),加強(qiáng)實(shí)踐環(huán)節(jié),許多文獻(xiàn)都對(duì)該問題進(jìn)行了有益的研討。IEEE每年一次的軟件工程教育和訓(xùn)練會(huì)議發(fā)表了大量的文章對(duì)此進(jìn)行研究。Lethbridge提出在教育中改進(jìn)學(xué)生的實(shí)踐能力是當(dāng)前的挑戰(zhàn)和未來的趨勢(shì)。
本文探索了在軟件工程教育中如何提高學(xué)生的認(rèn)知能力,改進(jìn)學(xué)生的實(shí)踐能力,更好地滿足社會(huì)需求的問題。本文的內(nèi)容適用于軟件工程專業(yè),也涵蓋計(jì)算機(jī)類其他專業(yè)。
2國外對(duì)軟件人才培養(yǎng)的標(biāo)準(zhǔn)
按照美國軟件工程2004計(jì)算機(jī)課程(SE2004)的要求,軟件工程的畢業(yè)生需要達(dá)到下列標(biāo)準(zhǔn):
(1) 掌握在進(jìn)行開發(fā)實(shí)踐中所必需的軟件工程的知識(shí)和技能;
(2) 能夠獨(dú)立或在小組中開發(fā)高質(zhì)量的軟件;
(3) 在受到“成本、時(shí)間、知識(shí)、現(xiàn)有系統(tǒng)和現(xiàn)有組織”的限制環(huán)境中,能夠進(jìn)行適當(dāng)?shù)臋?quán)衡;
(4) 能夠運(yùn)用軟件工程的方法,結(jié)合“倫理、社會(huì)、法律和經(jīng)濟(jì)”等規(guī)范進(jìn)行一個(gè)或多個(gè)領(lǐng)域的設(shè)計(jì);
(5) 有理解和應(yīng)用軟件工程中必需的當(dāng)前理論、模型和技術(shù)的能力;
(6) 具有與人溝通的技能,有效的工作習(xí)慣和領(lǐng)導(dǎo)及通信能力;
(7) 能學(xué)習(xí)新模型、新技術(shù)和即將出現(xiàn)的技術(shù)。
在IEEE推出的軟件工程知識(shí)體系(Software Engineering Body of Knowledge,簡(jiǎn)稱SWEBOK)2004版中,從軟件需求、軟件設(shè)計(jì)、軟件構(gòu)造、軟件測(cè)試、軟件維護(hù)、軟件配置管理、軟件工程管理、軟件工程項(xiàng)目、軟件工程工具與方法、軟件質(zhì)量等十個(gè)方面描述了一個(gè)軟件工程師需要具備的知識(shí)。SWEBOK項(xiàng)目的目的是為了建立一組標(biāo)準(zhǔn)和規(guī)范,作為軟件工程專業(yè)實(shí)踐中進(jìn)行決策、專業(yè)認(rèn)證和制定教育課程計(jì)劃的基礎(chǔ)。
IEEE強(qiáng)調(diào)了工程教育的基本要素,包括:
1) 系統(tǒng)觀點(diǎn):熟悉系統(tǒng)設(shè)計(jì)、構(gòu)造分析過程。
2) 知識(shí)的深度和廣度:知識(shí)面要寬,具體領(lǐng)域方向能夠深入。
3) 設(shè)計(jì)經(jīng)驗(yàn):參與設(shè)計(jì)活動(dòng),具有項(xiàng)目(工程)概念。
4) 工具使用:能夠使用計(jì)算機(jī)軟、硬件工具,分析和解決實(shí)際問題。
5) 職業(yè)訓(xùn)練:了解職業(yè)(行業(yè))需要,具有“產(chǎn)品”(如軟件、系統(tǒng)、行業(yè)和應(yīng)用服務(wù)等)意識(shí)。
6) 交流技巧:能夠以合適的形式(如書面、口頭、可視化等)進(jìn)行交流和溝通。
3對(duì)軟件工程教育的思考與探索
可以看到,國外對(duì)軟件工程教育的要求是相當(dāng)高的,但這也正是社會(huì)需要的人才。如何接近和達(dá)到這樣的目標(biāo),是在軟件工程教育中需要認(rèn)真探索的。
國內(nèi)面臨的問題是,軟件教育還是以程序設(shè)計(jì)為主線,以操作系統(tǒng)、數(shù)據(jù)庫原理等課程為基礎(chǔ)。對(duì)軟件開發(fā)過程,軟件管理等課程,雖在教學(xué)大綱范圍之內(nèi),但學(xué)生能夠真正理解的還是很少,教學(xué)效果并不是很好。學(xué)生進(jìn)入社會(huì)后,很快就發(fā)現(xiàn)學(xué)校學(xué)到的東西與實(shí)際應(yīng)用的差距太大。學(xué)生常反映:在學(xué)習(xí)時(shí),學(xué)的東西不知做什么用,到應(yīng)用時(shí),用的東西不知去哪里找。企業(yè)也很難將這些學(xué)生立即投入到實(shí)際的工作之中。
如何提高教學(xué)水平,使畢業(yè)生能夠具有更強(qiáng)的實(shí)踐能力,以適應(yīng)和適合社會(huì)的需求,對(duì)從事教育工作的學(xué)校來說是一個(gè)迫在眉睫的問題。
學(xué)校的教學(xué),不僅是知識(shí)的傳授問題,更重要的是對(duì)學(xué)生能力的培養(yǎng)問題。特別是培養(yǎng)學(xué)生分析問題和解決問題的能力。因?yàn)橹R(shí)在發(fā)展,會(huì)陳舊,而能力可以在不斷的社會(huì)實(shí)踐中提高。特別是在計(jì)算機(jī)應(yīng)用迅速普及的今天,大量大型復(fù)雜的軟件在開發(fā)和應(yīng)用,如果過分著重于基礎(chǔ)理論的教育,書本知識(shí)的教學(xué),很難體會(huì)到軟件的復(fù)雜性和實(shí)用性。加強(qiáng)學(xué)生對(duì)大型復(fù)雜軟件的認(rèn)知,培養(yǎng)學(xué)生的動(dòng)手能力,可以使畢業(yè)生踏入社會(huì)后,迅速進(jìn)入角色,承擔(dān)起工作的重任。
從軟件工程的角度來看,學(xué)生應(yīng)掌握四個(gè)方面的知識(shí):
(1) 計(jì)算機(jī)科學(xué)的基本理論:包括數(shù)學(xué)基礎(chǔ)、計(jì)算基礎(chǔ)、工程基礎(chǔ)和形式化概念等。
(2) 軟件工程專業(yè)理論:包括軟件工程的基本概念、原理、方法和技術(shù)、工具與環(huán)境等。
(3) 軟件工程實(shí)踐:讓學(xué)生進(jìn)行軟件工程方面的綜合應(yīng)用實(shí)踐,以小組方式進(jìn)行軟件項(xiàng)目模擬,參與軟件企業(yè)的軟件過程改進(jìn)等。
(4) 軟件技術(shù)管理:包括軟件項(xiàng)目管理、軟件風(fēng)險(xiǎn)管理、軟件質(zhì)量管理、軟件配置管理、軟件過程管理等。
實(shí)際上,在我國現(xiàn)有大學(xué)的教學(xué)安排上,去掉必須安排的基礎(chǔ)版塊(政治、英語、體育等課程),專業(yè)基礎(chǔ)課和專業(yè)課的學(xué)時(shí)數(shù)都比較緊張,特別是對(duì)于發(fā)展迅速、變化較快的計(jì)算機(jī)類專業(yè)。需要認(rèn)真研究如何在有限的時(shí)間內(nèi)讓學(xué)生得到更多的知識(shí)。
在課程建設(shè)上,應(yīng)該注意到在計(jì)算機(jī)課程中,不同的課程中存在著不同程度的重復(fù)內(nèi)容。因此要注意課程的前后銜接關(guān)系,盡可能避免在不同的課程中講授相同的內(nèi)容。各門課程的側(cè)重點(diǎn)要明確。知識(shí)的傳授要有良好的切入點(diǎn)。復(fù)旦大學(xué)錢樂秋等研究了軟件工程課程群的設(shè)計(jì)和定位問題,作了很好的探索。
軟件工程的目標(biāo)就是高效地開發(fā)出高質(zhì)量的軟件,而這需要通過一個(gè)個(gè)開發(fā)實(shí)例體現(xiàn)的。選擇符合教學(xué)內(nèi)容的實(shí)例,將其貫穿在整個(gè)教學(xué)過程中,會(huì)起到很好的效果。如果只是讓學(xué)生在課程實(shí)踐中自己去設(shè)計(jì)一些小的案例,比較耗時(shí),效果也不是很好。軟件思維的過程是一個(gè)“枚舉-歸納-抽象”的過程,通過實(shí)例教學(xué),較好地進(jìn)行分析,讓學(xué)生模仿修改,能起到事半功倍的效果。理論結(jié)合案例進(jìn)行分析,可以加速學(xué)生對(duì)軟件體系結(jié)構(gòu)、軟件過程框架、軟件過程改進(jìn)等復(fù)雜內(nèi)容的理解,使學(xué)生具備運(yùn)用基本知識(shí)的能力。軟件工程中說:只有有意識(shí)地運(yùn)用基本原理,你才會(huì)成功。在分析過程中,讓學(xué)生體會(huì)到在實(shí)踐中運(yùn)用理論的意義。
軟件的大型復(fù)雜化,致使軟件大部分都是以團(tuán)隊(duì)方式開發(fā)的。同時(shí),在軟件工程教育中也強(qiáng)調(diào)學(xué)生應(yīng)該具備溝通能力。因此在教學(xué)實(shí)踐中,特別是在實(shí)驗(yàn)和課程設(shè)計(jì)中,將學(xué)生劃分成小組,通過研討的方式進(jìn)行實(shí)踐,能夠集思廣益,更加發(fā)揮學(xué)生的積極主動(dòng)性。在學(xué)習(xí)過程中,學(xué)生以小組形式配合學(xué)習(xí)和研討,可以吸取別人的經(jīng)驗(yàn)和體會(huì),收益要比個(gè)人學(xué)習(xí)大得多。個(gè)體開發(fā)過程(PSP),小組開發(fā)過程(TSP)也可讓學(xué)生參照學(xué)習(xí)。
軟件工程是一門實(shí)踐性很強(qiáng)的科學(xué),建好軟件工程實(shí)驗(yàn)室對(duì)軟件工程的實(shí)踐教學(xué)有著至關(guān)重要的作用。建設(shè)軟件工程實(shí)驗(yàn)室最重要的是軟環(huán)境的建立。軟環(huán)境不僅僅是軟件工具與開發(fā)環(huán)境,更重要的是有大量的教學(xué)案例,在加強(qiáng)認(rèn)知的同時(shí),給學(xué)生直接動(dòng)手的途徑和工程方法的實(shí)踐機(jī)會(huì)。
軟件工程實(shí)驗(yàn)室的軟環(huán)境應(yīng)包括:
1) 軟件工程工具與環(huán)境:包括分析設(shè)計(jì)工具(如Rational Rose,Visio,PowerDesigner等),軟件自動(dòng)化測(cè)試工具(如WinRunner),軟件項(xiàng)目管理工具(如Microsoft Project),軟件配置管理工具(如Microsoft Visual SourceSafe)等。
2) 軟件開發(fā)平臺(tái)與環(huán)境:包括J2EE開發(fā)平臺(tái),.NET開發(fā)平臺(tái)及其他常用開發(fā)平臺(tái)。
3) 可利用的構(gòu)件庫:如J2EE構(gòu)件庫、.NET構(gòu)件庫、com構(gòu)件庫等。
4) 軟件開發(fā)案例:包括簡(jiǎn)單的MIS系統(tǒng)、財(cái)務(wù)系統(tǒng)、電子商務(wù)系統(tǒng)、數(shù)據(jù)挖掘軟件、嵌入式實(shí)時(shí)軟件等。
5) 軟件文檔案例:包括與軟件開發(fā)案例相匹配的文檔。
6) 實(shí)驗(yàn)規(guī)范。
美國計(jì)算機(jī)思想家Weinberg說:聽而易忘,見而易記,做而易懂。有了良好的實(shí)踐環(huán)境,可以讓學(xué)生盡早地進(jìn)入實(shí)際的軟件世界,認(rèn)識(shí)和體會(huì)軟件工程科學(xué)的本質(zhì),在實(shí)踐過程中強(qiáng)化自己所學(xué)的知識(shí)。
美國軟件工程教育家Mead認(rèn)為軟件工程專業(yè)應(yīng)培養(yǎng)三種層次的人才:計(jì)算機(jī)科學(xué)的研究者,開發(fā)關(guān)鍵軟件系統(tǒng)的軟件工程師,開發(fā)非關(guān)鍵系統(tǒng)的軟件開發(fā)實(shí)踐人員。目前我國大學(xué)教育已進(jìn)入普及型教育時(shí)代,這三種層次的人才也是越向下需要量越大。但也要考慮高層次人才的培養(yǎng)問題。實(shí)際上,就目前學(xué)生自身的愿望來說,畢業(yè)時(shí)也有就業(yè)和考研兩種主要的選擇。因此對(duì)選修課的設(shè)置要考慮多方面的需求。在SE2004中,對(duì)高年級(jí)學(xué)生設(shè)置了兩個(gè)不同層次的課程包,由學(xué)生任選一個(gè)。如形式化方法,偏理論的學(xué)生是單獨(dú)設(shè)為一門課,而偏實(shí)踐的學(xué)生則由其他課程涵蓋形式化方法。軟件工程專業(yè)必修課和選修課的設(shè)置應(yīng)該考慮不同方向?qū)W生的需要。
在工程實(shí)踐中,軟件開發(fā)必須注意進(jìn)度管理、質(zhì)量管理和成本管理。應(yīng)該努力向?qū)W生傳授這樣的工程管理思想。編寫一個(gè)簡(jiǎn)單的軟件原型并不困難,但開發(fā)一個(gè)高質(zhì)量的實(shí)用軟件卻是非常困難的。在教學(xué)實(shí)踐中,通過軟件
過程分析、軟件的改進(jìn)、系統(tǒng)測(cè)試和維護(hù)都可以提高學(xué)生的技能和工程觀念。
4小結(jié)
本人從事了二十多年的軟件教學(xué)工作,和企業(yè)合作開
發(fā)了數(shù)十個(gè)軟件項(xiàng)目,還在一些較大的軟件企業(yè)兼任過高層技術(shù)主管。深感到社會(huì)對(duì)軟件人才需求的迫切性和許多剛畢業(yè)學(xué)生對(duì)工作的不適應(yīng)性。目前,本人擔(dān)任軟件工程專業(yè)的教學(xué)工作,一直在探索和嘗試如何使學(xué)校教育與社會(huì)需求的接軌問題。本文提出了一些改進(jìn)方法,供大家商榷。
參考文獻(xiàn)
[1] Mead N R. Software Engineering Education: How Far We’ve Come and How Far We Have To Go[C]. IEEE 21st Conference on Software Engineering Education and Training,2008.
[2] Lethbridge T C,et al. Improving software practice through education: Challenges and future trends[C]. International Conference on Software Engineering 2007: Future of Software Engineering,2007.
[3] Lethbridge T C, et al. SE2004: Recommendations for Undergraduate Software Engineering Curricula[J]. IEEE SOFTWARE,2006,(23)6:19-25.
[4] 錢樂秋等. 軟件工程課程群設(shè)計(jì)[J]. 計(jì)算機(jī)教育,2007,(20):5-7.
software engineering education for the social demand
YAN Li
(School of Computer Science and Telecommunications Engineering, Jiangsu University, Zhenjiang, Jiangsu 212013,China)
Abstract: How to cultivate the needs of the community of software professionals, university education is the need to explore one of the issues. According to SE2004 in the software engineering graduates of the request, made a number of ways to strengthen the ability of students and recommendations. This paper includes example teaching, group study, software engineering laboratory building, and many other content.
Key Words: software engineering, example teaching, group study, laboratory building