軟件工程第四次作業二—單元測試 —[結對劉成誌]
單元測試:
結對開發成員:劉成誌
git代碼發布地址:
本次軟件工程作業程序代碼說明:
一、程序目的
本次作業目的在於設置一個四則運算的計算機,根據需求,我大致劃分了四個功能:
1.不帶括號的加減乘除四個數值的四則運算。
2.帶括號的加減乘除四個數值的四則運算。
3.帶參數並對輸入參數有需求的四則運算(括號隨機)。
4.分數四則運算,實現真分式。
二、程序相關函數說明
首先我現在程序頭部設置了兩個棧,分別放操作符和操作數值,如下:
private Stack<Character> priStack = new Stack<Character>();// 操作符棧
private Stack<Double> numStack = new Stack<Double>();;// 操作數棧
(一) public double caculate(String str)
這個函數是本程序中的主要計算函數,通過對輸入的字符串進行解析然後判斷操作符或是數值然後計算大致為:
1.判斷string當中有沒有非法字符 。
2.循環開始解析字符串,當字符串解析完,且符號棧為空時,則計算完成 。
3.用當前取得的運算符與棧頂運算符比較優先級:若高於,則因為會先運算,放入棧頂;若等於,因為出現在後面,所以會後計算,所以棧頂元素出棧,取出操作數運算; 若小於,則同理,取出棧頂元素運算,將結果入操作數棧。
4.判斷當前運算符與棧頂元素優先級,取出元素,進行計算(因為優先級可能小於棧頂元素,還小於第二個元素等等,需要用循環判斷。
(二)private boolean isNum(String temp)
這個函數主要的功能就是判斷傳入的字符是不是0-9的數字
(三) private boolean compare(char str)
這個函數是本程序中的比較操作符優先級的函數,大致思想如下:
1.比較當前操作符與棧頂元素操作符優先級,如果比棧頂元素優先級高,則返回true,否則返回false
2.str 需要進行比較的字符
3.比較結果 true代表比棧頂元素優先級高,false代表比棧頂元素優先級低
4. ‘(‘優先級最高, ‘)‘優先級最低, ‘*/‘優先級只比‘+-‘高
(四)public static void exception()
這個函數主要是為了處理異常輸入時候不至於打斷函數報錯的異常處理函數,比如除數不能為0,當隨機出題的時候遇到/0這種形式的時候就會調用exception函數並輸出一個提示語句然後進行正常出題,這樣可以保證在出現異常輸入時候整個程序還可以繼續回調執行。
(五)public static String doubletransint(double num)
這個函數主要是將double型輸出結果(如12.0)輸出時轉換為int型數據(如12)。
三、對本次程序和函數方法進行測試
(一)測試目的:
1.對不帶括號的加減乘除進行測試運算,檢查正常的輸入用例是否會輸出正確的結果,從而判斷函數方法是否會通過
2.對帶括號的加減乘除進行測試運算,檢查正常的輸入用例是否會輸出正確的結果,從而判斷函數方法是否會通過
(二)預期測試用例:
輸入測試用例 | 預期輸出結果 | 預期是否通過 |
6+5-2*8 | 報錯 | 否 |
6+5-2*8# | result=17 | 通過 |
20-5-4-3# | result=8 | 通過 |
2*3*4*5# | result=120 | 通過 |
100/2/2/5/5# | result=1 | 通過 |
(10-5)*2/(5-3)# | result1==5 | 通過 |
(三)測試過程:
按照我們設計的測試用例,在這裏主要設置了6組測試輸入用例,用以觀察輸出結果和是否通過。
(一)不帶括號的四則運算
1.測試加法四則運算,輸入測試用例“6+5-2*8”,輸出結果截圖所示:
錯誤原因分析:因為程序編譯初期,我在編寫過程中設置了用‘#’來判斷是否字符串輸入完畢,如果遍歷字符串遇到‘#’就截取‘#’前面的字符串,然後調用函數進行計算,在本次輸入測試用例時候未輸入‘#’致使在截取函數時候不知道該從什麽地方停止,從而報錯。
就錯誤原因分析後,我們進行復合編程規範的測試用例輸入,輸入:6+5-2*8#,輸出結果截圖所示:
2.測試減法法四則運算,輸入測試用例“20-5-4-3#”,輸出結果截圖所示:
3.測試乘法法法四則運算,輸入測試用例“2*3*4*5#”,輸出結果截圖所示:
4.測試除法法法四則運算,輸入測試用例“100/2/2/5/5#”,輸出結果截圖所示:
(二)帶括號的四則運算
帶括號的四則運算其實就是相比(一)中加了括號進行運算,原理基本一致,這裏我們就選一個多運算符混合測試用例進行測試,不在贅述。
輸入測試用例:(10-5)*2/(5-3)# ,輸出結果截圖所示:
(四)實際測試用例圖
輸入測試用例 | 實際輸出結果 | 是否通過 |
6+5-2*8 | java.lang.AssertionError | 否 |
6+5-2*8# | result=17 | 通過 |
20-5-4-3# | result=8 | 通過 |
2*3*4*5# | result=120 | 通過 |
100/2/2/5/5# | result=1 | 通過 |
(10-5)*2/(5-3)# | result1==5 | 通過 |
四、測試總結
本次測試主要是針對結對編程四則運算函數中的單元測試,對函數中的方法進行相關測試,在此我們通過前期分析測試目的、中期設計預期測試用例、後期進行程序中相關方法的測試,對不帶/帶括號的加減乘除四則運算分別進行了測試,對於不正確的輸入數值也進行了測試,得出了實際的測試用例圖,大致有以上6種,其他測試用例基本和以上6種殊途同歸。本次單元測試也讓我了解了myeclipse中的Junit測試,進一步豐富了自己在Java方面的所學。致此,結筆。
軟件工程第四次作業二—單元測試 —[結對劉成誌]