經(jīng)過前兩篇的介紹之后,評論里留下許多問題。并沒有逐一回復(fù),當(dāng)然不是想把這些評論置之不理,而是希望在這里和后面的文章中做詳細(xì)介紹和解釋這些問題。從這一篇開始,我將開始講谷歌是如何測試軟件的了。

  在谷歌,質(zhì)量不等于測試,是的,我確定在其他所有的公司也都是這樣!百|(zhì)量不是被測出來的”,這句陳詞濫調(diào)是再正確不過的了。不管汽車制造還是軟件開發(fā),如果在初的設(shè)計(jì)建造的時(shí)候有問題,那它永遠(yuǎn)都會有問題。試問任何一家曾經(jīng)被迫大量召回汽車的公司,逃避質(zhì)量問題的代價(jià)是多么的昂貴。

  但是,“質(zhì)量不是被測出來的”這句話本身并不像它聽起來的那么簡單和準(zhǔn)確。雖然質(zhì)量并不是被測出來的,但同樣也有證據(jù)表明,未經(jīng)過測試,也不可能開發(fā)出有質(zhì)量的產(chǎn)品。你連測試都沒有做過,又是怎么知道產(chǎn)品功能是否正確,并有高質(zhì)量呢?

  對于這種難題,簡單的辦法是不要區(qū)分開發(fā)和測試,不要把他們當(dāng)成對立的活動(dòng)。測試和開發(fā)【注,兩種行為,不是人】好能手牽手的并行,寫一點(diǎn)代碼立刻進(jìn)行測試,寫的越多,測的要越多。好是,在編碼的同時(shí),甚至在編碼之前,考慮清楚這些代碼將如何被測試。測試不是一個(gè)單獨(dú)的工作,測試是開發(fā)的一部分。所以,質(zhì)量并不等同于測試,當(dāng)把開發(fā)和測試混在一起,攪拌直到分不清他們彼此的時(shí)候,得到了質(zhì)量。

  這是谷歌的想法,把開發(fā)和測試工作混在一起,不分彼此。寫點(diǎn)代碼,必須測試,多寫一些多測一些。關(guān)鍵的問題是誰來做測試工作? 由于谷歌的專職測試人員非常的少,的答案只能是開發(fā)人員。還有比實(shí)際寫代碼的開發(fā)人員更適合來測試這些代碼的人嗎?還有比程序的作者更懂得怎樣去發(fā)現(xiàn)程序bug的嗎?是誰更想知道程序在第一次運(yùn)行時(shí)是否有沒有問題呢?谷歌之所以用這么少的專職測試人員的原因是開發(fā)對質(zhì)量負(fù)全責(zé)。實(shí)際上,如果一個(gè)團(tuán)隊(duì)在過于依賴測試的時(shí)候,通常情況下這個(gè)團(tuán)隊(duì)在開發(fā)上一定也會有問題。如果在這個(gè)團(tuán)隊(duì)里,測試人員比較多,這也是一個(gè)強(qiáng)烈的信號,這表明開發(fā)和測試融入到一起的程度還不夠,失衡了,缺乏測試,單純地增加測試人員并不能解決任何問題。

  這意味著,對于質(zhì)量來說,預(yù)防問題比發(fā)現(xiàn)問題本身更重要。質(zhì)量是開發(fā)人員的問題,而不是測試人員的問題。通過把測試工作融入到開發(fā)過程中,我們能降低那些富產(chǎn)Bug的人的出錯(cuò)機(jī)會,不僅可以避免了大量終用戶的使用問題,而且還可以極大地降低測試人員報(bào)無效Bug的數(shù)量。在谷歌軟件測試工程師的工作目標(biāo)是檢查這種預(yù)防措施是否有效,軟件測試工程師不停地尋找一些證據(jù)來證明作為bug的作者和預(yù)防者的“軟件開發(fā)工程師-軟件測試開發(fā)工程師”組合是否存在問題,一旦發(fā)現(xiàn)任何不正常,會拉響警笛。

  這種開發(fā)和測試一體的場景隨處可見,不管是在代碼審核的時(shí)候問“你的測試呢?”,還是在廁所蹲坑里張貼著的佳測試實(shí)踐?臭名昭著的馬桶測試指南【譯者注,參見google test blog,有關(guān)于”Testing On The Toilet“的更多介紹】。測試是開發(fā)過程中必不可少的一環(huán),質(zhì)量是開發(fā)和測試合體的產(chǎn)物。軟件開發(fā)工程師,軟件測試開發(fā)工程師,軟件測試工程師,所有的人都是測試人員。

  如果你所在的公司也想要做這種開發(fā)和測試的統(tǒng)一,請也給大家分享一下其中經(jīng)驗(yàn)和教訓(xùn)。如果沒有,這將是一個(gè)幫助你公司的機(jī)會:讓開發(fā)和質(zhì)量劃等號。你大概知道諺語里說的,雞和豬為了一頓有培根和雞蛋的早餐都樂于奉獻(xiàn)自己,但是豬卻犧牲了。好吧,這是事實(shí),嘗試跑到開發(fā)工程師那里,對他們”哼哼“(豬叫聲)兩聲,看他們是否也用”哼哼“來回應(yīng),如果他們”咯咯噠“(雞叫聲)來回應(yīng),那說明有問題了!咀g者注,崩潰了,這里比較難懂。James這里引用了一個(gè)豬和雞的英語諺語,(參見,http://en.wikipedia.org/wiki/The_Chicken_and_the_Pig ),諺語的意思大概是,豬和雞都參與制作培根雞蛋早餐,豬變成了豬肉(培根),雞只下了一個(gè)蛋,說明對于早餐,豬和雞的奉獻(xiàn)程度是不同的。并在這里把測試工程師比喻成雞,開發(fā)工程師比喻成豬,早餐是質(zhì)量,豬的奉獻(xiàn)大。測試人員跑到開發(fā)人員那里,如果發(fā)現(xiàn)他們沒有做豬的事情,早餐將做不成,那說明質(zhì)量也將會有問題!