在一個十萬人的企業裡,沒有單元測試也沒有程式碼審查,僅依賴於 QA,但這卻是「有效」的方式!
中國眾多的出海企業正在國外快速佔領市場。比如在 2021 年 TikTok 就成為了全球存取量最大的網際網路網站,超越原來的領頭羊、美國 Alphabet 旗下的谷歌。
中國人創造的網際網路平臺,超越向來雄霸全球的美國平臺,這是一個很具實質和象徵意義的發展。
同時,隨著中國科技企業的影響力日益提升,很多人對中國企業的工作文化充滿了好奇,想了解到底是什麼造就了這種成功。
最近,一位曾在一家在美中企(TikTok)工作了一年多的華裔(之前任職於 Snapchat 和 Facebook),在 YouTube 上釋出了一個視訊「5 crazy things about working for Tiktok(why we quit our PM and engineering jobs)」,從五個方面總結了他從中國企業裡學到的經驗。
YouTube 地址: https://www.youtube.com/watch?v=RNUrZFkHXlo
他的觀點在 Twitter 上吸引了大批對中美或中國科技感興趣的人,網友認為該貼文很準確地描述了中美工程文化差異,我們將這些觀點翻譯了出來:
第一點:很多西方企業都會寫單元測試,每個人都知道這是非常基本的事情。但這裡的中國工程師們不需要編寫單元測試!每項程式碼提交都指望 QA 部門的手動測試,團隊在提交之前手動測試每個 code commit 提交。
你可能認為這完全是瘋了,為什麼不寫單元測試?利用 QA 進行測試,實際上是希望工程師們關注於功能,並快速啟動,寫測試就完全交給了 QA。
而且讓人震驚的另一件事情是,程式碼合併請求也不需要批准。在一個十萬人的企業裡(這不是一個小型初創企業),沒有單元測試也沒有程式碼審查,僅依賴於 QA,但這卻是「有效」的方式!也沒有發生過重大宕機事件。
中國企業的產品團隊往往人員更多,也更傾向於依靠運營團隊推動業務增長;這一點與美國被動加資料驅動的增長思路不太一樣。我注意到中美科技企業之間的主要差異,是中國企業對人力的依賴性更高,這個優勢也是中國企業得以迅速佔領新市場的核心原因。
第二點:在中國企業,很少見到一對一式的會議,因為擴充套件性太差了。各個團隊內部很少進一步細分,所以需要跟更多同事開展互動。經常見到那種典型的、自上而下的會議,一開就是 90 多分鐘,期間 60 多人同時參會。大多數情況下,都是 1 個人在前面講、剩下的人在翻看會議資料。很少有歐美公司裡常見的那種暢談會或者討論會。
第三點:為了防止獵頭挖人,這裡並不公佈明確的組織結構體系。組織結構高度扁平,某些工程經理需要接手 200 多份績效評估報告(未經劃分!),有些報告提交者甚至不知道自己的頂頭上司長什麼樣子。
第四點:從流程與執行上來說,中國企業裡的屁事不多,大家都在低頭忙工作,很少會去傳閒話或者搞道德評判。另一方面,中國企業在流程設計上還不夠成熟。檔案與改進團隊的同事們無論做得多好,但很難得到激勵。也沒人審查工程師們的程式碼。
第五點:從工作與生活的平衡上來說,美國團隊不需要 996,但要求必須適應中國時區。這真挺難的,也是造成人員流失的主要原因,我接觸過的所有 PM 都在工作一年後離職了。
中國的 STEM(科學、技術、工程與數學)專業博士是美國的四倍,但技術崗位反而比美國更少,所以這裡的競爭烈度要高於美國,大家把這種狀況稱為「內卷」。中國的同事們很怕自己失去技術優勢並被社會的發展甩在身後,所以他們才能迸發出巨大的工作能量。
從人力 QA 說開去
可以說近年來中美在科技和網際網路創新領域已經並駕齊驅,中國出海企業能順利搶佔到市場,起碼能說明在競爭中具有一定的優勢。
然而我們也可以進一步從 Lucas 的描述中看到中美軟體開發流程上的一些差異。比如美國公司在軟體開發中會非常注重技術檔案和使用檔案的細緻規範,注重程式碼提交和稽核流程,也特別注重單元測試,不是依靠人力,而是依靠開發過程來保證最後的品質。
網際網路企業的崛起改變了許多軟體設計、開發和釋出的模式。
以單元測試來講,在傳統開發流程中,一般來說,QA (Quality assurance) 負責對程式進行黑箱測試,呼叫介面時傳確定的引數,再校驗介面響應值符合某種預期。而單元測試是一種白盒測試,要求測試人員瞭解被測程式的構造,從而構造測試用例校驗程式各個分支邏輯。
顯然,後者更具有挑戰性,不可能像黑箱測試那樣能依靠堆積人力的方式快速地完成工作,所以單元測試會導致交付變慢。為了加快釋出週期,我們在實踐中的分工也逐漸有了改變,開發人員專注於功能建立,而業務領導者則專注於交付,開發人員的測試工作就被忽略了。
開發和 QA 測試是一個長期受關注的經典話題。不同公司有不同的辦法,在這一點上,中美軟體開發團隊的差異較大。Google 算是其中一個典型,其測試總監 James Whittaker 於 2011 年曾表示 Google 沒有一個「龐大」的測試部門,相反,部分測試工作委派給了開發人員。在「Google 是如何進行測試」的文章中,James 寫道:
「測試和開發同時進行。編寫一些程式碼,馬上進行測試和構建。接著,編寫更多的程式碼,繼續測試。更好的是,在你編碼的時候或者編碼之前,就計劃好你的測試。測試不是一個獨立分開的過程,它是開發的一部分。品質不等同於測試;要想有高品質的產品,就要把開發和測試緊密捆綁在一起,直到不分彼此。品質來自開發,而不是測試。」
在 Google,測試人員主要是「確保開發人員有自動框架和相關流程」進行測試即可。解決開發人員依賴他人的問題的關鍵思路是,不在團隊中配備數量眾多的測試人員。十多年前,Google 開發和測試的配比是 10:1,其後甚至喊出了「去 QA」的口號。在文章「 QA 部門消亡日」中,Google 專家甚至認為單元測試是 QA 殺手:
單元測試是一種測試特定程式碼片段的方法,它可以確保該程式碼段可以正常執行並且契合軟體拼圖。有證據表明,藉助單元測試,你可以檢查超過 90% 的程式碼,而且,和 QA 的手動測試工具不同,恰當構建、可以自動測試的單元測試可以隨著程式碼庫一起演化,實時測試程式碼。
Google 認為,當將測試職責轉移到開發人員身上時,開發人員將會寫出更乾淨的程式碼,構建出缺陷更少、品質更高的軟體。這一切都取決於公司如何組織,以便在不降低品質的情況下降低成本。
到了 2017 年,Google 宣佈取消舉辦了十年的測試技術會議 GTAC,Google 的理由是「相比自動化測試技術,他們更關心工程效能的提升」。工程效能在實踐中的落地通常就體現在「開發人員完成開發工作的基礎上,還需要承擔測試、上線和運維的全部工作」,為開發人員的「一條龍」工作提供所有必要的全鏈路工具鏈支援。
但 Google 之前提倡的這一套完全依靠開發保證品質的方法,似乎和 Lucas 提到的「依賴 QA」正好相反。
國內網際網路企業近年來快速崛起,2018 年初 Mary Meeker 的年度網際網路報告裡面,Top 20 市值 / 估值的網際網路公司中國佔了一半。國內網際網路企業強調在業務模式上的創新,在軟體開發流程上,和傳統軟體相比開始有了一些變化。比如迭代速度比不出問題更重要,如果出了問題,能儘快定位,快速修補,減少影響;使用者反饋比按期交付更重要,用最快的迭代速度開發,再收集使用者的反饋,來確定這個產品的功能要不要或怎麼改;捨棄比較可能導致延期交付的「測試」環節…
只是我們也很難說清楚,這種技術優勢是一種進步,還是需要大家逐漸去改變的地方。也許能結合歐美軟體行業中先進的管理方法和技巧,充分發揮中國開發人員的優勢和特長,才能更好地提高整體軟體開發水平。
更多程式設計相關知識,請存取:!!