楊洋 曹天杰
摘要:軟件工程是一門理論和實踐性都很強(qiáng)的計算機(jī)應(yīng)用專業(yè)課程,課程內(nèi)容抽象、龐雜,教學(xué)實踐環(huán)節(jié)薄弱。筆者依據(jù)近幾年軟件工程的教學(xué)實際經(jīng)驗,分析教學(xué)過程中存在的一些問題。從學(xué)生錯誤概念的糾正、教學(xué)方法的應(yīng)用、團(tuán)隊合作的設(shè)計、實踐教學(xué)環(huán)節(jié)的設(shè)計、軟件工程環(huán)境的構(gòu)建等幾方面進(jìn)行分析和論述,以期對教學(xué)起到指導(dǎo)和借鑒的作用。
關(guān)鍵詞:軟件工程;工程化方法;問題描述;建議;注意點
文章編號:1672-5913(2013)07-0062-04
中圖分類號:G642
軟件工程在計算機(jī)專業(yè)領(lǐng)域中是一門較普及的課程,本課程主要研究如何將工程化方法應(yīng)用于軟件的開發(fā)、運行和維護(hù)過程之中。根據(jù)培養(yǎng)計算機(jī)應(yīng)用型人才的需要,本課程的任務(wù)是通過講述軟件的工程化開發(fā)方法和相關(guān)的軟件開發(fā)工具、開發(fā)過程、開發(fā)規(guī)范,使學(xué)生了解軟件工程的本質(zhì),掌握常用的軟件開發(fā)方法,并且能夠有意識地將軟件工程原理運用于實際的軟件開發(fā)和維護(hù)過程中,提高學(xué)生的專業(yè)素質(zhì)。但在實際教學(xué)中,學(xué)生認(rèn)為該課程內(nèi)容理論性強(qiáng),需要記憶的內(nèi)容多,枯燥無味,學(xué)不進(jìn)去,課程結(jié)束后對于軟件開發(fā)過程、規(guī)范和開發(fā)方法的概念依然很模糊。筆者依據(jù)自己對于軟件工程的理解,通過近幾年從事軟件工程課程的授課感受,結(jié)合學(xué)生的反饋意見,做了一些思考和總結(jié)。
1 程序與軟件概念混淆
學(xué)生從接受計算機(jī)領(lǐng)域方面的課程開始,就一直以編程為主,所以,大多數(shù)學(xué)生認(rèn)為該課程就是學(xué)習(xí)如何編程。當(dāng)提出“什么是軟件”這個問題時,大多數(shù)學(xué)生無法給出準(zhǔn)確的定義;當(dāng)提出“程序和軟件的區(qū)別”這個問題時,大多數(shù)學(xué)生會回答“程序=軟件”。
其實,程序和軟件是不同的概念,編程的目標(biāo)是程序,軟件工程的目標(biāo)是軟件,軟件=程序+文檔。從軟件工程的角度看,編程的比重不足15%,其他如需求分析、設(shè)計、制作、測試和維護(hù)等比重占85%。學(xué)生一開始就對課程認(rèn)識存在誤區(qū),認(rèn)為軟件工程就是編寫程序,因此,作為教師應(yīng)引導(dǎo)他們認(rèn)識軟件和程序的區(qū)別,學(xué)生才會去思考它們之間的不同,此時再給學(xué)生輸入軟件工程的概念,學(xué)生才能開始有意識地去了解軟件工程。
作為教師,首先應(yīng)給學(xué)生介紹軟件工程課程在專業(yè)知識體系中的地位,讓學(xué)生在宏觀上了解該課程的性質(zhì)及與其他專業(yè)課程之間的聯(lián)系和區(qū)別,指導(dǎo)學(xué)生正確認(rèn)識該課程的特點,避免他們?nèi)蘸笃x課程方向,導(dǎo)致盲目學(xué)習(xí)。
2 案例教學(xué)法在教學(xué)中的運用
相比計算機(jī)專業(yè)的其他課程而言,軟件工程理論性和抽象性較強(qiáng),學(xué)生學(xué)習(xí)起來比較吃力。大多數(shù)軟件工程的教材都是重理論輕實踐,需記憶的內(nèi)容較多,不容易理解;各個階段的概念和任務(wù)容易混淆,學(xué)生學(xué)習(xí)興趣不大,極易造成反感情緒。
傳統(tǒng)的滿堂灌的教學(xué)方法顯然不適合軟件工程課程的特點和教學(xué)要求。經(jīng)過幾年的教學(xué)嘗試,筆者認(rèn)為在課堂中可以采用案例教學(xué)法。案例教學(xué)法是指教師根據(jù)具體的教學(xué)環(huán)境,將復(fù)雜抽象的概念運用到具體案例中進(jìn)行講解,引導(dǎo)學(xué)生分析問題,并最終解決問題的一種教學(xué)過程。
在教學(xué)中,教師選擇軟件開發(fā)中的一些實際案例,將學(xué)生分成若干小組,每組不同成員擔(dān)任不同的角色。待小組成員確定案例后,模擬實際開發(fā)環(huán)境,運用所學(xué)的理論知識展開分析和討論。討論結(jié)束后,由各組選派一名代表在全班同學(xué)面前匯報討論結(jié)果,教師再針對存在的問題進(jìn)行補(bǔ)充。案例討論增強(qiáng)了學(xué)生對軟件開發(fā)項目的感性認(rèn)識和實際經(jīng)驗,激發(fā)了學(xué)生的學(xué)習(xí)興趣,提高和培養(yǎng)了他們分析問題和解決問題的能力。
在進(jìn)行案例教學(xué)時,教師需注意以下幾點:一是要選擇合適的案例,案例不在于多,而在于是否適合課程特點和學(xué)生的實際情況;二是教師要及時引導(dǎo),案例討論時,教師要把握好討論方向,要摒棄主觀臆想的成分;三是注重加強(qiáng)學(xué)生理論知識的掌握,學(xué)生的軟件開發(fā)經(jīng)驗較少甚至完全沒有,案例教學(xué)是需要學(xué)生有理論知識作為討論的基礎(chǔ),如果沒有一定的理論知識是無法討論的,所以教師要注重培養(yǎng)學(xué)生的理論知識。
3 團(tuán)隊合作完成任務(wù)
軟件開發(fā)是團(tuán)隊合作完成的任務(wù)。在教學(xué)過程中,要讓學(xué)生體會到團(tuán)隊的氛圍,培養(yǎng)其團(tuán)隊合作的能力和精神。團(tuán)隊合作以5~6人一個小組為宜,人數(shù)太多會導(dǎo)致“三個和尚沒水吃”,人數(shù)太少會帶來工作量偏重。教師在進(jìn)行分組時,最好根據(jù)學(xué)生的能力和水平,明確學(xué)習(xí)任務(wù),進(jìn)行合理有效的分工,按軟件開發(fā)階段把各組學(xué)生分為需求分析、設(shè)計、編碼、測試及項目管理人員,每位學(xué)生承擔(dān)一個角色。例如,在南京城市職業(yè)學(xué)院該課程的教學(xué)過程中,我們將學(xué)生每5人分為一個項目組,每人承擔(dān)相應(yīng)的角色,如項目經(jīng)理、技術(shù)支持員、配置管理員、軟件工程師和測試工程師等;教師擔(dān)任企業(yè)培訓(xùn)師的角色,分配給每一個項目組課題,讓學(xué)生模擬參與到軟件企業(yè)實訓(xùn)中,最終使學(xué)生完成需求分析、設(shè)計、代碼編寫、測試、部署全過程,使得學(xué)生在學(xué)習(xí)過程中體會到軟件開發(fā)工程師的角色任務(wù)。這樣,學(xué)生就有合作意識、責(zé)任感和集體榮譽(yù)感,模擬軟件企業(yè)項目組的情境,根據(jù)公司管理體制開發(fā)項目。學(xué)生在團(tuán)隊合作學(xué)習(xí)時,作為教師應(yīng)加強(qiáng)對其合作方法的指導(dǎo);學(xué)生在開發(fā)過程中遇到問題,教師建議他們自行討論來解決,提高他們的溝通交際能力,培養(yǎng)其團(tuán)隊合作精神。
在組織學(xué)生團(tuán)隊合作學(xué)習(xí)時,筆者認(rèn)為還應(yīng)注重培養(yǎng)學(xué)生以下能力:一是尊重他人,在其他人發(fā)言時,要善于傾聽,尊重他人的觀點,能夠?qū)λ说陌l(fā)言做出合理的評價;二是善于總結(jié),在各小組發(fā)言完畢后,能根據(jù)發(fā)言情況,總結(jié)出要點;三是敢于質(zhì)疑,當(dāng)自己的觀點與他人觀點發(fā)生碰撞時,要敢于質(zhì)疑,提出自己的想法,從而完善自己的觀點和認(rèn)識。
4 實踐教學(xué)環(huán)節(jié)以大作業(yè)的形式貫穿
由于計算機(jī)專業(yè)學(xué)生畢業(yè)后大部分從事與軟件開發(fā)相關(guān)的工作,所以該課程的實踐教學(xué)尤為重要。實踐教學(xué)是加深理解理論知識的有效途徑。是培養(yǎng)學(xué)生動手能力和技術(shù)創(chuàng)新精神的有效手段。但在教學(xué)過程中,由于實驗條件有限,教師僅給出項目各階段文檔模板或范例,學(xué)生按照要求編寫相應(yīng)的文檔,文檔完成后沒有企業(yè)項目開發(fā)的嚴(yán)格評審機(jī)制,學(xué)生無法發(fā)現(xiàn)開發(fā)階段里存在的問題,難以建立標(biāo)準(zhǔn)化和規(guī)范化的思想。實踐教學(xué)環(huán)節(jié)相對理論教學(xué)環(huán)節(jié)而言,內(nèi)容薄弱,甚至有些流于形式。
作為教師,在軟件工程實踐教學(xué)環(huán)節(jié)中,盡可能靈活安排實驗時間,實踐環(huán)節(jié)應(yīng)以大作業(yè)的形式貫穿于整個教學(xué)過程。教師在該課程教學(xué)初期,首先給學(xué)生若干項目課題進(jìn)行選擇,為了讓學(xué)生能有較充足的基本知識和充分的準(zhǔn)備,應(yīng)當(dāng)給學(xué)生足夠的時間來完成。比如,需求分析可安排在第3周布置、第5周提交;設(shè)計可安排在第6周布置、第8周提交;測試案例可安排在第9周布置、第11周提交;質(zhì)量評估可安排在第12周布置、第14周提交。教師應(yīng)要求每位學(xué)生參與,抽查部分學(xué)生并要求其在全班進(jìn)行匯報和交流。
除此之外,筆者認(rèn)為還可以邀請一些理論知識和開發(fā)經(jīng)驗都很豐富的行業(yè)人員與學(xué)生互動交流,定期舉辦專題講座,如行業(yè)發(fā)展趨勢、行業(yè)現(xiàn)狀和自己的從業(yè)經(jīng)驗等,讓學(xué)生了解企業(yè)軟件開發(fā)中的實際問題,讓學(xué)生學(xué)到在課堂中學(xué)不到的知識和實際經(jīng)驗,提高學(xué)生實際軟件開發(fā)的能力。
在進(jìn)行實踐環(huán)節(jié)教學(xué)時,筆者認(rèn)為需注意以下幾點:一是加強(qiáng)師生對實踐教學(xué)環(huán)節(jié)重要性的認(rèn)識,大多數(shù)師生重理論輕實踐,而軟件工程課程的特殊性,必須加大學(xué)生實踐能力的培養(yǎng);二是規(guī)范實踐教學(xué)環(huán)節(jié)的考核,教師應(yīng)及時檢查學(xué)生實踐環(huán)節(jié)的質(zhì)量,與學(xué)生面對面交流,注意收集學(xué)生的反饋意見,發(fā)現(xiàn)問題,及時解決,不要使實踐教學(xué)流于形式;三是加大實踐教學(xué)環(huán)節(jié)的考核比例,我們將實踐教學(xué)環(huán)節(jié)考核比例增加至總成績的70%。在對學(xué)生的實踐環(huán)節(jié)考核中,我們更側(cè)重于對學(xué)生的實踐操作能力、綜合應(yīng)用能力、文檔編寫能力、團(tuán)隊合作和溝通能力的考核。南京城市職業(yè)學(xué)院該課程的實踐考核主要從2個方面進(jìn)行:職業(yè)素養(yǎng)評定和業(yè)務(wù)能力考核。職業(yè)素養(yǎng)評定主要通過對學(xué)生的平時工作表現(xiàn),評價其所具備的工作素質(zhì),實行百分制,占實踐教學(xué)環(huán)節(jié)考核比例的30%。內(nèi)容包括考勤情況、個人素養(yǎng)、團(tuán)隊溝通和日志填寫等。例如,學(xué)生是否能夠按企業(yè)工作制度進(jìn)行工作;學(xué)生對于教師或組長交代的工作是否能反應(yīng)迅速準(zhǔn)確,是否能抓住工作的關(guān)鍵;是否有不斷提高個人工作效率和自己業(yè)務(wù)水平的意愿;是否能夠和小組成員進(jìn)行良好的溝通和協(xié)作;是否能夠按時認(rèn)真完成每天的工作日志。業(yè)務(wù)能力考核主要評定學(xué)生在規(guī)定時間內(nèi)完成任務(wù)的情況,同樣實行百分制,占實踐教學(xué)環(huán)節(jié)考核比例的40%。內(nèi)容包括軟件完成的質(zhì)量和所花費的時間。例如,提交的程序是否能夠正常運行;程序代碼是否能夠嚴(yán)格遵守代碼規(guī)范性;項目團(tuán)隊、教師和企業(yè)專家對其開發(fā)的軟件產(chǎn)品是否滿意;提交的軟件產(chǎn)品是否達(dá)到預(yù)期效果;是否在規(guī)定時間完成任務(wù)。2方面綜合計算后評定學(xué)生的實踐環(huán)節(jié)成績。軟件工程課程的教學(xué)目的是使學(xué)生能將軟件工程的思想和方法應(yīng)用于實際軟件開發(fā)過程中,應(yīng)著重培養(yǎng)學(xué)生的動手實踐能力,加大實踐教學(xué)環(huán)節(jié)的考核比例可使實踐教學(xué)環(huán)節(jié)不再薄弱。
5 打造良好的軟件工程環(huán)境
一個成功的軟件必須經(jīng)過一系列嚴(yán)格的過程,包括可行性研究、需求分析、設(shè)計、編碼、測試、包裝、發(fā)行、宣傳、銷售和客戶服務(wù)等。在軟件工程教學(xué)中,大多數(shù)情況是學(xué)生將實驗中所做的工作整理成作業(yè)的形式提交給教師,教師進(jìn)行批改,并沒有嚴(yán)格的走查、審查和技術(shù)復(fù)審等評審機(jī)制,沒有交付給用戶使用,更談不上驗收和維護(hù)。此時,學(xué)生對于軟件工程的理解程度依然停留在分析、設(shè)計和編碼這幾個層面。
對于軟件工程課程來說,如果只是讓學(xué)生在實踐環(huán)節(jié)中進(jìn)行軟件開發(fā)是不夠的,學(xué)生需要在一個符合軟件工程要求的環(huán)境下開發(fā)軟件,才能夠真正掌握軟件工程的思想和方法,因此軟件工程教學(xué)取得效果的關(guān)鍵是建立一個良好的軟件工程環(huán)境。
筆者認(rèn)為,在課程教學(xué)中可適當(dāng)引入一些常用的軟件工程工具,比如進(jìn)行軟件需求分析和設(shè)計時可使用建模工具,進(jìn)行軟件測試時可使用測試工具等。結(jié)合課程實踐教學(xué)環(huán)節(jié)的要求,根據(jù)學(xué)生實際情況和項目的固有特點,教師可編寫實驗指導(dǎo)手冊,包括開發(fā)過程模型、文檔模板、編碼標(biāo)準(zhǔn)、階段評審標(biāo)準(zhǔn)和驗收審查標(biāo)準(zhǔn)等,將實踐環(huán)節(jié)的過程規(guī)范化和產(chǎn)業(yè)化,要求學(xué)生在相對真實、良好的軟件工程環(huán)境中去理解軟件工程方法論、過程模型、開發(fā)環(huán)境和軟件開發(fā)的管理技術(shù)等,體會和掌握軟件工程的思想,能將這一系列活動靈活運用到實際開發(fā)工作中去。例如,南京城市職業(yè)學(xué)院與軟件開發(fā)公司合作開發(fā)了“軟件人才實訓(xùn)平臺”,該平臺構(gòu)建了良好的軟件工程環(huán)境。在軟件工程課程實訓(xùn)中,我們利用該平臺完成了相關(guān)實訓(xùn),學(xué)生可以通過該平臺了解軟件開發(fā)過程中的一系列流程,如項目環(huán)境準(zhǔn)備、需求分析、設(shè)計、編碼、測試、部署和維護(hù)等。該平臺要求學(xué)生完成相應(yīng)階段后,必須在該平臺上提交文檔和相關(guān)資料,教師可以通過該平臺學(xué)生提交的相關(guān)成果進(jìn)行考核評分。這就很好地模擬了軟件工程環(huán)境,讓學(xué)生參與到真實化企業(yè)實訓(xùn)中去。
在構(gòu)建軟件工程環(huán)境時,應(yīng)以軟件工程環(huán)境的主要目標(biāo)和基本需求為基礎(chǔ),把開發(fā)技術(shù)、管理技術(shù)、支撐環(huán)境、相關(guān)工具和開發(fā)平臺等有關(guān)因素有機(jī)地結(jié)合在一起,全方位考慮。
6 結(jié)語
隨著計算機(jī)技術(shù)的快速發(fā)展,軟件工程領(lǐng)域里的新知識和新理論也在不斷涌現(xiàn),對該課程教學(xué)方法和手段的探索是一項長期而艱巨的任務(wù)。以上只是筆者在近幾年教學(xué)工作中的一些思考和建議,在今后的教學(xué)工作中,教師應(yīng)為學(xué)生豐富和完善軟件工程環(huán)境,注重激發(fā)學(xué)生的學(xué)習(xí)興趣,注重學(xué)生學(xué)習(xí)主動性和創(chuàng)造性的培養(yǎng)。
(編輯:郭田珍)