潘麗麗 王天鍔 秦姣華



軟件測試教學研究與實踐*
摘 ?要: 針對軟件測試課程覆蓋的軟件知識領域廣泛,專業性和實踐性非常強的特點,分析當前軟件測試課程教學和實踐教學聯系不夠緊密且可操作性比較低的問題,提出以培養具有軟件測試能力人才為目標,理論為實踐服務的教學方法。圍繞軟件測試教學大綱,以軟件測試課程的理論教學為基礎,設計并實現了一個軟件測試實驗教學系統,該系統在實踐教學過程中取得了較好的效果。
關鍵詞: 軟件測試; 課程教學; 實踐教學; 實驗系統
中圖分類號:G642 ? ? ? ? ?文獻標志碼:A ? ? 文章編號:1006-8228(2015)07-57-04
Research and practice of software testing teaching
Pan Lili1, Wang Tian'e2, Qin Jiaohua1
(1. Computer and Information Engineering College, Central South University of Forestry and Technology, Changsha, Hunan 410004, China;
2. The Commission Institute, Hunan Electric Power Transmission and Substation Construction Company)
Abstract: Software testing is an elective professional course for software engineering, information security and other computer-related majors. The course covers extensive professional knowledge, and requires strong professionalism and practicality. Based on these characteristics and requirements of syllabuses, this paper explores theoretical and experimental teaching mode for the course to train student to obtain the software testing capabilities. It is proved by the teaching practice that the teaching mode achieved a good result.
Key words: software testing; undergraduate teaching; practice teaching; practice system
0 引言
軟件測試是軟件工程領域的一個專業方向,同時也是軟件開發過程的必要活動之一,是發現軟件錯誤的重要手段,是軟件工程專業、信息安全專業等計算機相關專業的選修課程。從理論教學的角度而言,軟件測試具有知識點豐富,測試方法眾多,專業術語多的特點;從實踐教學的角度而言,軟件測試具有實驗內容龐雜,測試工作量巨大,測試文檔繁多等特點。因此,在軟件測試課程教學過程中,必須注重理論與實踐相結合,采取有效的教學方法,精選教學內容,才能達到軟件測試教學大綱的要求,真正幫助學生理解軟件測試概念和測試方法,掌握常用的測試工具。
1 軟件測試課程在教學過程中面臨的困難
軟件測試課程是一門理論性和實踐性都非常強的課程,設置該課程的目的是幫助學生理解軟件測試的概念,掌握軟件測試的基本方法,學習使用一些流行的軟件測試工具。在講授這門課程時,不僅要求老師要有較高的軟件測試理論水平,同時也要有較高的軟件測試實踐經驗,并要求學生具備一定的編程能力和其他專業課程知識基礎,如:離散數學、軟件工程、數據庫等。但由于軟件測試課程較其他專業課程而言起步較晚,被重視程度一般,且專業軟件測試課程書籍較少,特別是軟件測試實驗書籍較為缺乏,因此,軟件測試課程在實際的教學過程中存在諸多難點[1]。
1.1 師資力量弱
軟件測試作為一項專業技能,它的起點要求比較低。作為軟件工程的專業研究領域,它一直不被研究者所青睞。很多高校缺少專門從事軟件測試領域研究,并且有軟件測試實踐經驗的老師。在這種教學師資較為缺乏的情況下,軟件測試課程的教學無論是理論教學的深度,還是實踐教學的操作性都較難滿足教學的要求,最終的教學效果不好,學生無法理解軟件測試的概念,對軟件測試方法掌握程度不夠,對基本的軟件測試工具也接觸較少。
1.2 重視程度不夠
軟件測試作為一個職業,在國外的軟件公司都有專門的軟件測試團隊,例如微軟,IBM,軟件測試人員與軟件開發人員的比例大概是2:1,而國內,由于軟件行業還正處于向規范化的方向發展,許多軟件公司,并沒有專門的軟件測試人員,很多測試工作往往由軟件開發人員承擔。這在一定程度上使得社會對軟件測試的職業化方向不是非常認可,降低了師生對該門課程的重視程度。
1.3 知識點多,覆蓋面廣
軟件測試是一門專業知識覆蓋面較為廣泛的課程,它涉及數學、編程、計算機科學、軟件工程等眾多知識領域,而不僅僅局限于軟件測試課程本身的內容。正是由于軟件測試課程中廣泛的知識體系,對任課老師和學生都提出了更高的要求。
就軟件測試方法而言,有多種不同的分類[2]。如基于程序是否運行的分類(靜態測試和動態測試),動態測試根據測試用例涉及是否依據程序內部結構又分為黑盒測試和白盒測試。根據軟件不同特性和方面的測試可以將軟件測試分類為:負載測試、壓力測試、性能測試、安全測試、可用性測試等[3]。這么多測試方法都有各自的概念、功能特點和優缺點、使用步驟和測試工具等。在有限的課時內講授這么多知識點,是較為困難的。
1.4 測試工具價格高,實驗平臺搭建困難
軟件測試工具多,范圍廣,不容易掌握[4]。流行的軟件測試工具價格高,軟件測試實驗平臺建設較為困難。軟件行業常用的軟件測試工具有:TestDirector,LoadRunner,WebRunner等等,這些測試工具對于軟件測試工程的學習而言都是大有益處的,如果想要在實驗教學中將每一個測試工具都使用到,是比較困難的。在教學的過程中老師可以重點突出,選擇1-2個測試工具進行操作講解。
2 教學模式探討和分析
針對目前軟件測試課程在實際教學過程中存在的難點,結合已有的軟件測試科研經歷[5-8]和教學經驗,對軟件測試教學模式進行深入探討,并在教學實踐中取得了較為滿意的效果,本文將具體從師資隊伍建設、課程安排、課程內容、教學方法和實驗平臺五個方面進行闡述。
2.1 師資隊伍專業化
軟件測試是一門專業性較強的課程,因此對該門課程的任課老師的崗位能力提出了新的要求:具有軟件測試科研經歷,具備良好的語言編程能力,具有企業軟件測試實踐經驗。在開設這門課程之前,要先確保任課老師有較高的軟件測試理論水平和實踐能力。
2.2 合理規劃課程安排
現在流行的軟件開發模型如V模型,W模型,軟件測試作為其中的一個活動貫穿整個軟件開發過程始終,但作為一個選修專業課程,它在什么時間開設是需要規劃的。軟件測試課程涉及的知識領域較廣,因此該門課程適宜在一些專業必修課學習結束之后開設。軟件測試中涉及到面向對象的編程思想、數據庫、網絡安全等方面的知識,覆蓋的課程有C++/JAVA編程、數據結構、離散數學、計算機網絡、數據庫。同時需要對軟件開發的規范化過程有所了解,相關的課程有:軟件項目管理、軟件工程、UML設計等。
2.3 課程內容模塊化
軟件測試課程內容豐富,知識點很多,因此有必要根據專業要求,對授課內容進行細致的選擇。聶長海教授在文[2]中對軟件測試的知識體系進行了詳細的描述,其中采用了三維一體圖對軟件測試的概念進行了生動的闡述,即軟件測試概念包括三個層面的含義:軟件測試的目標、軟件測試的活動和軟件測試的原則。軟件測試的分類是相當的豐富,結合軟件測試人才專業化要求,對課程內容進行模塊化劃分,授課過程層層深入,具體分為三大模塊:軟件測試基礎理論模塊,面向對象軟件測試模塊和軟件測試管理模塊。
軟件測試基礎理論模塊包括:軟件測試概念、白盒測試、黑盒測試、單元測試、集成測試、系統測試和驗收測試、回歸測試、性能測試、兼容性測試、可用性測試、安全性測試和自動化測試。
面向對象軟件測試模塊包括:面向對象軟件測試基礎、測試分析與設計、類測試、基于狀態的軟件測試技術、面向對象交互測試、面向對象系統測試,基于Web應用的軟件測試技術。
軟件測試管理模塊包括: 測試文檔、測試計劃、測試管理、測試小組的管理。
2.4 案例教學為主,測試工具為輔
案例教學法是一種經典的教學模式,是現代教育教學的一種重要手段。案例教學法強調教師根據培養目標、教學目的和教學內容的需要,運用典型案例,創設情景,讓學生進入角色,積極思考、主動探索。
軟件測試課程的案例選取非常關鍵。選取案例要考慮到教學時間、教學效果以及學生的接受程度,選取原則是:形式簡單、容易理解,覆蓋盡可能多的知識點。例如在白盒測試中選擇三角形問題,黑盒測試中選擇工資扣稅問題,單元測試中選擇四則運算和棧運算,基于狀態的測試中選擇電梯問題等等。這些都是學生熟悉,容易理解的問題,且涉及的知識點也較為豐富,能有效地幫助學生理解軟件測試理論。
雖然案例教學有效地提高了教學效果,但是對豐富的軟件測試知識點而言是不夠的,還需在課堂教學過程中借助專業的軟件測試工具或測試插件,如:JUnit,CUnit,QuickTest,LoadRunner等,采取小組方式進行學習、討論和解決問題。
2.5 搭建友好實驗平臺,精選測試實驗內容
軟件測試課程教學效果是否達到了教學大綱的要求,滿足了人才培養的目標,其中實驗教學是一個非常重要的環節。基于教學大綱要求,結合當前實用的軟件測試工具,搭建軟件測試實驗平臺主要圍繞六個測試模塊展開。
2.5.1 白盒測試
給出源程序代碼和流圖,依據測試覆蓋標準構建測試用例,執行測試,返回測試結果。覆蓋標準主要是:語句覆蓋、判定覆蓋、條件覆蓋、條件判定組合覆蓋、數據流覆蓋、路徑覆蓋。
2.5.2 黑盒測試
給出用例需求說明,依據等價類劃分、邊界值分析、因果分析法、隨機數據選擇法構建測試用例,執行測試,返回測試結果。
2.5.3 單元測試
單元測試(Unit Testing),是指對軟件中的最小可測試單元進行檢查和驗證。一般來說,對不同的編程語言其最小測試單元的含義有所不同,如C語言中單元指一個函數,Java單元指一個類,圖形化軟件中單元可以指一個窗口或一個菜單等。因此,單元就是人為規定的最小的被測功能模塊。單元測試是在軟件開發過程中要進行的最低級別的測試活動,軟件的獨立單元將在與程序的其他部分相隔離的情況下進行測試。
2.5.4 性能測試
給定一個Web應用程序,通過模擬實際用戶的操作行為和實施實時性能監測,幫助用戶發現問題,進行腳本錄制/定制過程、參數化設置、數據關聯,查看測試日志,分析測試結果。
2.5.5 自動化測試
使用測試工具,給定一個面向對象的軟件,對其進行腳本記錄/定制過程、選擇測試數據驅動測試、構建可重用的測試框架、創建功能測試項目等完成自動化測試。
2.5.6 測試管理
通過一個整體的應用系統中集成了測試管理的各個部分,包括需求管理,測試計劃,測試執行以及錯誤跟蹤等功能,極大地加速了測試過程。程序的需求驅動整個測試過程,通過提供一個比較直觀的機制將需求和測試用例、測試結果和報告的錯誤聯系起來,從而確保能達到最高的測試覆蓋率。
3 軟件測試實驗系統
本實驗教學系統是專為軟件測試技術本科教學以及研究生教學服務的實驗教學平臺。實驗內容包括基礎實驗和課程設計兩大部分,其中課程設計包含:白盒測試、黑盒測試、單元測試、性能測試、功能測試以及測試管理六個方面。課程設計則是以實際的軟件項目為依托,讓學生用已有理論知識、測試方法、測試工具對軟件項目進行測試。
圖1 ?軟件測試實驗系統界面
圖2 ?軟件測試實驗系統實驗案例指導書界面1
圖1展示了整個軟件測試實驗教學系統的實驗測試內容,包括基礎實驗和課程設計兩部分,讓學生由淺入深、由局部到整體對軟件測試技術進行學習和掌握。圖2和圖3顯示了一個具體的軟件測試實驗指導書中的部分內容。學生完成實驗后,可以通過實驗參考答案比對自己的實驗是否正確,如圖4所示。整個實驗教學系統,環環相扣,由淺入深,局部到整體,確保學生在軟件測試實驗教學平臺中能夠學習并加深對軟件測試的理解和應用。
圖3 ?軟件測試實驗系統實驗案例指導書界面2
圖4 ?軟件測試實驗系統實驗案例指導書參考答案界面
4 教學效果評價
經過多年的軟件測試課程教學,并經歷了教學方法的逐步改進,在軟件測試課程的教學上取得了較好的成績。教學效果主要體現在學生對理論知識的掌握和實際操作能力,具體從三個方面進行評價。
4.1 學生掌握軟件測試知識更加系統和具體
對于初學軟件測試的學生而言,一般都是想當然的認為程序編譯正常,運行程序的基本功能就默認為程序通過了測試。而進入到軟件測試課程的學習才體會到軟件測試領域的知識如此之豐富,方法如此之多,特別是軟件測試中涉及到各種分類就很容易讓初學者混淆。面對這種情況,作為教師需要在課堂上舉一反三,通過具體的知識講解和實例演示將軟件測試知識滲透至教學的整個過程。
4.2 學生運用測試方法設計測試用例
在軟件測試教學初期,學生設計測試用例是比較率性而為的,特別是測試數據的選擇和測試路徑的選擇等,對于軟件測試用例集的完整性缺乏清晰的概念和理解。通過系統深入的學習后,對于一個完整的軟件或部分軟件模塊、組件等,學生能夠應用白盒測試方法/黑盒測試方法設計測試用例,能夠明白一個完整覆蓋的測試用例集對于軟件測試的重要性,懂得測試方法并不是獨立的,而是互為補充,互相依賴的。
4.3 學生運用測試工具進行軟件測試
本課程教學中主要選擇了LoadRunner、Quicktest Test Director作為軟件測試工具。學生應用測試工具,對一個具體軟件進行性能、功能等方面的測試,以及測試管理,體會軟件測試工具為軟件測試帶來的自動化、優越性及方便性等諸多優勢。
5 結束語
本文針對軟件測試課程的特點和教學中存在的問題,結合自身研究經歷和教學經驗,提出一種實踐性和操作性都可行的教學方法。該方法主要從師資力量、教學安排、教學內容模塊化、案例教學法以及實驗平臺搭建等五個方面著手,提出師資隊伍培養與專業知識相結合,在課程逐漸深入和擴展的基礎上開展軟件測試教學,將教學內容模塊化,借助軟件測試工具和測試插件,主導案例教學,根據理論教學內容,搭建實驗教學平臺展開實驗教學。在實際教學過程中運用該方法,取得了較好的教學效果,有效地培養了學生軟件測試能力。下一步將進一步加強與企業的合作,把產學研人才培養模式推向深入。
參考文獻:
[1] 唐春玲,胡方霞,沈敏.軟件測試技術課程的教學改革與研究[J].科技
信息,2013.5:35-36.
[2] 聶長海.關于軟件測試的幾點思考[J].計算機科學,2011.38(2):1-3
[3] 郁蓮.軟件測試方法與實踐[M].清華大學出版社,2008.
[4] 陳艷.基于項目驅動的軟件測試課程教學探索[J].計算機時代,
2013.3:62-66
[5] Lili Pan, Tiane Wang, Jiaohua Qin, et al. A Test-Suite Reduction
Based on DU-Chain Requirements Optimization. Journal of Convergence Information Technology,2012.7(21):567-575
[6] Lili Pan, Tiane Wang, Jiaohua Qin. Research on Infeasible
Branch-Based Infeasible Path in Program. International Journal of Digital Content Technology and its Applications,2011.5(5):166-174
[7] 潘麗麗,鄒北驥,王天鍔,陳浩.基于關鍵分支的不可行路徑確定方法[J].
北京工業大學學報,2010.36(5):716-720
[8] Lili Pan, Beiji Zou, Lei Wang, et al. A Test-Suite Reduction Based
on Multi-objective Decision Making[J]. Chinese Journal of Electronics(電子學報英文版),2007.16(3):454-458