提高軟件質(zhì)量實踐:Facebook篇
Facebook 從2004 年的哈佛校園的學(xué)生項目在短短的7~8 年的時間中快速增長為擁有10 億用戶的世界上***的社交網(wǎng)絡(luò),又一次見證了互聯(lián)網(wǎng)創(chuàng)業(yè)成功的奇跡。同時它的產(chǎn)品研發(fā)流程也成為了眾多互聯(lián)網(wǎng)產(chǎn)品公司的追逐對象。今天我們來看一下Facebook 在產(chǎn)品質(zhì)量控制方面的實踐。有人說,現(xiàn)在的Google 象早期的微軟,現(xiàn)在的Facebook 象早期的Google. 我覺得不無道理。 雖然 Facebook 已經(jīng)早已不是創(chuàng)業(yè)公司,但是不難看出它在產(chǎn)品研發(fā)和質(zhì)量控制仍然保持著創(chuàng)業(yè)公司的風(fēng)格。在產(chǎn)品研發(fā)上,他們以小的研發(fā)團(tuán)隊為核心,遵循幾個非常重要的原則:
- Be there from start to ship: 每個工程師自始至終負(fù)責(zé)產(chǎn)品。從最開始的一個想法,到開發(fā)原型,到內(nèi)部審核,反饋,到產(chǎn)品開發(fā),上線和維護(hù),全部有工程師自己搞定。
- Show work early and often: Facebook 非常看重反饋,尤其早期內(nèi)部反饋。他們鼓勵工程師有了想法后,盡快開發(fā)出原型,盡快得到反饋。
- Gets your hands dirty: 動手去做,去實現(xiàn)。
- Don’t fall in love: 互聯(lián)網(wǎng)產(chǎn)品是不斷變化的,不需要等到把一個產(chǎn)品設(shè)計的很***了才發(fā)布。
為了遵循以上原則,F(xiàn)acebook 工程師采用以下質(zhì)量控制手段來保證產(chǎn)品質(zhì)量:
- 開發(fā)人員對質(zhì)量負(fù)責(zé): 開發(fā)人員從設(shè)計,實現(xiàn),測試,到部署都要自己做。其它做工具,流程的工程師通過開發(fā)工具和流程來幫助開發(fā)人員更為簡單方便地做測試,做部署和做監(jiān)控。每個開發(fā)人員有自己單獨的測試環(huán)境,測試環(huán)境就是運行在開發(fā)本地機(jī)器上,部署非常簡單快速。測試環(huán)境用的是真實的用戶數(shù)據(jù)。
- 持續(xù)集成和測試自動化:每周發(fā)布一次。星期天晚上,要發(fā)布的構(gòu)建從主線上分支出來到發(fā)布分支,到星期二的中午如果沒有大的問題,就可以上線了。所有的測試運行控制在 10 分鐘以內(nèi),所以不需要考慮不運行哪些測試用例。運行所有測試用例。 (只是聽說,沒有經(jīng)過考證。)
- 內(nèi)測 (dog food):發(fā)布之前,公司員工使用要發(fā)布的功能。2~3天之內(nèi)可以有幾百個或上千個人在使用新功能。負(fù)責(zé)要發(fā)布功能的開發(fā)人員在星期天晚上到星期二中午之間會做大量的測試 (一邊上班,一邊刷微博,豈不是很爽 :) )。
- 發(fā)布風(fēng)險控制:新功能本身質(zhì)量可能有問題,新功能也可能影響其它現(xiàn)有功能。為了減少或控制這些風(fēng)險。Facebook 開發(fā)了一整套完善的發(fā)布,控制,監(jiān)控流程和工具。做到:1. 測試通過后,產(chǎn)品質(zhì)量基本有保證。2.即使有漏測的 bug,只會影響很少量的用戶。3. 及時監(jiān)控到問題。4. 及時修復(fù)。
- 產(chǎn)品監(jiān)控:監(jiān)控產(chǎn)品的系統(tǒng)的運行狀態(tài)。
Facebook 之所以采取這種質(zhì)量控制策略和它的產(chǎn)品特點密切相關(guān):
- 用戶對社交產(chǎn)品質(zhì)量的容忍度相對較高。比如發(fā)微博,現(xiàn)在連不上,等一會在連接也可以,現(xiàn)在發(fā)布不出去可以等一會再發(fā),粉絲數(shù)量統(tǒng)計有誤,沒有人太關(guān)心。其實 Facebook 并不認(rèn)為自己的質(zhì)量差。他們認(rèn)為產(chǎn)品的質(zhì)量高低不是有多少個 failed 測試用例,有多少個 bug 來確定的,而是有用戶對質(zhì)量的期望值來決定的。如果用戶對產(chǎn)品質(zhì)量的期望值很高很高,一個 bug 漏掉了都會照成質(zhì)量差的印象,用戶很有可能放棄使用。相反,如果用戶的期望值一般,100個 bug 漏掉了都不會影響用戶繼續(xù)使用。所以 Facebook 產(chǎn)品發(fā)布的條件是滿足用戶對質(zhì)量的期望值即可。
- 相對寬松的產(chǎn)品發(fā)布周期。不像微軟或 Google 很多產(chǎn)品已經(jīng)在市場上,用戶對下一版本的發(fā)布時間和新增加功能的期望很高,這往往給產(chǎn)品開發(fā)組的壓力很大。Facebook 基本沒有這個問題,它有適合自己的發(fā)布期限,不用受到外界干擾。
- 產(chǎn)品發(fā)布和監(jiān)控流程比較完善,即使有漏測的 bug,對用戶的影響可以控制在最小而且可以及時發(fā)現(xiàn)及時修復(fù)。
Facebook 質(zhì)量控制中引以為豪而且倍受矚目的就是“沒有專職測試工程師”。我這里需要專門討論一下:
- 什么是“專職測試工程師”? 頭銜里面有“測試”的工程師?專門找 bug 的工程師?專門做質(zhì)量控制的工程師?等等。
- Facebook 的確沒有帶“測試”頭銜的工程師,也沒有專門運行產(chǎn)品找 bug 的工程師。每個人都是開發(fā)工程師。但是他們的實際工作有區(qū)別,有的專門做面對用戶的產(chǎn)品,有的專門做測試,開發(fā)工具,有的專門做產(chǎn)品的構(gòu)建和持續(xù)集成工具和流程,有的專門做發(fā)布和監(jiān)控的工具和流程。如果按照傳統(tǒng)意義上的開發(fā)和測試的劃分的話,除了***類外,其他都可以看做專職測試工程師。
- Facebook 不是惟一一個沒有帶“測試”頭銜工程師的公司,很多軟件公司都沒有,比如 twitter.
- 很多人把專職測試工程師指專門運行產(chǎn)品找 bug 的工程師。微軟在 2005 年去掉 STE (software test engineer )崗位,就已經(jīng)沒有這一類型的專職測試工程師了。
所以個人認(rèn)為,專職測試工程師是個非常模糊的結(jié)論。尤其現(xiàn)在我們對產(chǎn)品質(zhì)量控制方法的不斷演變和提高,“測試”的概念不僅僅是指找 bug 了,所有圍繞提高產(chǎn)品質(zhì)量的工作都是測試。頭銜上有沒有“測試”不重要,有沒有“測試”崗位不重要,重要的是如何有效保證和提高產(chǎn)品質(zhì)量。
原文鏈接:http://blogs.msdn.com/b/billliu/archive/2012/11/04/facebook.aspx