許崗++劉靖
摘 要:軟件工程是計(jì)算機(jī)專(zhuān)業(yè)必修課,對(duì)于學(xué)生進(jìn)行軟件開(kāi)發(fā)以及軟件開(kāi)發(fā)的規(guī)范性具有重要的意義。軟件工程課程教材抽象、枯燥,而相應(yīng)的授課方式一般是教材的重復(fù),這對(duì)于學(xué)生掌握該課程的精髓不利。本文通過(guò)實(shí)踐的探索,使用了完整案例以及案例分解的方式,使得一個(gè)案例貫穿整個(gè)學(xué)期,在課堂上按照分解后的案例環(huán)節(jié),逐個(gè)使用軟件工程的方法引導(dǎo)學(xué)生進(jìn)行環(huán)節(jié)的實(shí)踐,以便達(dá)到教學(xué)更加生動(dòng)實(shí)際,學(xué)習(xí)更加有壓力和清晰的目標(biāo)的目的。
關(guān)鍵詞:軟件工程 教學(xué)方法探索 案例環(huán)節(jié)教學(xué)
一、課程重要性和教學(xué)現(xiàn)狀分析
毫無(wú)疑問(wèn),作為軟件工程專(zhuān)業(yè)或者計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生,未來(lái)的就業(yè)方向往往跟計(jì)算機(jī)軟件開(kāi)發(fā)相關(guān)。學(xué)生在學(xué)習(xí)計(jì)算機(jī)編程語(yǔ)言并用編程語(yǔ)言進(jìn)行程序設(shè)計(jì)和實(shí)現(xiàn)的實(shí)踐過(guò)程中,需要養(yǎng)成編寫(xiě)程序的好思維和必要的好習(xí)慣。作為教師,不能只是引導(dǎo)學(xué)生會(huì)寫(xiě)程序,完成指定的實(shí)驗(yàn)內(nèi)容,更需要引導(dǎo)學(xué)生編寫(xiě)好的程序,能夠使程序符合規(guī)范,便于維護(hù),這是因?yàn)槟壳败浖木S護(hù)成本已經(jīng)遠(yuǎn)遠(yuǎn)大于軟件的開(kāi)發(fā)成本??删S護(hù)性是軟件最重要的屬性,一項(xiàng)可維護(hù)易維護(hù)的軟件將節(jié)約大量的成本。而軟件的可維護(hù)性是由軟件開(kāi)發(fā)時(shí),開(kāi)發(fā)團(tuán)隊(duì)遵守良好開(kāi)發(fā)規(guī)范和原則來(lái)保證的,這一點(diǎn)正是軟件工程課程的目的。
軟件工程是一門(mén)經(jīng)過(guò)時(shí)間和實(shí)踐驗(yàn)證的,講述開(kāi)發(fā)軟件團(tuán)隊(duì)?wèi)?yīng)該遵守的軟件分析、設(shè)計(jì)、實(shí)現(xiàn)方法、算法和原則的課程。該門(mén)課程將軟件的編寫(xiě)劃分成了幾個(gè)階段:需求分析階段、概要設(shè)計(jì)階段、詳細(xì)設(shè)計(jì)階段、實(shí)現(xiàn)階段、單元測(cè)試階段和集成測(cè)試階段。經(jīng)過(guò)這些階段,用戶(hù)的需求被認(rèn)真推敲和理解,使得用戶(hù)和開(kāi)發(fā)人員之間達(dá)成了共識(shí),這一點(diǎn)保證了軟件開(kāi)發(fā)的最終目標(biāo)是正確的。在概要設(shè)計(jì)階段和詳細(xì)設(shè)計(jì)階段,用戶(hù)的意識(shí)被逐步細(xì)化,使得細(xì)化后的功能程序員能夠用編程語(yǔ)言完成。實(shí)現(xiàn)階段是按照分析的結(jié)果對(duì)功能逐個(gè)模塊的編寫(xiě)代碼。測(cè)試階段則是測(cè)試代碼的正確性。
目前,雖然軟件工程課程教材種類(lèi)豐富,數(shù)量眾多,然而,絕大部分教材,甚至包括國(guó)外的較好的軟件工程教材都是長(zhǎng)篇累牘的敘述軟件開(kāi)發(fā)過(guò)程應(yīng)該遵循的方法和原則。這些方法和原則沒(méi)有詳細(xì)的實(shí)例作為佐證,使得軟件工程理論陷于抽象和空泛??傮w來(lái)說(shuō),目前的教材和教學(xué)手段,對(duì)于學(xué)生認(rèn)識(shí)軟件工程的整體架構(gòu)和具體細(xì)節(jié)還有不足。具體表現(xiàn)為:
軟件工程整體感不好。軟件工程是一整套方法和原則,這些方法和原則指導(dǎo)了整個(gè)軟件分析、開(kāi)發(fā)、測(cè)試和維護(hù)。目前在軟件工程教材以及教學(xué)過(guò)程中,缺乏貫穿整個(gè)課程的完整案例。當(dāng)課程結(jié)束后,學(xué)生普遍不清楚這門(mén)課程能夠做什么,對(duì)軟件工程方法和原則沒(méi)有整體架構(gòu)的概念、理解和掌握。
軟件工程各環(huán)節(jié)的聯(lián)系性沒(méi)有體現(xiàn)。目前的教學(xué)過(guò)程中,有一些小案例來(lái)說(shuō)明軟件工程中提到的方法和理論,這些例子對(duì)于其對(duì)應(yīng)的理論點(diǎn)的說(shuō)明較為合適,但這些案例彼此之間聯(lián)系很少甚至沒(méi)有聯(lián)系。這些案例使得本來(lái)是軟件工程方法和原則中不可分割的階段顯得過(guò)于零碎以及無(wú)關(guān)聯(lián)。這使得學(xué)生無(wú)法體驗(yàn)和掌握軟件工程各個(gè)階段的作用以及階段之間的聯(lián)系。
沒(méi)有案例教學(xué)體現(xiàn)軟件工程的各個(gè)階段及其整體架構(gòu)的關(guān)聯(lián)。目前已經(jīng)有一些教師引入了案例教學(xué)。但是,我們發(fā)現(xiàn)還沒(méi)有在整個(gè)教學(xué)中貫穿完整案例,并將完整案例按照各個(gè)階段分解,隨著各個(gè)階段的進(jìn)行,案例越來(lái)越接近完整,所有的階段進(jìn)行完畢后,一個(gè)完整的案例呈現(xiàn)在學(xué)生的眼前。
教學(xué)手段比較單一。目前的主流教學(xué)方式都是課上以講為主,課下學(xué)生組織團(tuán)隊(duì)進(jìn)行編程。這樣造成講述的方法和學(xué)生的實(shí)踐無(wú)法統(tǒng)一。學(xué)生在完成作業(yè)的過(guò)程中,仍然沒(méi)有使用軟件工程的方法,而是采用非正規(guī)游擊戰(zhàn)的方式繼續(xù)著從前的編程習(xí)慣。這使得引導(dǎo)學(xué)生實(shí)踐軟件工程的方法和原理不夠完善。
為了解決上述問(wèn)題,我們提出了一個(gè)完整的教學(xué)實(shí)踐體系和流程,總體來(lái)說(shuō)就是案例的實(shí)現(xiàn)、案例的講解和推進(jìn)、學(xué)生實(shí)驗(yàn)的選題、學(xué)生作業(yè)的推進(jìn)和檢查方式。
二、教學(xué)案例設(shè)計(jì)
軟件工程的案例是軟件工程課程的核心。只有實(shí)際且有意義的案例才能使學(xué)生體會(huì)到軟件工程的作用,并掌握軟件工程的方法和原則。
首先,我們選擇一個(gè)有實(shí)際意義的目標(biāo),提出具體的需求,然后按照實(shí)際的問(wèn)題,依據(jù)軟件工程的方法和流程進(jìn)行軟件的開(kāi)發(fā)。在需求分析階段,我們按照軟件工程提出的方法進(jìn)行需求分析,并按照規(guī)范形成規(guī)定的文檔。然后,按照需求分析的結(jié)果,我們進(jìn)行概要設(shè)計(jì)和詳細(xì)設(shè)計(jì),并形成設(shè)計(jì)的結(jié)果和文檔。最后我們按照設(shè)計(jì)文檔進(jìn)行軟件開(kāi)發(fā),并進(jìn)行單元測(cè)試,最終進(jìn)行集成測(cè)試。在每個(gè)階段都有必要的文檔,我們都按照規(guī)范進(jìn)行組織和準(zhǔn)備。
按照這樣的方法,我們完成了一個(gè)實(shí)際的案例。這個(gè)案例我們將作為教學(xué)用的實(shí)踐案例。
三、用完整案例貫穿軟件工程教學(xué)
在軟件工程課程的講授過(guò)程中,往往有很多不相關(guān)的案例貫穿于每個(gè)階段,當(dāng)課程講授結(jié)束時(shí),學(xué)生往往不清楚軟件工程總體框架是什么、總的目標(biāo)是什么。為了解決該問(wèn)題我們?cè)谥v授中使用了一個(gè)完整案例。
由于軟件工程課程抽象,為了讓學(xué)生掌握其方法和原則,教學(xué)中我們使用了案例教學(xué)。與其他的案例教學(xué)不同的是,在講授軟件工程課程時(shí),我們采用了貫穿整個(gè)課程的一個(gè)完整案例。由于采用完整案例,使得學(xué)生在課程的學(xué)習(xí)過(guò)程中始終有一個(gè)清晰的目標(biāo)和脈絡(luò)。這樣,軟件工程抽象的理論、方法和原理能夠始終如一由一個(gè)案例來(lái)體現(xiàn)。當(dāng)課程結(jié)束時(shí),學(xué)生往往能看到一個(gè)實(shí)際的軟件產(chǎn)品,使得學(xué)生對(duì)該課程產(chǎn)生了興趣。
四、教學(xué)中強(qiáng)調(diào)軟件工程各階段的聯(lián)系
在教學(xué)案例設(shè)計(jì)中,我們已經(jīng)將完整的案例進(jìn)行了分解,分解后的案例與各個(gè)階段的產(chǎn)品對(duì)應(yīng)。這些小案例都是使用與之對(duì)應(yīng)的階段提供的方法和原則進(jìn)行開(kāi)發(fā)的。由于不同階段之間的產(chǎn)品具有很強(qiáng)的聯(lián)系,這樣每個(gè)階段的產(chǎn)品也具有很強(qiáng)的聯(lián)系。往往上一個(gè)階段的產(chǎn)品是下一個(gè)階段的輸入,下一個(gè)階段的產(chǎn)品是依據(jù)上一個(gè)階段產(chǎn)品而進(jìn)行的開(kāi)發(fā)。這些階段應(yīng)該順序進(jìn)行,不可跨越進(jìn)行。由于各階段對(duì)應(yīng)的小案例都來(lái)自整體案例,并且是按照軟件工程的方法進(jìn)行開(kāi)發(fā)的,這些階段性案例都是緊密相關(guān)的。這樣在課程的講授過(guò)程中,學(xué)生能夠清晰而實(shí)際的把握每個(gè)階段的作用和階段之間彼此的聯(lián)系。endprint
五、教學(xué)中強(qiáng)調(diào)軟件工程各階段的聯(lián)系和各階段與總體架構(gòu)的關(guān)系
由于軟件工程方法和原則是有多個(gè)階段的,我們?cè)诿總€(gè)階段都設(shè)計(jì)了一個(gè)符合本階段的小案例,這些小案例都是貫穿課程的一個(gè)完整案例的分解。這樣,在每個(gè)階段,學(xué)生會(huì)依照案例對(duì)該階段的方法和原則有較為具體的認(rèn)識(shí)。隨著課程的進(jìn)行,這些小案例的逐個(gè)完成,當(dāng)課程結(jié)束后,各個(gè)案例匯聚成了一個(gè)完整的軟件產(chǎn)品,這樣學(xué)生對(duì)軟件工程課程有了整體的認(rèn)識(shí),同時(shí),學(xué)生也會(huì)真切體會(huì)到軟件工程在軟件開(kāi)發(fā)中的巨大指導(dǎo)作用。
六、教學(xué)中強(qiáng)調(diào)學(xué)生的參與
在整個(gè)教學(xué)過(guò)程中,強(qiáng)調(diào)學(xué)生的參與。軟件工程課程具有很強(qiáng)的實(shí)踐性。只有學(xué)生親自參與才能體會(huì)到軟件工程對(duì)軟件開(kāi)發(fā)的指導(dǎo)作用。
首先,我們將學(xué)生以開(kāi)發(fā)團(tuán)隊(duì)的形式分成小組。
然后,我們?yōu)閷W(xué)生選擇題目,或者學(xué)生自己選擇題目,引導(dǎo)并和學(xué)生一起討論題目的合適性。
之后便是實(shí)踐階段。隨著課程的講解,軟件工程各個(gè)階段在進(jìn)行,我們講解的是我們已經(jīng)設(shè)計(jì)好的案例,而要求學(xué)生組成的開(kāi)發(fā)團(tuán)隊(duì)也需要按照階段去進(jìn)行他們的項(xiàng)目,每個(gè)階段都要安排學(xué)生做報(bào)告,報(bào)告他們分析、設(shè)計(jì)和實(shí)現(xiàn)過(guò)程中使用的方法,以及他們每個(gè)階段產(chǎn)品形成的具體流程。這樣學(xué)生能深度實(shí)踐可控的軟件工程原理。當(dāng)課程結(jié)束后,他們的各個(gè)階段的產(chǎn)品以及最終的集成產(chǎn)品也產(chǎn)生了。這樣學(xué)生會(huì)有很大的成就感,使得他們進(jìn)行了一次深度的軟件工程體驗(yàn),并感受到了軟件工程對(duì)于軟件開(kāi)發(fā)的重大意義。因此,這對(duì)于學(xué)生未來(lái)在軟件行業(yè)就業(yè)后,按照規(guī)范的流程和方法開(kāi)發(fā)軟件起到了關(guān)鍵的引導(dǎo)作用。
結(jié)語(yǔ)
軟件工程課程理論目前來(lái)說(shuō)已經(jīng)逐步完善并發(fā)展著。這門(mén)課程對(duì)計(jì)算機(jī)專(zhuān)業(yè)的學(xué)生來(lái)說(shuō)具有重要意義,為培養(yǎng)學(xué)生開(kāi)發(fā)易維護(hù)且規(guī)范的軟件打下了基礎(chǔ)。我們?cè)谲浖こ陶n程的講授過(guò)程中發(fā)現(xiàn),該課程的抽象和理論化使得學(xué)生很難掌握該課程。有些教學(xué)也采用了案例的方式,但是,案例在整個(gè)教學(xué)中不停地變化,在教學(xué)結(jié)束后也沒(méi)有產(chǎn)品產(chǎn)生,使得學(xué)生很難理解該方法。我們從案例的設(shè)計(jì)、分解、聯(lián)系以及實(shí)踐環(huán)節(jié)各個(gè)方面進(jìn)行了深度的實(shí)驗(yàn),發(fā)現(xiàn)本文提出的完整案例法、案例分解法、案例聯(lián)系法和引導(dǎo)學(xué)生實(shí)踐并形成產(chǎn)品法具有很好的效果。
但是,有些細(xì)節(jié)問(wèn)題我們還沒(méi)有進(jìn)行實(shí)驗(yàn),整個(gè)教學(xué)流程還沒(méi)有進(jìn)行量化,這是我們未來(lái)需要進(jìn)一步進(jìn)行的工作。
論文項(xiàng)目信息:內(nèi)蒙古大學(xué)“卓越教學(xué)團(tuán)隊(duì)”建設(shè)項(xiàng)目(2013-5):數(shù)據(jù)結(jié)構(gòu)與程序設(shè)計(jì)系列課程教學(xué)團(tuán)隊(duì)
參考文獻(xiàn):
[1]王立群.應(yīng)用型本科軟件工程精品課程教學(xué)改革研究.信息科技,2013(26)
[2]徐玲,文俊浩,熊慶宇.軟件工程人才培養(yǎng)模式的探索與實(shí)踐.現(xiàn)代教育技術(shù),2013(8)
[3]劉征海,徐卓然,肖建田.基于團(tuán)隊(duì)學(xué)習(xí)的軟件工程專(zhuān)業(yè)課程教學(xué)改革探索.課程教育研究,2013(22)endprint