




版權(quán)說(shuō)明:本文檔由用戶(hù)提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請(qǐng)進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡(jiǎn)介
1、IBM Rational軟件測(cè)試工具實(shí)驗(yàn)報(bào)告目錄IBM Rational軟件測(cè)試工具實(shí)驗(yàn)報(bào)告1實(shí)驗(yàn)一 使用Rational Purify工具測(cè)試代碼中內(nèi)存相關(guān)錯(cuò)誤2實(shí)驗(yàn)二 使用Rational Quantify對(duì)程序代碼做性能分析15實(shí)驗(yàn)三 使用Rational PureCoverage對(duì)程序代碼做性能分析23實(shí)驗(yàn)四 Rational Performance Tester 的基本使用30實(shí)驗(yàn)五 Rational Performance Tester 中數(shù)據(jù)池的使用54實(shí)驗(yàn)六 Rational Performance Tester 中調(diào)度的使用67實(shí)驗(yàn)七 Rational Functional
2、Tester的使用90實(shí)驗(yàn)一 使用Rational Purify工具測(cè)試代碼中內(nèi)存相關(guān)錯(cuò)誤一、目的和要求1了解應(yīng)用程序代碼中與內(nèi)存有關(guān)的錯(cuò)誤,以及由此引發(fā)的后果;2掌握Rational Purify的基本設(shè)置;3掌握Rational Purify的基本操作方法,學(xué)會(huì)使用該工具;4能夠分析Rational Purify輸出的內(nèi)存錯(cuò)誤報(bào)告。二、實(shí)驗(yàn)內(nèi)容1學(xué)習(xí)講義01,掌握Rational Purify的使用方法;2完成以下實(shí)驗(yàn): (1)分析以下C程序代碼,找出其中的內(nèi)存錯(cuò)誤(用注釋說(shuō)明錯(cuò)誤類(lèi)型);#include using namespace std;int main() char * str1
3、 = hello; char * str2 = new char5; char * str3 = str2; coutstr2endl; strcpy(str2,str1); coutstr2Run3.3 選擇可執(zhí)行文件ex1.exe,點(diǎn)擊run按鈕3.4 程序的運(yùn)行結(jié)果:從程序運(yùn)行的結(jié)果上看,第一行的輸出不是預(yù)期的結(jié)果,按照以往的經(jīng)驗(yàn),在c/c+程序中輸出了非預(yù)期的字符和亂碼往往是因?yàn)閿?shù)組越界讀取造成的或者是指針在分配內(nèi)存區(qū)域后未經(jīng)初始化就直接讀取造成的。3.5 查看和保存報(bào)告在程序運(yùn)行結(jié)束后,Rational Purify會(huì)為我們生成一份報(bào)告,具體內(nèi)容如圖:保存錯(cuò)誤報(bào)告:點(diǎn)擊保存(4)分析
4、Rational Purify輸出的內(nèi)存錯(cuò)誤報(bào)告。對(duì)內(nèi)存錯(cuò)誤報(bào)告0逐條分析:4.1 Rational Purify報(bào)告在源程序exp1.cpp的第10行存在UMR(未初始化的內(nèi)存讀)錯(cuò)誤:原因分析:雖然char * str2 = new char5;這句代碼完成了對(duì)內(nèi)存的初始化,但是并沒(méi)有為字符數(shù)組中的每個(gè)字符賦初值,而在C語(yǔ)言中,對(duì)于變量來(lái)講,沒(méi)有賦初值意味著這個(gè)變量的值是隨機(jī)的,因?yàn)镃語(yǔ)言的變量沒(méi)有默認(rèn)值。所以輸出的內(nèi)容中第一行有亂碼,這行亂碼就是源代碼第10行執(zhí)行后輸出的。以上三條UMR錯(cuò)誤描述的是同一個(gè)問(wèn)題。4.2 Rational Purify報(bào)告在源程序exp1.cpp的第10行存
5、在ABR(內(nèi)存越界讀)錯(cuò)誤:原因分析: C語(yǔ)言中字符串是以“0”作為結(jié)束標(biāo)志的,當(dāng)輸出語(yǔ)句遇到第一個(gè)“0”時(shí)就會(huì)認(rèn)為字符串已經(jīng)結(jié)束,然后就會(huì)終止讀取,否則將一直讀取下去,直到遇到“0”或者操作系統(tǒng)檢測(cè)到程序讀取了不該讀取的內(nèi)容之后終止程序運(yùn)行為止。在源程序中,雖然指針str2指向的內(nèi)存正確的申請(qǐng)了內(nèi)存,但卻沒(méi)有對(duì)字符數(shù)組的每個(gè)元素進(jìn)行初始化(應(yīng)當(dāng)有這樣的習(xí)慣和意識(shí):在C語(yǔ)言中,變量聲明的時(shí)候一定要賦初值)。一開(kāi)始沒(méi)有初始化字符數(shù)組的每個(gè)元素為“0”,這就導(dǎo)致了在讀取str2指向的字符數(shù)組時(shí)cout發(fā)生了越界,程序無(wú)休止的向下讀,期望碰到“0”終止讀取。發(fā)生這樣的情況是非常危險(xiǎn)的,輕則導(dǎo)致亂碼輸
6、出,重則導(dǎo)致程序異常終止。所以聲明變量(尤其是指針變量)后,記得賦初值。4.3 Rational Purify報(bào)告在源程序exp1.cpp的第10行存在IPR(非法指針讀)錯(cuò)誤:原因同4.2,不再贅述。4.4 Rational Purify報(bào)告在源程序exp1.cpp的第12行存在ABW(數(shù)組越界寫(xiě))錯(cuò)誤:原因分析:C語(yǔ)言中字符串是以“0”作為結(jié)束標(biāo)志的,當(dāng)輸出語(yǔ)句遇到第一個(gè)“0”時(shí)就會(huì)認(rèn)為字符串已經(jīng)結(jié)束,然后就會(huì)終止讀取,否則將一直讀取下去,直到遇到“0”或者操作系統(tǒng)檢測(cè)到程序讀取了不該讀取的內(nèi)容之后終止程序運(yùn)行為止。在源程序中,按照C語(yǔ)言的規(guī)則“hello”這個(gè)字符串應(yīng)該是占6個(gè)字節(jié)大小(
7、包括“0”),而指針str2指向的內(nèi)存區(qū)域中只有5個(gè)字節(jié)的大小。Strcpy是string.h頭文件中的一個(gè)函數(shù),其作用是字符串拷貝,strcpy(str2,str1);這句代碼試圖將占6個(gè)字節(jié)的“hello”字符串放入str2所指向的存儲(chǔ)空間(只有5個(gè)字節(jié)大小)之中,這樣的操作必然導(dǎo)致數(shù)組越界,越界的部分被寫(xiě)到了指針str2指示的區(qū)域之外,這樣的操作會(huì)造成比越界讀更嚴(yán)重的后果,嚴(yán)重的時(shí)候可能因?yàn)槠茐牧似渌绦虻膬?nèi)存空間造成其他程序崩潰和操作系統(tǒng)異常。這類(lèi)錯(cuò)誤相對(duì)比較隱蔽,不一定每次都會(huì)引起操作系統(tǒng)報(bào)警,但是問(wèn)題一旦出現(xiàn)就有可能造成嚴(yán)重的后果。4.5 Rational Purify報(bào)告在源程序
8、exp1.cpp的第18行存在FMR(空閑內(nèi)存讀)錯(cuò)誤:原因分析:從圖中可以看出,程序在第7行為指針str2指向的內(nèi)存區(qū)域分配了5個(gè)字節(jié)大小的空間,但是程序在第16行使用了delete關(guān)鍵字,在C+中delete相當(dāng)于c語(yǔ)言中的free,是釋放內(nèi)存空間用的。由于程序執(zhí)行到第18行的時(shí)候,str2指向的內(nèi)存空間已經(jīng)在第16行釋放,所以程序讀取了已經(jīng)釋放的內(nèi)存(空閑內(nèi)存就是指已經(jīng)釋放的內(nèi)存),這樣的事情是不應(yīng)該發(fā)生的,程序應(yīng)當(dāng)讀取已經(jīng)分配的內(nèi)存空間,對(duì)于已經(jīng)釋放的內(nèi)存空間不應(yīng)該去讀取。這樣的操作也是容易發(fā)生問(wèn)題的,因?yàn)橐呀?jīng)釋放的內(nèi)存存儲(chǔ)的內(nèi)容很可能不是指針指向的數(shù)據(jù)類(lèi)型的,在讀取時(shí)可能因?yàn)轭?lèi)型不匹
9、配導(dǎo)致程序發(fā)生問(wèn)題,或者已經(jīng)釋放的這片內(nèi)存已經(jīng)不歸這個(gè)程序所有也是有可能的,取出的內(nèi)容可能會(huì)是亂碼或者直接引起程序崩潰。4.6 Rational Purify報(bào)告在源程序exp1.cpp的第18行存在FMW(空閑內(nèi)存寫(xiě))錯(cuò)誤:原因分析:正如4.5分析的那樣,空閑內(nèi)存寫(xiě)比空閑內(nèi)存讀危害更大,因?yàn)閷?xiě)操作本身就帶有一定的破壞性。如果寫(xiě)到了其他正常程序的內(nèi)存空間還會(huì)導(dǎo)致其他程序崩潰。4.7 Rational Purify報(bào)告在源程序exp1.cpp的第20行存在FFM(再次釋放已經(jīng)釋放的內(nèi)存)錯(cuò)誤:原因分析:char * str3 = str2;這句代碼使得str2和str3指向同一塊內(nèi)存空間,在程序
10、的第16行釋放了str2指向的內(nèi)存,也就間接釋放了str3指向的內(nèi)存。在20行再次嘗試釋放str3指向的內(nèi)存空間就有會(huì)出現(xiàn)FFM(再次釋放已經(jīng)釋放的內(nèi)存)錯(cuò)誤。綜合上述分析,源代碼中存在以下錯(cuò)誤:#include using namespace std;int main() char * str1 = hello; char * str2 = new char5; char * str3 = str2; coutstr2endl; /UMR、ABR、IPR strcpy(str2,str1); /ABW coutstr2endl; /ABR delete str2; str20+=2; /FM
11、R、FMW delete str3; /FFM getchar(); return 0;實(shí)驗(yàn)二 使用Rational Quantify對(duì)程序代碼做性能分析一、目的和要求1了解應(yīng)用程序性能的相關(guān)概念;2掌握Rational Quantify的基本設(shè)置;3掌握Rational Quantify的基本操作方法,學(xué)會(huì)使用該工具;4能夠分析Rational Quantify輸出的性能分析報(bào)告。二、實(shí)驗(yàn)內(nèi)容1學(xué)習(xí)講義02,掌握Rational Quantify的使用方法;2閱讀以下C程序,該程序?qū)ΧS數(shù)組中的每行進(jìn)行排序,行與行之間不排序,完成以下實(shí)驗(yàn): #include using namespace
12、std;const int N=3;void sort(int iArrayNN) int iRow,iCol,iCur,iMin,iMinAdd,iTemp; for( iRow = 0; iRow N; iRow+ ) for( iCol =0 ; iCol N-1;iCol+ ) iMin = iArrayiRowiCol; iMinAdd = iCol; /在當(dāng)前行中,從當(dāng)前元素開(kāi)始往后找最小的元素 for( iCur = iCol + 1; iCur N ;iCur+ ) if( iArrayiRowiCur iMin ) iMin = iArrayiRowiCur; iMinAdd
13、 = iCur; /在當(dāng)前行中,從當(dāng)前元素開(kāi)始往后找最小的元素 iArrayiRowiMinAdd = iArrayiRowiCol; iArrayiRowiCol = iMin; /對(duì)每行進(jìn)行排序 int main()int ANN;int i,j;cout請(qǐng)輸入N*N個(gè)整數(shù):endl;for( i = 0; i N ; i+ ) for( j = 0; jAij; cout對(duì)每行排序前的數(shù)組為:endl;for( i = 0; i N ; i+ ) for( j = 0; j N ; j+ ) coutAij ; coutendl;sort(A);cout對(duì)每行排序后的數(shù)組為:endl;f
14、or( i = 0; i N ; i+ ) for( j = 0; j N ; j+ ) coutAij ; cout“用戶(hù)組”在用戶(hù)組的調(diào)度元素詳細(xì)信息界面中設(shè)置用戶(hù)名、組的大?。ò凑瞻俜直然蛟O(shè)置實(shí)際用戶(hù)數(shù))、運(yùn)行用戶(hù)組的位置。如創(chuàng)建兩組用戶(hù):一組為個(gè)人組singleUser,一組為院系用戶(hù)組groupUser。4.設(shè)置用戶(hù)組運(yùn)行的測(cè)試右鍵單擊用戶(hù)組,在快捷菜單中選擇“添加”-“測(cè)試”,彈出“選擇性能測(cè)試”對(duì)話(huà)框。選擇用戶(hù)組要進(jìn)行的測(cè)試,點(diǎn)擊“確定”按鈕。添加完成后效果如圖:5.設(shè)置延遲時(shí)間設(shè)置延遲后,每個(gè)測(cè)試都會(huì)延遲相應(yīng)的時(shí)間,方便地控制用戶(hù)的動(dòng)作。右鍵單擊用戶(hù)組,在快捷菜單中選擇“添加”
15、-“延遲”,在延遲的調(diào)度元素中設(shè)置延遲的時(shí)間。設(shè)置延遲時(shí)間為1000毫秒(即一秒):設(shè)置延遲之后的效果:6設(shè)置循環(huán)次數(shù)(腳本的迭代次數(shù))性能調(diào)度只包含了用戶(hù)組和測(cè)試,用戶(hù)組中每個(gè)測(cè)試會(huì)按順序執(zhí)行。循環(huán)提供了比簡(jiǎn)單順序執(zhí)行更加復(fù)雜的控制,增加循環(huán)可以按照一定的迭代重復(fù)測(cè)試,可以設(shè)置測(cè)試運(yùn)行的頻度。右鍵單擊用戶(hù)組,在快捷菜單中選擇“添加”-“循環(huán)”,在循環(huán)的調(diào)度元素詳細(xì)信息中設(shè)置迭代次數(shù)。設(shè)置了循環(huán)之后,為循環(huán)添加測(cè)試:選擇之前錄制的測(cè)試腳本生成的測(cè)試:為循環(huán)添加測(cè)試之后的效果:7.設(shè)置隨機(jī)選擇器右鍵點(diǎn)擊用戶(hù)組,在快捷菜單中選擇“添加” “隨機(jī)選擇器”,在隨機(jī)選擇器的調(diào)度元素詳細(xì)信息中設(shè)置迭代次數(shù)
16、 按“添加”鍵,添加加權(quán)塊,并輸入加權(quán)塊的權(quán)重。 輸入加權(quán)塊的名稱(chēng)和權(quán)重:設(shè)置了隨機(jī)選擇器后,需要為加權(quán)塊添加測(cè)試 添加好之后的狀態(tài):8.設(shè)置一些性能調(diào)度選項(xiàng)啟用資源監(jiān)視,并設(shè)置要監(jiān)視的資源(主要是CPU、內(nèi)存、磁盤(pán)和網(wǎng)絡(luò)):點(diǎn)擊添加:如圖,我已經(jīng)添加了:內(nèi)存、物理磁盤(pán)、處理器和流量統(tǒng)計(jì)(網(wǎng)絡(luò))。增加監(jiān)視后的效果:?jiǎn)⒂眯阅苄枨螅菏占憫?yīng)時(shí)間數(shù)據(jù):9.啟動(dòng)性能調(diào)度10.性能調(diào)度結(jié)果實(shí)驗(yàn)七 Rational Functional Tester的使用一、目的和要求1學(xué)會(huì)使用Rational Functional Tester進(jìn)行功能測(cè)試;2學(xué)會(huì)使用RFT錄制和回放腳本;3學(xué)會(huì)給腳本添加驗(yàn)證點(diǎn),學(xué)會(huì)使
17、用數(shù)據(jù)池。二、實(shí)驗(yàn)內(nèi)容選定一個(gè)Java應(yīng)用程序,錄制功能測(cè)試腳本并回放。然后給腳本設(shè)置數(shù)據(jù)池和驗(yàn)證點(diǎn),回放腳本觀(guān)察實(shí)驗(yàn)現(xiàn)象,生成并分析測(cè)試報(bào)告。1.對(duì)待測(cè)程序的說(shuō)明和準(zhǔn)備工作待測(cè)程序是我編寫(xiě)的“中北商城”項(xiàng)目,該程序是一個(gè)基于JavaSE GUI的小程序(如果沒(méi)有JRE環(huán)境請(qǐng)自行安裝)。該程序包括客戶(hù)端和服務(wù)器兩個(gè)部分。啟動(dòng)時(shí)請(qǐng)先啟動(dòng)服務(wù)器端程序,管理員有三個(gè)賬號(hào):編號(hào)用戶(hù)名密碼1張三1232李四4563王五789請(qǐng)以三個(gè)賬號(hào)中的任意一個(gè)登陸后開(kāi)始操作!加入一些商品信息:輸入若干商品信息之后:此時(shí)千萬(wàn)不要關(guān)掉服務(wù)器端,否則客戶(hù)端將無(wú)法登陸!請(qǐng)將服務(wù)器端窗口最小化!登陸客戶(hù)端,注冊(cè)一個(gè)賬號(hào),輸入
18、用戶(hù)名和密碼之后點(diǎn)擊注冊(cè)按鈕:然后再點(diǎn)擊登錄按鈕,登陸成功后看到管理員錄入的商品列表:此時(shí)管理員端的登陸用戶(hù)數(shù)變?yōu)?:退出客戶(hù)端:點(diǎn)擊退出登錄,點(diǎn)擊是:此時(shí)管理員處在線(xiàn)用戶(hù)數(shù)顯示0:如果上述操作沒(méi)有出現(xiàn)問(wèn)題,說(shuō)明環(huán)境一切正常!查看D盤(pán)下的store文件夾,里面會(huì)有一些數(shù)據(jù):這些數(shù)據(jù)在程序運(yùn)行時(shí)不可以刪除!當(dāng)程序運(yùn)行完成后就可以刪除了!準(zhǔn)備工作完成后就可以錄制腳本了!2.啟動(dòng)RFT,新建Rational Functional Test項(xiàng)目點(diǎn)擊桌面上的,打開(kāi)Rational Functional Tester,選擇工作空間后確定:進(jìn)入RFT主界面:?jiǎn)螕舨藛螜谏系摹拔募?“新建”-“Functio
19、nal Test項(xiàng)目”輸入項(xiàng)目名,點(diǎn)擊完成:新建項(xiàng)目完成后的效果:3.錄制腳本接下來(lái)要錄制的是用戶(hù)登錄,進(jìn)行購(gòu)物后結(jié)算購(gòu)物車(chē)的腳本。由于我的程序使用較高版本的JDK編譯,可能會(huì)造成RFT提示找不到主類(lèi)的錯(cuò)誤:這是因?yàn)镽FT自帶的JRE版本過(guò)低,而低版本JRE無(wú)法識(shí)別高版本JDK編譯出來(lái)的主類(lèi),所以錄制腳本前需要將默認(rèn)的JRE換成自己的JRE環(huán)境。具體方法如下:點(diǎn)擊菜單欄-“配置”-“啟用環(huán)境進(jìn)行測(cè)試”在進(jìn)行環(huán)境設(shè)置之前,點(diǎn)擊“搜索”按鈕,找出所有的JRE:如圖是已經(jīng)找到的JRE環(huán)境:選擇新的jdk1.7作為運(yùn)行時(shí)環(huán)境(JDK中本身就包含JRE環(huán)境),啟用它并設(shè)置為缺省值。點(diǎn)擊“完成”。點(diǎn)擊菜單
20、欄“配置”-“配置應(yīng)用環(huán)境進(jìn)行設(shè)置”點(diǎn)擊添加選擇自己的應(yīng)用程序:選擇Java應(yīng)用程序,點(diǎn)擊“下一步”:點(diǎn)擊瀏覽選擇自己的程序:點(diǎn)擊打開(kāi):這一步注意:一定要選定自己的jdk:點(diǎn)擊完成:截止目前為止,錄制前的準(zhǔn)備工作就緒,可以錄制腳本了右擊項(xiàng)目名稱(chēng),點(diǎn)擊“使用記錄器記錄腳本”:編輯腳本名稱(chēng),點(diǎn)擊下一步:點(diǎn)擊完成開(kāi)始錄制腳本:彈出一個(gè)小窗口:點(diǎn)擊按鈕啟動(dòng)應(yīng)用程序:點(diǎn)擊“確定”按鈕啟動(dòng)應(yīng)用程序,輸入正確的用戶(hù)名和密碼【之前注冊(cè)的】,點(diǎn)擊登錄按鈕:隨意買(mǎi)一些商品:點(diǎn)擊某個(gè)商品,然后點(diǎn)擊“查看商品詳細(xì)信息”按鈕:點(diǎn)擊加入購(gòu)物車(chē):再買(mǎi)一些:查看購(gòu)物車(chē):點(diǎn)擊“結(jié)賬”按鈕,提示購(gòu)買(mǎi)成功,并顯示總金額!購(gòu)物車(chē)被清零:點(diǎn)擊退出登錄按鈕:點(diǎn)擊“是”關(guān)閉程序。然后單擊結(jié)束
溫馨提示
- 1. 本站所有資源如無(wú)特殊說(shuō)明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請(qǐng)下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請(qǐng)聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶(hù)所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁(yè)內(nèi)容里面會(huì)有圖紙預(yù)覽,若沒(méi)有圖紙預(yù)覽就沒(méi)有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫(kù)網(wǎng)僅提供信息存儲(chǔ)空間,僅對(duì)用戶(hù)上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對(duì)用戶(hù)上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對(duì)任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請(qǐng)與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶(hù)因使用這些下載資源對(duì)自己和他人造成任何形式的傷害或損失。
最新文檔
- 地震安全課件百度
- 儀器儀表在安防領(lǐng)域的應(yīng)用考核試卷
- 搪瓷制品的企業(yè)文化與品牌效應(yīng)考核試卷
- 商務(wù)代理國(guó)際市場(chǎng)營(yíng)銷(xiāo)渠道開(kāi)發(fā)考核試卷
- 客戶(hù)關(guān)系管理在供應(yīng)鏈中的作用考核試卷
- 成人教育學(xué)習(xí)效果評(píng)估考核試卷
- 工業(yè)機(jī)器人法律倫理與社會(huì)責(zé)任考核試卷
- 承包母嬰店合同范本
- 簡(jiǎn)易訂單合同范本
- 水電售后安裝合同范本
- 小學(xué)生韻母in、ing常見(jiàn)漢字與區(qū)分練習(xí)
- 藥房品種類(lèi)別及數(shù)量清單
- 機(jī)關(guān)檔案管理工作培訓(xùn)PPT課件
- 初中物理人教版八年級(jí)下冊(cè) 第1節(jié)牛頓第一定律 課件
- 網(wǎng)站培訓(xùn)內(nèi)容trswcm65表單選件用戶(hù)手冊(cè)
- 連續(xù)平壓熱壓機(jī) 三篇 俞敏等
- 空調(diào)系統(tǒng)維保記錄表格模板
- 打印版-圓與二次函數(shù)綜合題精練(帶答案)
- 各種閥門(mén)CAD圖
- 工程結(jié)算書(shū)標(biāo)準(zhǔn)
- 氧氣管道吹掃方案(共7頁(yè))
評(píng)論
0/150
提交評(píng)論