單元測試實踐實驗報告_第1頁
單元測試實踐實驗報告_第2頁
單元測試實踐實驗報告_第3頁
單元測試實踐實驗報告_第4頁
單元測試實踐實驗報告_第5頁
已閱讀5頁,還剩3頁未讀 繼續(xù)免費閱讀

下載本文檔

版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進行舉報或認領(lǐng)

文檔簡介

1、軟件測試技術(shù)單元測試實踐實驗報告誠信聲明本人鄭重承諾:本實驗報告是本人獨立工作所獲得的成果。盡我所知,實驗報告中除特別標注的地方外,不包含其他人已經(jīng)發(fā)表或撰寫過的成果。實驗報告中對報告工作的任何幫助者所做的貢獻均做了明確的說明并表達了謝意。如有抄襲,本人愿意承擔因此而造成的任何后果。特此聲明。 簽名: Eastmount 日期:2013-6-9任務(wù):第 2 題實驗內(nèi)容與完成情況:一. 實驗思想單元測試實踐中我測試題目是第2題“輸入年份year和月month,求該月有多少天”的任務(wù)。由于它是一個C語言程序,而且沒有子函數(shù),能直接計算其結(jié)果,所以直接把該程序看做一個測試單元,并采用如下實驗步驟進行

2、測試:1.首先對源程序進行不執(zhí)行的代碼走讀,靜態(tài)分析源程序代碼(靜態(tài)白盒測試方法),分析檢查源程序的語法、結(jié)構(gòu)、算法等的正確性,并對錯誤進行修正;2.然后采用動態(tài)黑盒測試的等價劃分、邊界值分析、錯誤猜解法等方法,并結(jié)合動態(tài)白盒測試的邏輯覆蓋,對每條語句及分支條件都進行覆蓋測試,同時測試過程中跟蹤執(zhí)行每一條語句,對程序進行比較完整動態(tài)測試; 3.分析統(tǒng)計測試的結(jié)果,并完成實驗報告。二. 靜態(tài)測試我采用的是VS 2012進行單元測試,源程序如下所示:#include main( ) int year, month, days;printf(Enter year and month:);scanf(

3、%d%d, &year, &month);switch (month) case 1: case 3: case 5: case 7: case 8: case 10: case 12: days=31; break; /* 處理“大”月 */case 4: case 6: case 9: case 11: days=30; break; /* 處理“小”月 */ case 2: if(year%4=0&year%100!=0 & year%400=0) days=29; /* 處理閏年平月 */ else days=28;/* 處理不是閏年平月 */ break; default: prin

4、tf(Input error!n); /* 月份錯誤 */ days=0; if( days!=0 ) printf(%d, %d is %d daysn, year, month, days);經(jīng)過代碼走讀,靜態(tài)分析源程序,我發(fā)現(xiàn)該程序具有以下錯誤:1.語法錯誤(1).主函數(shù)mian()缺少類型說明,應該添加int或void類型;(2).程序缺少返回值,如果定義的int型,添加“return 0;”返回值,如果是void型,添加“return;”返回空值;(3).注意“;”的使用,它應該是英文的“;”,而代碼中都是使用的中文的分號,這是一個編碼方式錯誤的語法錯誤;2.算法錯誤判斷閏年時的計算

5、公式:“year%4=0&year%100!=0&year%400=0”是錯誤的算法,它應該是該年“(year%4=0&year%100!=0)|(year%400=0)”時為閏年,2月為29天(下面的測試用例及測試都是修改后的算法進行的);3.代碼規(guī)范格式優(yōu)化(1).按照正規(guī)的、更有效、美觀的編碼方式,定義變量時應該每個變量單獨定義一行,這樣更加方便閱讀和使用,如下:int year;int month;int days;(2).在使用switch語句時,如果分支結(jié)果case中有多個語句時,最好使用括號包括相應的語句代碼,如下圖所示:default: printf(Input error!n

6、); /* 月份錯誤 */days=0;(3).在使用if語句時,最好都用括號包含相應語句代碼;同時括號要單獨占一行,這樣更加的方便別人與自己的閱讀與使用。三.動態(tài)測試在動態(tài)測試過程中,我主要采用黑盒動態(tài)測試等價劃分、邊界值分析、錯誤猜解法等方法,并結(jié)合白盒動態(tài)測試,邏輯覆蓋所有語句及分支條件并跟蹤每行代碼進行測試。 1.輸入數(shù)據(jù)特點由于該程序要求輸入的是year和month兩個數(shù)據(jù),并且都是int類型,再結(jié)合生活實際中年份和月份的知識,我對輸入數(shù)據(jù)的特點進行一下總結(jié):(1).輸入的數(shù)據(jù)類型應該為int型,并且輸入的是兩個數(shù)字;(2).輸入的年份范圍應該大于0,小于int型的最大可表達范圍;(

7、3).輸入的月份實際生活中只有12個月,因此應該為1-12間的數(shù)字;(4).由于要判斷每月多少天,所以月份還要劃分為4、6、9、11月30天,1、3、5、7、8、10、12月31天,2月特殊判斷;(5).同理,年數(shù)year也要劃分為閏年和非閏年;(6).同時注意測試月份1、12邊界值。2.列出等價類和邊界值表輸入條件有效等價類無效等價類年、月類型及個數(shù)(1).輸入2個int型數(shù)字(2).輸入非數(shù)字字符(3).輸入少于2個數(shù)字(4).輸入大于2個數(shù)字年份范圍(5).在0-int最大值之間閏年被400整除(6). 在0-int最大值之間閏年不被100整除且被4整除(7).在0-int最大值之間平年

8、(8).年份小于0(9).年份大于int最大值()月份范圍(10).月份=4,6,9,11(11).月份=3,5,7,8,10(12).月份=1(13).月份=12(14).月份=2(15).月份12(16).月份13.設(shè)計測試用例用例編號輸入預期輸出覆蓋等價類是否通過CS0012002 112002,11 is 30 days(1)、(7)、(10)CS002aaa bbbInput error!(2)CS0032002Input error!(3)CS0042002 11 10Input error!(4)CS0052000 102000,10 is 31 days(1)、(5)、(11)

9、CS0061996 11996,1 is 31 days(1)、(6)、(12)CS0071990 121990,12 is 31 days(1)、(7)、(13)CS0081800 21800,2 is 28 days(1)、(7)、(14)CS0092008 22008, 2 is 29 days(1)、(6)、(14)CS0102000 22000,2 is 29 days(1)、(5)、(14)CS011-2000 7Input error!(8)CS012 8Input error!(9)CS0132013 0Input error!(15)CS0142013 14Input err

10、or!(16)三. 實驗結(jié)果按照上面等價劃分和邊界值設(shè)置的測試用例,對源程序進行測試的結(jié)果如下圖所示:用例編號CS001輸入2002 11預期輸出2002,11 is 30 days覆蓋等價類(1)、(7)、(10)實際輸出是否通過通過用例編號CS002輸入aaa bbb預期輸出Input error!覆蓋等價類(2)實際輸出是否通過通過用例編號CS003輸入2002預期輸出Input error!覆蓋等價類(3)實際輸出一直等待再輸入一個數(shù)字是否通過未通過用例編號CS004輸入2002 11 10預期輸出Input error!覆蓋等價類(4)實際輸出應該只能輸入2個數(shù)字,輸入3個它也按兩個

11、數(shù)處理,顯然不能通過是否通過未通過用例編號CS005輸入2000 10預期輸出2000,10 is 31 days覆蓋等價類(1)、(5)、(11)實際輸出是否通過通過用例編號CS006輸入1996 1預期輸出1996,1 is 31 days覆蓋等價類(1)、(6)、(12)實際輸出是否通過通過用例編號CS007輸入1990 12預期輸出1990,12 is 31 days覆蓋等價類(1)、(7)、(13)實際輸出是否通過通過用例編號CS008輸入1800 2預期輸出1800,2 is 28 days覆蓋等價類(1)、(7)、(14)實際輸出是否通過通過用例編號CS009輸入2008 2預期

12、輸出2008, 2 is 29 days覆蓋等價類(1)、(6)、(14)實際輸出是否通過通過用例編號CS010輸入2000 2預期輸出2000,2 is 29 days覆蓋等價類(1)、(5)、(14)實際輸出是否通過通過用例編號CS010輸入2000 2預期輸出2000,2 is 29 days覆蓋等價類(1)、(5)、(14)實際輸出是否通過通過用例編號CS011輸入-2000 7預期輸出Input error!覆蓋等價類(8)實際輸出當輸入年份0時就應該是錯誤的年份是否通過未通過用例編號CS012輸入 8預期輸出Input error!覆蓋等價類(9)實際輸出從輸出結(jié)果可以發(fā)現(xiàn)int數(shù)

13、字已經(jīng)溢出,但它輸出了結(jié)果,應該輸出錯誤提示是否通過未通過用例編號CS013輸入2013 0預期輸出Input error!覆蓋等價類(15)實際輸出是否通過通過用例編號CS014輸入2013 14預期輸出Input error!覆蓋等價類(16)實際輸出是否通過通過四. 結(jié)果分析與體會經(jīng)過上面的測試后,該測試用例的語句覆蓋率和分支條件覆蓋率為100%,基本考慮了所有該題目的輸入情況。根據(jù)單老師課程所講述的內(nèi)容并結(jié)合課件,完美對題目2進行了單元測試,更好的掌握了靜態(tài)測試、動態(tài)測試方法,其中包括黑盒測試的等價劃分、邊界值設(shè)定,白盒測試的覆蓋所有路徑、分支條件,都更深刻的進行了學習與理解。出現(xiàn)的問

14、題:同時,在實驗中也遇到了一些問題,其中主要的問題如下:1.在對年份進行等價劃分時,它只要求輸入的為int型數(shù)字,沒有具體的輸入年份要求,但根據(jù)生活中的經(jīng)驗,是否該把小于0的年份和大于int型最大值的年份劃分至無效等價類?這是一個很困擾我的問題。2.它給定的題目是想測試輸入year和month判斷月份的天數(shù),但是在判斷閏年的公式中,它給出的是“year%4=0&year%100!=0&year%400=0”,而正確的應該為“(year%4=0&year%100!=0)|(year%400=0)”,是否應該把它修正在進行測試?因為在判斷測試用例是否通過時,依據(jù)上面不同的式子,通過的結(jié)果是不同的。

15、3.在靜態(tài)測試代碼,代碼走讀過程中,遇到的格式不是很規(guī)范的問題,是否應該把它編碼規(guī)范化,并修改記錄至文檔中?4.測試過程中,覆蓋等價類會出現(xiàn)重復的現(xiàn)象,這是不是會導致測試的效率降低,而當前測試用例又是必不可少的,是不是應該測試覆蓋的都是唯一的用例?解決方案(列出遇到的問題和解決辦法,列出沒有解決的問題):1.第一個問題,我的解決方法是:答:在測試過程中,應該結(jié)合生活中的實際來編寫測試用例,如題目中的month就應該設(shè)置1-12為有效月份,雖然題目中沒有提示,但這顯然是生活常識,而且是衡成立的公理,同樣設(shè)置year時就有小于0或大于int最大值為無效等價類。2.第二個問題,我的解決方法是:答:在靜態(tài)測試中,通過代碼走讀,把代碼中的錯誤都修正,同時計算閏年的公式也應該修改過來,再進行測試,因為它題目測試的要求是判斷月份,所以它就應該修改成正確的判斷閏年

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負責。
  • 6. 下載文件中如有侵權(quán)或不適當內(nèi)容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論