一、 黑盒測試和白盒測試的直觀圖
從圖中可以直接看出來,黑盒測試就當整個程序是個黑盒子,我們看不到它里面做了些什么事情,只能通過輸入輸出看是否能得到我們所需的來測試。而白盒測試可以當盒子是透明的,里面的一切我們都看的清楚,從而我們可以通過去測內(nèi)部結(jié)構(gòu)來測試。
二、黑盒測試
黑盒測試又稱為功能測試、數(shù)據(jù)驅(qū)動測試或基于規(guī)格說明書的測試,是一種從用戶觀點出發(fā)的測試。測試人員一般把被測程序當作一個黑盒子。
黑盒測試主要測到的錯誤類型有:不正確或遺漏的功能;接口、界面錯誤;性能錯誤;數(shù)據(jù)結(jié)構(gòu)或外部數(shù)據(jù)訪問錯誤;初始化或終止條件錯誤等等。
常用的黑盒測試方法有:等價類劃分法;邊界值分析法;因果圖法;場景法;正交實驗設(shè)計法;判定表驅(qū)動分析法;錯誤推測法;功能圖分析法。
1、等價類劃分法
等價類分為有效等價類和無效等價類,其中,有效等價類是指對于程序的規(guī)格說明來說是合理的,有意義的輸入數(shù)據(jù)構(gòu)成的集合;而無效等價類是指對于程序的規(guī)格說明來說是不合理的,沒有意義的輸入數(shù)據(jù)構(gòu)成的集合。
確定等價類的原則是:a. 在輸入條件規(guī)定了取值范圍或值的個數(shù)的情況下,則可以確定一個有效等價類和兩個無效等價類,比如若規(guī)定的輸入范圍是1<x<10的所有數(shù),則有效的是1~10內(nèi)的任意數(shù),而無效的是 -∞~0.9999 和10.00001~+∞; b. 在輸入條件規(guī)定了輸入值的集合或者規(guī)定了“必須如何”的條件的情況下,則可以確立一個有效等價類和一個無效等價類;c.在輸入條件是一個布爾量的情況下,可以確定一個有效的等價類和一個無效的等價類;d. 在規(guī)定了輸入數(shù)據(jù)的一組值(假定n個),并且程序要對每一個輸入值分別處理的情況下,可以確立n個有效等價類和一個無效等價類;e. 在規(guī)定了輸入數(shù)據(jù)必須遵守的規(guī)則的情況下,可以確立一個有效等價類(符合規(guī)則)和若干個無效等價類(從不同角度違反規(guī)則);f.在確知已劃分的等價類中各元素在程序處理中的方式不同的情況下,則應(yīng)再將改等價類進一步的劃分為更小的等價類。

2、邊界值分析法
根據(jù)經(jīng)驗法則,大量的錯誤是發(fā)生在輸入或輸出范圍的邊界上的,而不是發(fā)生在輸入輸出范圍的內(nèi)部。因此針對各種邊界情況涉及測試用例,可以查出更多的錯誤。而使用邊界值的分析方法涉及測試用例,首先應(yīng)確定邊界情況。通常輸入和輸出等價類的邊界,應(yīng)當選取正好等于,剛剛大于或者剛剛小于邊界的值作為測試數(shù)據(jù),而不是選取等價類中的典型值或任意值作為測試數(shù)據(jù)。
邊界值選擇的原則: a. 如果輸入條件規(guī)定了值的范圍,則應(yīng)取剛達到這個范圍的邊界的值,以及剛剛超越這個范圍的邊界的值作為測試輸入數(shù)據(jù)。?例如,如果程序的規(guī)格說明中規(guī)定:“重量在10公斤至50公斤范圍內(nèi)的郵件,其郵費計算公式為……”。作為測試用例,我們應(yīng)取10及50,還應(yīng)取10.01,49.99,9.99及50.01等;b. 如果輸入條件規(guī)定了值的個數(shù),則用最大個數(shù),最小個數(shù),比最小個數(shù)小一,和比最大個數(shù)大一的數(shù)作為測試數(shù)據(jù)。例如,一個輸入文件應(yīng)包括1~255個記錄,則測試用例可取1和255,還應(yīng)取0及256等。c. 將前面兩個原則應(yīng)用于輸出條件,即涉及測試用例使輸出值達到邊界值及其左右的值。d.如果程序的規(guī)格說明給出的輸入域或輸出域是有序集合,則應(yīng)選取集合的第一個元素和最后一個元素作為測試用例。e. 如果程序中使用了一個內(nèi)部數(shù)據(jù)結(jié)構(gòu),則應(yīng)當選擇這個內(nèi)部數(shù)據(jù)結(jié)構(gòu)的邊界上的值作為測試用例數(shù)據(jù);f. 分析規(guī)格說明,找出其他可能的邊界條件。
3、因果圖法
因果圖是一種利用圖解法分析輸入的各種組合情況,從而設(shè)計測試用例的方法,它適合于檢查程序輸入條件的各種組合情況。
利用因果圖生成測試用例的基本步驟有:1. 分析軟件規(guī)格說明描述中哪些是原因(輸入,包括前提條件,操作過程),哪些是結(jié)果(輸出),并給每個原因和結(jié)果賦予一個標識符;2. 分析軟件規(guī)格說明描述的語義,找出原因和結(jié)果之間,原因和原因之間的關(guān)系,根據(jù)這些關(guān)系,畫出因果圖;3. 在因果圖上用一些記號表明約束或限制條件;4. 把因果圖轉(zhuǎn)換為判定表;5. 把判定表的每一列拿出來作為依據(jù),設(shè)計測試用例。
? ? 因果圖的基本符號和約束符號:
4、場景法
場景法一般包含基本流和備用流,從一個流程開始,通過描述經(jīng)過的路徑來確定的過程,經(jīng)過遍歷所有的基本流和備用流來完成整個場景。其中,基本流就是正常的,正確場景;備選流一般指中斷操作的。
5、正交實驗設(shè)計法
使用正交試驗設(shè)計法首先要知道正交表,正交表是研究多因素多水平的一種設(shè)計方法,它是格局正交性從全面試驗中挑選出部分有代表性的點進行試驗,這些有代表性的點具備了“均勻分散,齊整可比”的特點,正交試驗設(shè)計是一種基于正交表的、高效率、快速、經(jīng)濟的試驗設(shè)計方法。正交表由三個成分構(gòu)成,Runs:正交表的行數(shù),即實驗的次數(shù);Factors:正交表的列數(shù),即因素數(shù);Levels:水平數(shù),任何單個因素能夠取得的值的最大個數(shù)。 正交表的表現(xiàn)形式是:??L行數(shù)?(水平數(shù)因素數(shù))?? L?runs(levels^factors? )。
用正交表設(shè)計測試用例的步驟: 1. 有哪些因素(變量); 2.每個因素有那幾個水平(變量的取值):用等價類劃分出來的;3. 選擇一個合適的正交表;4. 把變量的值映射到表中;5. 把每一行的各因素水平的組合作為一個測試用例;6. 加上你認為可以且沒有在表中出現(xiàn)的組合。
如何選擇正交表呢?取行數(shù)最少的一個,情況分三種:1.因素數(shù)(變量)、水平數(shù)(變量值)相符;2.?因素數(shù)不相同: 取因素數(shù)最接近但略大的實際值的表;3.?水平數(shù)不相同:?有五個因素(變量)A、B、C、D和E。兩個因素有兩個水平(變量的取值)、兩個因素有三個水平,一個因素有六個水平。行數(shù)取最少的一個( 行數(shù)取最少的一個(L49(78)、 L18(3661)
6、判定表驅(qū)動分析法
判定表是分析和表達多邏輯條件下執(zhí)行不同操作的情況的工具。判定表由以下部分構(gòu)成:? 1. 條件樁(Condition Stub):列出了問題的所有條件。通常認為列出的條件的次序無關(guān)緊要;?2. ? 動作樁(Action Stub):列出了問題規(guī)定可能采取的操作。這些操作的排列順序沒有約束;3. ? 條件項(Condition Entry):列出針對它左列條件的取值在所有可能情況下的真假值;?4.? 動作項(Action Entry):列出在條件項的各種取值情況下應(yīng)該采取的動作。
7、錯誤推測法
錯誤推測法是基于經(jīng)驗和直覺推測程序中所有可能存在的各種錯誤, 從而有針對性的設(shè)計測試用例的方法。錯誤推測方法的基本思想: 列舉出程序中所有可能有的錯誤和容易發(fā)生錯誤的特殊情況, 根據(jù)它們選擇測試用例。
最后,對于黑盒測試的綜合策略是:首先,考慮邊界值分析法,邊界值分析法是在任何情況下都必須使用的方法,因為經(jīng)驗表明這種方法設(shè)計的測試用例發(fā)現(xiàn)程序錯誤的能力最強。必要時用等價類劃分方法補充一些測試用例。其次,可以用錯誤推測法再追加一些測試用例。這時,可以對照程序邏輯,檢查已設(shè)計出的測試用例的邏輯覆蓋率,如果沒有達到要求的覆蓋標準,應(yīng)當再補充足夠的測試用例;如果程序的功能說明中含有輸入條件的組合情況,則一開始就可以選用因果圖法。
三、白盒測試?
為什么要考慮白盒測試呢?舉個栗子說明,設(shè)x=0,y=5, 程序設(shè)計z=y/x, 如果只考慮輸入輸出的黑盒測試,我們看不出程序內(nèi)部的邏輯錯誤(分母不能為零),即使我們使用黑盒測試的測試用例覆蓋的再全也發(fā)現(xiàn)不了這個問題,這個時候就要考慮使用白盒測試了。
而什么是白盒測試呢?白盒測試也稱為結(jié)構(gòu)測試或邏輯驅(qū)動測試,是針對被測單元內(nèi)部是如何進行工作的測試。它根據(jù)程序的控制結(jié)構(gòu)設(shè)計測試用例,主要用于軟件或程序驗證。白盒測試法檢查程序內(nèi)部邏輯結(jié)構(gòu),對所有的邏輯路徑進行測試,是一種窮舉路徑的測試方法,但即使每條路徑都測試過了,但仍然有可能存在錯誤。因為:窮舉路徑測試無法檢查出程序本身是否違反了設(shè)計規(guī)范,即程序是否是一個錯誤的程序;窮舉路徑測試不可能檢查出程序因為遺漏路徑而出錯;窮舉路徑測試發(fā)現(xiàn)不了一些與數(shù)據(jù)相關(guān)的錯誤。
白盒測試需要遵循的原則有: 1. 保證一個模塊中的所有獨立路徑至少被測試一次;2. 所有邏輯值均需要測試真(true)和假(false);兩種情況;3. 檢查程序的內(nèi)部數(shù)據(jù)結(jié)構(gòu),保證其結(jié)構(gòu)的有效性;4. 在上下邊界及可操作范圍內(nèi)運行所有循環(huán)。
白盒測試方法:
靜態(tài)測試&動態(tài)測試
靜態(tài)測試是不用運行程序的測試,包括代碼檢查、靜態(tài)結(jié)構(gòu)分析、代碼質(zhì)量度量、文檔測試等等,它可以由人工進行,充分發(fā)揮人的邏輯思維優(yōu)勢,也可以借助軟件工具(Fxcop)自動進行。動態(tài)測試則需要執(zhí)行代碼,也是我們用的最多的一種測試,通過運行程序找到問題,包括功能確認與接口測試、覆蓋率分析、性能分析、內(nèi)存分析等。
1.?單元測試
2.代碼檢查
3.?同行評審
4.技術(shù)評審
要檢驗測試的效果,就要去看測試的覆蓋率,當覆蓋率越大,說明測試成效越好,軟件的缺陷越少。但覆蓋率不是目標(質(zhì)量才是目標)而只是一種手段。測試覆蓋率包括功能點覆蓋率和結(jié)構(gòu)覆蓋率,其中,功能點覆蓋率大致用于表示軟件已經(jīng)實現(xiàn)的功能與軟件需要實現(xiàn)的功能之間的比例關(guān)系;而結(jié)構(gòu)覆蓋率包括語句覆蓋率、分支覆蓋率、循環(huán)覆蓋率和路徑覆蓋率等等。
而邏輯覆蓋法中根據(jù)覆蓋目標的不同和覆蓋源程序語句的詳盡程度,邏輯覆蓋又可分為:語句覆蓋; 判定覆蓋;條件覆蓋;判定/條件覆蓋;組合覆蓋;路徑覆蓋,且這些覆蓋程度越往后越全。
四、灰盒測試?
灰盒測試更像是白盒測試和黑盒測試的混合測試,現(xiàn)階段對灰盒測試沒有更明確的定義,但更多的時候,我們的測試做的就是灰盒測試,即既會做黑盒測試又會做白盒測試。
創(chuàng)建了一個測試交流群,如果對軟件測試、接口測試、自動化測試、面試經(jīng)驗交流感興趣可以加測試交流群:829792258,還會有同行一起技術(shù)交流(歡迎大家進群)