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

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

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

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

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

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

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

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