基于junit4的关于个人所得税计算的等价类与边界值_《边界值分析》-有这篇就够了...
目錄:
1.定義(What?)
邊界值分析法就是對輸入或輸出的邊界值進(jìn)行測試的一種黑盒測試方法,通常作為對等價類劃分法的補充,其測試用例來自等價類的邊界。
所謂邊界值,是指相對于輸入等價類和輸出等價類而言,稍高于邊界或稍低于邊界的一些特定情況。
2.為什么使用該方法?(Why)
- 等價類劃分忽略掉了某些特定類型的高效測試用例,而邊界值分析可以彌補其中的很多不足;
- 根據(jù)大量的測試統(tǒng)計數(shù)據(jù),編程的很多錯誤是發(fā)生在輸入定義域或輸出值域的邊界上,而不是發(fā)生在輸入/輸出范圍的中間區(qū)域。因此針對輸入和輸出等價類的邊界情況設(shè)計測試用例,可以查出更多的錯誤,具有更高的測試回報率;
- 邊界值數(shù)據(jù)本質(zhì)上是屬于某個等價類的范圍,測試時確實是一種冗余(重復(fù)),但是為了更好的測試質(zhì)量(邊界值特別容易出bug),邊界值必須要單獨測,適當(dāng)?shù)娜哂嗍强梢越邮艿摹?/li>
3.如何選定邊界值?(How)
很難提供一份如何進(jìn)行邊界值分析的“詳細(xì)說明”,因為這種方法需要一定程度的創(chuàng)造性,以及對問題采取一定程度的特殊處理辦法。
但是可以提供一些通用指南:
- 如果輸入條件規(guī)定了一個輸入值范圍,那么應(yīng)針對范圍的邊界設(shè)計測試用例,針對剛剛越界的情況設(shè)計無效輸入測試用例。舉例,如果輸入值的有效范圍是-1.0至+1.0,那么應(yīng)針對-1.0、1.0、-1.001和1.001的情況設(shè)計測試用例。
- 如果輸入條件規(guī)定了輸入值的數(shù)量,那么應(yīng)針對最小數(shù)量輸入值、最大數(shù)量輸入值,以及比最小數(shù)量少一個、比最大數(shù)量多一個的情況設(shè)計測試用例。舉例,如果某個輸入文件可容納1~255條記錄,那么應(yīng)根據(jù)0、1、256和255條記錄的情況設(shè)計測試用例。
- 對每個輸出條件應(yīng)用指南1。舉例,如果某個程序按月計算FICA的扣除額,且最小金額是0,最大金額是1165.25,那么應(yīng)該設(shè)計測試用例來測試扣除0和1165.25的情況。此外,還應(yīng)觀察是否可能設(shè)計出導(dǎo)致扣除金額為負(fù)數(shù)或超過1165.25的測試用例。
- (Tips:檢查結(jié)果空間的邊界很重要,因為輸入范圍的邊界并不總是能代表輸出范圍的邊界情況(例如三角正弦函數(shù)sin)。但是總是產(chǎn)生超過輸出范圍的結(jié)果也是不大可能的,但無論如何,應(yīng)該考慮這種可能性。)
- 對每個輸出條件應(yīng)用指南2。如果某個信息檢索系統(tǒng)根據(jù)輸入請求顯示關(guān)聯(lián)程度最高的信息摘要,而摘要的數(shù)量從未超過4條,則應(yīng)編寫測試用例,使程序顯示0條、1條和4條摘要,還應(yīng)設(shè)計測試用例,導(dǎo)致程序錯誤地顯示5條摘要。
- 如果程序的輸入或輸出是一個有序序列(例如順序的文件、線性列表或表格),則應(yīng)特別注意該序列的第一個和最后一個元素。
- 如果程序中使用了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當(dāng)選擇這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界上的值作為測試用例。
- 此外,發(fā)揮聰明才智找出其他的邊界條件。
Tips:邊界值分析方法和等價類劃分之間的重要區(qū)別是,邊界值分析考察正處于等價劃分邊界或在邊界附近的狀態(tài)。
4. 設(shè)計測試用例
A.確定邊界值
在嘗試針對劃分好的等價類進(jìn)行邊界值取值的時候,一定要有適當(dāng)?shù)姆秶?#xff0c;不是根據(jù)我們的端點值往左右兩側(cè)隨意選擇測試值,而是也有科學(xué)的方法進(jìn)行選擇。
邊界值點的定義:
上點:邊界上的點,閉內(nèi)開外(“閉”是指域的邊界是封閉的,即閉區(qū)間;“開”是指域的邊界是開放的,即開區(qū)間)。
離點:離上點最近的點稱為離點。開內(nèi)閉外。
內(nèi)點:域范圍內(nèi)的任意一點。
三點分析法:結(jié)合等價類劃分的具體情況,針對邊界值的選擇就包括開區(qū)間、閉區(qū)間以及半開半閉區(qū)間。
- 閉區(qū)間:閉區(qū)間中的情況,上點為可以取值的點,在上點之間任取一點就是內(nèi)點。而緊鄰上點范圍之外的第一對點被稱為離點(也稱為外點)
- 半開半閉區(qū)間:半開半閉區(qū)間中,上點與內(nèi)點的定義不變。離點是開區(qū)間一側(cè)上點內(nèi)部范圍內(nèi)緊鄰的點,而在閉區(qū)間一側(cè)是上點外部范圍內(nèi)緊鄰的點。
- 開區(qū)間:開區(qū)間中,上點與內(nèi)點的定義仍然不變。而離點就是上點內(nèi)部范圍內(nèi)緊鄰的一對點。
總結(jié)為,上點就是區(qū)間的端點值,而內(nèi)點就是上點之間任意一點。對于離點,要分具體情況,如果開區(qū)間的離點,就是開區(qū)間中上點內(nèi)側(cè)緊鄰的點;如果是閉區(qū)間的離點,就是閉區(qū)間中上點外側(cè)緊鄰的點。
PS.小數(shù)類型,等價類+邊界值測試時的注意事項: 有效等價類:除了有效的小數(shù)外,有效的整數(shù)也需要測(小數(shù)中默認(rèn)包含了整數(shù),除非需求中明確的說:小數(shù)中不包含整數(shù)) 無效等價類:小數(shù)類型—非小數(shù)(非數(shù)):字母、漢字、特殊字符;小數(shù)位數(shù)—超出小數(shù)的有效位數(shù)(例如:最多兩位,那么>2位就是無效等價類) 邊界值:小數(shù)的次邊界與邊界之間的相差單位是與精確度相關(guān)的,例如:精確到小數(shù)點后2位,那么相差單位就是0.01。例如:最小值是:1.00那么次邊界就是 0.99 和1.01;要考慮小數(shù)位數(shù)的邊界問題。例如:小數(shù)位數(shù)最大值:小數(shù)點后2位 那么次邊界是:小數(shù)點后1位和小數(shù)點后3位B.設(shè)計測試用例(詳見“實戰(zhàn)演練”)
5. 根據(jù)測試用例的完整性劃分
單缺陷假設(shè)與多缺陷假設(shè):
單缺陷假設(shè)是邊界值分析的關(guān)鍵假設(shè)。單缺陷假設(shè)指“失效極少是由兩個或兩個以上的缺陷同時發(fā)生引起的”。在邊界值分析中,單缺陷假設(shè)即選取測試用例時僅僅使得一個變量取極值,其他變量均取正常值。
多缺陷假設(shè)則是指“失效是由兩個或兩個以上缺陷同時作用引起的”,要求在選取測試用例時同時讓多個變量取極值。
幾種邊界值分析法模型:一般性邊界值測試、健壯性測試、最壞情況測試、健壯性最壞情況測試。
- 一般性邊界值測試
有n個輸入變量,設(shè)計測試用例使得一個變量在數(shù)據(jù)有效區(qū)域內(nèi)取最大值、略小于最大值、正常值、略大于最小值和最小值。如下圖所示,兩個變量X1,X2。它們的有效取值區(qū)間分別為[a,b]、[c,d]。
對于有n個輸入變量的程序,一般性邊界值分析的測試用例個數(shù)為4n+1。
邊界值測試分析采用了可靠性理論的單缺陷假設(shè)。
- 優(yōu)點:簡便易行;生成測試數(shù)據(jù)的成本很低;
- 局限性:測試用例不充分;不能發(fā)現(xiàn)測試變量之間的依賴關(guān)系;
- 結(jié)論:只能作為初步測試用例使用。
- 健壯性測試
健壯性是指在異常情況下,軟件還能正常運行的能力。健壯性考慮的主要部分是預(yù)期輸出,而不是輸入。健壯性測試是邊界值分析的一種簡單擴(kuò)展。除了變量的5 個邊界分析取值還要考慮略超過最大值(max)和略小于最小值(min)時的情況。健壯性測試的最大價值在于觀察處理異常情況,它是檢測軟件系統(tǒng)容錯性的重要手段。如下圖所示。
PS:軟件容錯性的度量:從非法輸入中恢復(fù);健壯性有兩層含義:容錯能力和恢復(fù)能力
對于有n個輸入變量的程序,健壯性測試的測試用例個數(shù)為6n+1。
- 最壞情況測試
最壞情況測試拒絕單缺陷假設(shè),它關(guān)心的是當(dāng)多個變量取極值時出現(xiàn)的情況。最壞情況測試中,對每一個輸入變量首先進(jìn)行包含最小值、略高于最小值、正常值、略低于最大值、最大值等5個元素集合的測試,然后對這些集合進(jìn)行笛卡爾積計算,以生成測試用例。最壞情況測試將意味著更大工作量。如下圖所示。
對于有n個輸入變量的程序,最壞情況測試的測試用例個數(shù)為5^n。
最壞情況與基本邊界值分析的比較:
- 基本邊界值分析測試用例是最壞情況測試用例的真子集;
- 最壞情況測試顯然更徹底;
- 最壞情況測試工作量大得多,變量函數(shù)的最壞情況測試會產(chǎn)生5的n次方個測試用例,邊界值分析只產(chǎn)生4n+1個測試用例。
- 健壯性最壞情況測試
健壯性最壞情況假設(shè)對每一個變量首先進(jìn)行最小值、略小于最小值的值、略高于最小值的值、正常值、最大值、略高于最大值的值、略低于最大值的值等7個元素的集合。然后對這些集合進(jìn)行笛卡爾積運算,以生成測試用例。如下圖所示。
對于有n個輸入變量的程序,健壯最壞情況測試的測試用例個數(shù)為7^n。
6.邊界的分類
- 邊界條件:可以在產(chǎn)品說明書中有定義或者在使用軟件過程中確定;
- 內(nèi)部邊界條件:在軟件內(nèi)部,也稱為內(nèi)部邊界條件;
- 其他邊界條件:如輸入信息為空、非法、錯誤、不正確和垃圾數(shù)據(jù)。
A.邊界條件的常見數(shù)據(jù)類型
數(shù)值、速度、字符、地址、位置、尺寸、數(shù)量、空間
- 例如,“字符”,邊界值是起始-1字符、結(jié)束+1個字符。測試用例的設(shè)計思路是,假設(shè)一個文本輸入?yún)^(qū)域允許輸入1個到255個 字符,輸入1個和255個字符作為有效邊界值;輸入0個和256個字符作為無效邊界值,這幾個數(shù)值都屬于邊界條件值。
- 例如“數(shù)值”,邊界值是最小值-1、最大值+1。測試用例的設(shè)計思路是,假設(shè)某軟件的數(shù)據(jù)輸入域要求輸入5位的數(shù)據(jù)值,可以使用10000作為最小值、99999作為最大值;然后使用剛好小于5位和大于5位的數(shù)值來作為邊界條件。
- 例如“空間”,邊界值是小于空余空間一點、大于滿空間一點。測試用例的設(shè)計思路是,例如在用U盤存儲數(shù)據(jù)時,使用比剩余磁盤空間大一點(幾KB)的文件作為邊界條件。
B.內(nèi)部邊界條件
在多數(shù)情況下,邊界值條件是基于應(yīng)用程序的功能設(shè)計而需要考慮的因素,可以從軟件的規(guī)格說明或常識中得到,也是最終用戶可以很容易發(fā)現(xiàn)問題的。然而,在測試用例設(shè)計過程中,某些邊界值條件是不需要呈現(xiàn)給用戶的,或者說用戶是很難注意到的,但同時確實屬于檢驗范疇內(nèi)的邊界條件,稱為內(nèi)部邊界值條件或子邊界值條件。
內(nèi)部邊界值條件主要有下面幾種:
- 數(shù)值的邊界值檢驗:計算機是基于二進(jìn)制進(jìn)行工作的,因此,軟件的任何數(shù)值運算都有一定的范圍限制。
- 符的邊界值檢驗:在計算機軟件中,字符也是很重要的表示元素,其中ASCII和Unicode是常見的編碼方式。如下列出了一些常用字符對應(yīng)的ASCII碼值。
- 其它邊界值檢驗:在不同的行業(yè)應(yīng)用領(lǐng)域,依據(jù)硬件和軟件的標(biāo)準(zhǔn)不同而具有各自特定的邊界值。如下列出部分手機相關(guān)的邊界值
7.使用場景
有數(shù)據(jù)輸入且存在取值邊界或長度邊界時,一般可以使用邊界值法。邊界值法往往跟等價類劃分法一起使用,從而形成一套較為完善的測試方案。
8. 實戰(zhàn)演練
例1. MTEST是一個多項選擇考試的評分程序。程序的輸入是一個名為OCR的數(shù)據(jù)文件,包含多個長度為80個字符的記錄。按照文件的格式要求,第一個記錄的內(nèi)容是標(biāo)題,作為每份輸出報告的標(biāo)題。后面的一組記錄的首條記錄中,第1~3列存儲的是試題的數(shù)量(一個1~999的數(shù)),第10~第59列存儲的是第1~第50道試題的標(biāo)準(zhǔn)答案(任何字符都為有效答案),后續(xù)記錄的第10第59列存儲的是第51~第100道試題、第101~第150道試題的標(biāo)準(zhǔn)答案等。第三組記錄描述的是每個學(xué)生的答案,這些記錄的最后一個字母皆為“3”。對于每個學(xué)生來說,第一條記錄的第1~第9列存儲的是學(xué)生的名字或編號(任意字符),第10~第59列存儲的是該學(xué)生對第1~第50道試題的答案。如果本次考試試題超過50個,該學(xué)生的后續(xù)記錄的第10~第59列存儲的是第51~第100、第101~第150道試題的答案等。學(xué)生的人數(shù)最多是200。輸入數(shù)據(jù)如下圖所示。四個輸出報告分別是:
例2. 在三角形問題描述中,除了要求邊長是整數(shù)外,沒有給出其它的限制條件。在此,我們將三角形每邊邊長的取范圍值設(shè)值為[1, 100] 。那么三角形問題的邊界值分析測試用例如下:
- 一般性邊界值測試
- 健壯性邊界值測試
- 最壞邊界值:5^3=125條測試用例
- 最壞健壯性邊界值:7^3=343條測試用例
例3. 某程序具有如下功能:文本框要求輸入日期信息,日期限定在1990年1月~2049年12月,并規(guī)定日期由6位數(shù)字字符組成,前4位表示年,后2位表示月;程序需對輸入的日期有效性進(jìn)行校驗。用等價類劃分方法和邊界值分析法為該程序的“日期檢查功能”設(shè)計測試用例。
A.劃分等價類&選取邊界值
步驟一、要求輸入6個數(shù)字字符yyyynn;參照等價類劃分法規(guī)則5,劃分為一個有效等價類和三個無效等價類。
- 有效等價類(1):輸入6個數(shù)字字符
- 無效等價類(2):輸入6個字符,存在非數(shù)字的情況
- 采用邊界值,6個字符全為非數(shù)字:abcdef
- 采用邊界值,6個字符中有1個為非數(shù)字:19930m
- 無效等價類(3):輸入少于6個數(shù)字字符
- 采用邊界值,輸入5個數(shù)字字符
- 無效等價類(4):輸入多于6個數(shù)字字符
- 采用邊界值,輸入7個數(shù)字字符
步驟二、在有效等價類(1)的基礎(chǔ)上,參照等價類劃分法規(guī)則6,對該等價類進(jìn)行細(xì)分;考察6個數(shù)是否滿足日期格式要求,1990<=yyyy<=2049,01<=nn<=12,參照規(guī)則,劃分為一個有效等價類和四個無效等價類。
- 有效等價類(5):日期格式滿足要求,1990<=yyyy<=2049,01<=nn<=12
- 采用邊界值,[yyyy,nn]取值為:[1990,06],[1991,06],[2020,06],[2048,06],[2049,06],[2020,01],[2020,02],[2020,11],[2020,12]
- 無效等價類(6):yyyy不滿足要求,yyyy<1990
- 采用邊界值,[yyyy,nn]取值為:[1989,06]
- 無效等價類(7):yyyy不滿足要求,yyyy>2049
- 采用邊界值,[yyyy,nn]取值為:[2050,06]
- 無效等價類(8):nn不滿足要求,nn<01
- 采用邊界值,[yyyy,nn]取值為:[2020,00]
- 無效等價類(9):nn不滿足要求,nn>12
- 采用邊界值,[yyyy,nn]取值為:[2020,13]
B.設(shè)計測試用例
例4. 假設(shè)商店貨品價格(R)皆不大于100元(且為整數(shù)),若顧客付款在100元內(nèi)(P),求找給顧客的最少貨幣個(張)數(shù)?(貨幣面值50元,10元,5元,1元四種)
題目分析:設(shè)四種貨幣的張數(shù)分別為n50、n10、n5、n1(均為整數(shù))它們的值即為結(jié)果。
- 輸入情況有R>100, 0<R<=100, 0<R, P>100, R<=P<=100, P<R。
- 輸出情況有n50=1||0, 0<= n10 <5, n5=1||0, 0<= n1 <5。
- 測試實例(R,P)有:
本例采用的是最壞情況測試,因為兩個變量中P變量的邊界是隨著R變化而變化的,因此在測試中先確定R的取值,然后在此基礎(chǔ)上對P的取值進(jìn)行分析。由于采用最壞情況測試,出現(xiàn)了比較多的非法輸入。其實這些非法輸入可以根據(jù)R的值分成三個等價類非別是R>100, 0<R<=100, R<=0,在此為了展示所有情況,所以列出了所有可能的操作。
9.邊界值分析的優(yōu)缺點
- 優(yōu)點:更全面更系統(tǒng)的測試邊界上存在的問題,是最有效的測試用例設(shè)計方法之一;
- 缺點:只能作為一個對其他設(shè)計方法的補充;這種方法表面上聽起來簡單,但有的邊界值非常微妙,不容易確定下來;只適用于多個變量相互獨立又都代表實際物理量的情況,對變量之間的依賴關(guān)系則考慮不到。
10.特殊值測試
特殊值測試的基本思想,邊界值分析假定n個變量是互相獨立的,沒有考慮這些變量之間的互相依賴關(guān)系;特殊值測試使用領(lǐng)域知識、使用類似程序的經(jīng)驗來確認(rèn)用例的特殊值。
- 特點:最直觀、最不一致、具有高度主觀性;
- 特殊值測試特別依賴測試人員的能力;
- 雖然特殊值測試是高度主觀性,但是能更有效地發(fā)現(xiàn)問題。例如:2月28日、2月29日
11.邊界值分析和等價類劃分的聯(lián)系
- 一個屬于確認(rèn)有有效和無效區(qū)間,一個屬于確認(rèn)邊界,聯(lián)系就是等價類劃分和邊界值要一起考慮,邊界值分析法屬于等價類劃分法的補充,任何等價區(qū)間都有邊界,有邊界就有等價區(qū)間;
- 與從等價類中挑選出任意一個元素作為代表不同,邊界值分析需要選擇一個或多個元素,以便等價類的每個邊界都經(jīng)過一次測試
12. 常見的產(chǎn)生邊界值bug的原因
- 疏忽開區(qū)間閉區(qū)間
- 疏忽循環(huán)變量的初始值(0,1的區(qū)別)
- 數(shù)組越界等等。
13. 邊界值法應(yīng)用時,如果測試時間緊張,應(yīng)該優(yōu)先測試哪些點?
優(yōu)先測試最大值和最小值
創(chuàng)作挑戰(zhàn)賽新人創(chuàng)作獎勵來咯,堅持創(chuàng)作打卡瓜分現(xiàn)金大獎總結(jié)
以上是生活随笔為你收集整理的基于junit4的关于个人所得税计算的等价类与边界值_《边界值分析》-有这篇就够了...的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: navicat循环执行上下两行相减sql
- 下一篇: 用php写一个可以抽取随机数的工具一次只