跳到主要內容

[科技]如何讓 6 萬個工程師順暢合作不互雷?微軟法寶「完整程式碼審查」揭密!


  全球最大的軟體公司之一微軟擁有約 140,000 名員工,其中大約 44%,即超過 60,000 名員工,是工程師。

  Office、Visual Studio 或 Windows 等幾種產品,都是由數千名同時在同一程式碼庫上工作的工程師開發的。確保由不同子團隊開發的程式碼完美地協同工作是一件非常重要的任務。

  那麼你想過嗎,如此大的工程師規模下,微軟是如何確保程式碼品質的呢?

  微軟程式碼審查是一種被廣泛採用的工程實踐。成千上萬的工程師認為這是一個偉大的最佳實踐。大多數高績效團隊花費大量時間進行程式碼審查。

  在微軟程式碼審查的大規模研究中,我們採訪、觀察並調查了 900 多名開發人員。

  我們的目的是了解如何在微軟完成程式碼審查。我們想知道,在進行程式碼審查的時候,開發人員面臨哪些陷阱,以及他們為克服這些挑戰而開發的最佳實踐。

  大多數經驗教訓對於小型或大型團隊組織都很有價值。如果您的團隊尚未進行程式碼審查,我會向您展示該實踐的好處。如果您的團隊已經有了程式碼審查機制,您可以將您的實踐與微軟的程式碼審查實踐進行比較。

  在這項研究中,36% 的開發人員表示他們每天進行多次程式碼審查。另有 39% 的開發人員表示,他們每天至少進行一次程式碼審查。12% 的人每週多次進行程式碼審查,只有 13%的人表示過去一週他們沒有進行程式碼審查。

  這意味著, 微軟的開發人員將大量時間花在程式碼審查上 。因此,確保有效使用這段時間非常重要。

  程式碼審查最重要的好處是,提高程式碼品質並找到程式碼中的缺陷,另一個重要好處是知識轉移 。

  「知識轉移」意味著,審核彼此程式碼的團隊成員熟悉程式碼庫的大部分內容。但是,這也意味著程式碼審查最好在團隊內部實施。另一個優點是,新的團隊成員和初級開發人員可以在審閱或獲得反饋的同時學習和提高他們的編碼技能。

  如果開發人員在程式碼審查期間討論替代解決方案,它不僅可以改善程式碼庫,還可以為所有相關人員提供學習機會。因此,學習、指導和自我改進是程式碼審查之所以被認為是微軟的一種有益實踐的主要原因。

  程式碼審查可以通過多種方式執行。有時,可以很不正式, 比如一位開發人員走到另一位開發人員的桌邊一起看一些程式碼。其他時候,團隊一起審核程式碼。但是,您在微軟的程式碼審查中遇到的最可能的情況是:程式碼審查是在藉助工具的幫助下完成的。

  程式碼審查的工具有很多種。在微軟,團隊可以自由選擇他們的工具。至 2016 年, 89% 的開發人員表示使用 CodeFlow 程式碼審查工具。稍後我將解釋更多有關此程式碼審查工具的信息。從那時起,隨著 Git 的興起,工具領域發生了變化。

  現在,讓我們考慮一個典型的程式碼審查案例: 微軟的開發人員 Rose 剛剛完成了一個功能,現在想要得到她同行的反饋。

  Rose 首先要為程式碼審查做準備。這一步包括打開程式碼審查工具,允許她預覽程式碼更改。程式碼審查工具可以執行差異化對比任務,幫助羅斯確切了解她做了哪些更改。

  在仔細審查了這些變化之後,她標記了一些備註,告訴評審人她做了什麼以及為什麼這樣做。備註說明有助於審閱者了解程式碼更改的目的和動機。至此,程式碼已準備好可以發送給審閱者了。

  許多經驗豐富的開發人員都知道應該選誰作為程式碼審閱者。然而,對於團隊中的新人或新的工作領域,選擇可能會更棘手。如果 Rose 不知道她應該添加誰,她會查看團隊規定或詢問她的同事。她還可以使用程式碼審查工具的推薦功能,該工具可以根據程式碼庫的經驗和知識幫助選擇審閱者。

  Rose 選擇她認為可以為這段程式碼貢獻知識的審閱者。審閱者通常是其他開發人員,但也可以包括其他利益相關者,例如開發人員工程師,UI 專家或經理。一些評審員被選是基於他們的專業知識,其他評審員被選是為了讓他們能隨了解即將發生的變化。

  一旦選中每個人,Rose 就會發出程式碼審查。程式碼審查工具會自動發送創建評審的通知到每個人。通知對像不僅包括所有審閱者,也會包括其他人員,例如相關團隊的經理或產品經理。這些通知允許他們的信息保持同步,即使他們不需要執行評審。

  Rose 的同事們有時間就會審查程式碼。每個審查者都能評註程式碼,完事後把程式碼發回 Rose,Rose 可以據此修改程式碼。

  審查者通常關注的點包括:程式碼有 bug 嗎?程式結構有問題嗎?程式碼有拼寫錯誤、少個冒號之類的小毛病嗎?不是所有的評註都重要,但是有幾個小技巧可用來提升程式碼評註。

  Rose 根據評註修改程式碼。如果有的地方弄錯了或有爭議,Rose 可能直接去跟審查者面談,或者通過審查工具交流會更私人化一點。

  不管怎樣,一旦 Rose 根據反饋完成了程式碼修改,她可以發一份新版本的程式碼給審查者,這份程式碼叫修訂版。

  若有必要,她還會收到反饋。這個循環視情況而定會持續好幾輪,一般的小程式碼審查一次即可,複雜的程式碼可能得審查多輪。

  這樣的工作是很常見的,還可能在作者和審查者之間擦出思維的火花。

  完事之後,審查者標記程式碼為 okay,Rose 終於可以把程式碼補充到公共程式碼庫了。有些團隊會允許開發者在審查結束前就把程式碼上傳到程式碼庫。這種情況通常在程式碼只需小修小改的時候發生,這樣可以異步審查並加速開發。

  上面說的所有步驟都是 Microsoft 程式碼審查週期的正常程序,被所有團隊執行,根據團隊不同而略有出入。

  如果開發者把使用者交互介面也改了,那 TA 最好截個屏給別人看下。這樣審查者就省的跑程式碼了,直接看圖片就行,審查者也可以方便檢查因運行環境不同而產生的差異。

  靜態分析對規範程式碼樣式來說尤其有效。微軟的一些團隊使用自動化的靜態和動態分析工具作為專用的機器人評審員。這些機器人評論程式碼樣式和其他靜態問題。這樣就能騰出時間讓人工程式碼審閱者執行更有趣的任務。

  多年來,微軟實際上的程式碼審查標準之一是一個名為 Codeflow 的內部工具。這是一個複雜的程式碼審查工具,它支持開發人員並指導他們完成程式碼審查的所有步驟。

  隨著 Micorosft 的參與和對 GitHub 的收購,改變是不可避免的。例如,在 Microsof t 中廣泛採用 git 作為源程式碼管理工具,就可以看出這種變化。但是,這也意味著在微軟,以「pull request」的形式進行的程式碼審查正在上升。

這個網誌中的熱門文章

[動畫]《航海王》女帝實力多強?一腳把自己從七武海最末,踢進了前三。

  《航海王》中的海賊女帝波雅漢庫克,集實力、美貌與地位為一身的強大女人,前海軍元帥戰國有一句話評價女帝,戰國說「那個女人很強!」   這句話是在頂上戰爭之前,海軍強制召集七武海,女帝終於響應召集的時候,手下傳回總部戰國知道消息後的評價。讓海軍元帥松一口氣,認為是一個很大的援軍或者說戰力,給出這麼高的評價,足以證明女帝的實力!   女帝在頂上戰爭中的表現也是可圈可點的,全程摸魚,抽空就幫路飛……   可是各種特別篇卻無限削弱女帝的實力,女帝在特別篇中的實力可能懸賞都過不了億,單純就是賣賣肉,襯托襯托路飛,讓路飛英雄救美。   特別篇「最強的賞金獵人西德爾」女帝第一集的魅力值和實力都被無限削弱,特別是特別篇的第一集,堂堂七武海竟然淪落到無數次四次落入險境,被路飛搭救,對面只是一幫背著水槍的雜兵,也能抗拒女帝全果的魅力……   本身女帝身為女子之身,也沒有對戰過同等級的強者,再加上特別篇還要拉出來賣肉吸引人氣,所以自然而然很多人就會先入為主的有女帝七武海最弱的想法!   最新劇場版狂熱行動,終於讓女帝火力全開了一次,這才讓觀眾見識到了女帝展現出完整實力有多強……   三番五次的看到路飛被巴雷特打飛,女帝再也忍不了,變身護夫狂魔,實力毫無保留的全開。   而女帝的一腳,成為了影片的亮點,女帝的一腳飛踢,蹬得全身覆蓋了武裝色霸氣龐大身軀的巴雷特殘渣橫飛……   從畫面效果也能看出這一腳威力有多恐怖,如此龐大的巴雷特仿佛被火車撞了一樣。   可惜巴雷特的武裝色霸氣實在太過強大,女帝不能破防,如果沒有武裝色的話,女帝肯定能把巴雷特攔腰踢斷……公公卡普拿山峰練拳法,孫媳婦漢庫克可以拿山峰練腿功。   女帝的實力可以說沒有短板,九蛇的霸氣本就先進,女帝的體術又這麼強大,再配合上與女帝相輔相成的果實能力,你以為女帝是個依靠果實能力的魅惑法師……?其實女帝是個喜歡用體術近戰的暴力分子!   女帝的這一腳,把自己從原本人以為的七武海最末,踢到了七武海靠前的地位。七武海中鷹眼大熊是毫無爭議的前二,這個第三是明哥,還是甚平亦或是女帝,都有可能,誰也排不出來,個人還是覺得女帝可以爭一爭這個第三。至少女帝實力可以排在七武海中上遊了。

[動畫]《一拳超人》第三季動畫的埼玉英雄視覺圖、特報影片、製作團隊和聲優情報公開。

  以 ONE 與村田雄介所創作的超級英雄題材動作漫畫《一拳超人》為原作,第三季電視動畫公開了主角埼玉視覺圖、特報宣傳影片、製作團隊和聲優陣容等情報。   《一拳超人》電視動畫第一季由 MADHOUSE 製作,於 2015 年 10 月開播;第二季改由 J.C.STAFF 製作,於 2019 年 4 月開播。2022 年 8 月宣布動畫第三季製作消息。目前已知第三季店是動畫將與第二季同樣由 J.C.STAFF 擔綱製作。   由 ONE 擔任原作、村田雄介負責作畫的漫畫作品《一拳超人》,描述就職過程中找不到出路的主角「埼玉」,遭遇到要奪走一位少年生命的螃蟹異變人後,回憶起年少年時「想要成為英雄」的想法,於是奮起戰鬥並救下了少年。重拾對於成為英雄的志向後,埼玉苦練了三年、以掉光所有頭髮為代價,化身成毫無弱點的超級英雄,只需一拳便能輕鬆地擊敗怪獸。之後他與弟子傑諾斯一起加入了英雄協會,開始了與眾多英雄對抗各種怪物的生活。

[財經]仁寶大力押寶醫療「賣一台、賺一台」!繼續拚非 PC:目標營收破 6 成

  仁寶電腦於 1 日舉行法說會,2023 年全年度營收為新台幣 9467.15 億元、年減 12%,主要受到 PC 出貨量下降的影響。仁寶總經理翁宗斌表示,上半年因為景氣影響,PC 產業較去年同期下滑,但下半年可以期待 AI PC 的新應用帶動整體 PC 成長,仁寶也預計在今年 6 月出貨 AI PC 相關產品。   仁寶 PC 去年的出貨量為 3,400 萬台,比前一年 3,900 萬台少了 13%,但符合先前提供的全年度的展望。PC 的營收貢獻是 69%、非 PC 是 31%,全年毛利率都較前一年度增加,主要原因為產品組合的持續改善和效率提升。   「今年重點放在產品的獲利毛利率以及轉型:車電、伺服器以及醫療的新產品轉型來提高獲利。 未來希望在 3 年內把 PC 占比降到 40%、非 PC 是 60%。 」翁宗斌說。   關於伺服器和車電市場的發展預估,翁宗斌表示,伺服器營收每年都有 30~40% 的成長,而 AI 伺服器比重相對去年會更高,客戶需求量至少會超過 2 成,「NVIDIA 的架構除了 GPU 之外,也有推出 AI 伺服器,而仁寶也有參與 AI 伺服器需求供應。」   另外在非 PC 新產品的毛利率貢獻中,醫療相關產品的毛利率相對高,「幾乎是賣一台、賺一台」,翁宗斌說。此外,仁寶於 2 月底參與巴塞隆納移動通訊展(MWC),展出衛星物聯網解決方案,主要以地端的接收站為主進行技術開發。   針對全球設廠的布局, 仁寶主要製造基地還是在中國,產能約在 70~80% ,會配合客戶的需求評估在不同的地區設廠。也因此,數位化和自動化管理系統非常重要,可以解決在不同國家需要適應當地文化的問題。   而伺服器的生產於泰國、越南和中國都有製造,外傳戴爾也有計畫去泰國設廠,法人詢問是否仁寶也會跟進,翁宗斌則回應,「看戴爾願意給我們多少單,我們就多幫它生產。」