李繪卓,唐 峻,范 勇
(西南科技大學 計算機科學與技術學院,四川 綿陽 621010)
基于敏捷測試的軟件測試實踐教學
李繪卓,唐 峻,范 勇
(西南科技大學 計算機科學與技術學院,四川 綿陽 621010)
分析軟件測試課程目前的現狀,提出基于敏捷測試的軟件測試課程教學方法,即以項目為驅動,采用測試驅動開發方法,將測試技術融入到開發實踐活動中,搭建與之適應的持續集成教學平臺。結合西南科技大學的教學實踐,說明教學效果。
敏捷測試;項目驅動;軟件測試實踐教學
軟件測試課程目前在很多高校都是作為軟件工程專業中獨立課程開設的,但課程內容、教學方法和手段方面的更新速度往往跟不上行業專業技術的發展。在軟件測試的教學上,各高校在理論及實踐上一直在探索新的教學經驗與方法,但軟件測試課程內容比較抽象,且與之相互影響的軟件工程相關課程較多,因此很難在教學內容及教學手段上形成有效共識。目前該課程在本科教學中主要存在的問題如下。
(1)測試技術實踐脫離軟件開發流程。傳統實踐教學中,往往是對理論和具體測試技術的講授,測試技術實踐往往脫離軟件開發流程,加之重開發輕測試的觀念,很容易讓學生失去對測試技術的學習動力及興趣。
(2)缺乏測試技術的系統化實踐。目前各高校都在軟件測試課程中進行教學改革,以改善重開發輕測試、重理論輕實踐[1]的現象為目標,但在實踐中依然存在重視專項技術的理論及實踐教學,而忽略了軟件測試理論作為軟件質量保障的重要環節,應貫穿于軟件開發過程。從而造成學生只知道具體技術,而不能將其應用于軟件開發過程中,在根本上意識不到軟件質量控制對軟件項目開發的意義。
(3)軟件測試工具多樣性,但缺乏綜合應用。測試工具是軟件測試實踐課程中的重點訓練要點,軟件開發過程中,往往涉及多種測試工具,但是由于高校實驗條件的匱乏,加之測試工具的復雜多樣,導致學生無法接觸和了解多種測試軟件的綜合應用。加之傳統實踐課程往往單獨對部分工具進行實踐,使得學生無法與企業的需求銜接。
2.1 教學實踐內容
軟件測試課程是一門實踐性非常強的課程,教學中應強調如何將軟件測試相關理論知識應用于軟件開發中,而不是簡單的知識點及理論的灌輸。為達到這一目標就不能將開發與測試分開,而是需要在軟件開發過程中,實踐軟件測試中的具體測試技術。通過這一手段使學生熟悉軟件測試在軟件生命周期中的重要性,并對軟件質量過程控制有一個全面的了解。為此,有必要在實踐課程中增設綜合實踐階段。在該階段中,以項目為驅動,引入敏捷測試。敏捷測試即不斷修正質量指標,正確建立測試策略,確認客戶的有效需求并得以圓滿實現和確保整個生產過程安全、及時發布最終產品[2]。基于此,在綜合項目實踐中,要強調測試驅動開發,通過在軟件開發各階段測試控制項目軟件質量,讓學生在項目開發實施過程中能主動地、自然地應用軟件測試理論。
在實踐操作過程中將測試課程分成兩個階段,第一個階段為基礎實踐階段,沿用傳統實踐方法,針對知識點建立獨立案例,使學生在實踐過程中掌握單項測試技術。期間強調測試用例的設計、黑盒測試及白盒測試的基本方法,同時關注測試工具的學習。第二個階段為綜合實踐階段,將軟件測試技術具體實施到項目開發中,采用敏捷開發測試模型,以測試驅動開發方式控制軟件質量。綜合實踐注重測試過程管理、測試與設計開發的融合,強調測試技術與測試工具的綜合應用。具體的教學重點及工具使用情況見表1。
綜合實踐部分采用敏捷開發測試模式(見圖1),將軟件測試技術持續應用在整個軟件開發過程中,并強調測試驅動開發,在不斷迭代中完善項目軟件設計與質量。整個過程中,讓學生掌握單元測試、集成測試、系統測試各環節的工作內容,在項目實踐的綜合應用中測試具體技術,并掌握測試工具的綜合運用。

表 1 測試課程內容安排表

圖1 軟件測試課程綜合實踐開發測試模型
2.2 綜合案例設計
在課程安排中,教學案例是課程設施的關鍵。案例分成兩個部分:基礎實踐部分,仍然以教程案例為主,并強調工具使用;在綜合實踐部分,需設計體量適中的項目,以此為驅動完成軟件測試技術的訓練。為了滿足學時的要求,案例應選擇不涉及太多應用領域的知識,而應使用簡單常見的應用架構。作為學生參考學習的基礎,案例內容應完整,包含詳細的系統功能描述和系統設計主要代碼結構,以及對典型功能及代碼的測試用例,具體包括單元測試、集成測試、系統測試等測試內容。
目前,西南科技大學實施的核心案例為基于Java免費框架Struts的小型網站,實踐教學中以《兒童數學練習網站》為例,網站以提供小學生的數學練習為目的,為小學生提供多種數學題型進行答題訓練,記錄并統計小學生的練習做題的情況。網站包括注冊、登錄、題型選擇、出題、做題、判題、查看做題歷史紀錄、退出登錄等功能。同時,在網站的數學題型中融入了軟件測試教程中的經典案例,三角形問題、閏年問題、下一日問題等作為小學生數學練習題型,以達到對測試基本知識點的強化訓練。該案例功能較為簡單,涉及的開發技術大多都在專業技術課程中已經學習,通過該項目可以讓學生實踐項目開發的全過程軟件及全過程測試。
2.3 綜合測試實踐平臺搭建
敏捷開發具有五個價值觀:溝通、簡單、反饋、勇氣、謙遜[7],而基于此價值觀,在綜合實踐過程中,簡化開發流程,強調學生組內溝通,并為學生的系統測試項目搭建相關的持續集成平臺。通過該平臺,可以控制學生項目開發測試流程,減少文檔的撰寫,讓開發測試透明化,方便教師全面掌握學生在項目開發中進行測試的全過程。平臺基于Jenkins持續集成工具,整合了多種測試工具及管理工具,工具列表見表1。通過該平臺可以實現項目的項目管理、版本管理、軟件自動編譯、單元測試、代碼規范檢查、質量報告生成、BUG跟蹤、網站發布等功能。通過該平臺應用,不是避免了傳統案例教學過程中對測試工具的單獨應用,而是實現對各類開發測試工具的綜合應用,做到對項目進行全過程質量管控,以及對項目軟件質量的全過程的監控。
通過該平臺,一方面教師可實時查看項目軟件的過程提交情況,杜絕項目的集中突擊、濫竽充數的現象;另一方面教師可查看持續構建下軟件各個階段時期下的軟件質量,關注學生對于軟件測試過程的控制,避免學生對于測試的一些錯誤認識和做法(有時間就多做沒時間就少做;重開發,測試技術含量低;測試是軟件開發最后階段做的工作等)。另外,也為教師提供更為全面的軟件開發測試過程的客觀數據,方便教師掌握測試開發進度,及時把控學生對相關測試理論的掌握情況。我院2016年度學生項目實踐數據如圖2所示。

圖2 2016年度學生項目實踐數據
平臺的搭建使用了大量的開源免費軟件,在使用過程需要進行腳本配置,如Ant、SonarQube下的各類檢查腳本等。由于腳本的編寫相關技術要求較高,為簡化教學,要求學生僅僅掌握基本原理,能做到直接應用即可,而腳本的編輯由教師編寫。為便于學生在整個軟件開發過程中能夠更好地使用該平臺,平臺搭建后發布在校園網內,讓學生在教學區及非教學區均能使用該平臺。平臺示意圖如圖3所示。

圖3 軟件測試技術網絡實踐平臺
2.4 實踐教學實施
實踐課程分兩個階段,在兩個階段的課程安排上也有些不同,各有其教學重點。
在基礎測試實踐部分,由學生獨立完成測試實踐內容,基礎實踐階段一般沿用傳統的教學方式,先對理論部分進行簡單復習,然后進行理論實踐,在實踐過程中以小程序或案例實施理論應用,在這期間強調工具的使用。綜合實踐部分由學生分組實踐(建議4~5人一組),要求設計開發一個可運行軟件,編寫代碼2 000行左右。以項目為驅動,按照圖1中的敏捷開發測試模型,在項目開發實踐過程中應用測試理論,且各小組項目均在持續集成開發平臺上完成。通過禪道完成項目管理、測試管理、BUG管理,并通過Jenkins完成持續集成。讓學生在測試驅動開發模式下,通過不斷迭代開發,完善項目軟件的設計和質量。
另外,傳統實踐模式往往采用小組模式進行,因此有不少學生總是懷疑自己能力不夠而處于一種旁觀者的位置,而技術能力比較強的學生又總會感覺憑他們的個人力量就能解決所有問題。所以,一個本應該由全體成員同心協力群策群力完成的課題就變成了少數幾個人表演的舞臺。在敏捷模式下,由于強調結對工作,并通過項目分析、軟件設計、測試用例設計、編碼、單元測試、集成測試、文檔撰寫等結對工作,實現平等互補、緊密合作[8]。通過結對可以有效地讓技術力量薄弱的成員完全擺脫過去那種旁觀者的位置,并能從合作中學到許多自己不知道和不了解的內容,從而鍛煉動手能力。同時,結對編程是一種有效改善溝通的方法,在無形中可以培養學生的合作精神,結對編程使雙方容易學習到別人的優點,意識到自己的缺點并加以改正,通過組內成員以及組與組之間的成員相互協作相互溝通及具體的合作,順利地建立起兩者之間良好的人際關系,從而在結對編程中達到提高綜合素質和能力的目的。
在軟件測試教學改革中,西南科技大學計算機科學與技術學院在壓縮已有的基礎實驗基礎上,引入了敏捷測試模型,作為對軟件測試綜合實踐的模型,搭建與之適應的持續集成教學平臺,讓學生在項目開發的實施過程中主動地、自然地應用軟件測試理論。該測試實踐教學模式已經實施了3屆,通過以上幾方面的改革和實踐,加強了軟件測試和其他軟件工程相關課程的聯系,增加了學生對于測試學習熱情,軟件測試技術的綜合應用能力也有了較大提高。
[1] 王云. 軟件測試課程教學探索與思考[J]. 軟件, 2015, 36(7): 129-131.
[2] 百度百科. 敏捷測試[EB/OL]. [2016-09-10]. http://baike.baidu.com/view/2401601.htm.
[3] 百度百科. 禪道項目管理工具[EB/OL]. [2016-09-10]. http://baike.baidu.com/view/7881832.htm .
[4] Lars Vogel.Apache Ant Tutorial[EB/OL]. (2014-03-02)[2016-09-10]. http://www.vogella.com/tutorials/ApacheAnt/article.html.
[5] 仇慧. 使用Jenkins實現軟件開發的持續集成[EB/OL]. (2014-11-10)[2016-09-10]. http://www.ibm.com/developerworks/cn/java/ j-lo-jenkinsintegrate/.
[6] 尹鵬. SonarQube3.6代碼質量管理實戰[EB/OL]. (2014-01-20)[2016-09-10]. http://www.ibm.com/developerworks/cn/opensource/ os-sonarqube/.
[7] 百度百科. 敏捷開發[EB/OL]. [2016-09-10]. http://baike.baidu.com/view/309926.htm.
[8] 李中華, 倪明濤. 敏捷開發模式在本科計算機科學與技術專業教學中的應用探索[J]. 科技信息, 2010(21): 649-650.
(編輯:史志偉)
1672-5913(2017)03-0155-05
G642
四川省教育廳教改項目“基于PDCA構建軟件專業人才工程教育體系”(14sjzl17);校級教改項目“基于TDD軟件測試實踐教學研究”(14xn0023);校級教改項目“項目和案例實踐考核導向下項目建設”(15xn0046)。
李繪卓,女,講師,研究方向為圖形圖像、軟件測試,huizhuoli@foxmail.com。