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