玉溪師范學(xué)院 楊 揚(yáng)
敏捷開發(fā)其輕量級、快速響應(yīng)的特性使其在當(dāng)今軟件開發(fā)中有著非常重要的地位。當(dāng)前軟件類課程教學(xué)中,存在重理論、弱實(shí)踐的情況。針對該問題,借鑒敏捷思維中的相關(guān)特性,在軟件類課程教學(xué)設(shè)計(jì)中強(qiáng)調(diào)敏捷理念快速迭代、原型開發(fā)、強(qiáng)調(diào)溝通等方面,進(jìn)行教學(xué)模式創(chuàng)新,達(dá)到提升學(xué)生積極性與實(shí)踐能力的目的。
軟件開發(fā)過程(software development process)又叫做軟件開發(fā)生命周期(software developmentlife cycle, SDLC),是軟件產(chǎn)品開發(fā)的任務(wù)框架和規(guī)范,也可以簡單地稱為軟件生命周期及軟件過程。軟件在開發(fā)設(shè)計(jì)過程中有許多的模型,這用于對設(shè)計(jì)過程中所涉及的各項(xiàng)任務(wù)以及方法進(jìn)行描述。
在我國信息技術(shù)類的專業(yè)課程中,軟件類課程所占比例很高,如數(shù)據(jù)庫、面向?qū)ο蟪绦蛟O(shè)計(jì)、網(wǎng)頁設(shè)計(jì)等。該類課程的學(xué)習(xí)效果將較大影響未來學(xué)生的專業(yè)技能打造影響未來的就業(yè)效果,但該部分課程傳統(tǒng)的教學(xué)實(shí)踐,主要以章節(jié)知識點(diǎn)作為過程,以此來構(gòu)建整個(gè)課程知識體系的講授與實(shí)踐,由于遵循傳統(tǒng)的軟件開發(fā)中的過程組織形式,把軟件開發(fā)中的生命周期階段依照經(jīng)典理論的順序組織起來,堅(jiān)持按需求、分析、設(shè)計(jì)、編碼和測試的階段進(jìn)行開發(fā)與教學(xué)。此類方法具有理論成熟,各過程較為清晰,并有規(guī)范的文檔格式要求,是以往軟件類課程教學(xué)中常用的方式。但由于該類教學(xué)過程中前期環(huán)節(jié)較為枯燥,導(dǎo)致學(xué)生的畏難情緒增強(qiáng),容易在初期階段就影響此類學(xué)生的學(xué)習(xí)興趣,從而影響學(xué)習(xí)效果,導(dǎo)致中后期的教學(xué)效果不佳。
敏捷開發(fā)模式是2000年后開始興起的一種軟件開發(fā)模式,屬于輕載軟件模式。因其在實(shí)踐中開發(fā)效率優(yōu)于傳統(tǒng)的軟件工程開發(fā)模式,現(xiàn)已在全球開發(fā)中占有越來越高的比重,2010年12月10日,中國敏捷軟件開發(fā)聯(lián)盟正式成立。敏捷思維注重集思廣益,博取眾長,使得每個(gè)人的能力都能得到更好的體現(xiàn),并且強(qiáng)調(diào)先有一個(gè)初步的原型,對其進(jìn)行高迭代,不斷完善軟件產(chǎn)品的過程,使得敏捷開發(fā)能在短時(shí)間內(nèi)開發(fā)出可運(yùn)行的系統(tǒng)。其強(qiáng)調(diào)應(yīng)對需求快速變化,調(diào)整開發(fā)的方式。能夠讓學(xué)生先看到一個(gè)基礎(chǔ)的“產(chǎn)品”,隨著教學(xué)的不斷深入,“產(chǎn)品”也在不斷的完善和優(yōu)化,隨著課程的結(jié)束,“產(chǎn)品”也就設(shè)計(jì)完畢,這樣不斷刺激學(xué)生的求知欲,在學(xué)習(xí)過程中能夠不斷得到反饋,激發(fā)其學(xué)習(xí)的熱情。這需要從教學(xué)內(nèi)容設(shè)計(jì)與實(shí)踐內(nèi)容進(jìn)行篩選,一方面教學(xué)內(nèi)容要擴(kuò)展敏捷思維的使用范圍,減少或降低很多敏捷方法中應(yīng)用條件的限制,另一方面理論聯(lián)系實(shí)際地對這部分內(nèi)容綜合講解,保證學(xué)生對理解知識點(diǎn)的情況下,對敏捷開發(fā)的有全面認(rèn)識和理解。在工業(yè)領(lǐng)域和教學(xué)領(lǐng)域都存在敏捷方法的實(shí)施問題,如何利用并組合現(xiàn)有工具技術(shù)形成適合敏捷開發(fā)的環(huán)境并融入教學(xué)實(shí)踐,對于深入理解和實(shí)際應(yīng)用該方法具有深遠(yuǎn)的意義。
現(xiàn)實(shí)開發(fā)中,由于項(xiàng)目需求的不可預(yù)設(shè)性,預(yù)先設(shè)計(jì)一個(gè)具備可調(diào)整彈性、較為完美的架構(gòu)是無法實(shí)現(xiàn)也沒必要的。當(dāng)前我們設(shè)計(jì)的教學(xué)模式,也應(yīng)該在案例設(shè)置、教學(xué)模塊選擇、實(shí)踐環(huán)節(jié)的安排上,盡量遵循這個(gè)原則:注重實(shí)踐目標(biāo)的達(dá)成,盡可能讓更多的學(xué)員完成該門課程所涉及的軟件在實(shí)際開發(fā)中所需的基本應(yīng)用環(huán)節(jié),讓學(xué)生能更好的參與到實(shí)踐開發(fā)環(huán)節(jié)中來,相反,一些較難的理論知識點(diǎn),在適當(dāng)環(huán)節(jié)應(yīng)當(dāng)給予略過,讓學(xué)員有所了解,在今后學(xué)習(xí)過程中,能夠知道回來學(xué)習(xí)即可。如圖1所示,敏捷思維重視強(qiáng)調(diào)學(xué)生與學(xué)生在“作品”開發(fā)上的溝通銜接,學(xué)生與教師在學(xué)習(xí)反饋的及時(shí)有效,教學(xué)設(shè)計(jì)上的緊密協(xié)作、面對面溝通,要求能夠及時(shí)完成新的“產(chǎn)品”版本,建設(shè)緊湊而自我組織型的團(tuán)隊(duì),能夠很好地適應(yīng)需求變化的代碼編寫和團(tuán)隊(duì)組織方法,也更注重軟件開發(fā)中人所起到的作用。
圖1 敏捷課程設(shè)計(jì)教學(xué)模式
為此,我們在教學(xué)過程中結(jié)合敏捷開中所采用的幾種方法如:極限編程(XP)、Scrum、精益開發(fā)(leandevelopment)、動態(tài)系統(tǒng)開發(fā)方法(DSDM)、特征驅(qū)動開發(fā)(feature driven development)、水晶開發(fā)(cristal clear)等[2]。綜合其快速迭代的特征來設(shè)計(jì)教學(xué)模式:
(1)“迭代式”的實(shí)踐練習(xí)。如圖2所示,把課程中的實(shí)踐練習(xí)設(shè)計(jì)為一個(gè)軟件產(chǎn)品開發(fā),整個(gè)教學(xué)過程劃分為幾個(gè)迭代周期,依照課程進(jìn)度每個(gè)迭代周期是一個(gè)定長或不定長的時(shí)間塊,每個(gè)迭代學(xué)習(xí)期持續(xù)的時(shí)間一般較短,通常為1~4學(xué)時(shí)。在傳統(tǒng)的教學(xué)中,一次性的明確了大的教學(xué)目標(biāo),但由于學(xué)生能力的參差不齊,使得總體設(shè)計(jì)環(huán)節(jié)學(xué)員的進(jìn)度不一,大的目標(biāo)導(dǎo)致實(shí)現(xiàn)的差異性較大,使得學(xué)生難以完成,導(dǎo)致抄襲情況凸顯,違背了最初目標(biāo)。而在迭代式教學(xué)中,把學(xué)員的實(shí)踐目標(biāo)范圍縮小,使得技能需求描述更加清晰,依托實(shí)踐進(jìn)度情況,動態(tài)修正各項(xiàng)技能的反復(fù)求精,把學(xué)生能力從不全面到全面,提升其專業(yè)水平,改變那種傳統(tǒng)教學(xué)過程中,追求機(jī)械地知識講授,而不考慮學(xué)生實(shí)踐完成效果及專業(yè)技術(shù)變化等客觀條件。
圖2 敏捷式教學(xué)目標(biāo)
(2)作業(yè)的“增量交付”。每一階段的實(shí)踐練習(xí)在一個(gè)在每個(gè)迭代學(xué)習(xí)期結(jié)束時(shí)將被提交,而不是在整個(gè)學(xué)期結(jié)束時(shí)以期末作業(yè)的形式一次性提交。每次交付的都是可被實(shí)施應(yīng)用的練習(xí)“作品”。使用迭代的思想來設(shè)計(jì)作業(yè),從前期一個(gè)基本的原型,到功能隨著知識點(diǎn)的推進(jìn)而不斷完善。每次作品的實(shí)現(xiàn),有助于激發(fā)學(xué)生的成就感,并且實(shí)踐過程中的操作內(nèi)容將有利于提高動手能力的培養(yǎng),一次親手完成的實(shí)踐任務(wù)將極大的達(dá)到人才培養(yǎng)的目標(biāo)。
(3)教師和學(xué)生的反饋互動,從而推動教學(xué)開展。敏捷開發(fā)非常強(qiáng)調(diào)開發(fā)者和用戶能經(jīng)?;樱鲝堄脩裟軌蛟陂_發(fā)過程中全程參與進(jìn)來,這個(gè)思路正好借鑒進(jìn)了教學(xué)改革中,教學(xué)中的師生互動可以很好的模擬這個(gè)過程。這使得“作品”的設(shè)計(jì)中,各項(xiàng)“需求”變化和“實(shí)踐反饋”能及時(shí)有效的讓教師動態(tài)管理,并投入到教學(xué)設(shè)計(jì)的改變當(dāng)中去。同時(shí),同學(xué)參與討論也能極大的提高溝通技能,這也是本專業(yè)學(xué)生所欠缺的。
(4)鼓勵持續(xù)集成。軟件設(shè)計(jì)中,一些新功能可能會出現(xiàn)于每個(gè)迭代周期即將結(jié)束時(shí)出現(xiàn),并集成到產(chǎn)品中去。學(xué)生在實(shí)踐過程中,一些突發(fā)的靈感會使得他們偶爾增加出新的模塊,這些變化可能到后期會對整個(gè)“產(chǎn)品”運(yùn)行帶來影響, 甚至導(dǎo)致后期運(yùn)行不順利。但其帶來的好處是顯而易見的,這樣能培養(yǎng)學(xué)生擁有一個(gè)積極的、有自我創(chuàng)新、能夠自我管理的學(xué)習(xí)品質(zhì),提高他們學(xué)習(xí)的主觀能動性。這同敏捷設(shè)計(jì)理念中的開發(fā)團(tuán)隊(duì)自我管理,以人為中心建立開發(fā)過程和機(jī)制、而非把過程和機(jī)制強(qiáng)加給別人的觀點(diǎn)是不謀而合的。
(1)課程體系銜接。軟件開發(fā)涉及相關(guān)知識內(nèi)容較多,不同對于企業(yè)人才需求可以有所側(cè)重,但部分課程的關(guān)聯(lián)性較強(qiáng),如果過于強(qiáng)調(diào)敏捷開發(fā),勢必會造成部分前置課程知識點(diǎn)學(xué)生接觸不夠,后續(xù)教學(xué)中需要再次復(fù)習(xí)的情況。這類問題需要教師在工作中更加注重關(guān)鍵點(diǎn)的溝通,同時(shí)教師與教師之前也要有敏捷開發(fā)中的“溝通”,良好的互動與溝通才能把一塊知識體系串聯(lián)起來,提高課堂理論教學(xué)的效率,減少部分知識點(diǎn)教學(xué)時(shí)間的重復(fù)性消耗。
(2)評價(jià)體系建立敏捷思維多樣性強(qiáng),特別是不同任課教師間允許采用不同語言和工具來設(shè)計(jì)不同的“作品”,多樣化的工具帶來的是評價(jià)標(biāo)準(zhǔn)不易統(tǒng)一,教師間也就難以相互幫忙指導(dǎo),這需要在評價(jià)過程中,明確目標(biāo)導(dǎo)向,即“產(chǎn)品”——軟件的自主設(shè)計(jì)為第一位的,對于學(xué)生的評價(jià)也應(yīng)遵循這一原則,以項(xiàng)目為導(dǎo)向,軟件的完成度及運(yùn)行效果作為課程評價(jià)。
敏捷方式本意是為了解決在軟件設(shè)計(jì)過程中存在的諸如低質(zhì)量、需求遺漏、延期帶來的挫折等。此類問題在筆者所處學(xué)校教學(xué)培養(yǎng)中依然存在,為此需要傳統(tǒng)方法中使用敏捷思維,去掉冗余的理論部分,知識點(diǎn),把學(xué)生的價(jià)值成為開發(fā)主體,通過課程中的講解以及課后的小組訓(xùn)練,改變教學(xué)中過多灌輸純理論的教學(xué)方式,追尋一個(gè)原則,在軟件類課程中,完整參與一次項(xiàng)目實(shí)踐開發(fā)好過一次深入的理論知識點(diǎn)學(xué)習(xí)。消除開發(fā)中的神秘感,增強(qiáng)同學(xué)的學(xué)習(xí)興趣,學(xué)生通過學(xué)習(xí)各種工具,在今后工作應(yīng)用中打下實(shí)踐基礎(chǔ),并留有理論基礎(chǔ),便于后續(xù)開發(fā)過程中,有需要再回過頭來加強(qiáng)理論知識點(diǎn)學(xué)習(xí),踐行敏捷理念。