系統(tǒng)軟件已深入到生活各方面,對(duì)軟件質(zhì)量的要求在不斷提高,軟件測試成為軟件開發(fā)中一個(gè)重要部分。軟件測試是使用為發(fā)現(xiàn)錯(cuò)誤所選擇的輸入和狀態(tài)的組合而執(zhí)行代碼的過程。包括白盒測試和?盒測試。?盒測試不考慮內(nèi)部邏輯結(jié)構(gòu),只依據(jù)程序規(guī)格說明書,檢查程序功能。白盒測試?yán)贸绦騼?nèi)部邏輯結(jié)構(gòu),設(shè)計(jì)或選擇測試用例,對(duì)程序所有邏輯路徑進(jìn)行測試。J2EE應(yīng)用開發(fā)越來越流行,并應(yīng)用到各種大型電子商務(wù)中,這些電子商務(wù)對(duì)軟件質(zhì)量要求非常高,要是在應(yīng)用中出現(xiàn)錯(cuò)誤,會(huì)造成嚴(yán)重的損失。本文給出及J2EE項(xiàng)目開發(fā)時(shí)的測試過程,以及各測試階段用到的測試工具。
J2EE是一種利用java2平臺(tái)來簡化與企業(yè)解決方案的開發(fā),部署和管理相關(guān)的復(fù)雜問題的體系結(jié)構(gòu)。J2EE技術(shù)的基礎(chǔ)是java2平臺(tái)的標(biāo)準(zhǔn)版。 J2EE不僅鞏固了標(biāo)準(zhǔn)版中的許多優(yōu)點(diǎn),還提供了對(duì)EJB,Servlet,JSP,XML的全面支持。J2EE包括四個(gè)層次,分別是客戶層,web層,業(yè)務(wù)層和企業(yè)信息系統(tǒng)層。一個(gè)多層的分布式應(yīng)用模型意味著根據(jù)功能應(yīng)用邏輯被劃分成組件,并可以在同一服務(wù)器或不同的服務(wù)器上安裝組成J2EE應(yīng)用的這些不同的組件。J2EE結(jié)構(gòu)復(fù)雜,層次多,需求會(huì)不斷更新,如何保證終開發(fā)的質(zhì)量變得至關(guān)重要。
在極限編程思想中定義了兩種測試的類型。1.單元測試,對(duì)系統(tǒng)內(nèi)部模塊的測試。為了適應(yīng)J2EE平臺(tái),還發(fā)展出與J2EE容器緊密結(jié)合的整合測試。2.功能測試。在軟件測試中還有一個(gè)經(jīng)常聽到的是性能測試。由于性能測試與客戶的需求密不可分,將它歸類于接受度測試的延伸應(yīng)用?紤]到J2EE的結(jié)構(gòu)和技術(shù),不但要對(duì)其中用到的技術(shù)進(jìn)行測試,還要測試各層之間的聯(lián)系。
下面對(duì)J2EE應(yīng)用的測試過程進(jìn)行具體介紹,主要包括對(duì)測試各階段用到的測試類型和測試工具。
單元是整個(gè)軟件工程的基礎(chǔ),因此單元的質(zhì)量是整個(gè)軟件質(zhì)量的基礎(chǔ)。在J2EE開發(fā)中,小可測試單位是封裝的類或?qū)ο螅琂Unit是一個(gè)很好的單元測試工具。Junit的核心類別是Testcase,每一個(gè)testcase代表一個(gè)命令對(duì)象,Testcase包含數(shù)個(gè)測試方法。用來測試被測類別中成員方法的輸出與預(yù)期的結(jié)果是否相同。Junit平臺(tái)還有一個(gè)核心類別是testSuite,每個(gè)testSuite代表一個(gè)復(fù)合的對(duì)象,一個(gè)testSuite 可以由多個(gè)Testcase或多個(gè)testSuite組成。
在單元測試的基礎(chǔ)上,需要將所有的模塊按照要求組裝成系統(tǒng)。在開發(fā)過程中需要考慮的問題如下
1.一個(gè)模塊的功能是否對(duì)另一個(gè)模塊的功能產(chǎn)生不利的影響。
2.各個(gè)子功能組合起來,能否達(dá)到預(yù)期要求的父功能。
因此在單元測試的同時(shí)可進(jìn)行整合測試,發(fā)現(xiàn)并排除在模塊連接中可能出現(xiàn)的問題。整合測試提供了J2EE容器的環(huán)境,可以快速輕易的檢驗(yàn)出域?qū)ο笈c與 J2EE容器的互動(dòng)行為是否合乎邏輯。因此整合測試的對(duì)象是以一個(gè)EJB,Servlet或JSP的程序代碼為基本單元。Cactus是為解決整合測試問題而誕生的工具。Cactus是Junit的一個(gè)擴(kuò)展,但和Junit又有些不同,它分三種不同的測試類別:Jsp Testcase,Servlet testcase,filter testcase。Junit的測試代碼僅在客戶端,而cactus的測試代碼有服務(wù)器和客戶端兩個(gè)部分,協(xié)同工作。
功能測試檢查在公共API邊界處的代碼,其目標(biāo)是檢驗(yàn)在用例中描述的行為,測試系統(tǒng)是否滿足所需要的功能。每當(dāng)完成一個(gè)階段性的功能測試,也代表著完成了部分的系統(tǒng)功能。
HttpUnit是為功能測試而發(fā)展起來的測試工具。HttpUnit是用java編寫的虛擬瀏覽器,用來模擬瀏覽器的內(nèi)部行為。HttpUnit平臺(tái)模擬使用者瀏覽網(wǎng)站所發(fā)出的request對(duì)象,將其送到目的網(wǎng)站,等網(wǎng)站發(fā)出response對(duì)象傳回給httpUnit。HttpUnit是一種黑箱作業(yè)形式的測試工具,因此只要專注如何編寫模擬瀏覽器行為的測試代碼即可。
功能能否正確執(zhí)行很重要,但多用戶同時(shí)執(zhí)行的效果又如何?這需要性能測試。在J2EE應(yīng)用中,主要做的是壓力測試。大多數(shù)壓力測試檢驗(yàn)應(yīng)用程序能夠在短時(shí)間內(nèi)響應(yīng)大量的用戶請(qǐng)求。JMeter測試工具能夠自動(dòng)發(fā)送設(shè)定好的請(qǐng)求及跟蹤應(yīng)用程序的響應(yīng)時(shí)間。通過分析測試報(bào)告能夠找到J2EE應(yīng)用程序的瓶頸,并對(duì)應(yīng)用程序進(jìn)行優(yōu)化。