1. 程式人生 > >【軟體測試】黑盒測試方法——決策表

【軟體測試】黑盒測試方法——決策表

1.地位:
決策表法被稱為“最嚴格、最具有邏輯性”的黑盒測試方法,能夠複雜邏輯關係和多條件組合情況表達的較為明確。適用於:輸入輸出較多且相互制約條件較多的問題。

2.決策表:
由條件樁、動作樁、條件項、動作項四個部分組成
條件樁是指問題中的限制條件;
動作樁是指要執行的操作;
條件項其中條件樁中各個條件組合;
動作項是一個條件組合的特定取值後相應要執行的動作;
規則: 任何一個條件組合的特定取值及相應要執行的操作稱為一條規則;

3.規則合併(判定表的簡化)
有兩條或多條規則具有相同動作且他們的條件項之間存在可化簡關係就可以將規則合併。
那麼,什麼是可化簡關係?
即條件樁中僅有一個條件的值不一樣,而執行的動作卻是一致的。

4.總結
決策表的適用範圍:程式中,輸入輸出較多,而且相互制約條件較多;如,if_then_else邏輯很突出——輸入變數間存在邏輯關係——設計輸入變數子集的計算——輸入和輸出之間存在因果關係。
優點:決策表可以把複雜的問題按各種可能的情況一一列舉出來,簡單明瞭,避免遺漏。
缺點:不可以表達重複執行的動作,如迴圈結構。

5.例項分析——preDate
題目:前一日函式 PreDate 是 NextDate 的逆函式,即給定一個月份、日期、年,會返回前一天的日期。
年的取值在 1812 年到 2017 年。日的取值在 1 日到 31 日之間。月的取值在 1 到 12 月之間。

條件:
M1:{月份:上一月份有30天}
M2:{月份:上一月份有31天,1月份除外}
M3:{月份:上一月是2月}
M4:{月份:本月是1月}
Y1:{年:年是閏年}
Y2:{年:年是平年}
D1:{日:當天是該月的第一天}
D2:{日:當天不是該月的第一天}

源程式:

package main;

import java.text.DateFormat;
import java.util.Calendar;
import java.util.Date;
import java.util.Scanner;

/*
 * code by diudiu,2017-03-21
 *
 * */
public class PreDate { private int year; private int month; private int day; Calendar date=java.util.Calendar.getInstance(); public int getYear() { return year; } public void setYear(int year) { this.year = year; } public int getMonth() { return month; } public void setMonth(int month) { this.month = month; } public int getDay() { return day; } public void setDay(int day) { this.day = day; } //使用者輸入 public void Input(){ String s1="2017-03-21 09:25:10"; Calendar st=java.util.Calendar.getInstance(); int year,month,day; while(true){ @SuppressWarnings("resource") Scanner s11=new Scanner(System.in); s1=s11.nextLine(); DateFormat df=new java.text.SimpleDateFormat("yyyy-MM-dd"); String[] s1Arr=s1.split("-"); year=Integer.parseInt(s1Arr[0]); month=Integer.parseInt(s1Arr[1]); day=Integer.parseInt(s1Arr[2]); if(year<1812||year>2017){ System.out.println("輸入年份錯誤,範圍為1812<=year<=2017,請重輸入年份"); } else if(month<1||month>12){ System.out.println("輸入月份錯誤,範圍為1<=month<=12,請重輸入月份"); } else if(day<1||day>31){ System.out.println("輸入日錯誤,範圍為1<=day<=31,請重輸入日"); } else if(M2(month)&&day>30){ System.out.println("輸入日錯誤,當月的天數範圍為1<=day<=30,請重輸入日"); } else if(Y1(year)&&M3(month)&&day>29){ System.out.println("當年是閏年,二月的天數範圍為1<=day<=29,請重輸入日"); } else if(Y2(year)&&M3(month)&&day>28){ System.out.println("當年是平年,二月的天數範圍為1<=day<=28,請重輸入日"); } else { try { st.setTime(df.parse(s1)); }catch(java.text.ParseException e){ System.err.println("日期格式輸入不正確,程式終止!"); System.exit(0); } break; } }//輸入時間合法 //System.out.print(s1); System.out.println(year+"-"+month+"-"+day); date=st; setYear(year); setMonth(month); setDay(day); } //條件判斷 boolean M1(int month){//輸入月份的上一月份有30天 if(month==4||month==6||month==9||month==11)return true; return false; } boolean M2(int month){//輸入月份的上一月份有31天,除了1月 if(month==12||month==3||month==5||month==7||month==10)return true; return false; } boolean M3(int month){//輸入月份的上一月份是2月 if(month==2)return true; return false; } boolean M4(int month){//輸入月份的上一月份是1月 if(month==0)return true; return false; } boolean D1(int day){ if(day==1)return true; return false; } boolean D2(int day){ if(day!=1)return true; return false; } boolean Y1(int year){//閏年,2月份是29天 if((((year%4==0&&year%100!=0)||year%400==0)))return true; return false; } boolean Y2(int year){//平年,2月份是28天 if(!((year%4==0&&year%100!=0)||year%400==0))return true; return false; } //已知date,year,month,day,計算上一天 public Calendar rPreDate(){ Calendar pd=java.util.Calendar.getInstance(); //判斷前一天的計算方式 //pd.setWeekDate(year-1, month-1, day-1); int yearp = year,monthp = month-1,dayp=0; if(D1(day)){ if(M1(month-1)){monthp=month-1;dayp=30;} if(M2(month-1)){monthp=month-1;dayp=31;} if(M3(month-1)){ if(Y2(year)){ monthp=month-1;dayp=29; }else{ monthp=month-1; dayp=28; } } if(M4(month-1)){//1月1號 yearp=year-1; monthp=12; dayp=31; } }else{ yearp=year; monthp=month; dayp=day-1; } System.out.println(); System.out.println(yearp+"-"+monthp+"-"+dayp); pd.set(yearp, monthp, dayp); return pd; } //主方法 public static void main(String[] args) { // TODO Auto-generated method stub PreDate pdate=new PreDate(); pdate.Input(); Calendar predate=pdate.rPreDate(); System.out.print(pdate.date.getTime()); System.out.println(); System.out.print(predate.getTime()); } }

相關推薦

軟體測試測試方法——決策

1.地位: 決策表法被稱為“最嚴格、最具有邏輯性”的黑盒測試方法,能夠複雜邏輯關係和多條件組合情況表達的較為明確。適用於:輸入輸出較多且相互制約條件較多的問題。 2.決策表: 由條件樁、動作樁、條件項、動作項四個部分組成 條件樁是

軟體測試測試的條件覆蓋標準強於判定覆蓋(錯)

白盒測試的條件覆蓋標準強於判定覆蓋(錯) 條件覆蓋:每個複合判定表示式的每個簡單判定條件的取真和取假情況至少執行一次; 判定覆蓋:又稱為分支覆蓋,其含義是保證程式中每個判定節點的取真和取假分支至

軟體測試基礎--白測試測試、自動化測試

1   白盒測試         白盒測試也稱為結構測試或者邏輯驅動測試,它是按照程式內部的結構測試程式,通過測試來檢驗產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程式中的每條通路是否能按照預定要求正確工作          這一方法是吧測試物件看做一個開啟的盒

軟體測試測試——因果圖分析、判定驅動

一、因果圖分析 1. 方法簡介 等價類劃分法和邊界值分析法——輸入條件相互獨立 ; 如果輸入條件之間存在聯絡,則很難描述,測試效果難以保障 ; 因果圖法適合於描述對於多種條件的組合,相應產生多個動作的形式 ; 因果圖方法最終生成的就是判定表。它適合於檢查程式輸入條件的各種組合情況

測試測試用例設計方法(邊界值分析)

        此方法是對等價類劃分法的補充,他不是選擇等價類的任意元素,而是選擇等價類邊界的測試用例,邊界值的處理也是比較容易出錯的地方。使用邊界值分析方法設計測試用例,首先應確定邊界情況。通常輸入

軟體測試技術之: 白測試測試

一般地,我們將軟體測試活動分為以下幾類:黑盒測試、白盒測試、靜態測試、動態測試、手動測試、自動測試等等。 黑盒測試 黑盒測試又叫功能測試、資料驅動測試或給予需求規格說明書的功能測試。這種測試注重於測試軟體的功能性需求。 採用這種測試方法,測試工程師把測試物件看作一個黑盒

Android 白測試之單元測試(junit),測試之mokey測試

導言: 做安卓也有幾個年頭,對於小專案基本都不去單元測試和穩定性測試等,都是在出現異常後通過debug處理或log列印即可解決,當然對於大的專案,由於執行時效問題,加快開發效率,一些測試方法必須要做,比如白盒測試之單元測試,最新的AS都集成了junit,還有黑盒測試(功能測試)之moke

Android 白測試之單元測試(junit),測試之mokey

導言: 做安卓也有幾個年頭,對於小專案基本都不去單元測試和穩定性測試等,都是在出現異常後通過debug處理或log列印即可解決,當然對於大的專案,由於執行時效問題,加快開發效率,一些測試方法必須要做,比

測試測試的比較

白盒測試是窮舉路徑測試,黑盒測試是窮舉輸入測試,這兩種方法是基於完全不同的觀點,反應了事物的兩個極端,它們各有側重和優勢,但不能彼此替代。在現代的測試理念中,這兩種測試方法不是截然分開的,而是交叉使用。

淺談效能測試測試和白測試的關係

效能測試相對於黑盒測試和白盒測試是另一種測試方法拆分的類別。也就是說效能測試既不是白盒測試也不是黑盒測試。 舉個例子,相對於功能測試,功能測試是保證功能的正確性,而效能測試是在功能正確的基礎上考慮功能的響應時間、資源佔用等。 如果從使用者體驗上去觀察效能就屬

迴歸測試、白測試測試等概念

迴歸測試 迴歸測試是指修改了舊程式碼後,重新進行測試以確認修改沒有引入新的錯誤或導致其他程式碼產生錯誤。自動迴歸測試將大幅降低系統測試、維護升級等階段的成本。 迴歸測試包括兩部分:函式本身的測試、其他程式碼的測試。在 對被修改的函式重新測試。如果函式的設計功能沒有變化,直接執行函式測試就可以了。如果修改了設計

測試測試的聯絡與區別

軟體測試的方法有很多,比如白盒測試,黑盒測試,靜態測試,動態測試等等,但主要的還是白盒測試和黑盒測試。 白盒測試主要是指實際執行被測程式,通過程式的原始碼進行測試而不使用使用者介面。這種型別的測試需要從程式碼句法發現內部程式碼在演算法,溢位,路徑,條件等等中的缺點或者錯誤,

測試基礎 測試

1.等價類劃分  等價類是指某個輸入域的子集合。在該子集合中,各個輸入資料對於揭露程式中的錯誤都是等效的,併合理地假定:測試某等價類的代表值就等於對這一類其它值的測試,因此,可以把全部輸入資料合理劃分為若干等價類,在每一個等價類中取一個數據作為測試的輸入條件就可以用少量

測試測試詳解

白盒測試也稱結構測試或邏輯驅動測試,它是按照程式內部的結構測試程式,通過測試來檢測產品內部動作是否按照設計規格說明書的規定正常進行,檢驗程式中的每條通路是否都能按預定要求正確工作。 這一方法是把測試物件看作一個開啟的盒子,測試人員依據程式內部邏輯結構相關資訊,設計或選擇測試

測試測試與灰測試的區別

白箱測試或白盒測試(White-box testing 或glass-box testing)是通過程式的源程式碼進行測試而不使用使用者介面。這種型別的測試需要從程式碼句法發現內部程式碼在演算法,溢位,路徑,條件等等中的缺點或者錯誤,進而加以修正。   黑箱測試或黑盒測試(Black-box testing

軟體測試功能性測試方法測試

題目對電話賬單來說,春季和秋季的標準時間與夏時制時間的轉換會帶來有意思的問題。春 季,這種轉換髮生在(3 月末,4 月初的)星期日凌晨 2:00 時,這時時鐘要設定為凌晨 3: 00 時。對稱的轉換通常發生在 10 月最後一個星期日,時鐘要從 2:59:59 調回到 2:00

測試用例設計方法普及轉載

異常分析 ble 測試方法 優先 命名 www alt 方式 積累 測試用例的設計是測試實現階段的核心工作,也是指導如何執行測試的基礎。 測試用例(Test Case)是為某個特殊目標而編制的一組測試輸入、執行條件以及預期結果,以便測試某個程序路徑或核實是否滿足某

軟體測試學會這些測試方法,成功晉升產品經理不是夢

測試工程師做了一段時間之後,很多人都有自己的打算,有的人準備從事其他的方面,有的人準備繼續強化自己,做一個精英測試工程師,本文就提供給大家另外一個選擇,從測試工程師轉職產品經理,對於現在是測試工程師的你,如果你有這方面的打算的話,可以按照文中的資訊開始著手準備了,不久的將來,你就是一名優秀的產品經理。產品經理

工作隨筆一個測試很難測到的缺陷-BigDecimal除不盡導致報錯

入參 超過 strong 解決方案 分享圖片 使用 情況 就是 應該 問題背景: 昨天加班做公司項目的冒煙測試,在測試導入包店陳列計劃文件時,本應該成功導入的文件導入失敗。 這個活動文件導入的邏輯中由一條:導入的記錄平均金額不能超過100(每一行記錄都由一列記錄

測試用例設計-錯誤推測和因果圖方法

9.png sub png str 二義性 生成 當前 其中 關系 3.錯誤推測方法 基於經驗和直覺,找出程序中你認為可能出現的錯誤,有針對性地設計測試用例。經驗可能來自於在對某項業務的測試較多,也可以來自於售後用戶的反饋意見,或者從故障管理庫中整理bug。梳