從華為的遭遇看代碼重構
大家都知道,最近以美國為首的西方國家正在打壓華為,想把華為的5G排擠出西方市場,作為應對措施,華為的高管尤其是任正非,密集地接受了國內外媒體的采訪。
今年1月3號, 網絡上還流出一封任正非致全體員工的信, 《全面提升軟件工程能力與實踐,打造可信的高質量產品》, 初始投入是20億美元,這是相當大的手筆。
我在知識星球做了一點解讀, 其中最感到疑惑的就是這封信的前面主要講了安全和隱私,達到可信的目標,讓客戶可以放心購買,放心使用華為的產品。
后面筆鋒一轉,主要講要提高代碼質量,和腐化的架構/代碼做斗爭,這和安全和隱私扯不上關系啊。
這中間肯定少了點東西!
今天又看到了英國媒體對華為輪值董事長徐志軍的采訪,豁然開朗,原來華為最早跟英國政府合作成立HCSEC,華為的源代碼是要拿過去,讓具備權限的人進行審查,以此證明沒有后門,客戶可以放心、安全地使用。
現在HCESC提出的問題居然是:華為的代碼不夠漂亮!
我大膽揣測一下,這句話的潛臺詞是:你們的代碼太多太爛了,我們都看不懂了,怎么能確定有沒有后門?
這些代碼是華為在通信行業三十年的時間積累起來的,像windows幾十年的積累一樣,可以想象,這里邊得有多少遺留代碼。
這要求我覺得確實挺過分的,一般來說,一個軟件對外的功能和性能能達到要求就可以了,客戶是不去管你內部實現成什么樣子,現在人家不但要求功能實現,還要求代碼漂亮、易讀、易修改。 不但要求結果是高質量的,可信的,連過程也要是可信的。
華為最初的方案是先關注新增代碼,對新增代碼達到優雅漂亮的要求,別動歷史代碼,這是很現實的策略,但人家不同意。
沒辦法,那就開始重構吧, 投入20億美元,全面提升軟件工程能力與實踐,打造可信的高質量產品。
要想去重構這樣的代碼,談何容易!
首先得理解現有的業務,因為遺留代碼雖然爛,但是他能工作!看起來很簡單的bug fix是無數人熬夜的結晶,你去重構,能保證這些功能不變嗎? 能保證這些bug 不出現嗎? 如何用自動化的功能測試,單元測試去覆蓋這些代碼,讓大家去安全重構,真的需要勇氣和智慧。
華為這么做,是被形勢所迫,也是為未來著想,那其他公司呢?
我在IBM的時候也遇到過很多遺留代碼,尤其是那個長達幾千行的JSP, 充當了MVC中的Controller角色。代碼中充斥這isOK, flag, success 這樣的控制變量,搞得程序員痛不欲生。
之前網上流傳這一個Oracle數據庫開發人員的日常,在Fix一個Bug的時候,需要先花兩周的時候去理解20個flag, 理清他們之前的關系, 然后再添加一個新的flag,提交到由100-200臺服務器的集群去測試20-30小時,運氣好的話有100個測試用例失敗,運氣不好的話有1000個測試用例失敗......
還有很多人吐槽自己公司的爛代碼, 可見遺留代碼是一件非常普遍的事情,和公司的大小強弱沒有關系。
想想也正常,國內互聯網行業競爭極為慘烈,工期這么緊,任務這么多,加班加點都干不完, 很多時候簡單、快速地完成工作是***要務,根本顧不上優美的設計,漂亮的代碼。即使是曾經擁有過的優雅代碼, 也會被越來越多的垃圾代碼所覆蓋。
問題是這樣發展下去,早晚要出問題,什么時候去重構代碼呢?
【本文為51CTO專欄作者“劉欣”的原創稿件,轉載請通過作者微信公眾號coderising獲取授權】