蘇春芳 李娜
[摘 要] 針對軟件測試課程知識覆蓋面廣、操作實用性強、行業(yè)面向性強的特點,在深入調(diào)研了軟件行業(yè)對軟件測試人員要求的前提下,提出基于敏捷開發(fā)模型的軟件測試教學(xué)改革方案,目的在于讓學(xué)生熟悉軟件企業(yè)普通應(yīng)用的開發(fā)模型以及軟件測試的流程與方法,在提高學(xué)生專業(yè)學(xué)習(xí)能力的同時,重點培養(yǎng)學(xué)生綜合應(yīng)用知識、提出問題、解決問題的能力,從而提升學(xué)生在職場中的競爭能力。
[關(guān) 鍵 詞] 瀑布模型;敏捷開發(fā)模型;Scrum;用戶故事
[中圖分類號] G712 [文獻(xiàn)標(biāo)志碼] A [文章編號] 2096-0603(2016)27-0104-02
軟件質(zhì)量問題一直是IT(Information Technology)行業(yè)關(guān)注的重要問題,不斷提升軟件產(chǎn)品的質(zhì)量,成為軟件企業(yè)研究的重要課題。瀑布模型(watefall)曾經(jīng)是軟件行業(yè)普遍采用的一種開發(fā)模型,在整個開發(fā)過程中雖然也要求測試人員和開發(fā)人員相互合作,但存在一定的階段性。軟件測試一般發(fā)生在需求分析、設(shè)計、編碼階段之后,當(dāng)開發(fā)人員完成大部分的工作任務(wù)以后,測試人員才正式參與項目,軟件測試人員在項目前期僅僅是做一些測試前的準(zhǔn)備工作而已。即便軟件公司擁有一支強大軟件測試團(tuán)隊,也沒有辦法維持一個較低的、比較理想的bug率。近年來,軟件行業(yè)開始認(rèn)同一種新的開發(fā)模式——敏捷開發(fā)模式(Agile software development),隨之而來的是軟件測試行業(yè)也正在經(jīng)歷一場巨大的變革。敏捷開發(fā)模型將軟件開發(fā)與測試融為一體,從而改變了軟件測試人員與開發(fā)人員之間時間、空間上的界限。敏捷開發(fā)更強調(diào)“項目中的每一天都不例外”,每一次軟件迭代,不僅包含開發(fā)的任務(wù),也包含測試的任務(wù),每一次成功的迭代都是團(tuán)隊共同合作的產(chǎn)物。為了適應(yīng)軟件行業(yè)的這種變化,本文深入研究了敏捷開發(fā)模型scrum,探索了軟件測試課程的設(shè)計與教學(xué)模式。
一、課程總體設(shè)計
敏捷軟件開發(fā)是一個逐步迭代的過程,將整個軟件產(chǎn)品分為若干個迭代(Iteration),持續(xù)不斷地向客戶提交有價值的軟件,當(dāng)所有的迭代結(jié)束時,整個產(chǎn)品的開發(fā)任務(wù)就完成了。產(chǎn)品開發(fā)的每一輪迭代,都要向客戶提交可以使用的產(chǎn)品,從某種意義上來說,每一輪迭代過程都是一個完整的軟件開發(fā)過程,包括設(shè)計、編碼、測試等過程。
鑒于敏捷開發(fā)的特點,軟件測試的總體設(shè)計不僅要體現(xiàn)迭代的過程,還要兼顧軟件測試的知識結(jié)構(gòu),主要從教學(xué)單元的劃分、教學(xué)內(nèi)容的設(shè)計、教學(xué)方法等幾個方面對軟件測試課程進(jìn)行總體設(shè)計。
(一)模塊任務(wù)設(shè)計
敏捷開發(fā)模型scrum將軟件產(chǎn)品的開發(fā)過程定義為一個不斷迭代的過程,因此,教學(xué)的項目應(yīng)該具有可拆分、模塊化的特點,本課程選取學(xué)生較為熟悉的“教學(xué)管理系統(tǒng)”作為教學(xué)項目,貫穿于整個教學(xué)中。該項目由本校師生共同開發(fā),目前正在使用過程中,教學(xué)項目選擇對“教務(wù)管理系統(tǒng)”進(jìn)行測試,不僅具有實際應(yīng)用價值,而且還能夠增加學(xué)生的成就感,從而激發(fā)學(xué)生的學(xué)習(xí)興趣。
教學(xué)單元的任務(wù)設(shè)計充分體現(xiàn)scrum迭代的特點,通常情況下,一個教學(xué)單元對應(yīng)一個scrum的一輪迭代,每個教學(xué)單元都是一個完整的任務(wù)模塊,而各個教學(xué)單元之間又是一個相對獨立的、可延續(xù)的整體。遵循由簡單到復(fù)雜、可迭代化、可拆分化的特點,將“教務(wù)管理系統(tǒng)”劃分為用戶認(rèn)證、組織管理、學(xué)生管理、課程管理、成績管理五大教學(xué)單元,教學(xué)單元之間是一種高內(nèi)聚、低耦合的關(guān)系。
由于敏捷開發(fā)的每一輪迭代都包含若干個用戶故事,通常在迭代會議結(jié)束之后,每個項目小組都會領(lǐng)取任務(wù),因此在本門課程的設(shè)計中,借鑒軟件企業(yè)的這種做法,將所有的特性分解成多個用戶故事卡(Story Card),每一個用戶故事就是教學(xué)單元中的子任務(wù),下面以成績管理為例,說明本門課程的教學(xué)任務(wù)設(shè)計。在以往教學(xué)中,存在教學(xué)任務(wù)劃分粒度較大、任務(wù)描述不清晰的特點,本文借鑒scrum用戶故事撰寫的原則,在任務(wù)的命名中就明確了誰是用戶、能做什么,這樣使得任務(wù)的描述更準(zhǔn)確化、清晰化,考慮到本門課程的連續(xù)性、完整性,本文將用戶故事名作為任務(wù)名。
(二)教學(xué)環(huán)節(jié)設(shè)計
軟件測試這門課程的理論知識主要是指軟件測試方法、技巧,在以前的課程教學(xué)中,我們以工作任務(wù)為導(dǎo)向來組織教學(xué),將各個知識點融入各個教學(xué)任務(wù),取得了良好的教學(xué)效果,本門課程繼續(xù)延用這種方法。同時由于scrum的每一輪迭代都會使軟件測試的任務(wù)成倍的增加,給軟件測試也帶來了前所未有的壓力,也正由于這一特點,才能保證測試的完備性,為了解決這個問題,本文在教學(xué)環(huán)節(jié)中增加了自動化測試的環(huán)節(jié),加大自動化測試的比重。增加自動化測試的原因在于測試人員不僅要對上一輪的測試進(jìn)行回歸測試,還要對新的任務(wù)進(jìn)行測試,如果沒有自動化測試技術(shù)作為保障,測試人員是無法完成相應(yīng)測試任務(wù)的,因此,在教學(xué)環(huán)節(jié)中,增加回歸測試環(huán)節(jié)是必需的。
本門課程的教學(xué)環(huán)節(jié),不僅增加了回歸測試環(huán)節(jié),而且還增加了團(tuán)隊互動環(huán)節(jié)。以往軟件企業(yè)中的測試人員與開發(fā)人員雖然同屬于某一個項目組,實際上他們的工作是相對獨立的,他們之間的合作也僅僅發(fā)生在項目開發(fā)后期。由于在scrum中,項目組的劃分是以用戶故事為依據(jù),以功能模塊為基礎(chǔ),因此項目組就變成了開發(fā)人員與測試人員的結(jié)隊,為了讓學(xué)生適應(yīng)軟件行業(yè)的這種變化,在教學(xué)中增加了團(tuán)隊討論環(huán)節(jié),創(chuàng)造團(tuán)隊合作的機會,從而培養(yǎng)團(tuán)隊成員溝通、交流的能力。
二、課程單元設(shè)計
軟件企業(yè)不僅要求測試人員具備測試知識、掌握一定的測試技巧,而且更看重軟件測試人員的團(tuán)隊協(xié)作能力,為了培養(yǎng)學(xué)生以上的能力,本文深入探索了單元設(shè)計的思路與方案。在教學(xué)單元中不僅要講解軟件測試的理論知識,還要搭建測試人員與開發(fā)人員緊密合作的環(huán)境,從而培養(yǎng)團(tuán)隊成員之間的溝通與合作能力。單元設(shè)計包括對情景任務(wù)的設(shè)計、團(tuán)隊組成與合作形式的設(shè)計以及教學(xué)方法的設(shè)計。
(一)情景任務(wù)設(shè)計
在以往的教學(xué)中,引入任務(wù)部分常常以描述一個測試任務(wù)的形式提出,通過老師的講解,由學(xué)生自己來提煉,往往有些學(xué)生在任務(wù)不明確、技術(shù)要求不清楚的情況下開始學(xué)習(xí),從而導(dǎo)致學(xué)生不能全身心地投入課堂學(xué)習(xí)。為了能夠在引入任務(wù)環(huán)節(jié)給學(xué)生一個清晰、明確、直觀的認(rèn)識,本課程采用用戶故事(Scrum User Stories)方式來引入任務(wù)。用戶故事往往包含三個部分,清晰明確地提出“終端用戶是誰,用戶想要什么,結(jié)果是什么”,常常使用簡明、精確的語言描述一個具體的功能,例如,引入“學(xué)生查詢成績”這個任務(wù)可采用如下表所示的形式,這樣的任務(wù)描述不僅明確告訴學(xué)生本次課的任務(wù),而且還能夠避免歧義的發(fā)生,以嚴(yán)謹(jǐn)、科學(xué)的方式傳達(dá)信息。
(二)團(tuán)隊組成與合作形式
為了增加教師與學(xué)生、學(xué)生之間的互動,座位的排列通常按照教學(xué)內(nèi)容的特點,分別可以采用全班、內(nèi)外圈、小組、角色扮演、意見軸等形式排列,目的在于增加學(xué)生在做中學(xué)、教別人的機會。
團(tuán)隊討論形式主要采用角色扮演的形式,讓學(xué)生通過扮演開發(fā)人員和測試人員,分別完成各自的設(shè)計與測試的任務(wù),在此基礎(chǔ)上,采用辯論或交叉提問的形式,增加開發(fā)與測試人員的互動,讓學(xué)生自己發(fā)現(xiàn)設(shè)計不合理的部分。經(jīng)過2分鐘各自的修正后,項目組提交一份完整的任務(wù)書,經(jīng)過以上的討論環(huán)節(jié),使得整個任務(wù)的設(shè)計、開發(fā)、測試都是集團(tuán)隊成員的智慧于一體,從而改變了瀑布模型中設(shè)計由開發(fā)人員獨立完成的現(xiàn)象,減少了設(shè)計階段產(chǎn)生bug的幾率,同時潛移默化地培養(yǎng)了學(xué)生團(tuán)隊合作的能力。團(tuán)隊討論環(huán)節(jié)總時間一般控制在10分鐘之內(nèi)。
(三)知識點組織設(shè)計
緊緊圍繞用戶故事,設(shè)計所要講解的知識點,以“查詢不及格的課程成績”為例來說明知識點的組織。用戶想要看到的是自己成績低于60分的課程成績,而不是所有的成績,60分、59分是兩個比較重要的邊界值。測試“查詢不及格課程成績”這一功能最有效的方法是邊界值分析法,因此本節(jié)的理論知識主要包括邊界值方法、等價類劃分方法、回歸測試,除此之外,還要增加自動化測試。在敏捷開發(fā)中自動化測試是測試人員必不可少的一項技能,每輪迭代都在增加新的功能,而迭代周期的時間相對固定,隨著時間的推移,已實現(xiàn)的功能越來越多,這就要求越來越多的回歸測試在時間相對固定的周期內(nèi)完成。如果沒有自動化測試,這是不可能完成的任務(wù)。如何培養(yǎng)學(xué)生在有效的時間內(nèi),完成比以往多幾倍的測試任務(wù),是本門課程考慮的另一個重點,鑒于以上原因,在知識點設(shè)置中增加自動化測試部分,對學(xué)生進(jìn)行遞進(jìn)式強化訓(xùn)練。
總之,軟件測試課程是計算機軟件專業(yè)的必修課程,重在培養(yǎng)學(xué)生的軟件測試能力,滿足軟件行業(yè)對測試人員的需求。為了適應(yīng)當(dāng)前軟件行業(yè)開發(fā)模式的變化,基于敏捷開發(fā)模式scrum,本文提出針對軟件測試課程的教學(xué)改革方案,對課程的總體設(shè)計、單元教學(xué)內(nèi)容與教學(xué)方法進(jìn)行了深入探索與研究,尤其在團(tuán)隊合作內(nèi)容、形式方面進(jìn)行了深層的探索,通過一年多的實施情況,達(dá)到了預(yù)期的目標(biāo),畢業(yè)生深受用人單位歡迎,接下來我們將再接再厲努力探索互動教學(xué)技巧,優(yōu)化翻轉(zhuǎn)課堂教案的設(shè)計。
參考文獻(xiàn):
[1]王敏.基于Scrum敏捷開發(fā)的軟件過程管理研究[D].昆明理工大學(xué),2010:20-22.
[2]任波.基于敏捷開發(fā)的游戲項目集成管理系統(tǒng)的迭代開發(fā)[D].上海交通大學(xué),2006:23-24.
[3]王愛景.敏捷開發(fā)中軟件架構(gòu)的設(shè)計與實踐[D].河南大學(xué),2015:30-34.