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