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

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

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

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

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

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

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

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