qileilove

          blog已經轉移至github,大家請訪問 http://qaseven.github.io/

          如何一步一步從 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,影響就非常大了。
            Venders,外包測試團隊。我們有大約六七個人的外包測試團隊(on-site),主要負責我們主要產品的人工驗收測試。我們對外包測試團隊的工作方式也有一個設想,就是一個項目剛開始的時候,外包測試團隊應當是先上很多人,然后隨著 SED 的介入,讓自動化程度加強,慢慢人少下來,直到下一個新項目開始。但這個設想在國內想實現,卻沒那么容易,主要有幾個原因:1)國內的外包測試的工程師,通常是技術和經驗都比較初級的人來做,外包測試成了一個門檻低天花板也低的行業,技術和經驗缺乏,導致進入新項目以后沒辦法非常快的上手,而有經驗有能力的人,很快就會脫離外包行業;2)外包測試的公司,人才儲備不足,很少有人力資源池,都是有需求,現從市場上招,或從競爭對手那里挖,有的人都沒見過,就派到客戶那邊來面試,這也導致了沒辦法幾個月就撤下來,因為他沒辦法跟候選人簽合同。這兩個客觀原因,我們也比較無奈,所以我們的外包測試團隊基本上還是長期 on-site。
            UOE,user operation engineer。用戶運營工程師,這個崗位很多人不太容易理解,一般用戶運營人員都是跟內容啊、用戶打交道的,就像貼吧管理員就是典型的用戶運營人員,那為什么要有個運營工程師呢?這個我們是跟硅谷的 Dropbox 學習的。因為在日常工作中,我們發現有想當一部分用戶的反饋,不論是新功能的需求還是缺陷,都是技術性很強的,如果你能做到第一時間和用戶做深入的,技術含量較高的溝通,從解決問題的成功率上會高很多,而如果你反饋一個技術問題,總是過了幾天才有技術人員跟你聯系的話,你可能配合排查問題的愿望會小很多。基于這個思路,我們增加了這個角色,同時他們還負責一些運營過程中使用的工具和平臺類的研發。可能會有人問這個角色為什么會在 EP 團隊?其實仔細分析一下用戶運營的工作,會發現他們處理的對象是一個個用戶提交的 ticket,這非常像 test case,不同之處是一個是用戶事后提交,一個是事先設計,分別保證了優先級和完備性,因此結合起來,對提高質量是非常有益的事情。
            EP 團隊的工作方式與面臨的挑戰
            上面這幾個角色,就組成了我們的 EP 團隊,這樣的一個團隊,這樣的一個能力構成,就有了一些鮮明的特點,例如:
            1)沒人管的事情我們管,支持所有團隊。公司內部雖然分成了很多個團隊,但是很多技術問題是找不到人負責的,例如,一個簡單的內部數據統計腳本,或者一個發布內容到 CDN 的 CMS,等等。這些事情基本都會由 EP 團隊接過來。
            2)做事情沒有計劃。這個特點可能很多人會覺得匪夷所思,甚至不能接受,但實際上這跟 EP 團隊的工作有關系,比如汽車 4S 店,有多少車禍的汽車要修理,多少人為損壞的車要修理,怎么做計劃?實際上是遇山開道、遇水搭橋。外部的市場的變化、內部的技術人員的變化,都會有不斷的瓶頸出現,而 EP 就要快速發現并解決這些瓶頸,直到發現下一個瓶頸,這個過程沒辦法有詳盡的長期的計劃。而替代的是使用目標管理的方式,我們公司內部所有團隊都會用一種叫做 OKR(Objective and Key Result)的方式來做管理,簡單的說,就是設定目標,然后評估完成度。EP 團隊的目標大致有兩個方向,一個我們叫做 「Smoothly & Fast」,就是讓一切跑通做順的能力,還有一個就是「實現自助」,能讓其他團隊的成員,不管是技術還是非技術背景,都能自己通過我們的工具完成任務。
            這些特點看起來很不錯,但是實際上帶來的問題也非常多,例如:
            沒有成就感。因為所有人都是你的需求方,這個感覺實在是不太好,另一個角度講,很多研發工程師會覺得開發一個對外的產品比較有成就感,對內的總覺得沒意思。這個問題要解決,其實就要靠所謂的「工程師文化」來解決,國內長期以來在職業化上有一些不好的習慣,其實能發明工具的人都是大師,開發語言就是工具,操作系統也是工具,真正的牛人,都在做各式各樣的工具。能幫助別人成功的人,是最成功的。
            還有,就是脫離實際。很多人做工具,怎么炫怎么做,流行什么做什么,要么就大而全,這還是好的,更多的時候是想的大而全,半年做不出來。整個公司的價值取向是一致的,特別是小公司,容不得這種炫技一般的工作方式。所以我有一句話,叫做「自 high 無價值」,什么叫「自 high」?就是自己跟自己玩,玩的很高興。
            還有一個問題,就是招聘困難。這個在 SED 的工作職責部分提過,就不展開了。因為招聘困難,我們就要考慮怎么培養這樣的人才,所以我們有一個方法論,叫做「要改進,先體驗」,因為很多 EP 的成員是要改進工作過程的,但是怎么改,不是所有人都能搞定,這依賴于大量的經驗積累,對經驗不足的人,很簡單,就是讓他去做。要提高研發效率,找到痛點,那就先去做一個月研發;要去改進測試過程,提高效率,就去做一個月測試。一個技術和思維方式都很不錯,只是經驗少的人,經過一個月的體驗,能提出非常多的、而其他人已經麻木了的改進點,并推動實施。
            再有,依賴整個團隊的成熟度。不是說有了 EP 這樣一個團隊,整個公司的效率和工作模式就會有大幅度提升,因為一個汽車再好,你開的方向不對,也到不了目的地。現實中存在著非常多缺乏責任感的 Owner,很多人覺得,我寫完代碼編譯通過了,丟給測試組就行了,沒我的事了,這樣的想法大有人在,所以從成立 EP 團隊,到整個公司的生產力真正被提高,中間不只是提供工具這么簡單,還有一系列的指導和訓練的工作。
            Why we can & why you can
            最后,關于我們為什么能做這個事情,我們也有一些總結:
            1)創業團隊。創業團隊就是短小精悍,精力集中,沒有太多無謂的紛擾,快速交付產品快速迭代是主要的工作方式。
            2)從第一天開始堅持自由和責任的工程文化。從創始人開始,很堅持這種工程文化,有什么樣的 leader 就有什么樣的團隊,所以大家接收和擁抱 EP 的工作模式,也非常快。
            雖然上述這兩條很多公司沒有,但不代表做不成這個事情,在我看來,只要具備下面幾條,想做成 EP 的工作,就并不難。
            1)互聯網行業。互聯網行業有一個非常好的,區別于以往其他行業的特點,就是你的產品在物理上是自己控制的,提供的只是服務,這非常有利于快速迭代,因為傳統行業不可能做到。
            2)快速變化的業務模式。這不是說我們自己要快速變化,而是業務模式和市場不斷變化,來推著我們前進。只有業務模式的快速發展,才對生產力有不斷更高的要求。
            3)有改變的決心。這個說起來有點虛了,但也很重要,因為 EP 這樣的工作模式會有陣痛,例如團隊的重組、轉型,都會影響到一部分人的利益,特別是團隊的管理者,而這些中高層管理者,也確實有能力阻止變革。但坦白的說,很多時候你不主動改變,到了客觀環境推動你不得不變的時候,到最后就成了被淘汰的人了。我還有一句話,叫做「組織結構決定工作模式」,意思是說,很多工作模式的出現,是因為組織結構的需要。反過來說,在你的組織里很多很好的工作模式推動不下去,或者效果很差,你就要看看你的組織結構是不是有問題。比如兩個本來應該緊密合作的團隊,一直合作不好,互相鄙視,你想簡化流程,最后流程越做越多,大家都在壘墻,那你就要看看兩個團隊共同的老板,是不是級別太高了。
            4)對團隊成員的高標準。前面我提過,我們 EP 團隊的大部分是 Geek 型的人,Geek 這個詞在英語里是一種很高的評價。只有一個技術和經驗都非常豐富的人,才能勝任 EP 這樣的工作,所以要堅持不懈的雇傭一流的人才,人不夠,可以抓大放小,但絕不能有二流、三流的人在團隊里。


          posted on 2014-03-28 11:06 順其自然EVO 閱讀(947) 評論(0)  編輯  收藏 所屬分類: CMMI & QA

          <2014年3月>
          2324252627281
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導航

          統計

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 龙井市| 乌恰县| 旬邑县| 泗水县| 兴宁市| 全椒县| 武胜县| 开封县| 龙泉市| 大姚县| 湟中县| 思南县| 随州市| 邢台市| 方正县| 定州市| 宁远县| 满洲里市| 观塘区| 西峡县| 夹江县| 托里县| 新闻| 万年县| 华容县| 麻城市| 泸西县| 铁力市| 利辛县| 邮箱| 玉山县| 北安市| 自治县| 祥云县| 五河县| 高阳县| 卫辉市| 鹿泉市| 永平县| 宕昌县| 阳信县|