姜群,楊小青,董世都
軟件工程專業(yè)課程設(shè)置的“維數(shù)”
姜群,楊小青,董世都
目前高校有的軟件工程專業(yè)設(shè)置課程涵蓋軟件工程學(xué)科的所有方面的詳細(xì)內(nèi)容,也有軟工專業(yè)設(shè)置幾門或一門軟件工程專業(yè)課其余是一般計(jì)算機(jī)課程。無論哪種情況,開設(shè)課程必須明確與之相對應(yīng)的具體的學(xué)生輸出。主要依據(jù)學(xué)生輸出提出了“維”的概念,課程設(shè)置便是在抽象“維”里分類和分析一系列課程。
軟件工程;課程設(shè)置;維數(shù)
軟件工程領(lǐng)域已變得非常復(fù)雜,綜合了大量的知識技術(shù)、管理技能、以及人的素質(zhì)等方面的因素,軟件工程教學(xué)自然最直接地與這復(fù)雜程度相關(guān)。因此,不能以面向教師或單純面向知識的方法設(shè)置課程。由于軟件產(chǎn)品是最復(fù)雜的人造系統(tǒng),其最基本的特征是復(fù)雜性、抽象性和適用性,這些問題需要通過軟件工程教育的途經(jīng)盡可能準(zhǔn)確地反映出來。2004年,IEEE和ACM聯(lián)合公布的軟件工程知識體系(SWEBOK04)將其內(nèi)容概括為10個(gè)知識域:軟件需求分析、設(shè)計(jì)、編程實(shí)現(xiàn)、測試、維護(hù)、配置管理、工程管理、工程過程、工程工具與方法以及質(zhì)量。這些知識領(lǐng)域涉及7個(gè)相關(guān)學(xué)科:計(jì)算機(jī)工程、項(xiàng)目管理、計(jì)算機(jī)科學(xué)、質(zhì)量管理、管理、人機(jī)工程學(xué)、數(shù)學(xué)和系統(tǒng)工程[1]。但是,SWEBOK04及其教學(xué)指南只提出了軟件工程的基本知識范圍,卻沒有明確規(guī)定教學(xué)的詳細(xì)程度。如何合理地取舍傳授知識的寡眾與深淺、合理地選擇重點(diǎn)與非重點(diǎn),軟件工程的課程設(shè)置面臨著諸多問題。如:(1)哪些知識域和相關(guān)學(xué)科可以考慮為一門單獨(dú)的課程?(2)如果考慮多于一個(gè)知識域和學(xué)科,哪個(gè)知識域或?qū)W科是側(cè)重點(diǎn)?(3)以上的哪些知識域和相關(guān)學(xué)科可設(shè)置為另外的特色課?(4)不同課程之間的協(xié)作和合作是否合理?(5)怎樣的課程設(shè)置順序是合理的?處理好這些問題,才能提高能力培養(yǎng)、知識傳授的效率。
軟件工程課程設(shè)置的策略和方法很多,主要有:(1)在一門課程中把軟件工程的所有知識都讓學(xué)生掌握。這種策略無論是教材、還是教學(xué),都只能走馬觀花、蜻蜒點(diǎn)水,造成教與學(xué)的困惑。(2)基于主題的組織模式。這種課程設(shè)置更具有科學(xué)研究性。(3)基于系統(tǒng)的組織模式,這種設(shè)置系統(tǒng)性強(qiáng)但不利于強(qiáng)化基礎(chǔ)知識。(4)在計(jì)算機(jī)科學(xué)與技術(shù)專業(yè)教學(xué)計(jì)劃基礎(chǔ)上加一些軟件類課程和減少一些硬件課程,這種設(shè)置專業(yè)選修課沒有形成系統(tǒng)化、模塊化,方向的縱向性和廣泛性得不到很好的體現(xiàn)。(5)基于幾個(gè)專業(yè)特色方向組織課程,往往容易忽略全面綜合考慮,從而造成課程系統(tǒng)性差,教學(xué)內(nèi)容重復(fù)和遺漏并存。
造成以上課程設(shè)置中的問題,原因是多樣的。有的照搬SWEBOK04及其教學(xué)指南,有的以傳授知識為中心來考慮問題。我們認(rèn)為,應(yīng)以學(xué)生輸出及能力培養(yǎng)的要求來設(shè)計(jì)課程和課程系列,一個(gè)課程系列并不是僅對某一種能力的培養(yǎng)起作用,而是在某一種能力的培養(yǎng)中起主要作用。課程系列之間也存在相互協(xié)調(diào)、相互支撐、相互促進(jìn)的作用。我們從多年的軟件工程教學(xué)實(shí)踐和相關(guān)的理論研究中總結(jié)出軟件工程課程設(shè)置應(yīng)考慮的因素。
在課程設(shè)置(和教學(xué))時(shí),盡可能統(tǒng)籌考慮“維數(shù)”,并有目標(biāo)地將其設(shè)置在適當(dāng)?shù)恼n程和課程系列里。
(一)學(xué)科側(cè)重點(diǎn):完全覆蓋主題內(nèi)容VS部分覆蓋主題內(nèi)容
軟件工程課程設(shè)置關(guān)鍵決策是課程應(yīng)包含軟件生命周期的哪些部分,也就是業(yè)務(wù)過程、需求、設(shè)計(jì)、實(shí)現(xiàn)、測試、部署、維護(hù)和演化發(fā)展應(yīng)分開處理還是包含在一門課程里?還有許多相關(guān)的活動和學(xué)科,如項(xiàng)目管理、質(zhì)量管理、團(tuán)隊(duì)精神、計(jì)算機(jī)安全等對軟件開發(fā)的成功也是很有必要的。一門課包含多個(gè)部分和相關(guān)學(xué)科,更能揭示軟件生命周期的各部分和學(xué)科之間的內(nèi)在聯(lián)系,學(xué)生經(jīng)歷和學(xué)習(xí)內(nèi)容較豐富。一門課側(cè)重軟件生命周期的一個(gè)部分和相關(guān)學(xué)科,學(xué)生可以獲得更詳細(xì)的該部分知識,在該部分中集中精力于幾個(gè)方法和過程步驟有助于學(xué)生了解更深入的細(xì)節(jié),可以提高教與學(xué)的效果。
(二)開發(fā)側(cè)重點(diǎn):最初的開發(fā)VS維護(hù)和演化
大多數(shù)現(xiàn)實(shí)生活中的軟件項(xiàng)目不是完全地新開發(fā)一個(gè)系統(tǒng),而是對現(xiàn)有系統(tǒng)的維護(hù)或演化。與新開發(fā)項(xiàng)目對比,演化項(xiàng)目著重于其它需求和技能,大量的工作是從多方面分析一個(gè)現(xiàn)存系統(tǒng),而新開發(fā)一個(gè)系統(tǒng)則更需要創(chuàng)新能力。軟件演化與新開發(fā)系統(tǒng)之間的界線是非常靈活的,依據(jù)要求的課程層次和目標(biāo)而定,如維護(hù)和演化的基本知識通常是高級課程的特征。
(三)過程模型:單一深入VS概觀很多
目前常用的過程模型有:Rational統(tǒng)一過程、XP(extreme programming)、微軟解決方案框架以及瀑布模型的各種變形,它們中的一些有相似特征,而一些有完全不同的特征。講授一個(gè)模型能使學(xué)生更深入地學(xué)習(xí)和實(shí)踐該模型。然而,為各種軟件企業(yè)培養(yǎng)人才,需要講授多種模型。在一門課程里用幾種模型能對每種模型最重要的特征有更好的概觀,如果學(xué)生必須上多于一門軟件工程課程,也許改變課程用的模型較容易,也能提供深入的知識和實(shí)踐。
(四)可交付成果:過程VS產(chǎn)品
課程可交付的東西應(yīng)該回答兩個(gè)問題:學(xué)生完成了什么(側(cè)重產(chǎn)品)以及學(xué)生怎樣完成的(側(cè)重過程)?側(cè)重產(chǎn)品依據(jù)“硬”標(biāo)準(zhǔn)評定成績,如象完整性、正確性和表達(dá)形式等標(biāo)準(zhǔn)來評價(jià),比較客觀。側(cè)重過程決定于學(xué)生遵守被要求的過程,有時(shí)難于客觀評價(jià)。
(五)組織:團(tuán)隊(duì)VS個(gè)人
個(gè)人作業(yè)可簡單地評價(jià)每個(gè)學(xué)生的學(xué)習(xí)效果,布置很復(fù)雜的作業(yè)給單個(gè)學(xué)生是不可能完成的,因而個(gè)人作業(yè)一般不太復(fù)雜,學(xué)生更深層次的思維能力得不到提高。解決復(fù)雜問題要求團(tuán)隊(duì)合作,團(tuán)隊(duì)作業(yè)提高解決復(fù)雜問題的能力、相互交流、協(xié)作和矛盾沖突的處理能力。
(六)技術(shù)側(cè)重點(diǎn):一般VS特殊
使用特殊軟件技術(shù)在很多情況下是依賴于開發(fā)商的,企業(yè)為提高自身的競爭力一般都使用了特殊軟件,大量需要特殊軟件方面的技術(shù)人才。讓學(xué)生在特殊軟件技術(shù)上深入,對學(xué)生畢業(yè)后就業(yè)有幫助。然而,由于有很多特殊軟件技術(shù)可用,每一種技術(shù)都各有利弊,因而每個(gè)企業(yè)的特殊軟件人才需求也不同,在本科階段要教所有可用特殊軟件知識是不可能的。采用通用技術(shù)有助側(cè)重于一般技術(shù)觀點(diǎn)如象面向?qū)ο笤淼睦^承和多態(tài)性,而不是具體的技術(shù)問題如象java與C 的區(qū)別。然而,采用一般技術(shù)對學(xué)生提高專業(yè)技能幫助不大。
(七)工具:手工VS支持工具軟件
目前軟件工程相當(dāng)依賴于適當(dāng)?shù)墓ぞ哕浖ぞ咴黾佣喈a(chǎn)性和有助于集中解決重要問題,而不必忙于怎樣寫文檔或管理工件。但介紹較多工具會引起學(xué)生較多的學(xué)習(xí)投入,學(xué)生花費(fèi)很多時(shí)間來熟習(xí)使用工具,而不是花時(shí)間來分析和解決問題。具體交付的作業(yè)從使用工具的角度來說是作好了,但缺乏有價(jià)值的內(nèi)容。放棄使用工具,引導(dǎo)學(xué)生對作業(yè)問題的思考,如通過不使用建模工具,讓學(xué)生用手在紙上作圖。當(dāng)然,軟件工程教育應(yīng)該滿足企業(yè)的人才需求,起碼應(yīng)該讓學(xué)生了解哪些工具適用于哪些不同的情況,以及它們的性能和功能。
(八)作業(yè)側(cè)重點(diǎn):單獨(dú)作業(yè)VS項(xiàng)目
單獨(dú)練習(xí)允許側(cè)重在有所選擇的問題上,每個(gè)練習(xí)都是有目的和有準(zhǔn)備的,學(xué)生的學(xué)習(xí)被保持在合理的范圍內(nèi),而且未完成一個(gè)練習(xí)可以不影響下一個(gè)練習(xí)。給學(xué)生提供一個(gè)系統(tǒng)項(xiàng)目,對整個(gè)課程而言,課程中的練習(xí)相互聯(lián)系,每個(gè)練習(xí)側(cè)重于系統(tǒng)或系統(tǒng)文檔的不同部分,整個(gè)項(xiàng)目或項(xiàng)目的部分是最實(shí)際的軟件工程教學(xué)方法,學(xué)生能夠看到軟件生命周期中工件之間的聯(lián)系。然而在單獨(dú)一門課里做完整的項(xiàng)目,練習(xí)與練習(xí)之間的聯(lián)系較緊密,如果學(xué)生在開始時(shí)不能完成練習(xí)或不能保證完成練習(xí)的質(zhì)量,隨后階段的練習(xí)也許無法進(jìn)行或建立在低質(zhì)量的工作基礎(chǔ)上,這會減少學(xué)習(xí)經(jīng)歷和降低學(xué)生的學(xué)習(xí)效果。
(九)練習(xí)域:管理軟件VS技術(shù)軟件
軟件幾乎在每個(gè)技術(shù)及商業(yè)領(lǐng)域扮演著重要角色,如象嵌入式系統(tǒng)、時(shí)實(shí)系統(tǒng)、信息管理系統(tǒng)、企業(yè)資源計(jì)劃、WEB服務(wù)等,有必要對每個(gè)領(lǐng)域用不同的途徑探索軟件工程:設(shè)計(jì)不同的結(jié)構(gòu),采用不同的開發(fā)環(huán)境,達(dá)到不同質(zhì)量屬性的不同方法(比如測試)是必要的。為了具體地講授怎樣做,軟件工程課程的練習(xí)或項(xiàng)目應(yīng)側(cè)重于這些領(lǐng)域中的一個(gè),或者以某種方法設(shè)計(jì)練習(xí)或項(xiàng)目,使學(xué)生知道怎樣對許多領(lǐng)域運(yùn)用方法的通用知識。
軟件工程學(xué)科固有的復(fù)雜性使軟件工程專業(yè)的課程設(shè)置也變得同樣復(fù)雜,目前雖然存在多種課程設(shè)置的方法,但缺少一個(gè)抽象的框架可普遍應(yīng)用于軟件工程專業(yè)的課程設(shè)置。本文提出了這樣的框架--課程設(shè)置的維數(shù),這些維數(shù)不僅可用于軟件工程課程設(shè)置,還可用以評價(jià)現(xiàn)有課程設(shè)置是否達(dá)到預(yù)期。由于維之間直接或間接的相互作用和影響,探索改變一個(gè)維對相關(guān)維的復(fù)雜課程序列的影響至關(guān)重要,這將是我們未來的研究課題。
G642.3:TP311.5
A
1673-1999(2010)16-0157-02
姜群(1959-),女,重慶人,雙碩士,重慶理工大學(xué)(重慶400054)計(jì)算機(jī)科學(xué)與工程學(xué)院副教授,研究方向?yàn)檫M(jìn)化計(jì)算、軟件工程。
2010-06-06
國家人事部留學(xué)人員科技活動擇優(yōu)資助項(xiàng)目、商業(yè)智能應(yīng)用軟件研究與開發(fā)(項(xiàng)目編號:2009CR02)。