吳瀟雪,鄭 煒,慕德俊,郭艷靜
(1.西北工業(yè)大學 自動化學院,陜西 西安710072;2. 西北工業(yè)大學 軟件與微電子學院,陜西 西安 710072)
軟件測試是伴隨IT產(chǎn)業(yè)的發(fā)展而出現(xiàn)的新興工作崗位,不論目前還是將來,人才市場對軟件測試人才都有很大的需求量[1]。軟件測試課程教學存在的一些問題導致教學效果與期望目標相差較大,需要引入先進的教學管理理念和教學模式進行指導,進一步強化對學生自主能力和實踐能力的培養(yǎng)以適應市場發(fā)展的需要。
軟件測試課程是計算機軟件專業(yè)的一門新課程,該課程的實踐性很強,如果沒有實驗、實訓環(huán)節(jié)的支持,用傳統(tǒng)的灌輸式教學方式枯燥地講解測試理論和測試方法,會使學生產(chǎn)生抵觸和厭學情緒[2]。軟件測試課程使用的工具和測試的對象都是看不見、摸不著的軟件產(chǎn)品,實驗與實訓課程的組織和實施有較大的難度,容易造成實驗的隨意性。
目前大部分高校的計算機相關專業(yè)所開設的軟件測試課程的學習內(nèi)容主要包括軟件測試的基本概念,黑盒、白盒測試用例的設計技術和測試自動化工具的使用[3]。由于該課程學習過程過于短促,加上學習內(nèi)容拘泥于書本,所以在課程學習結束后,大部分學生對該課程的印象較淺,即使是學習特別用心的學生,所學到的也僅是書面的內(nèi)容,掌握的也只有軟件測試的基礎理論知識,極度缺乏實踐環(huán)節(jié)的經(jīng)驗,仍然無法圓滿完成一個軟件項目測試的實際工作。
隨著軟件工程領域研究的逐步深入,軟件開發(fā)涉及的技術也層出不窮,如大數(shù)據(jù)、云計算等。不斷涌現(xiàn)的軟件開發(fā)新概念、新方法、新技術和新工具給軟件測試課程的教學提出了挑戰(zhàn),傳統(tǒng)軟件測試教學方法顯得捉襟見肘。
敏捷開發(fā)又稱“輕型軟件工程”,是以人為核心的軟件開發(fā)思想[4],強調(diào)開發(fā)人員的溝通、可持續(xù)交付工作以及對軟件需求和開發(fā)問題的快速靈活響應。VersionOne公司2017年發(fā)布的第十一次敏捷調(diào)研報告顯示[5],Scrum以及Scrum與XP的混合模式是大多數(shù)組織的敏捷開發(fā)方法,約占68%以上。
Ken Schwaber和Jeff Sutherland 于1993年正式確立Scrum,這一過程已經(jīng)被Yahoo、Microsoft、谷歌、思科、華為、阿里巴巴等公司使用。許多團隊表示,Scrum極大地提升了團隊的產(chǎn)能和士氣,是一種有效的團隊工程控制方法。
Scrum定義團隊中的主要角色包括[6]:敏捷教練或項目經(jīng)理(確保團隊合理運作Scrum,并幫助團隊移除實施中的障礙);產(chǎn)品負責人(確定產(chǎn)品的方向和愿景,定義產(chǎn)品發(fā)布的內(nèi)容、優(yōu)先級及交付時間);開發(fā)團隊(包括美術、運維、測試等所有需要的專業(yè)人員)。
Scrum 流程[7]包括:①開始Scrum。由產(chǎn)品負責人列舉所有產(chǎn)品需求,根據(jù)全部需求明確優(yōu)先級,形成product backlog,開始Sprint 迭代。②Sprint迭代。每個Sprint 之前,先進行Sprint計劃會議。首先,由產(chǎn)品負責人和開發(fā)團隊一起回顧product backlog,彼此交換對此backlog 的看法。其次,由開發(fā)團隊從product backlog 中選擇本次Sprint提交完成的需求項,通常按照優(yōu)先級順序來選擇。最后,由開發(fā)團隊估計每個成員在此次sprint 中完成任務需要投入的時間。確定時間后,開發(fā)團隊將優(yōu)先級最高的需求項分解為單個任務,并記錄到Sprint backlog 文檔中。任務確定后,團隊成員自愿認領任務,需要考慮任務順序,估計每個任務的時間并確保每個成員工作負載平衡,然后順序完成各項需求。圖1是簡單的Scrum流程示意圖。
圖1 Scrum流程示意圖
將完成實際項目的測試任務作為用戶需求,以實現(xiàn)用戶需求為目標,以學生為核心,采用Scrum開發(fā)方法指導學習過程。課上,教師引導學生一起進行制定目標、領取任務、探討問題、分享經(jīng)驗;課下,學生自主進行知識評測、補充,分解問題,完成目標任務。學生的軟件測試理論知識評測和學習主要依托國家級MOOC——學堂在線,同時,通過開源服務Github以及華為云服務平臺實現(xiàn)信息共享和交流。
Scrum方法強調(diào)以人為本、協(xié)同工作,該模型中的每個角色都必須充分發(fā)揮其作用,才能保證最終目標的達成。在軟件測試課程的教學中,參與人員有任課教師、助教以及選擇該課程的全體學生,參與課程的學生以3~6人自由組合為多個小組,并選出一名小組組長。由于大多數(shù)學生都沒有Scrum模式的項目開發(fā)經(jīng)驗,所以在實施過程中需要特別安排有Scrum經(jīng)驗的老師以助教的身份首先進行Scrum開發(fā)方法及過程相關理論介紹以及過程跟蹤指導。各成員在基于Scrum方法的軟件測試課程教學模式中所承擔的角色以及對應的職責說明見表1。
以西北工業(yè)大學軟件測試課程為例說明Scrum教學模式實施流程,將Scrum 過程引入課程教學的核心要點是明確教學目標,該校課程的教學目標是通過教師引導與管理,學生在完成實際項目測試的過程中,能夠運用和掌握所學習的軟件開發(fā)原理和技能。課程周期為3個月,具體教學過程以每兩周為一個Sprint周期,整個教學過程大約由6個Sprint組成,具體實施過程如圖2所示。
1)制定課程目標任務。
軟件測試課程目標任務主要包括基礎理論、測試實踐以及提高能力3方面的任務目標,每方面的任務又可以細化為若干小的、可驗收的目標任務?;A理論目標包括軟件測試方法、類型、策略、黑盒測試、白盒測試、軟件測試過程管理、軟件測試的度量等知識的掌握。測試實踐的任務包含測試計劃設計與編寫、測試用例設計、測試執(zhí)行、缺陷跟蹤、回歸測試等任務,其中部分測試活動需要使用自動測試工具,如單元測試工具Junit,功能測試工具Selenium、UFT(unified functional testing)以及性能測試工具LoadRunner。提高能力的任務目標是指面向軟件測試領域熱點研究問題,引導學生積極探索最新的研究領域,及時了解最新的研究成果。
表1 Scrum模型角色及職責情況
圖2 基于Scrum方法軟件測試課程教學模式
每個Sprint開始前,教師會將本次Sprint要完成的目標任務進行描述并上傳到華為云平臺作為Backlog。
2)分組并確定各組Scrum Master。
根據(jù)參與課程的學生人數(shù),以便于溝通協(xié)作為原則以自由組合方式對學生進行分組,一般3~6人一組,并確定出第一個Sprint的Scrum Master(建議組織協(xié)調(diào)能力較強者),在后續(xù)的Sprint中,原則上建議Scrum Master輪流承擔,讓每個同學都能體驗到不同角色和職責。
3)各組任務分配。
各項目小組的任務分配首先采取自行選擇的方式,助理教師協(xié)助并進行任務監(jiān)控,盡可能減少各組任務之間的依賴。
4)各組Sprint過程實施。
任務目標確立后,各組進入各自的Sprint循環(huán)過程,包括Sprint計劃、任務拆分、組員任務認領和實現(xiàn)以及最后的回顧總結等活動。在進行具體任務實現(xiàn)之前,每個學生需要利用MOOC在線評測系統(tǒng)對自己的知識掌握情況進行評測,為了較好地完成任務目標,學生需要自行借助MOOC在線視頻以及查閱資料等方式進行知識的查漏補缺。
5)成功驗收交付。
任務完成之后,由Scrum Master在課堂上向全體同學和老師進行完成任務的展示和講解,由任課老師和助教老師評定完成情況是否達到目標。確認達成目標之后,組內(nèi)對本次Sprint中的優(yōu)點和不足進行總結記錄,一方面在下次Sprint中繼續(xù)推廣或改進;另一方面,在Step5的全體回顧會議中有重點地進行分享和借鑒。
6)全體回顧總結。
該活動在每個Sprint最后進行。通過老師引導,各組的Scrum Master對組內(nèi)回顧會議的結論進行分享,全體同學參與討論、溝通與補充的方式,吸收借鑒各組Sprint過程中好的方法,改進不足之處,達到互相促進、共同提高的目的。另外,教師對學習成果進行分析歸納,并可聯(lián)系實際,對當前知識點進行深化、遷移與提高。
基于Scrum方法的軟件測試教學模式,將敏捷思想應用到軟件工程教學中,將課程教學目標轉化為軟件工程項目目標,將學習過程轉化為一次次的項目實踐過程。學生在教師的引導下,應用已學到的軟件工程理論知識來達成目標,激發(fā)了學習的興趣,加快了對目標教學知識掌握的速度和理解的深度,對其他軟件工程過程理論知識的鞏固和實踐使學生深刻理解并牢固掌握了基本思想和方法。課程中選擇實際項目測試任務作為實踐項目,學生在獲得理論知識的同時,也獲得了實際項目經(jīng)驗。
除了傳播知識之外,培養(yǎng)學生健康、豐富的個性也是高校教學的目標之一。個體主體性是個人生活的靈魂,也是健全、公正、民主的社會建立的基石。基于Scrum的教學模式尊重個體,在該過程中,獨立思考與團隊協(xié)作并重,鼓勵學生從多維度探索不同方法解決問題。實際項目的引入和完成任務的明確化,督促學生為了完成任務積極主動學習所需知識,培養(yǎng)了學生自主學習和研究的能力。另外,學生通過承擔不同角色,培養(yǎng)了獨立思考、發(fā)現(xiàn)問題和解決問題的能力。
基于Scrum模式的教學方法,課程實施形式豐富、活動真實、關注每個學生的想法和觀點,也催生了多個教學科研成果。學生在跟老師以及同學之間的相互溝通中獲得了專業(yè)知識、提高了能力和素養(yǎng),如在2016全國軟件測試大賽中,學生獲得國家一等獎1個、二等獎1個、三等獎9個;在美國數(shù)模競賽中獲得一等獎1個、二等獎1個。老師也從學生豐富的思想中得到啟發(fā),促進教學和學術創(chuàng)新,如任課教師主講的軟件測試課程獲得國家級慕課立項,即全國工程教指委2016年第一批重大在線課程立項,課程于2017年在國內(nèi)最大的慕課平臺——在線學堂正式上線,選課人數(shù)超過2 000人。
軟件測試課程的教學必須要緊跟技術發(fā)展的步伐,基于Scrum方法的軟件測試教學模式有利于教學的開展,其簡單、易于使用的特點使其推廣使用有了便利的條件,在實踐中取得的良好效果也證明了該模式的有效性。在后續(xù)的教學過程中,教師可嘗試將該教學模式推廣到其他課程的教學中。
[1]劉超. 關于“軟件工程”課程體系的基本架構及課程系列設置的探討[J]. 計算機教育, 2009 (21): 22-26.
[2]中國工程教育認證協(xié)會秘書處. 工程教育認證工作指南(2013版)[EB/OL]. (2014-11-16)[2017-12-13]. http://www.clocin.com/p-961961086.html.
[3]鄭煒. 軟件測試[M]. 西安: 西北工業(yè)大學出版社, 2011: 5-10.
[4]Arora R, Sondhi S. An agile approach for engaging students in research and development[C]// Xsede16 Conference on Diversity,Big Data, and Science at Scale. New York: ACM, 2016: 51.
[5]Mahnic V. A capstone course on agile software development using scrum[J]. IEEE Transactions on Education, 2012, 55(1): 99-106.
[6]尹華, 王志堅. 基于Scrum敏捷開發(fā)的軟件實訓設計[J]. 計算機教育, 2016 (6): 65-69.
[7]徐建軍, 董威, 譚慶平, 等. 基于Scrum敏捷開發(fā)模型的軟件工程實踐課程探索[J]. 大學教育, 2015(4): 115-116.