如何一步一步從 QA 到 EP
兩三年以前,和友人談到 QA(軟件質量保證) 這個行業,還有 QA 這個團隊的未來,就有了一絲憂慮。而現在,終于有機會實踐一下自己之前的想法,在這里分享給大家。
從我有限的從業經驗到現在,經歷了很多次軟件開發模式的變化,這些變化,或因為跟風,或因為有切實的問題要解決,總之始終處于各種不同的嘗試的路上。QA 團隊從最早的強調流程,到后來強調開發技術,搞自動化測試,再后來又開始做敏捷和持續集成,這條發展的路上,對自己的要求不斷變高的同時,也伴隨著一個組織和團隊發展的魔咒。
組織發展魔咒
這個發展的魔咒更像是一個循環,可能開始于任何一個環節。
例如,公司負責技術的高層,沒來由的認為,測試和質量保證并不重要。這個判斷會慢慢滲透到技術團隊的各個角落,導致測試工程師,乃至測試團隊的其他角色,例如SQA,未來發展的空間會被壓縮,而壓縮發展空間的結果就是留不住人、招不到人。一方面相關工作的經驗技能要求越來越高,一方面可見的天花板又擺在那里。于是整個 QA 團隊都成了別人眼中的 「低技術」團隊,不論真的低技術還是別人以為的低技術,這種印象都很要命,為了擺脫這種印象,大家需要做點東西來證明自己,于是各種自動化測試框架、平臺、系統,紛紛出現,殊不知此時,QA 團隊和整個公司的價值已經慢慢的不一致了,自己關起門跟自己玩,成了普遍現象之后,在公司高層看來,他會覺得自己的 「QA 團隊并不重要」的判斷被證明了,因為沒有任何明確的證據表明,QA 團隊與公司愿景和計劃之間的直接聯系。
可怕么?在很多軟件研發組織中,這是現實存在的循環。
說起來我們的實踐,確實打破了這個循環,說起來好笑,我們解救 QA 團隊的方式,就是徹底取消這個團隊。但是反過來講,只有殺死「QA 團隊」,才能真正的解放「QA 工程師們」,真正解放整個軟件研發過程。
一些基本的價值觀
這個事情,就要從一些最基本的價值觀說起。
比如,人總要對自己做的事負責。當然做了漂亮的事情,誰都希望頭上有光環,但是做了丑事,也要能忍受得了羞辱。之為 「吃自己的狗食」,而老式的軟件開發分段流程,等于鼓勵上游做的錯事,下游來擦屁股,于是上游頤指氣使,下游低三下四,這種頤指氣使和低三下四還能傳導,于是的于是,最下游的一個環節,就是公認的受氣包了。暫不說效率和質量,從最基本的做事方法的角度,似乎也有些欠妥。我們這一條怎么落地呢,就是改組研發團隊,建立 Owner 制度。一個項目的 Owner,就像一個項目的 CEO,大事小情都要關注,從產品到開發,從測試到運維,總之一個項目的成敗,都需要 Owner 來操心,項目外的人,都是他的資源。相應的,項目也變得和平臺無關,而與特性有關,每個項目組都會涉及到幾個平臺的設計、開發工作。
還比如,給質量一個明確的標準。做質量工作或者測試的人,都會有強迫癥,總覺得哪里不對勁,還得狠狠的回歸一遍,又一遍。可其實大家都知道質量是沒有個確定的標準說好還是壞的,那怎么確定質量呢?我們稱作 「質量體現在造成實際的影響上」,也就是說,一個嚴重的問題,如果沒造成影響,或很輕微,那就不嚴重。而一個輕微問題,如果影響面很廣,例如有 1000 萬用戶都看見了,那就不輕微。
又比如,交付一個完美產品還是建立一個快速召回的機制?我們確實真的想每時每刻都能交付一個完美無暇的產品,但那不可能。特別是在互聯網行業,跟傳統的電信、醫療、航空航天的產品迭代有天壤之別,一個完美產品用一年做出來,市場可能早就變了天了。但不完美就有質量風險和代價,為了平衡這一點,我們必須建立一個快速召回缺陷產品的機制,甚至能讓用戶在發現缺陷之前,就用上了新版本。
有了這幾條價值觀,我們就大概知道開發過程改進的方向,以及做事情的原則了。那我們做了什么呢?我們組建了 EP 團隊。
EP 是什么
說到這里,EP 這個詞才第一次出現,這個詞的內涵之豐富,可能需要仔細說說。
我最早看到 EP 這個詞,是在當時還是 Google EP 團隊成員的 James Wittaker 寫的那一個有名的 「How Google Test」的系列博客中,內容我就不轉述了,很多人都讀過。
EP 是 Engineering Productivity 的縮寫,工程生產力的意思,這個團隊,就是給整個大技術團隊,甚至整個公司提高工作效率的。通俗直白的說,就是一個工具團隊。因為工欲善其事、必先利其器,不要小看工具團隊,某些程度上來講,一個產品隨著市場的變化可能很快凋亡,而一個好的工程工具,生命力要強得多,比如,開發語言其實就是最基本的工程工具了。那么,對一個公司,或者說交付團隊來講,怎么衡量工程生產力的高低呢?這個衡量方式其實就決定了「EP團隊」的工作方向。我們自己定義的工程生產力從低到高的定義是這樣的:1)質量,這是最基礎的指標,什么都不行,也要保證質量過關,否則一個產品連生存的可能都沒有。2)同等質量水平下,追求速度。質量過關了,就要看迭代速度了,你比競爭對手快,你就能活下來。3)同等質量和速度下,工程師的幸福感。如果質量也過關了,速度也快,但是大家過得很苦,天天加班,重復勞動,看不到未來,這也不行。幸福是什么?對我們來說,就是不被反復的簡單問題所困擾,該自動的都自動,自動不是說一定快,但是一定省心,這里的幸福就是省心,有精力去關注更多的有意義的事情,而不是每天處理簡單重復的問題。4)同等質量和速度,也有幸福感,再看成長。工程師們有沒有感受到成長?不斷的解決問題或開發產品,感受到的是重復勞動還是成長?其實前三點都做到了,第四點一定是有的。
EP 做什么
我們回頭說 EP 團隊,EP 團隊也有自己的人生理想,那就是一個三部曲:替、教、獨立。
第一個是替的階段,其實就是比較老式的開發過程,我替你測試、替你上線、替你運維。
這個階段,完全不符合我們「吃狗食」那一條價值觀,按照狗食法則,一個人自己設計開發編碼,當然要自己測試,自己寫的代碼 bug 多要一遍遍回歸,這個苦果自己不吃誰來吃?但沒辦法,大多數程序員在如何測試自己的程序方面沒有受過什么訓練,為了盡快發布產品,只能替,但這個替的時間要越短越好,盡快進入下一個階段,教。
第二個是教,就是教技術團隊的其他成員,如何測試自己的程序,如何構造環境、構造數據,如何部署和運維自己的產品。這里的自己做,并不是回到蠻荒時期,例如創業初期只有一個程序員的時候,他當然是自己開發自己測試自己部署,但我們到了第二階段的自己做,是自己規范的做,通過我們提供的相對完善和規范的工具做。我們就處于這個階段的初期。
第三個階段是獨立,獨立是說 EP 團隊從一個替人做事的下游團隊,到一個教人做事的教練團隊,真正進化為一個提供技術服務的產品團隊。這個產品團隊的產品,大多數應該是以一個標準化的、健壯的服務的形式,而不是人力資源的形式,提供給其他團隊的。當然這是我們的理想,能否達到或者是否切合實際,還需要時間來觀察。
EP 團隊和整個技術團隊的關系
從這三個階段的描述中,多多少少都提到一些 EP 團隊和整個技術團隊或整個公司的關系,那這個關系是什么呢?
前面提過,我們不希望是個下游替人收尾的團隊,我們也有「吃狗食」這樣的原則,所以我想到一個比喻,來說明 EP 團隊和其他技術團隊的關系。
我們都知道有一個行業叫做汽車制造業,他們遵循一定的規范和標準,還能巧妙的將創意和標準結合在一起,制造出一些工業奇跡,這些汽車被賣給各式各樣的人,汽車企業并不關心他們的產品用在什么地方,不過他們又發明了一種叫做 4S 店的東西,用來給那些工業奇跡定期維護、修理、還可以收集市場反饋以便改進產品。
還有另一個行業叫做物流業,他們的目的就是將貨物從一個地方運到另一個地方,這種空間的轉移,就是他們為客戶創造的價值。在這過程中,他們會利用到汽車制造業產出的汽車,但他們不太關心汽車本身的標準、設計細節,他們只是使用,他們關心的是使用成本、維修方便。出問題,他們會找 4S 店。
這兩個行業之間的交集是汽車,汽車制造業的價值是制造出好的汽車,物流業的價值是貨物的到達,汽車制造業不關心你的貨物的目的地,物流業不關心他的汽車的制造工藝。但汽車制造業會很關心你怎么用這個汽車,以及積極的幫助你保養,而物流業也會很關心這個車費不費油,好不好開。
說到這里,你可能已經看明白 EP 團隊和其他技術團隊的關系了:EP 團隊就像汽車制造業,提供高效、低耗的工具;產品技術團隊就像物流業,使用工具,快速前進,創造用戶價值。他們之間互相依賴,卻又彼此獨立。
EP 都有誰
了解了 EP 和周圍團隊的關系之后,來看看我們的 EP 團隊的角色和成員。
我們的 EP 團隊,大致分成如下幾個角色(而實際上的工作是混合的,之所以要分開成角色,主要是從招聘的角度出發):
SED,Software Engineer in DevOps。顧名思義,這個角色首先是個軟件開發工程師,其次,面向的領域是 DevOps,DevOps 的概念我們就不必多講了,在實際工作中,SED 工程師是個真正的多面手,他們可能今天在開發一個 Linux server 的自動化上線和回滾的工具,明天就要設計或優化 CDN 的部署,后天又要解決一個 Windows 平臺編譯加速問題,還有還有一個自動性能 benchmark 工具等著他來開發。這個角色目前我們只有兩位,而且這個角色的工程師是最難招聘的,因為新人,或者很小的公司出來的人,很少有受過系統的訓練或有比較先進的軟件工程思想,而從大公司出來的人,已經被大公司條塊分割的工作方式同化,一般只擅長一個領域,而對跨界的或者不懂,或者沒興趣。所以這個崗位的工程師,都是有成熟公司工作經驗的 Geek 型的人。
SA,System Admin。系統工程師,和很多公司的運維工程師很想像,實際上我們現在的狀態,做的事情也和大多數公司的運維工程師一樣,處理監控,優化服務部署等等,但不一樣的是我們的目標是將絕大多數應用層面的運維工作交還給開發團隊,所以我們在不斷的將監控系統改造為友好的,自助的,也不斷的將各位上線部署類的工作做成自動的,現在已經有了很多成果,我們的 SA 主要精力可以放在系統以及更底層的部分了。
TE,Testing Engineer。測試工程師,其實這個稱呼有點名不符實,我們的唯一一位測試工程師,主要的工作其實是發布和迭代控制,要保證整個交付團隊的迭代節奏,例如在代碼上拉發布分支、觸發發布事件、監控數據等等工作,這個工作要求非常精確,又很繁瑣,因此和 SED 工程師有非常多的交互,他們負責將這個過程自動化。這里插入介紹一下我們的發布過程,可能大家會更理解為什么還有個「發布工程師」:
我們有三個發布 Channel:Beta、RC、Release,作用各有不同。例如 Beta Channel,主要用于一些新特性的提前發布,這里面可能會多少有點缺陷,所以一定要控制人數,并且是那些喜歡嘗鮮的用戶,他們會用的比較徹底。而 Beta Channel,可能每天都有版本更新,會有一些用戶喜歡跟著 Beta 版。而這些新的特性如果用戶反饋不錯,并且沒有什么嚴重的問題,就會進入最近一次 RC(Release Candidate),這個量就很大了,大概能占到我們每日活躍用戶的十分之一到五分之一,這里面的功能在沒有意外的話,就是正式發布的功能了,需要注意的是,不是每個 Beta 都會變成 RC。而 RC 在發布幾天之后,如果一切正常,就會切換為 Release,Release Channel 一般會在一天之內,讓絕大多數活躍用戶升級完畢,這個時候,如果程序有 bug,影響就非常大了。
posted on 2014-03-28 11:06 順其自然EVO 閱讀(947) 評論(0) 編輯 收藏 所屬分類: CMMI & QA