高 禹 李 鑫
摘要:本文探討了軟件工程課程設(shè)計(jì)中要注意的幾個(gè)問題,這些問題包括:合理選擇課程設(shè)計(jì)題目、擺正編寫程序工作的位置、培養(yǎng)整體觀念和全局意識(shí)、熟悉常用技術(shù)和工具、學(xué)習(xí)和運(yùn)用新知識(shí)、提升綜合素質(zhì)。
關(guān)鍵詞:軟件工程;課程設(shè)計(jì);實(shí)踐;指導(dǎo)
中圖分類號(hào):G642 文獻(xiàn)標(biāo)識(shí)碼:B
軟件工程是計(jì)算機(jī)科學(xué)與技術(shù)本科專業(yè)一門重要的專業(yè)課。一般在軟件工程課程結(jié)束后,會(huì)安排一些時(shí)間讓學(xué)生做軟件工程課程設(shè)計(jì)。軟件工程課程設(shè)計(jì)的內(nèi)容是讓學(xué)生運(yùn)用軟件工程的知識(shí)設(shè)計(jì)一個(gè)應(yīng)用軟件系統(tǒng),并寫出相關(guān)的設(shè)計(jì)文檔材料。
做軟件工程課程設(shè)計(jì)的目的,是讓學(xué)生加深對(duì)軟件工程知識(shí)的理解,訓(xùn)練學(xué)生的動(dòng)手能力,讓學(xué)生學(xué)會(huì)開發(fā)軟件的常用方法,熟悉軟件開發(fā)的過程,熟悉各種軟件開發(fā)文檔材料的寫作,積累軟件開發(fā)的實(shí)踐經(jīng)驗(yàn),為將來從事軟件開發(fā)工作打下良好基礎(chǔ)。
在指導(dǎo)學(xué)生做軟件工程課程設(shè)計(jì)時(shí),以下幾個(gè)問題應(yīng)該引起指導(dǎo)教師的注意。
1合理選擇課程設(shè)計(jì)的題目
由于該課程設(shè)計(jì)與軟件工程課程內(nèi)容密切相關(guān),選題工作可以在軟件工程課程開始講授時(shí)布置下去,讓學(xué)生有充足的時(shí)間思考,思考成熟后,在指導(dǎo)教師幫助下,將課程設(shè)計(jì)題目確定下來。然后學(xué)生一邊學(xué)習(xí)軟件工程課程內(nèi)容,一邊著手收集課程設(shè)計(jì)所需的有關(guān)資料,做好課程設(shè)計(jì)的準(zhǔn)備工作。
課程設(shè)計(jì)題目所涉及的問題規(guī)模和難度應(yīng)該比較小。因?yàn)檎n程設(shè)計(jì)不同于畢業(yè)設(shè)計(jì),加上課程設(shè)計(jì)安排的時(shí)間比較少,學(xué)生投入的精力也有限,所以要控制規(guī)模和難度。
指導(dǎo)教師在幫助學(xué)生選擇題目時(shí),可以選擇學(xué)生比較熟悉的問題,如圖書資料管理系統(tǒng)、學(xué)生成績(jī)管理系統(tǒng)、人力資源管理系統(tǒng)等等,或者選擇學(xué)生很快就能熟悉的一些問題。
2擺正程序編寫工作在軟件工程中的位置
學(xué)生在做軟件工程課程設(shè)計(jì)之前,已經(jīng)做過一些課程設(shè)計(jì)。比如在學(xué)習(xí)C、C++或Java之后,利用C、C++或Java所做的課程設(shè)計(jì)。那些課程設(shè)計(jì)內(nèi)容是使用高級(jí)語言設(shè)計(jì)和編寫小軟件,在那些課程設(shè)計(jì)中,程序編寫是一項(xiàng)非常重要的工作,因?yàn)槟切┱n程設(shè)計(jì)是以熟練應(yīng)用某高級(jí)語言為目的。而在軟件工程課程設(shè)計(jì)中,編寫程序工作與需求分析、總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)等工作相比較,重要程度降低了。因?yàn)檐浖こ陶n程設(shè)計(jì)不是以熟練運(yùn)用某高級(jí)語言為目的,而是以熟悉和運(yùn)用軟件工程知識(shí)為目的。實(shí)際上,按照開發(fā)軟件的過程,當(dāng)需求分析、總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)等開發(fā)過程完成后,用哪種高級(jí)語言來實(shí)現(xiàn)軟件系統(tǒng)已經(jīng)不是重要問題了。
學(xué)生往往認(rèn)為程序編寫工作重要,而認(rèn)為需求分析、總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)等工作無關(guān)緊要,這是沒有領(lǐng)會(huì)軟件工程思想的表現(xiàn)。當(dāng)確定課程設(shè)計(jì)題目后,有些學(xué)生不認(rèn)真作需求分析、總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)等工作,匆匆忙忙開始編寫程序,這種行為與軟件工程課程設(shè)計(jì)的目的不相符。指導(dǎo)教師要引導(dǎo)學(xué)生明確軟件工程課程設(shè)計(jì)的目的,使學(xué)生清楚程序編寫工作與其他軟件開發(fā)工作的關(guān)系,讓學(xué)生擺正編寫程序工作在軟件工程課程設(shè)計(jì)中的位置;告訴學(xué)生不能只重視編寫程序工作而輕視其他工作;更不能不經(jīng)過需求分析、總體設(shè)計(jì)和詳細(xì)設(shè)計(jì)等階段而直接開始程序編寫工作。歷史上,軟件危機(jī)產(chǎn)生的原因之一就是錯(cuò)誤地認(rèn)為開發(fā)軟件就是編寫程序、程序就是軟件,而忽視了程序編寫之外的其他各項(xiàng)軟件開發(fā)工作。現(xiàn)在要通過做軟件工程課程設(shè)計(jì)引導(dǎo)學(xué)生擺正程序編寫工作的位置,用軟件工程理論指導(dǎo)實(shí)踐,防止過去的錯(cuò)誤再出現(xiàn)。
3培養(yǎng)整體觀念和全局意識(shí)
我們培養(yǎng)的計(jì)算機(jī)專業(yè)的本科生,將來不僅僅是做程序員,還要做系統(tǒng)分析師、軟件設(shè)計(jì)師,而系統(tǒng)分析師、軟件設(shè)計(jì)師必須有整體觀念和全局意識(shí)。開設(shè)軟件工程課要為培養(yǎng)系統(tǒng)分析師、軟件設(shè)計(jì)師打下基礎(chǔ),而做軟件工程課程設(shè)計(jì)是培養(yǎng)學(xué)生整體觀念和全局意識(shí)的一個(gè)好機(jī)會(huì)。
面對(duì)一個(gè)被開發(fā)的軟件系統(tǒng),如何培養(yǎng)學(xué)生的整體觀念和全局意識(shí)呢?
可以通過制訂軟件開發(fā)計(jì)劃來培養(yǎng)學(xué)生的整體觀念和全局意識(shí)。在軟件工程課程設(shè)計(jì)開始時(shí),指導(dǎo)教師要按照軟件工程的理論要求,指導(dǎo)學(xué)生制訂一個(gè)軟件開發(fā)計(jì)劃。對(duì)于軟件開發(fā)過程中的每個(gè)階段,從可行性研究到需求分析,從總體設(shè)計(jì)到詳細(xì)設(shè)計(jì),從編碼到測(cè)試,讓學(xué)生站在整體和全局的角度,考慮和分配各階段所用時(shí)間和各種資源。通過這個(gè)計(jì)劃的制訂,訓(xùn)練學(xué)生樹立從整體出發(fā)來思考軟件系統(tǒng)開發(fā)過程的觀念,引導(dǎo)學(xué)生學(xué)會(huì)從全局的角度來合理規(guī)劃軟件開發(fā)的各項(xiàng)工作,熟悉軟件開發(fā)的整體過程。
還可以通過做總體設(shè)計(jì)來培養(yǎng)學(xué)生的整體觀念和全局意識(shí)??傮w設(shè)計(jì)是軟件工程課程設(shè)計(jì)的一項(xiàng)重要內(nèi)容,總體設(shè)計(jì)是在搞清軟件系統(tǒng)的需求之后,概括性地回答軟件系統(tǒng)如何實(shí)現(xiàn)的問題??傮w設(shè)計(jì)從宏觀上對(duì)軟件系統(tǒng)進(jìn)行設(shè)計(jì),將軟件系統(tǒng)劃分成若干個(gè)模塊,確定每個(gè)模塊應(yīng)實(shí)現(xiàn)的功能以及各模塊間的結(jié)構(gòu)關(guān)系。從總體設(shè)計(jì)應(yīng)該完成的任務(wù)可以看出,做總體設(shè)計(jì)必須具有整體觀念和全局意識(shí),要考慮到被開發(fā)系統(tǒng)的每個(gè)方面的問題。指導(dǎo)教師要讓學(xué)生在規(guī)定的時(shí)間內(nèi)做出總體設(shè)計(jì)方案,然后指導(dǎo)教師對(duì)學(xué)生做出的總體設(shè)計(jì)方案進(jìn)行審查,審查通過之后,再讓學(xué)生做后面的工作。
4熟悉常用技術(shù)和工具
按照軟件工程課程設(shè)計(jì)的要求,學(xué)生在課程設(shè)計(jì)結(jié)束時(shí),要完成全部的軟件設(shè)計(jì)開發(fā)任務(wù),不但要交出一個(gè)能運(yùn)行的軟件,還要交出設(shè)計(jì)過程中所形成的文檔材料,包括需求分析材料、總體設(shè)計(jì)材料、詳細(xì)設(shè)計(jì)材料、測(cè)試材料等。要做好這些文檔材料,需要在課程設(shè)計(jì)中引導(dǎo)學(xué)生熟悉軟件工程中常用技術(shù)和工具的使用方法。
例如,在制作需求分析材料時(shí),涉及到實(shí)體關(guān)系圖、數(shù)據(jù)流圖、狀態(tài)轉(zhuǎn)換圖、IPO圖的使用;在制作總體設(shè)計(jì)材料時(shí),涉及到模塊化技術(shù)和層次結(jié)構(gòu)圖的使用;在制作詳細(xì)設(shè)計(jì)材料時(shí),涉及到傳統(tǒng)流程圖、盒圖、PAD圖、判定表、判定樹的使用;在制作測(cè)試材料時(shí),涉及到白盒技術(shù)、黑盒技術(shù)的使用。如果采用面向?qū)ο蠓椒ㄟM(jìn)行系統(tǒng)分析和設(shè)計(jì),則要涉及到UML中的用例圖、類和對(duì)象圖、順序圖、活動(dòng)圖、協(xié)作圖、構(gòu)件圖、部署圖的使用。
上面提到的一些常用的技術(shù)和工具,在軟件工程授課過程中,教師雖然講過,但由于沒有真正使用過,所以學(xué)生不熟悉。指導(dǎo)教師要引導(dǎo)學(xué)生利用課程設(shè)計(jì)來熟悉這些常用技術(shù)和工具。因?yàn)閷W(xué)生畢業(yè)后,既要會(huì)做程序編寫工作,也要會(huì)做需求分析、總體設(shè)計(jì)、詳細(xì)設(shè)計(jì)、測(cè)試等工作,熟悉這些常用技術(shù)和工具的使用方法,并且認(rèn)真完成課程設(shè)計(jì)各項(xiàng)文檔材料的制作,可以為畢業(yè)后從事相關(guān)的軟件開發(fā)工作奠定良好的基礎(chǔ)。
5學(xué)習(xí)和運(yùn)用新知識(shí)
軟件工程教材中介紹了開發(fā)軟件各階段所用的知識(shí),但是教材往往受篇幅所限,對(duì)一些新知識(shí)介紹得不詳細(xì),再加上知識(shí)更新的速度比較快,有些新知識(shí)教材中可能沒有介紹。做軟件工程課程設(shè)計(jì)是一個(gè)非常好的學(xué)習(xí)和運(yùn)用新知識(shí)的機(jī)會(huì),指導(dǎo)教師可以有意識(shí)地引導(dǎo)學(xué)生學(xué)習(xí)和運(yùn)用軟件工程新知識(shí)。
例如敏捷(Agile)軟件開發(fā)方法,該方法是針對(duì)傳統(tǒng)軟件開發(fā)方法過程復(fù)雜繁瑣、產(chǎn)生并且維護(hù)大量文檔、缺乏對(duì)開發(fā)過程中各種變化的有效和及時(shí)的反應(yīng)等問題而提出的一類新的軟件開發(fā)方法。該類方法對(duì)軟件生產(chǎn)率高度重視,適用于需求模糊或快速變化的情況,適用于一些小型軟件項(xiàng)目的開發(fā)。XP(極限編程)是敏捷方法的典型代表,XP將開發(fā)過程分為計(jì)劃、設(shè)計(jì)、編碼和測(cè)試四個(gè)階段,XP強(qiáng)調(diào)4條核心價(jià)值:溝通、反饋、簡(jiǎn)單、勇氣,XP建立了系統(tǒng)比擬、小交付、簡(jiǎn)潔設(shè)計(jì)、結(jié)對(duì)開發(fā)、代碼共享等多項(xiàng)核心實(shí)踐準(zhǔn)則,XP是應(yīng)用最多的一種敏捷方法。自從2001年2月敏捷聯(lián)盟成立之后,敏捷方法發(fā)展迅速,該方法的實(shí)用價(jià)值逐漸被人們所認(rèn)識(shí),越來越多的人開始應(yīng)用該方法開發(fā)軟件。
對(duì)于像敏捷方法這樣的可以用在軟件工程課程設(shè)計(jì)中的新知識(shí),軟件工程任課教師可以通過多種途徑將新知識(shí)介紹給學(xué)生,讓學(xué)生在做軟件工程課程設(shè)計(jì)之前了解新知識(shí)的內(nèi)容。對(duì)于準(zhǔn)備采用新知識(shí)做軟件工程課程設(shè)計(jì)的學(xué)生,指導(dǎo)教師要組織他們深入學(xué)習(xí)討論新知識(shí),讓他們?cè)谧稣n程設(shè)計(jì)之前熟悉新知識(shí),指導(dǎo)他們做好根據(jù)新知識(shí)進(jìn)行課程設(shè)計(jì)的計(jì)劃,鼓勵(lì)他們使用新知識(shí),拓寬知識(shí)面。
6提升綜合素質(zhì)
具有良好的綜合素質(zhì)是事業(yè)成功的重要因素,為了提升計(jì)算機(jī)專業(yè)學(xué)生的綜合素質(zhì),為社會(huì)提供優(yōu)秀的軟件人才,要充分進(jìn)行好軟件工程課程設(shè)計(jì)。
能與他人和諧地進(jìn)行溝通和協(xié)作的團(tuán)隊(duì)精神,是從事軟件開發(fā)工作不可缺少的良好素質(zhì)之一。早期軟件作坊式的個(gè)體化軟件開發(fā)方式,造成開發(fā)者隨心所欲,結(jié)果為軟件危機(jī)的產(chǎn)生埋下了禍根?,F(xiàn)在的軟件規(guī)模比較大,各項(xiàng)性能要求比較高,開發(fā)時(shí)間比較短,軟件作坊的生產(chǎn)方式已經(jīng)無法適應(yīng)這種新情況了,因此必須依靠團(tuán)隊(duì)的力量,大家齊心合力、分工合作,才能完成軟件開發(fā)任務(wù)。指導(dǎo)教師可以通過設(shè)立開發(fā)小組的形式,培養(yǎng)學(xué)生與他人和諧地進(jìn)行溝通和協(xié)作的團(tuán)隊(duì)精神。根據(jù)課程設(shè)計(jì)題目的內(nèi)容,將參加課程設(shè)計(jì)的學(xué)生劃分為若干個(gè)開發(fā)小組,組內(nèi)采用民主制組織方式,組內(nèi)學(xué)生通過互相溝通、協(xié)商來制訂開發(fā)方案,通過分工合作來解決開發(fā)中的問題。開發(fā)小組可以采用敏捷軟件開發(fā)方法進(jìn)行課程設(shè)計(jì),因?yàn)槊艚莘椒ㄌ貏e強(qiáng)調(diào)人與人之間的交流與合作,有利于團(tuán)隊(duì)精神的培養(yǎng)。
認(rèn)真做事、細(xì)心做事的負(fù)責(zé)精神,是從事軟件開發(fā)工作不可缺少的良好素質(zhì)之一。軟件開發(fā)活動(dòng)由多階段構(gòu)成,按順序分階段進(jìn)行開發(fā)活動(dòng),各階段密切相關(guān),某一階段出現(xiàn)錯(cuò)誤,將會(huì)傳導(dǎo)至下一階段,還會(huì)在傳導(dǎo)過程中將錯(cuò)誤放大。由于開發(fā)者馬虎大意、出現(xiàn)錯(cuò)誤,造成損失的例子歷史上很多。指導(dǎo)教師可以通過將一些典型錯(cuò)誤實(shí)例介紹給學(xué)生,引起學(xué)生對(duì)負(fù)責(zé)精神的重視;還可以安排時(shí)間讓學(xué)生對(duì)設(shè)計(jì)內(nèi)容進(jìn)行自查和互查,以檢驗(yàn)認(rèn)真細(xì)心做事的情況。還可以通過測(cè)試和調(diào)試活動(dòng)來培養(yǎng)認(rèn)真做
事、細(xì)心做事的負(fù)責(zé)精神,因?yàn)槿绻麤]有認(rèn)真做事、細(xì)心做事的負(fù)責(zé)精神,很難完成測(cè)試和調(diào)試工作任務(wù)。
此外,熟練地寫作應(yīng)用文檔材料的能力、勇于創(chuàng)新和勇于改正錯(cuò)誤的精神,都是從事軟件開發(fā)工作應(yīng)具備的良好素質(zhì),這些都可以通過軟件工程課程設(shè)計(jì)活動(dòng)加以培養(yǎng)。充分利用好軟件工程課程設(shè)計(jì),對(duì)于提升學(xué)生綜合素質(zhì)會(huì)起到一個(gè)很好的推動(dòng)作用。
參考文獻(xiàn):
[1] Roger S.Pressman.軟件工程:實(shí)踐者的研究方法[M].梅宏,譯.北京:機(jī)械工業(yè)出版社,2002.
[2] 郭寧.軟件工程實(shí)用教程[M].北京:人民郵電出版社,2006.
[3] 高禹,馮相忠.C語言課程設(shè)計(jì)與發(fā)展學(xué)生思維[J].高等理科教育,2006(5):77-79.
[4] 張海藩.軟件工程導(dǎo)論[M].4版. 北京:清華大學(xué)出版社,2003:3-5.
[5] 陸惠恩.軟件工程基礎(chǔ)[M].北京:人民郵電出版社,2005:29-80,128-138.
[6] 張敬周,錢樂秋,朱三元.Agile方法研究綜述[J].計(jì)算機(jī)應(yīng)用與軟件,2002(6):1-9,54.
[7] 李航.敏捷軟件開發(fā)方法與極限編程概述[J].計(jì)算機(jī)工程與設(shè)計(jì),2003(10):116-118,121.