保證傳遞效率和品質把控是一項業務長遠、穩定發展的必經之路,來自微信支付的張洪晖在第二屆小程式雲開發技術峰會上就介紹了高速發展的業務團隊如何利用小程式雲開發搞定持續傳遞和品質管控。
在上半部分文章中,作者主要介紹了微信支付境外團隊應用雲開發的背景,以及在持續傳遞側做出的探索實踐。下半部分文章将聚焦于團隊在品質管控中做出的嘗試。

先來介紹一下金融業務下的品質難題,很多團隊可能經常會遇到一些品質問題。大家可以思考一下,在不把控品質的情況下追求效率是否有實質性作用?
對于這個問題,以微信支付為例:微信支付是一個傳統金融與網際網路的結合。傳統金融的穩定性要求比較高,一定程度上可以犧牲效率來換取穩定性,而網際網路追求的就是效率,當品質和效率進行結合的時候,對團隊要求是非常高的。
舉個例子,我們團隊小程式的釋出節奏是平均每周一個版本,每天平均 新增800行代碼、修改300行代碼。業務壓力來了之後,開發同學進行代碼的變更時就涉及到品質管控問題,這反過來可能會影響效率。例如,在進行重構和代碼的修修補補時,其他需求的湧入,會加大整個業務的壓力,長此以往,很可能進入到一種負循環中。
那麼,如何破局?正常思路下,業務壓力大,首先想到就是通過增加人力來緩解業務壓力,但由于每個人的代碼風格不盡相同,人員增多也增加了代碼的管控難度。而在重構方面,團隊通過持續傳遞的流水線、重構抑制效率的損失,但反過來,也存在重構某些代碼影響線上業務的風險。
由此,為了解決這個痛點,團隊提出了非常重要的一點——品質管控。
下面重點介紹下團隊是如何省心又省力地做好品質管控。
這是團隊在優化品質管控前的情況,總體來說,流程分為需求、開發、釋出和線上階段。概括來說,可以分為事前、事中和事後三個階段。
對于金融業務來說,這真的夠了嗎?事實上,以上流程存在一定的隐患,以小程式的底層架構為例,相信對小程式開發熟悉的同學非常了解,圖中的邏輯層和渲染層是分離的,也即邏輯層無法拿到渲染層的結果,沒有辦法對渲染層進行監控。
假設在這種情況下,賬單和資金展示出現了問題,一定會引起使用者的投訴,那麼,如何防範這種情況的發生?
首先,團隊便想到做标準化的元件,其中最主要的就是金額渲染的元件,不單要做,還要考慮開發同學有沒有真正用起來。為此,在開發流程當中,會對敏感字段進行一些掃描,來看一下元件是否有被正确的使用。
下圖左側是一個例子,我們通過關鍵字檢測到這段代碼沒有正确使用金額渲染的元件,就立即停止了代碼的送出。并且,為了增強檢測的力度,團隊也會在流水線中進行關鍵字的掃描。
靜态金額渲染檢查一定程度上解決了我們的問題,但是它足夠安全嗎?當然不是的。試想,如果關鍵詞中的 money 拼錯了,寫成了 mnoey,是不是就被漏掉了?另外我們 UI 也有可能溢出,導緻賬單或資金展示出錯的風險。
這裡團隊就引入了一個 UI 自動化截屏的方案,底層基于小程式開發者工具的 automator 的能力,實作自動地拉起開發者工具,并且跳轉到對應的頁面,然後對數量進行攔截(提前寫好接口用例),在攔截之後,會對頁面進行滾動截屏,截下來的圖檔會進行圖檔的比對并歸檔,在歸檔之後,還會通知産品和研發去進行稽核。
舉個例子,我們用一個指令啟動了開發者工具,在開發者工具啟動之後,會啟動模拟器,模拟器會根據我們預設好的一個路徑去跳轉對應的頁面,并自動進行滾動截屏。當我們截完所有的頁面後,會在本地将這些圖檔儲存下來,以供比對和歸檔。
左邊是我們的舊截圖,右邊是我們的新截圖,兩個截屏之間進行對比,中間是對比,發現底部的優惠券區域有所變化:新增了小紅點。由此我們就隻需關心本次變更是否有影響到這一塊邏輯,如果有的話,需要及時排查問題。
這裡就是剛才講到的品質管控的總體思路,是分為事前、事中和事後三個階段進行。
最後,總結下團隊為什麼使用雲開發,以及雲開發到底給了我們什麼樣的能力?
第一,雲開發給了前端同學一個全棧開發的能力,同時對後端同學也是非常受益的,讓後端可以更關注業務的穩定性。
第二,雲開發成本非常低,具體包括低開發成本,低開發門檻和零運維成本。
第三,團隊非常看重雲開發的生态能力,包括接入了微信支付、COS 和 redis各種各樣的能力套件,都支援開箱即用。
用上雲開發之後,大家也可以思考一下是否有「用好」雲開發呢?本次分享的内容主要集中在如何用雲開發提升效能,包括持續建構、持續釋出 ABTest 方面,而在品質方面,我們也會有灰階釋出、自動化測試以及 UI 的自動截屏,另外,使用雲開發的過程中也運用到了微信的私有鍊路,可以提供強大的安全防刷能力。無論路徑如何,這些目标都是一樣的,最終都是為了更好地支援我們業務的快速疊代以及小步快跑。
希望大家都能基于雲開發這個研發平台,多思考,多嘗試,站在雲開發的“肩膀”去做出更多适用于自身業務的改良。
雲開發(Tencent CloudBase,TCB)是騰訊雲提供的雲原生一體化開發環境和工具平台,為開發者提供高可用、自動彈性擴縮的後端雲服務,包含計算、存儲、托管等serverless化能力,可用于雲端一體化開發多種端應用(小程式,公衆号,Web 應用,Flutter 用戶端等),幫助開發者統一建構和管理後端服務和雲資源,避免了應用開發過程中繁瑣的伺服器搭建及運維,開發者可以專注于業務邏輯的實作,開發門檻更低,效率更高。