摘要:很多軟件測試課程實(shí)踐部分是讓學(xué)生使用一些過時(shí)的工具對一些小型的例子程序進(jìn)行測試,學(xué)生收獲不大。文章描述軟件測試課程中實(shí)踐項(xiàng)目的設(shè)計(jì),包括實(shí)驗(yàn)?zāi)康?、涉及的知識點(diǎn)、使用的工具、被測系統(tǒng)等,闡述這些實(shí)踐項(xiàng)目的優(yōu)勢并展示教學(xué)效果。
關(guān)鍵詞:軟件測試;實(shí)踐教學(xué);項(xiàng)目設(shè)計(jì);課程改革
引言
軟件測試是軟件工程知識體系的一個(gè)重要組成部分。四川大學(xué)軟件學(xué)院從2008年開始為本科學(xué)生開設(shè)軟件測試課程,目的是使學(xué)生系統(tǒng)地掌握軟件測試的基本概念和技術(shù),培養(yǎng)學(xué)生的軟件質(zhì)量意識,提高學(xué)生在軟件開發(fā)中的綜合能力,進(jìn)一步幫助學(xué)生在軟件開發(fā)中減少缺陷的產(chǎn)生。
為了提高學(xué)生學(xué)習(xí)該門課程的興趣,全面提高學(xué)生的實(shí)踐能力,從2013年開始,課程組對實(shí)踐教學(xué)環(huán)節(jié)進(jìn)行建設(shè)和改革,通過參考國內(nèi)外眾多大學(xué)和培訓(xùn)機(jī)構(gòu)的軟件測試課程實(shí)踐教學(xué)內(nèi)容,結(jié)合實(shí)際情況,建設(shè)完成了一套完整的課程實(shí)踐體系。實(shí)踐項(xiàng)目設(shè)計(jì)的主要目標(biāo)是真實(shí):一是使用真實(shí)的、企業(yè)級(或接近企業(yè)級)的測試工具;二是使用真實(shí)的被測系統(tǒng)(systems undertest,SUTs)。這樣可以使學(xué)生在學(xué)習(xí)本課程后,具有解決實(shí)際工作中軟件系統(tǒng)測試問題的能力。
1 課程特點(diǎn)及實(shí)踐教學(xué)存在的問題
1.1 軟件測試課程的特點(diǎn)
(1)基本概念多。軟件測試知識體系中基本概念繁多,如單元測試、集成測試、系統(tǒng)測試、黑盒測試、白盒測試、回歸測試、配置測試等。這些概念是課程的基礎(chǔ),學(xué)生必須首先弄清這些概念的含義。實(shí)際上,對于每個(gè)教師來說,要把各個(gè)概念解釋清楚并不困難,令學(xué)生聽懂也不難,但是很多學(xué)生在課堂上學(xué)習(xí)完這些概念后,很快就忘記各個(gè)概念的含義和區(qū)別,也就是說這些概念沒有變成他們真正掌握的知識,其主要原因是學(xué)生沒有通過實(shí)際動(dòng)手加深對各個(gè)概念的理解,因此要想學(xué)好這門課,就必須重視課程的實(shí)踐部分。
(2)實(shí)踐性強(qiáng)。通過對實(shí)際系統(tǒng)的各種測試實(shí)踐,學(xué)生可以體會理論教學(xué)中的各種概念、技術(shù)和理論并實(shí)際使用各種測試技術(shù)和測試工具,這樣可以極大地加強(qiáng)對理論知識的掌握和理解。建設(shè)有效的實(shí)踐教學(xué)體系,對于提高軟件測試課程的教學(xué)效果很有必要。
1.2 實(shí)踐教學(xué)存在的問題
(1)學(xué)生不重視。很多學(xué)生對軟件測試的認(rèn)識不夠,對軟件測試工作有一種錯(cuò)誤觀念,認(rèn)為編碼能力不夠的人才會去做軟件測試或者女生才適合做軟件測試。這樣導(dǎo)致的結(jié)果就是很多學(xué)生排斥該門課程,有的學(xué)生只是為了混學(xué)分才選這門課,對于實(shí)踐部分也是抱著蒙混過關(guān)的想法。
(2)內(nèi)容陳舊。要求學(xué)生完成的實(shí)驗(yàn)題目都是幾年前的,不能跟上軟件測試近幾年的發(fā)展。例如,只是使用手動(dòng)方式進(jìn)行黑盒測試,在Word或Excel中記錄測試結(jié)果,沒有任何自動(dòng)化工具的使用,導(dǎo)致學(xué)生沒有興趣完成實(shí)驗(yàn)。
(3)被測系統(tǒng)沒有實(shí)際意義。很多被測系統(tǒng)都是極小型的、只有幾十行代碼的實(shí)例程序,對學(xué)生能力的提高幫助不大。編寫一個(gè)幾十行代碼的系統(tǒng)與編寫一個(gè)上萬行代碼的系統(tǒng)相比,需要的技術(shù)天壤之別。同樣地,對于軟件測試來說,學(xué)生只有通過測試大型的實(shí)際系統(tǒng),才能學(xué)會如何測試。
(4)測試工具不實(shí)用或不可得。以前軟件自動(dòng)化測試工具很少且大多數(shù)是商用軟件,因此實(shí)踐項(xiàng)目設(shè)計(jì)中缺乏對自動(dòng)化工具的使用。
(5)所用工具的廣度不夠。一些學(xué)校的軟件測試實(shí)踐教學(xué)中,只是讓學(xué)生練習(xí)使用單元測試工具,缺少其他流行的自動(dòng)化測試工具的使用。
這些問題的存在使得學(xué)生學(xué)習(xí)完這門課后,實(shí)際能力沒有本質(zhì)上的提高,直接導(dǎo)致學(xué)生進(jìn)行實(shí)際軟件測試時(shí)不知道如何下手進(jìn)行測試。
2 主要實(shí)踐項(xiàng)目介紹
課程實(shí)踐的主要目的是使學(xué)生在有限的實(shí)驗(yàn)時(shí)間內(nèi),通過理論結(jié)合實(shí)際,提高實(shí)踐動(dòng)手能力。實(shí)驗(yàn)題目選擇的原則是體現(xiàn)基礎(chǔ)性和前沿性,參考國內(nèi)外著名大學(xué)的課程體系和教學(xué)內(nèi)容,密切結(jié)合軟件測試技術(shù)的最新發(fā)展。
在設(shè)計(jì)實(shí)驗(yàn)題目時(shí),教師應(yīng)主要考慮如下4個(gè)因素:①覆蓋面。不一定大而全,但要覆蓋重點(diǎn)需要掌握的一些知識點(diǎn)。②實(shí)用性。所使用的工具應(yīng)是業(yè)界或接近業(yè)界所用工具,使學(xué)生通過實(shí)驗(yàn)?zāi)軌蚋惺艿狡髽I(yè)級的軟件測試。③綜合性。在有限的幾個(gè)實(shí)驗(yàn)中,綜合課程的多個(gè)知識點(diǎn)。④工作量。實(shí)驗(yàn)基本內(nèi)容設(shè)計(jì)應(yīng)難度適中和循序漸進(jìn),另外還可設(shè)計(jì)一些加分內(nèi)容,難度原則是使學(xué)生“跳起來夠得著”。具體來講,70%的學(xué)生能夠在課內(nèi)完成基本實(shí)驗(yàn);10%左右能力差的學(xué)生需要課外自己找時(shí)間完成;20%左右能力強(qiáng)的學(xué)生可以在課內(nèi)完成基本實(shí)驗(yàn)和加分實(shí)驗(yàn)內(nèi)容。
實(shí)驗(yàn)工具盡量選擇開源軟件工具。近幾年,隨著開源軟件的普及,越來越多開源、實(shí)用的自動(dòng)化軟件測試工具出現(xiàn)。很多工具在業(yè)界得到廣泛使用和好評,如JUnit、EcIEMMA、BugZilla等。實(shí)驗(yàn)項(xiàng)目中大多數(shù)使用的是開源軟件工具。最早的實(shí)驗(yàn)項(xiàng)目主要借鑒Vahid Garousi博士開設(shè)的軟件測試實(shí)驗(yàn)課內(nèi)容。在2013年和2014年兩次使用后,我們根據(jù)學(xué)生的成績情況和反饋、工具的可用性等進(jìn)行修改,最終確定如下5個(gè)實(shí)驗(yàn)項(xiàng)目:①動(dòng)態(tài)黑盒測試;②靜態(tài)白盒測試;③單元測試;④Web測試;⑤測試覆蓋率。
軟件測試課程的實(shí)驗(yàn)課為16學(xué)時(shí)(2學(xué)時(shí)/次×8次)。實(shí)驗(yàn)①③④分別用2次實(shí)驗(yàn)課完成,實(shí)驗(yàn)②⑤分別用1次實(shí)驗(yàn)課完成。這幾個(gè)實(shí)驗(yàn)覆蓋了理論課學(xué)習(xí)中主要要求掌握的知識點(diǎn)。
2.1 實(shí)驗(yàn)項(xiàng)目介紹
1)實(shí)驗(yàn)1:動(dòng)態(tài)黑盒測試。
實(shí)驗(yàn)?zāi)康模毫私廛浖y試的幾個(gè)基本概念,包括黑盒測試、隨機(jī)測試、回歸測試、測試用例、手工測試、缺陷的生命周期等;通過使用缺陷記錄工具BugZilla,了解業(yè)界對于缺陷管理的過程。
知識點(diǎn):重點(diǎn)是黑盒測試,其他還有測試用例、回歸測試、缺陷生命周期等。
使用的工具:開源工具BugZilla。
被測系統(tǒng):ATM模擬系統(tǒng)。
2)實(shí)驗(yàn)2:靜態(tài)白盒測試。
實(shí)驗(yàn)?zāi)康模涸跇I(yè)界,靜態(tài)白盒測試是高級的缺陷查找技術(shù)。靜態(tài)白盒測試能夠找出一些特殊的缺陷,這些缺陷是大多數(shù)編譯器不能發(fā)現(xiàn)的,也是程序員進(jìn)行人工代碼檢查時(shí)不容易發(fā)現(xiàn)的;有的缺陷是動(dòng)態(tài)軟件測試也很難發(fā)現(xiàn)的,如內(nèi)存泄漏。該實(shí)驗(yàn)?zāi)軌蜃寣W(xué)生理解靜態(tài)白盒測試的重要性,使用靜態(tài)測試工具進(jìn)行代碼靜態(tài)分析并理解靜態(tài)分析工具所得結(jié)果。
知識點(diǎn):重點(diǎn)是靜態(tài)白盒測試,其他還有代碼分析、代碼復(fù)雜度等。
使用的工具:商業(yè)工具PC-Lint,實(shí)驗(yàn)使用的是此工具的網(wǎng)頁試用版本。
被測系統(tǒng):學(xué)生在學(xué)習(xí)C/C++程序設(shè)計(jì)課程時(shí)編寫的代碼或者在開發(fā)其他項(xiàng)目時(shí)自己編寫的代碼。
對自己的代碼進(jìn)行檢測,每個(gè)學(xué)生都很有興趣;特別是發(fā)現(xiàn)原本編譯和運(yùn)行正確的代碼居然還有錯(cuò)誤時(shí),大多數(shù)學(xué)生感觸很深。
3)實(shí)驗(yàn)3:單元測試。
實(shí)驗(yàn)?zāi)康模篔Unit是目前業(yè)界使用最為廣泛的應(yīng)用于Java的單元測試工具。JUnit框架允許開發(fā)人員快速、輕松地創(chuàng)建單元測試和測試套件。該實(shí)驗(yàn)讓學(xué)生熟悉單元測試的基本概念和技術(shù),學(xué)習(xí)使用JUnit進(jìn)行單元測試用例的編寫。
知識點(diǎn):重點(diǎn)是單元測試,其他還有驅(qū)動(dòng)模塊、樁模塊、測試套件、斷言、測試Oracle等。
使用的工具:開源工具JUnit。
被測系統(tǒng):JFreeChart,是Java平臺上一個(gè)開源的圖表繪制類庫。實(shí)驗(yàn)中選取其中2個(gè)類的10個(gè)方法進(jìn)行測試。
4)實(shí)驗(yàn)4:Web測試。
實(shí)驗(yàn)?zāi)康模耗壳按罅肯到y(tǒng)是Web應(yīng)用系統(tǒng),了解這類系統(tǒng)的測試技術(shù),對于學(xué)生日后的實(shí)際工作有很大幫助。該實(shí)驗(yàn)讓學(xué)生熟悉Web應(yīng)用程序的功能測試過程,同時(shí)熟悉“錄制一回放”類測試工具的基本操作,為以后進(jìn)行GUI程序測試奠定基礎(chǔ)。
知識點(diǎn):重點(diǎn)是Web測試,其他還有GUI測試、測試腳本等。
使用的工具:開源工具Selenium。
被測系統(tǒng):學(xué)生自己選擇熟悉的網(wǎng)站,如百度、淘寶、學(xué)校的課程中心等。
5)實(shí)驗(yàn)5:測試覆蓋率。
實(shí)驗(yàn)?zāi)康模簻y試覆蓋率是度量測試完整性的一個(gè)重要手段,是測試有效性的一個(gè)度量。通過該實(shí)驗(yàn),加深學(xué)生對于測試度量和測試覆蓋的理解,幫助學(xué)生回答測試的“完全程度如何”;同時(shí)讓學(xué)生體會為了達(dá)到盡量完全的測試,應(yīng)該如何編寫有效的測試用例。
知識點(diǎn):重點(diǎn)是測試度量和測試覆蓋率,其他還有單元測試,語句覆蓋、分支覆蓋、條件覆蓋等不同的覆蓋準(zhǔn)則。
使用的工具:開源工具EcIEMMA。
被測系統(tǒng):JFreeChart。
該實(shí)驗(yàn)要求學(xué)生基于實(shí)驗(yàn)3的結(jié)果,查看自己所寫測試用例的覆蓋情況,然后基于規(guī)定的測試覆蓋率要求,增加相應(yīng)的測試用例。
2.2 實(shí)驗(yàn)成績評定
在布置每個(gè)實(shí)驗(yàn)時(shí),教師除了詳細(xì)地指導(dǎo)實(shí)驗(yàn),還應(yīng)公布詳細(xì)的評分標(biāo)準(zhǔn),讓學(xué)生知道哪些地方是得分點(diǎn)。教師進(jìn)行評定時(shí),要嚴(yán)格執(zhí)行評分標(biāo)準(zhǔn)。成績公布后一周內(nèi),學(xué)生可以對自己的分?jǐn)?shù)提出異議并與教師溝通。每個(gè)實(shí)驗(yàn)的分?jǐn)?shù)由實(shí)際操作和實(shí)驗(yàn)報(bào)告兩部分構(gòu)成。對于每個(gè)實(shí)驗(yàn)報(bào)告,教師給出基本框架,這樣可以令格式統(tǒng)一,也可以讓學(xué)生清楚各實(shí)驗(yàn)的重點(diǎn)在哪里。學(xué)生的最后得分由實(shí)驗(yàn)室操作、測試用例編寫、實(shí)驗(yàn)報(bào)告3部分組成。每一部分的要求和分?jǐn)?shù)分布都要詳細(xì)給出。單元測試評分標(biāo)準(zhǔn)如下。
1)實(shí)驗(yàn)室操作(10%)。
在實(shí)驗(yàn)室內(nèi)完成所有實(shí)驗(yàn)步驟并可以運(yùn)行自己寫的測試腳本。
2)測試用例開發(fā)(50%)。
在課程網(wǎng)站中提交自己開發(fā)的10個(gè)JUnit測試用例,每個(gè)用例5分,評分標(biāo)準(zhǔn)如下:清晰(代碼格式規(guī)范,可讀性好),占1%;與需求一致(只測試需求中描述的功能),占1.5%;完整(測試需求中描述的所有內(nèi)容),占1.5%;正確(測試真正需要測試的屬性),占1%。
3)實(shí)驗(yàn)報(bào)告(40%)。
請根據(jù)給出的實(shí)驗(yàn)報(bào)告模板撰寫實(shí)驗(yàn)報(bào)告,你可以根據(jù)自己的情況,修改其中的部分標(biāo)題內(nèi)容。要求報(bào)告中至少包括如下內(nèi)容:引言,占5%;測試用例描述,占25%;測試時(shí)遇到的困難或挑戰(zhàn),占3%;實(shí)驗(yàn)的收獲或結(jié)論,占3%;意見和建議(該實(shí)驗(yàn)有用嗎?能否根據(jù)實(shí)驗(yàn)指導(dǎo)完成?實(shí)驗(yàn)時(shí)間太多/太少嗎?你還希望增加/減少什么內(nèi)容),占4%。
3 使用效果分析
所設(shè)計(jì)的實(shí)驗(yàn)項(xiàng)目在2013年和2014年春季學(xué)期軟件測試課程中使用,面向的是本科3年級學(xué)生,分別是143名和80名學(xué)生。學(xué)生已經(jīng)學(xué)習(xí)過C/C++/Java程序設(shè)計(jì)、軟件工程、數(shù)據(jù)結(jié)構(gòu)等大多數(shù)專業(yè)基礎(chǔ)課程,具有小型程序開發(fā)設(shè)計(jì)經(jīng)歷;少量學(xué)生已開發(fā)過一些實(shí)際的軟件項(xiàng)目,在軟件工程課程中學(xué)習(xí)了軟件測試的基本概念。期末統(tǒng)計(jì)實(shí)驗(yàn)成績各分?jǐn)?shù)段比例,結(jié)果見表1。
可以看出,2013年成績總體偏低,原因是部分實(shí)驗(yàn)難度和工作量偏大;2014年進(jìn)行了調(diào)整,成績有很大提升,基本符合教學(xué)預(yù)期,其中發(fā)現(xiàn)靜態(tài)白盒測試的難度偏低,目前已進(jìn)行了調(diào)整。 從學(xué)生反饋的情況看,大部分學(xué)生對于實(shí)驗(yàn)的難度、工作量、獲得的能力等比較滿意,當(dāng)然也提出一些很好的改進(jìn)建議。
4 結(jié)語
筆者根據(jù)近幾年的教學(xué)經(jīng)驗(yàn),對軟件測試課程實(shí)踐教學(xué)環(huán)節(jié)存在的問題進(jìn)行分析,介紹了所設(shè)計(jì)的實(shí)驗(yàn)項(xiàng)目情況,提出了相應(yīng)的改革措施。從實(shí)際的使用效果看,達(dá)到了讓學(xué)生鞏固理論知識和提高動(dòng)手能力的目標(biāo),提高了教學(xué)質(zhì)量,在教學(xué)實(shí)施過程中取得很好的效果,激發(fā)了學(xué)生的學(xué)習(xí)興趣,為軟件測試課程的實(shí)踐教學(xué)環(huán)節(jié)提供參考。目前的實(shí)驗(yàn)設(shè)計(jì)并非完美,在以后的教學(xué)中,還有一些問題需要解決。
(1)前沿性不夠。一些新型應(yīng)用不斷普及,但實(shí)驗(yàn)項(xiàng)目中沒有針對這些應(yīng)用的測試,如移動(dòng)應(yīng)用測試、云測試等。
(2)覆蓋面不夠。性能測試、配置測試等都是教學(xué)主要內(nèi)容,但由于課程的實(shí)踐時(shí)間有限,沒有設(shè)計(jì)這方面的測試內(nèi)容。
(3)理論性不夠。所設(shè)計(jì)的實(shí)驗(yàn)題目側(cè)重于簡單的動(dòng)手實(shí)踐,沒有能夠讓學(xué)生在理論上進(jìn)一步提高的內(nèi)容。
(4)部分工具功能有限。所選用的工具與商業(yè)工具相比,在功能及性能上還有一定差距。例如PC-Lint,實(shí)驗(yàn)使用的只是其網(wǎng)上試用版本,功能很有限,不能很好地體現(xiàn)靜態(tài)白盒測試的某些功能。