他剛進(jìn)公司被問最多的是:20萬行代碼,搞得定不?
20萬行代碼,搞得定不?
“你肩上扛了20萬行代碼,搞得定不?”這是我剛進(jìn)華為時聽到最多的一句話。
2008年9月新員工培訓(xùn)完,我沒有回西安,而是直接飛到上海承接產(chǎn)品。剛進(jìn)上海項(xiàng)目組,就受到了熱情的接待。
“這次西安來了多少人承接我們模塊?”上海X模塊的PL問我。
我愣愣地指了指自己:“就我一個”。
“什么,就你一個?我們組有20萬行代碼,趕緊反饋再加人。?”
其實(shí),剛出校園的我對20萬行代碼并沒有太多概念,但是看到他的反應(yīng),頓感不妙。我趕緊找到在其他項(xiàng)目組承接產(chǎn)品的西安PL,卻得到了安慰,“沒有想象的那么嚴(yán)重,你那塊業(yè)務(wù)我也知道一些,我給你分析看。X模塊代碼邏輯比較簡單,Y模塊基本不出問題可以暫時不學(xué),這樣……這樣……你只要集中把這幾個模塊搞定就行了。?”
加人是不可能的,于是我的培養(yǎng)計劃也相應(yīng)有了變化。入職前兩個月,我每天的任務(wù)就是讀代碼,下班前半小時給全組講解。而同期其他新員工在入職一個月時已經(jīng)開始處理問題單和開發(fā)需求了。第三個月中期答辯時,其他人的膠片上呈現(xiàn)的都是“處理了XX個問題單,開發(fā)了XK代碼的需求”,而我的膠片都是模塊的代碼功能介紹。
學(xué)習(xí)期結(jié)束后,20萬行代碼的威力很快得以體現(xiàn)。為了讓我快速熟悉業(yè)務(wù),項(xiàng)目組把活最雜的接口人工作安排給了我,負(fù)責(zé)所有的網(wǎng)上問題、實(shí)驗(yàn)室問題定位以及幾個高風(fēng)險模塊的問題單修改。很快,我就淹沒在電話和郵件的海洋里,焦頭爛額。
“問題定位沒?郵件都發(fā)好幾個小時了,環(huán)境不保留了。”
“這個問題我分析應(yīng)該是你們模塊的問題,快看下,下班前沒結(jié)論我就轉(zhuǎn)單了。”
“怎么回事,你名下問題單怎么不見少,版本都快過不了點(diǎn)了。”
……
是的,我成了各個組的“焦點(diǎn)”,同時也開始變得焦慮,雖然每天凌晨才回公寓,依然無法阻止上竄的DI值(問題密度),這下該如何是好?
很快,導(dǎo)師和PL注意到了我的窘境,伸出了援助之手。看現(xiàn)象,找原因,和我一起分析現(xiàn)狀,一件一件分析手頭的事務(wù),傳授四象限工作心得,把眼前的事務(wù)按照四象限法則排好優(yōu)先級,再一一擊破,慢慢堅持一段時間后,我終于開始變得從容起來。
就是為了晚上能睡安穩(wěn)覺
轉(zhuǎn)正之后,我很快就遇到了第一個網(wǎng)上問題,并且經(jīng)歷了一次深刻bug修復(fù)過程。依稀記得那是周日,凌晨兩點(diǎn),電話響起時我感覺像是剛躺下就被叫醒。
“我是在一線支撐的測試經(jīng)理,新版本升級報錯了,需要馬上解決!”
“好的,什么情況?先嘗試做下這幾步恢復(fù)操作,再收集下日志,我馬上去公司。”一聽是現(xiàn)網(wǎng)的問題,本來一臉迷糊的我瞬間清醒,這可容不得半點(diǎn)馬虎。快速穿好衣服,打車直奔公司。
還好,問題很快定位,之前現(xiàn)網(wǎng)的服務(wù)器出現(xiàn)過網(wǎng)卡故障,客戶把服務(wù)器拆封,兩塊網(wǎng)卡拔出來擦拭金手指,插進(jìn)去的時候交換了插槽位置,導(dǎo)致網(wǎng)卡的PCI總線編號發(fā)生變化。為了防止客戶私裝其他網(wǎng)卡,引起兼容性問題,新版本代碼做了強(qiáng)制校驗(yàn),但對于這種更換網(wǎng)卡位置的場景,卻沒有考慮到。
“這誰設(shè)計的功能,畫蛇添足!老版本都沒問題,這是致命bug,我要求必須回溯!”雖然功能不是我開發(fā)的,但聽到電話另一端的措辭嚴(yán)厲,也感覺像犯了大錯,不敢吱聲。這次的經(jīng)歷,讓我再后續(xù)很長一段時間,一接到網(wǎng)上問題電話就非常緊張。
網(wǎng)上問題引起的風(fēng)波還沒過去,修改這個網(wǎng)上問題的任務(wù)就落到我頭上,沒有想到的是這次修改也不順利。代碼很快就修改完了,但是驗(yàn)證時遇到一個問題。由于老型號服務(wù)器存量并不多并且前幾年已停止發(fā)貨,三種老型號服務(wù)器,實(shí)驗(yàn)室只有一臺了,其他兩種類型的服務(wù)器沒有辦法驗(yàn)證,怎么辦?
“代碼判斷的就是這幾個信息,你可以通過模擬打樁,之前我都是這么測的”,在老員工的指導(dǎo)下,我很快完成了打樁測試,但心里總有點(diǎn)不踏實(shí)。
結(jié)果在版本內(nèi)部轉(zhuǎn)測試前的預(yù)驗(yàn)證環(huán)節(jié),兄弟項(xiàng)目組的同事找到了我,他們的一臺服務(wù)器裝上新版本后運(yùn)行不起來。我心里“咯噔”一下,不會是那兩種沒有驗(yàn)證的服務(wù)器吧?果然,經(jīng)過實(shí)機(jī)分析,發(fā)現(xiàn)我用的打樁模擬方法和真實(shí)的硬件還是有差異。
對于這次的修改引入,PL特地過來輔導(dǎo):“這次主要是你經(jīng)驗(yàn)不足,不要太放在心上。不過我們也要好好想想,遇到困難,是不是盡全力了。”再次修改時,還是有一種類型的服務(wù)器沒找到,感覺真的沒辦法了。
一大早我只好再求助導(dǎo)師和PL,幾小時后,PL過來對我說:“我已經(jīng)給周邊幾個部門打過電話了,有幾臺服務(wù)器可能是我們要找的,我?guī)闳ゴ_認(rèn)下。
又經(jīng)過幾個小時,我們終于在一個實(shí)驗(yàn)室的角落找到了一臺落滿灰塵的服務(wù)器。拍拍灰塵,一看,好家伙,這不正是我們要找的么!找電源,接線,上電,安裝版本……看到版本軟件順利啟動,心里懸了很久的大石頭總算落地了。
“好,我們再把交換網(wǎng)卡順序的場景覆蓋下。”然而折騰了半天,網(wǎng)卡還是沒拔下來。原來這個型號的服務(wù)器硬件設(shè)計上也做了防呆,卸網(wǎng)卡需要專用的小工具。
半個小時后,網(wǎng)卡終于拔了下來,PL手上不小心被劃了口子,鮮血直流,他卻蠻不在意:“為了晚上能睡個安穩(wěn)覺,這點(diǎn)小傷,值了!”
后來每當(dāng)看到“打造質(zhì)量口碑,構(gòu)筑質(zhì)量文化的教堂”時,我想說我們的質(zhì)量追求真的很簡單,就是為了晚上能睡安穩(wěn)覺。
沒有定位不了的問題
“Hello,sir……”下班剛出公司,我就接到了一個老外的電話。豎起耳朵再加上熟練的“sorry”“pardon”,才終于搞清楚了,原來是之前在espace上交流過的印度一線小伙,馬上要去客戶機(jī)房操作了,還有兩個操作步驟不太清楚。
從來沒跟老外通過電話的我,一時語塞,面紅耳赤,嘴巴幾次想張但就是張不開,到嘴邊的單詞,就是說不出來。
對方還在時不時的“hello? hello?”以為我不在線。哎,平時都是由GTAC的兄弟幫忙溝通,這下沒人幫忙了,這可如何是好……不管了,管他語法怎樣,突然,一句“yes”蹦出了口,慢慢地,一個單詞、一個單詞地蹦出,雖然磕磕巴巴,但總算可以用英語交流了。
我在電話了說了一通,反復(fù)確認(rèn)對方了解了我的意思后,才放下電話。一看手心緊張得都是汗。好在總算交流完了,頓感身心舒暢了許多。
就這樣,入職兩三年后,一切逐漸步入正軌,不管是遇到什么難題,我似乎都可以從容應(yīng)對了。
不過,現(xiàn)網(wǎng)出現(xiàn)的兩三起未定位的Linux系統(tǒng)掛死問題,一直是大伙兒籠罩在頭頂?shù)臑踉啤?/span>由于使用的Linux是幾年前外購的版本,一直未升級,維測功能比較弱。而我們作為業(yè)務(wù)軟件團(tuán)隊(duì),也不具備定位這種疑難問題的經(jīng)驗(yàn),求助公司的Linux團(tuán)隊(duì)后,仍無法定位,只能以老舊Linux系統(tǒng)問題進(jìn)行了答復(fù)。
沒想到,不久,在一個大T局點(diǎn)又出現(xiàn)了這個問題。沒辦法,我們只能再次求助OS、硬件相關(guān)人員,快速組建了攻關(guān)團(tuán)隊(duì)。由于缺少日志,大家從軟件硬件各種角度進(jìn)行大膽猜測,然后在實(shí)驗(yàn)室進(jìn)行故障注入測試,持續(xù)了一個月后,實(shí)驗(yàn)室連問題都沒有復(fù)現(xiàn),更談不上定位,所有人都很沮喪。好在新版本軟件已經(jīng)合入了掛死時自動復(fù)位的自愈功能,問題影響可以將到最低。一線也接受了自愈方案。第一次的集中攻關(guān)就這樣心有不甘地以失敗告終。
出來混,遲早要還的。問題攻關(guān)永遠(yuǎn)不會缺席,只是來得晚而已。大半年后,中國區(qū)的一起Linux掛死問題拉開第二次攻關(guān)序幕。由于是晚上出的問題,一線還沒來得及處理,我們請求一線保留環(huán)境,立刻協(xié)調(diào)了公司Linux和硬件的專家馬上出差到現(xiàn)場定位。
“這次抓到第一現(xiàn)場,總算能定位了。”我心里想。可惜從一線并沒有傳回好消息,只是進(jìn)一步確認(rèn),確實(shí)是Linux系統(tǒng)掛死了,原因還是不知道。一時,又陷入僵局。
但是攻關(guān)不能因此停滯。我們再次靜下心來,繼續(xù)分析日志,看代碼,分析這幾個問題找共同點(diǎn),很快發(fā)現(xiàn)這幾個問題涉及的設(shè)備都是在運(yùn)行了快一年左右時出現(xiàn)了問題。莫非與單板的運(yùn)行時長有關(guān)系?累積效應(yīng)的故障模式?大家很快調(diào)整了攻關(guān)方向。不久,就找到一篇關(guān)于Linux內(nèi)核內(nèi)存泄露的案例,經(jīng)過計算,在我們的單板上正好在一年左右Linux系統(tǒng)一些關(guān)鍵內(nèi)存就會耗盡,出現(xiàn)系統(tǒng)掛死。真是踏破鐵鞋無覓處,得來全不費(fèi)工夫。
后續(xù)我參與甚至主導(dǎo)過多起耗時長久、艱苦卓絕的疑難問題攻關(guān),Linux系統(tǒng)掛死攻關(guān)在這些問題中不是影響最大和最緊急,但卻讓我受益最多。經(jīng)歷過這次攻關(guān)后,面對任何疑難問題,我心中都有一個信念:在我司,從來沒有搞不定的事,也從來沒有定位不了的問題!
2014年到2017年,由于工作調(diào)整,我轉(zhuǎn)戰(zhàn)產(chǎn)品開發(fā),暫時離開了網(wǎng)上問題處理。2018年我又重新回歸。
又是一次半夜緊急電話,我急匆匆趕到GTAC的攻關(guān)室處理緊急問題,一進(jìn)門,又見到以前的幾位老伙計:“看見你來我就放心了”。這句話一時間又讓我渾身充滿了力量!