幾個月前我還在談論黑盒測試不一定比白盒測試技術含量低,現(xiàn)在我卻可以比較肯定地說,黑盒測試比白盒測試更難,技術要求更高。道理其實非常簡單,黑盒,白盒測試的本質(zhì)區(qū)別在于源代碼的訪問權利,白盒測試具有這種權利,因此也就具有更多的資源和信息進行測試,當然事情就會變得容易很多,而黑盒測試由于不能看到源代碼,就使得對于白盒測試人員發(fā)現(xiàn)的bug,你要花更多的時間,并且具有更高的技術才有可能發(fā)現(xiàn)。
我做黑盒測試已經(jīng)4年多了,是一個地地道道的黑盒測試人員,可是我具有源代碼訪問的權利,也就是說,雖然我是做黑盒測試的,但是我所擁有的信息并不比白盒測試人員少。隨著我黑盒測試經(jīng)驗和技術的提高,我突然發(fā)現(xiàn)我已經(jīng)完全依賴與源代碼提供的信息了,如果沒有源代碼,我的黑盒測試的工作將會變得復雜很多,困難很多,甚者無法實現(xiàn)。這也讓我有了一個強烈的感覺,就是黑盒測試比白盒測試更難。
在Symantec出版的一本書《TheArtofSoftwareSecurityTest》里邊就有這個說法。這本書我覺得一般般,但是里邊體現(xiàn)著這個道理,就是,“對于白盒測試,一個公司可以組成一個測試隊伍來進行,而對于黑盒測試,可能就很少有公司有這個能力了,只能去外邊聘請專業(yè)的公司來作,這個成本是很高的,但是是值得的”。
經(jīng)常聽到有人抱怨“我在公司是做黑盒測試的,沒什么技術含量,我的目標就是轉(zhuǎn)到白盒測試”,我一直覺得這個說法是可以質(zhì)疑的,也希望看了我的這篇文章以后,不要再出現(xiàn)這種聲音,更不要再拿它當成自己不去提高測試技術的一個冠冕堂皇的借口了。
為什么我們大多數(shù)人,包括以前我自己都會認為黑盒測試比白盒測試的技術含量低呢?那是因為,我們絕大多數(shù)人都是在做低端黑盒測試的。很早以前我就曾想過,黑客都是通過黑盒測試的方法來尋找安全漏洞的,我們怎么能說黑盒測試技術含量低呢?隨著自己的水平向黑客的方向接近,自己也越來越有更深,更豐富的理解和體會了。
如果我們把剛進入黑盒測試領域的新人的技術打分為0,而黑客的技術打分為5的話,那么根據(jù)技術水平我有這樣一個列表:
0.測試新手
1.黑盒手工測試
2.黑盒自動化測試
3.具有白盒測試能力
4.安全測試
5.黑客
大家注意,很多人把自己的測試技術的提高依賴于公司,依賴于team,依賴于project,這是不對的。我本人在公司的工作內(nèi)容不過就是黑盒自動化測試,可是這并不影響我可以向更高的方向發(fā)展,現(xiàn)在internet這么發(fā)達,什么資料不能找到呢?各種各樣的計算機書籍,網(wǎng)上各種各樣的計算機技術交流探討的論壇,博客等等。很多人覺得跳槽,換個工作自己就能更好的發(fā)展測試技術,這也是有誤區(qū)的。說句實話,個人發(fā)展本質(zhì)上還是個人的問題,并不是公司的問題,或者你的lead,你的manager的問題,一個公司既然要你了,就說明你自己的能力和水平跟公司對你的要求還是比較接近的,公司對你已經(jīng)有一個期望值了,也就是說你能勝任這份工作了,而再往上的發(fā)展并不屬于公司對你的期望了,絕大多數(shù)的情況還是要靠個人的。因此,我個人認為,無論在任何的工作環(huán)境,工作內(nèi)容的情況,你都是有技術提高余地的,但是這事情要由你自己來drive,而不要太多地依賴外部環(huán)境。我從小到大的學習,主要是靠自學,我很少能集中精力地去聽完老師的一堂課。包括現(xiàn)在,我很多training都是沒聽完就走人了,或者有些簽個到就溜。我的這個性格造就了我很獨立的學習能力,自己為自己規(guī)劃學習,不知道對大家是否有借鑒作用。
話說回來,因為大家對0,1,2級別應該都是比較熟悉的,我想談談3,4,5級別。
3.作為一個黑盒測試人員,沒有人會要求你不具備白盒測試能力,如果你有源代碼訪問的權利,那很好,你完全可以利用這個優(yōu)勢,把通過查看源代碼得到的信息應用到你的黑盒測試中去。如果你沒有源代碼訪問的能力,這也并不能阻礙你在這個領域進行探索和實踐。如果你的項目是Java,.NET這種,你可以反編譯,如果你的項目是C,C++這種,你可以反匯編??偠灾?,所謂具有白盒測試能力的意思是,發(fā)現(xiàn)一個bug能夠定位到代碼里,是什么代碼,為什么產(chǎn)生這個bug?可以進行代碼級的測試用例的設計。一般來說,這個級別的要求是具備良好的代碼讀寫的能力。
4.安全測試與白盒測試的根本區(qū)別在于安全意識,黑客的思維。有一本書《WritingSecureCode》里面提到“你可以培訓一個人具有測試安全feature的能力,你很難培訓一個人具有黑客的思維方式,如果你發(fā)現(xiàn)了這樣一個人,你就Hire他”。在這個級別的人要具有良好的安全意識,知道各種各樣的攻擊方式,當發(fā)現(xiàn)一個bug的時候要就有安全方面的判斷,比如“是否一個安全漏洞”,“是否能夠被黑客利用”,“嚴重程度如何”,等等。同樣,自己的測試內(nèi)容里要包含大量的安全測試用例。