一、概念
黑盒測試也稱為功能測試,他是通過測試來檢測每個功能是否能正常使用。在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試,它只檢測程序功能是否按照需求規格說明說的規定正常使用,程序是否能適當地接收輸入數據而產生正常的輸出信息。黑盒測試着眼於程序外部結構,不考慮內部邏輯結構,主要針對軟件界面和軟件功能進行測試。
黑盒測試是以用戶的角度,從輸入數據與輸出數據的的對應關系出發進行測試,很明顯,如果外部設計本身存在問題,或者需求規格說明的規定有誤,黑盒測試是發現不了的。
二、作用
黑盒測試法注重於測試軟件的功能需求,主要試圖發現下列幾類錯誤。
功能不正確或者遺漏
界面錯誤
輸入和輸出錯誤
數據庫訪問錯誤
性能錯誤
初始化和終止錯誤
三、測試方法
從理論上講,黑盒測試只采用窮舉測試,把所有可能的輸入都作為測試情況考慮,才能查出程序中所有的錯誤。實際上測試情況有無窮多個,不僅要測試合法的輸入,而且還要對那些不合法但可能的輸入進行測試。這樣看來,安全測試是不可能的,所以我們要進行有針對性的測試,通過制定測試案例指導測試的實施,有組織,有計划,按步驟的進行。
黑盒測試行為必須能夠加以量化,才能保證軟件質量,而測試用例就是將測試具體量化的方法之一。具體的黑盒測試用例設計方法包括等價類划分法、邊界值分析法、錯誤推測法、因果圖法、判定表驅動法、正交實驗設計法、功能圖法、場景法等。
1.等價類划分法
等價類划分法是把程序的輸入分為若干類(子集),然后每一類中選取少數代表性數據作為測試用例。每一類的代表性數據在測試中的作用等價於這一類中的其他值。該方法事一種重要且常用的測試用例設計方法。
划分等價類
等價類是指某個輸入域的集合。在該子集中,各個輸入對於揭露程序中的錯誤是等價的,並合理的假定:測試某等價類的值,就代表測試這個等價類,所以把全部輸入划分為若干個等價類,在沒一個等價類中選取一個數據作為測試用例,就可以用少量代表性的測試數據取得較好的測試結果,等價類划分有兩種不同的情況:有效等價類和無效等價類 。
有效等價類:是指對於程序的規格說明來說是合理的,有意義的輸入數據構成的集合,利用有效等價類可檢驗程序是否實現了規格說明中所規定的的功能和性能。
無效等價類:是指對程序來說不合理、無意義的輸入數據的集合。
2.邊界值分析法
邊界值分析是通過選擇等價類邊界的測試用例。邊界值分析法不僅考慮輸入數據的邊界,而且也必須考慮輸出域的邊界。它是對等價類划分法的補充。
3.錯誤推測法
錯誤推測法是基於經驗和直覺推測程序中所有可能出現的各種錯誤,從而針對錯誤設計測試用例的方法。
錯誤推測法的基本思想:列舉出程序中所有可能出現的錯誤或者容易發生錯誤的情況,根據他們選擇測試用例。例如在單元測試時,曾列出的許多在模塊中常見的錯誤,以前產品測試中曾經發生的錯誤等,這些就是經驗的總結。還有輸入數據和輸出數據為0的情況,輸入表格為空格或輸入表格只有一行,這些都是容易發生錯誤的情況。可選擇這些情況下的例子作為測試用例。
4.因果圖法
等價類划分法和邊界值法都是着重考慮輸入條件,但未考慮輸入條件之間的聯系及相互組合等。考慮輸入條件的之間的相互結合,可能會產生一些新的情況,但要檢查輸入條件的結合不是一件容易的事情,即使把所有輸入條件划分成等價類,他們之間的結合情況也相當多,因此必須考慮采用一種適合於描述對於多種條件的組合,相應產生多個動作的形式考慮設計測試用例,這就需要利用因果圖(邏輯模型)。
因果圖法最終生成的就是判定表。它適合於檢查程序輸入條件的各種組合情況。
正交試驗設計
就是使用已經造好了的正交
表格來安排試驗並進行數據分析的一種方法,目的是用最少的
測試用例達到最高的測試覆蓋率。
場景法
軟件幾乎都是用事件觸發來控制流程的,事件觸發的情景
基本流和備選流
便形成了場景,而同一事件不同的觸發順序和處理結果就形成事件流。這種在軟件設計方面的思想也可以引入到軟件測試中,可以比較生動地描繪出事件觸發時的情景,有利於測試設計者設計測試用例,同時使測試用例更容易理解和執行。
四、測試流程
測試計划——測試設計——測試開發——測試執行——測試評估
測試計划
首先,根據用戶需求報告中關於功能要求和性能指標的規格說明書,定義相應的測試需求報告,即制定黑盒測試的最高標准,以后所有的測試工作都將圍繞着測試需求進行,符合測試需求的的應用程序即是合格的,反之即是不合格的;同時,還要適當選擇測試內容,合理安排測試人員、測試時間及測試資源等。
測試設計
將測試計划階段制定的測試需求分解、細化為若干個可執行的測試過程,並為每個測試過程選擇適當的測試用例,測試用例選擇的好壞將直接影響到測試結果的有效性。
測試開發
建立可重復使用的自動測試過程。
測試執行
執行測試開發階段建立的自動測試過程,並對所發現的缺陷進行跟蹤管理。測試執行一般由單元測試、組合測試、集成測試、系統聯調及回歸測試等步驟組成,測試人員應本着科學的態度,一步一個腳印的測試。
測試評估
結合量化的測試覆蓋域及缺陷跟蹤報告,對於應用軟件的質量和開發團隊的工作進度及工作效率進行評估評價。
五、黑盒測試的優點
1.基本上不用人管着,如果程序停止運行了一般就是被測試程序crash了。
2.設計完測試用例之后,下來的工作就是爽了,當然更苦悶的是確定crash原因。
六、缺點
1.結果取決於測試用例的設計,測試用例的設計部分優勢來源於經驗,OUSPG的東西很值得借鑒
2.沒有狀態轉換的概念,一些成功的例子基本上都是針對PDU來做的,還做不到針對被測試程序的狀態轉換來實現
3.就沒有狀態概念的測試來說,尋找和確定造成程序crash的測試用例是個麻煩事情,必須把周圍可能的測試用例單獨確認一遍。而就有狀態的測試來說,就更麻煩,尤其不是一個單獨的testcase造成是問題。這些在堆的問題中變現更為突出。
七、工具選擇
這里介紹一個較為經典的自動化測試工具,即Mercury公司的WinRunner。
WinRunner是一種用於檢測程序能否正常運行的企業級功能測試工具。通過自動捕捉、檢測和模擬用戶交互操作,WinRunner能識別絕大多數軟件功能缺陷,從而確保那些跨越了多個功能點和數據庫的應用程序在發布時盡量不出現功能性故障。
WinRunner的特點在於:與傳統的手工測試相比,它能快速、批量地完成功能點測試;能針對相同測試腳本,執行相同的動作,從而消除人工測試所帶來的理解上的誤差;此外,它還能重復執行相同動作,測試工作中最枯燥的部分可交由機器完成;它支持程序風格的測試腳本,一個高素質的測試工程師能借助它完成流程極為復雜的測試,通過使用通配符、宏、條件語句、循環語句等,還能較好地完成測試腳本的重用;它針對於大多數編程語言和windows技術,提供了較好的集成、支持環境、這對於windows平台的應用程序實施功能測試而言帶來了極大的便利。
八、工作流程
識別GUI
在WinRunner中,我們可以使用GUI Spy來識別各種GUI對象,識別后,WinRunner會將其存儲到GUI Map File中。它提供兩種GUI Map File模式: Global GUI Map File和GUI Map File per Test。起最大區別是后者對每個測試腳本產生一個GUI文件,它能自動建立、存儲、加載,推薦初學者選用這種模式。但是這種模式不易於描述對象的改變,其效率比較低,因此對於一個有經驗的測試人員來說前者不失為一種更好的選擇,它只產生一個共享的GUI文件,這使得測試腳本更容易維護,且效率更高。
建立測試腳本
在建立測試腳本時,一般先進行錄制,然后在錄制形成的腳本中手工加入需要的TSL(與c語言類似的測試腳本語言)。錄制腳本有兩種模式:Context Sensitive和Analog,選擇依據主要在於是否對鼠標軌跡進行模擬,在需要回放時一般選用Analog。在錄制過程中這兩種模式可以通過F2鍵相互切換。
腳本除錯
在WinRunner中有專門一個Debug Toolbar用於測試腳本除錯。可以使用step、pause、breakpoint等來控制和追蹤測試腳本和查看各種變量值。
測試腳本
當應用程序有新版本發布時,我們會對應用程序的各種功能包括新增功能進行測試,這時當然不可能再來重新錄制和編寫所有的測試腳本。我們可以使用已有的腳本,批量運行這些測試腳本測試舊的功能點是否正常工作。可以使用一個call命令來加載各測試腳本。還可在call命令中加各種TSL腳本來增加批量能力。
分析測試結果
通過分析可以發現應用程序的各種功能性缺陷。當運行完某個測試腳本后,會產生一個策划報告,從這個測試報告中我們能發現程序的功能性缺陷,能看到實際結果和期望結果之間的差異,以及在測試工程中產生的各類對話框等。
回報缺陷
在分析完測試報告后,按照測試流程要回報應用程序的各種缺陷,然后將這些確信啊發給指定人,以便進行修復和修護。
九、常用方法
功能測試就是對產品的各功能進行驗證,根據功能測試用例,逐項測試,檢查產品是否達到用戶要求的功能。常用的測試方法如下:
1、頁面鏈接檢查:每一個鏈接是否都有對應的頁面,並且頁面之間切換正確。
2、相關性檢查:刪除/增加一項會不會對其他項產生影響,如果產生影響,這些影響是否都正確。
3、檢查按鈕的功能性是否正確:如update,cancel,delete,save等功能是否正確。
4、字符串長度檢查:輸入超出需求所說明的字符串長度的內容,看系統是否檢查字符串長度,會不會出錯。
5、字符類型檢查:在應該輸入指定內容的地方輸入其他類型的內容(如在應該輸入整型的地方輸入其他字符類型),看系統是否檢查字符類型,會否報錯。
6、標點符號檢查:輸入內容包括各種標點符號,特別是空格,各種引號,回車鍵等,看系統處理是否正確。
7、中文字符處理:在可以輸入中文的系統輸入中文,看會否出現亂碼或出錯。
8、檢查帶出信息的完整性:在查看信息和update信息時,查看所填寫的信息是不是全部帶出.,帶出信息和添加的是否一致。
9、信息重復: 在一些需要命名,且名字應該唯一的信息輸入重復的名字或ID,看系統有沒有處理,會否報錯,重名包括是否區分大小寫,以及在輸入內容的前后輸入空格,系統是否作出正確處理。
10、檢查刪除功能:在一些可以一次刪除多個信息的地方,不選擇任何信息,按”delete”,看系統如何處理,會否出錯;然后選擇一個和多個信息,進行刪除,看是否正確處理。
11、檢查添加和修改是否一致: 檢查添加和修改信息的要求是否一致,例如添加要求必填的項,修改也應該必填;添加規定為整型的項,修改也必須為整型。
12、檢查修改重名:修改時把不能重名的項改為已存在的內容,看會否處理,報錯.同時,也要注意,會不會報和自己重名的錯。
13、 重復提交表單:一條已經成功提交的紀錄,back后再提交,看看系統是否做了處理。
14、檢查多次使用back鍵的情況: 在有back的地方,back,回到原來頁面,再back,重復多次,看會否出錯。
15、search檢查: 在有search功能的地方輸入系統存在和不存在的內容,看search結果是否正確.如果可以輸入多個search條件,可以同時添加合理和不合理的條件,看系統處理是否正確。
16.、輸入信息位置: 注意在光標停留的地方輸入信息時,光標和所輸入的信息會否跳到別的地方。
17、上傳下載文件檢查:上傳下載文件的功能是否實現,上傳文件是否能打開。對上傳文件的格式有何規定,系統是否有解釋信息,並檢查系統是否能夠做到。
18、必填項檢查:應該填寫的項沒有填寫時系統是否都做了處理,對必填項是否有提示信息,如在必填項前加*。
19、快捷鍵檢查:是否支持常用快捷鍵,如Ctrl+C Ctrl+V Backspace等,對一些不允許輸入信息的字段,如選人,選日期對快捷方式是否也做了限制。
20、回車鍵檢查: 在輸入結束后直接按回車鍵,看系統處理如何,會否報錯。