重溫黑盒、白盒與灰盒測試方法

2021-02-08 測試奇譚



對於黑盒、白盒與灰盒測試方法的理解,幾年前我在某乎做過一個概念性的回答,當時提問者詢問:如何跟非技術人員解釋黑盒、白盒、灰盒測試的區別?

我的回答原文如下:


既然是對非技術人員解釋,就不能用專業術語。

這樣說吧,有個打孔機,類似這樣。

紙條從盒子左方插入,從右方出來時,分別打出圓形、正方形、三角形三個樣式的孔。

某天,打出來的紙條,只有一種圖形。

黑盒測試員只能說:「這個打孔機壞了!」

灰盒測試員把打孔機的蓋子掀開,發現打孔機的造型原來是這樣的。

於是他說:「機器仍能打孔,說明主機沒壞;三個樁子也都是好的;但只列印出了圓形,可能因為連接正方形和三角形樁子的地方有問題。」

白盒測試員把機器拆開,查看內部的電線、電路、控制器等等,發現連接正方形和三角形的電線燒壞了,於是說:「原因找到了,換根電線吧。」


彼時,我還是一位測試小鳥,在研習了不少理論知識後,回答了這個問題。現在,我算不上測試老鳥,但能算個測試大鳥,在工作中,越發頻繁地接觸這三種測試方法。

如果你要問我哪種測試方法更好,我不置評價,每個人的口味不一樣,別人適合的不一定自己適合。

對於黑盒測試方法來說,是每一位測試的必備技術,沒有誰不會:發現問題,拋出問題。簡單、輕鬆、快速,是黑盒測試的優點,特別是在項目特別趕,測試時間無限被壓縮的時候——只需要拋給開發問題,剩下的讓開發自個兒玩去吧。

但黑盒測試人員常常被人詬病只知道點點點,拋開此類「鄙視」不談,接著上面繼續,我們是不是忽略了一個事實:項目既然趕,那開發的時間亦不充足,如果恰好遇上稍稍複雜的bug,並搭配不靠譜的開發,一個bug的生命周期可能會拉得極長,效率特別低下。

這麼說,那用白盒測試方法唄,看代碼,查原因,丟給開發後,留下一個高大帥氣的背影,讓開發心裡默念——這個測試不簡單。

白盒測試可以,但使用它時,你需要盤算盤算:

是否有充足的時間研究代碼以及和代碼相關的環境部署、配置設置等?

付出和產出是否成正比,如同自動化測試,能達到高性價比嗎?

白盒是一種選擇,但同樣是一個難題。更別說白盒對於測試技術的高要求。

廢話了這麼多,你一定會說:風風,你不就是拐彎抹角地推薦灰盒測試嘛。

我不知道該怎麼回答你,就像剛開始說的,每個人的口味不一樣,適合自己的測試方法,最醇最香。

但說實話,日常工作中我使用灰盒測試方法的場景相對較多,總結來說,就這麼一個流程:

發現問題-->我大概知道你是怎麼玩的-->初步定位問題原因-->同開發確定問題-->接下來呢?

會分成兩類:

1、我定位的原因並不是真正的原因。但我能通過這個過程學習到新知識、新業務,積攢個人經驗(很多人往往棄步於此)

2、我定位的問題是真正的原因。就此打住嗎?並不是。你能提出問題的解決建議嗎?你的建議是否比開發的修改 or 產品給的方案更好,更具有可實施性?

合理地提出解決問題的建議,這才是你關注的重點,而不是因為找到問題原因而沾沾自喜,迷失於他人的讚許中。

實踐是檢驗真理的唯一標準。恰好,我最近遇到一個問題,並且剛好使用到灰盒測試方法,分享給大家窺其一二。

先描述下業務:

我測試的X系統會從配置系統拉取幾條數據,並保存在資料庫A(讀寫庫)中,資料庫A又會將新數據實時同步到資料庫B(讀寫庫)中。業務上:a類用戶從資料庫A中讀數據,b類用戶從資料庫B中讀數據。

再說下bug:

我在配置系統刪除了一條數據,結果a類用戶沒有讀到該條數據(預期結果),b類用戶卻讀到了該條數據(非預期結果)。去資料庫查看,A庫沒有被刪除的數據,B庫仍然存在被刪除的數據。

按理說,走到這一步,便可以到bug系統提交一條bug指給開發解決。不過我想到開發最近天天晚上加班,並且我之前提的幾個bug反覆修改,開發效率很低,加之臨近上線,時間被壓縮,於是乎,我額外抽出一點時間,簡單定位下問題。

這個問題看起來簡單,無非是同步導致兩個庫的數據不一致,可以得出兩個猜測:

一 同步沒有觸發。

二 同步觸發了,但數據沒有在B庫落庫。

接著,我做了一個實驗:在配置系統修改了一條數據,結果A庫和B庫的數據保持一致。據此,猜測一不成立。

緊接著,我又做了一個實驗:進入A庫,在資料庫內刪除一條數據,奇怪的是,B庫的數據被刪除了,猜測二也不成立。

兩種猜測同時被證明無效,那問題究竟出在哪裡呢?

於是,我上到伺服器,重新在配置系統刪掉一條數據,並觸發了一次同步操作,我在日誌上找到了兩條sql:

truncate table xxtable;

insert into xxtable……;

到此,我恍然大悟。

原來因為這個業務的數據不多,開發可能是這樣處理的:從配置系統拉取數據時,先清空A庫的xxtable,再向A庫的xxtable插入數據,以此簡化數據增刪改的邏輯。但我司DBA做過處理,不允許資料庫級別之間進行truncate table的同步。

最後找開發討論,果真是這個問題。

怎麼解決呢,將truncate table xxtable換成delete from xxtable即可。

這算是一次我所理解的完整的灰盒測試,也是我一直推薦給組內人員的高效率的一種工作方式:我大概知道你是怎麼實現業務的,實踐定位問題,達到快速解決問題的目的。


最後,一如既往地做個總結吧:

測試時,特別簡單的bug建議直接拋出,讓開發去玩,沒必要浪費精力定位問題

複雜問題多總結,定位問題時頭腦要清晰且靈活,證實或否定每一個猜測

和開發打好關係(或強制要求),讓他們在解決bug的時候註明bug產生的原因

多花時間在業務上,絕對物超所值


轉載請註明來源

封面 unsplash.com



看這裡!看這裡!

一  錯過往期精彩內容?點擊左下方閱讀原文,立即查看技術文章

二  不撂花架子,微信搜索「測試奇譚,即可關注我(或者長按下方二維碼識別後關注

相關焦點

  • 最基礎的軟體測試總結
    按測試手段來分類測試時對象可見度:黑盒測試、白盒測試根據狀態:靜態測試、動態測試測試執行的方式:手工測試、自動化測試黑盒測試在測試中把我們被測試的系統或者軟體看成一個不能打開的盒子,經常變化腳本的維護成本比較高)黑盒測試的主要設計方法等價類劃分法:針對程序有很對的輸入條件,把所有的輸入當中等價的歸為一類,這樣最後會形成若干典型的代表性的輸入,通過這些典型的數據進行測試用例的設計。
  • 軟體測試(開發)的V模型都包括哪些階段,具體都做了些什麼?(面試題)
    軟體測試(開發)的V模型都包括哪些階段,具體都做了些什麼?
  • 黑盒測試的7種測試方法
    黑盒測試也稱功能測試,它是通過測試來檢測每個功能是否都能正常使用。在測試中,把程序看作一個不能打開的黑盒子,在完全不考慮程序內部結構和內部特性的情況下,在程序接口進行測試,它只檢查程序功能是否按照需求規格說明書的規定正常使用,程序是否能適當地接收輸入數據而產生正確的輸出信息。
  • 什麼是軟體測試?我來告訴你!
    基於現狀,軟體測試的理論和使用技術便開始形成,並且人們也為軟體開發的整個流程和執行設計了相關的方式方法,軟體開發也由早期的無序過渡到結構清晰明朗的開發過程。種類有黑盒、灰盒和白盒測試黑盒測試:不關心功能實現的邏輯和代碼,只關心功能的實現,通過執行操作來判別這個功能是否實現了。白盒測試:我們需要能看的懂代碼,明白裡面的代碼構成的邏輯,再進行驗證判定是否有問題。
  • WEB測試之網頁測試
    如果有某些是必填的話,看看他們是否真的有效其他雜項- (Miscellaneous)  1.如果有計數器,那麼需要對之進行測試  2.如果是有搜索功能,要把這個站內搜索和搜尋引擎的搜索分辨清楚  灰盒測試就是用黑盒的方法,就是不管裡面是怎麼弄的,反正我只看功能,然後有結合白盒測試的技術,站在一個比較高的角度看這個軟體是如何運作的
  • 測試工程師的工作內容
    使用測試技術及工具:白盒測試黑盒測試 Loadrunner、Winrunner 能夠運用邊界值、等價類劃、圖、狀態圖、綱等  測試設計高效測試用例軟體測試工作總體流程圖:詳細測試步驟:1.(動態測試方法為結構和正確性測試;動態測試工具Robot、QTP等)黑盒測試:指的是把被測的軟體看做一個黑盒子,我們不關心盒子裡面的結構是什麼樣子的,只關心軟體的輸入數據和輸出白盒測試:指的是把盒子打來,去研究裡面的原始碼和程序結構。軟體公司中,往往採用黑盒測試&白盒測試相結合的方式。
  • 軟體測試基礎理論知識,你確定不來圍觀?
    ① 一般能力:包括表達、交流、協調、管理、質量意識、軟體開發過程方法、軟體工程等;  ② 測試技能及方法:包括測試基本概念及方法、對測試工具的掌握、對專業測試標準的熟悉程度等;  ③ 測試規劃能力:包括風險分析及防範能力、測試目標及計劃的制定能力等;  ④ 測試執行能力:包括測試數據/腳本/用例的制定能力、測試比較及分析能力、缺陷記錄及處理能力;  ⑤ 測試分析、報告和改進能力:包括測試度量、統計技術
  • 模糊測試技術入門,Part 1-2
    通常情況下,當提到模糊測試一詞時,指的就是這種類型的模糊測試。模糊測試的類型實際上,常見的模糊測試技術有三種,下面分別進行介紹。白盒模糊測試我們所說的白盒模糊測試,實際上指的是這樣一種測試技術:Fuzzer會試圖分析程序的內部結構,以跟蹤和最大化代碼覆蓋率。
  • 用 Hypothesis 快速測試你的 Python 代碼
    在我們開始進行基於屬性的測試之前,我們需要知道測試的一般區別。有不同的分組測試方法,兩種最常見的方法基於測試方法和測試級別。讓我們從大多數人已經聽說的測試級別開始。本質上,存在四個測試級別(儘管人們可能也知道或定義其他級別):不同測試級別側重專注於不同的事物。
  • Kali Linux Web滲透測試手冊(第二版) - 3.1 - 使用DirBuster尋找敏感文件和目錄
    最近啥都學,學的腦子亂,準備理清下思路分享一下信息收集,至少目前是我的方法,信息收集再好,也奈何不了各種難題,正所謂信息收集兩小時,滲透測試五分鐘,GG...還是要努力學習硬知識,知識就是硬道理!!!另外,各位老哥需要什麼資源的話,可以給我留言,我有的話給你分享。
  • 一篇圖文帶你了解白盒測試用例設計方法
    什麼是白盒測試白盒測試的特點白盒測試設計方法測試設計方法——邏輯覆蓋法邏輯覆蓋法:是通過對程序邏輯結構的遍歷實現程序的覆蓋。覆蓋率:是用來度量測試完整性的一個手段測試設計方法——語句覆蓋語句覆蓋:設計測試用例,使得程序中每條語句至少被執行一次。
  • 軟體測試中:常見英文及含義
    測試範圍:Test Scope測試策略:Test Strategy 測試方法:Test Approach測試過程:Test procedures測試環境:Test Environment測試完成標準:Test Completion criteria 測試進度表:Test Schedules 風險:Risks需求規格說明書:
  • 網絡重構現白盒現象 軟體定義變硬體定義
    面對雲數據中心網絡的諸多挑戰,白盒交換機也進入人們的視線,白盒交換機與傳統交換機的不同是白盒交換機採用開放的架構實現了交換機軟體與硬體的解耦,提高網絡開放性。白盒交換機通常由ODM提供硬體,由用戶選擇自研或者第三方提供網絡作業系統(NOS)。通過白盒交換機可以對網絡控制應用快速迭代,使用SDN的方式對網絡進行深度優化。
  • 輔助程序實現黑盒自動化測試的常見問題
    本文介紹如何搭建輔助程序和如何利用輔助程序進行黑盒測試。並總結了利用輔助程序執行黑盒測試遇到的問題,並在文末總結了各測試方案的應用場景。輔助程序實現黑盒自動化測試的特點輔助功能相較於測試框架在部分場景下有一定的優勢,可以做更多場景的測試:1.
  • 精準測試
    而測試的難點就體現在以下幾個方面:(1)系統級的測試用的基本都是黑盒測試方法,從根本上註定基於黑盒測試方法的各種方法都沒有直接面對計算機所真正理解的程序層面去解決軟體測試問題。同時黑盒測試永遠帶有一種猜測的基因,過程非常不穩定,並且難以控制。
  • 解放你的雙手—iOS自動測試基礎
    我們一般會選擇項目周期長、需求變更不頻繁、需要反覆測試的功能模塊來進行自動化測試的考量。自動測試通常可以分為白盒測試、黑盒測試、灰盒測試。白盒測試是直接針對代碼的測試,對於類、對象、函數、變量等的語法規則和邏輯作具體分析,保證每一條邏輯路徑儘可能被執行,發現隱藏在代碼中的錯誤,是白盒測試所需要做的事情。
  • 優秀的測試人員簡歷是什麼樣子的?
    但是沒有一份表達清楚了他們是如何進行測試的。但是…我根本就不知道他們到底是如何進行測試的。● 所有的簡歷中都羅列著一串串的測試術語和名詞…例如,「了解白盒測試、灰盒測試、黑盒測試、壓力測試、性能測試、功能測試、集成測試、可用性測試、冒煙測試、回歸測試、手工測試、自動化測試以及驗收測試。」每當看到這種調調兒的時候,我就想「好吧,你知道玻璃盒測試嗎?那才是我們真正需要的。」