Bugfix隨想錄

從敲下第一個(gè)字符開始燎含,八阿哥(Bug)就是磨人的小妖精宾濒,形影不離,簡(jiǎn)直比真愛還要真愛屏箍。

隨著項(xiàng)目的擴(kuò)大绘梦,功能的增加,Bug出得越來越快赴魁,越來越多卸奉,Buglist變的越來越長(zhǎng)。

慢慢地颖御,項(xiàng)目的節(jié)奏明顯變慢榄棵,F(xiàn)eature越來越難增加,Bugfix的時(shí)間越來越長(zhǎng)潘拱,團(tuán)隊(duì)逐漸變得死氣沉沉疹鳄,原本溫順的程序猿變得暴躁,進(jìn)而演變成團(tuán)隊(duì)成員流動(dòng)性提高芦岂,流失率提高瘪弓。


總結(jié)我個(gè)人的工作經(jīng)驗(yàn),以及參照業(yè)內(nèi)的一些文章禽最,這種變化的軌跡也非常典型腺怯。

1、一個(gè)新Feature會(huì)與已有的Feature產(chǎn)生聯(lián)系川无,也會(huì)依賴于已有的組件呛占。而這些舊Feature或組件,因?yàn)橛蠦ug還沒處理好懦趋,接口不穩(wěn)定晾虑,行為不可控。一個(gè)依賴于不穩(wěn)定的系統(tǒng)的系統(tǒng),必然是不穩(wěn)定的走贪。

2佛猛、一個(gè)依賴于不穩(wěn)定的組件而組成的系統(tǒng)惑芭,要讓其相對(duì)穩(wěn)定地工作坠狡,必然需要在其內(nèi)部添加修正,也就是workaround遂跟。其內(nèi)部邏輯逃沿,需要實(shí)現(xiàn)原本不應(yīng)當(dāng)自己來承擔(dān)的邏輯。

3幻锁、前兩步還會(huì)繼續(xù)滾起來凯亮,繼而演變成workaround的workaround的workaround。

這時(shí)候問題來了:原有的帶Bug的組件哄尔,是否應(yīng)該調(diào)整或修復(fù)呢假消?


這是一個(gè)兩難的境地:

1、調(diào)整岭接,那么workaround就會(huì)失效富拗。workaround的workaround的workaround也會(huì)失效。

2鸣戴、不調(diào)整啃沪,那么按照以往的步驟,一個(gè)新Feature的實(shí)現(xiàn)窄锅,需要對(duì)其所依賴的所有組件進(jìn)行修正创千,節(jié)奏只會(huì)越來越慢。


當(dāng)開發(fā)節(jié)奏變的緩慢入偷,這是一個(gè)非常不好的征兆追驴,因?yàn)橐坏╅_發(fā)節(jié)奏變的緩慢,除非進(jìn)行根本性的改變疏之,否則只會(huì)越來越慢氯檐。這不是一種時(shí)間可以解決的問題。打個(gè)比方体捏,一輛自行車冠摄,就算是全世界最好的自行車運(yùn)動(dòng)員來騎,比速度也比不過一輛汽車几缭,比行程更是完全不能比河泳。


而面臨這個(gè)兩難境地,決策通常有兩種:

1年栓、放慢拆挥、甚至停下步伐,回顧、整理以前的實(shí)現(xiàn)和需求纸兔,進(jìn)而制定改進(jìn)計(jì)劃和方案惰瓜。但這樣會(huì)面臨市場(chǎng)和用戶的壓力。

2汉矿、招聘更多的工程師來進(jìn)行修復(fù)工作崎坊。前幾天看到一個(gè)新聞,F(xiàn)acebook的iOS工程師有429個(gè)人洲拇。


這里著重討論一下第二種方案奈揍,也就是大多數(shù)公司會(huì)采用的方案。

這種方案有效赋续,需要建立在幾個(gè)前提上:

1男翰、Bug修復(fù)的速度,趕得上Bug出現(xiàn)的速度纽乱。

2蛾绎、Bug修復(fù)的收益,大于成本鸦列。


這里先插入一段租冠,一個(gè)有工作經(jīng)驗(yàn)的工程師,從第一天進(jìn)入公司開始敛熬,到他能貢獻(xiàn)代碼肺稀,需要經(jīng)歷多少步驟。

1应民、每個(gè)產(chǎn)品都有BaseCode话原,熟悉這個(gè)BaseCode的結(jié)構(gòu)和邏輯,需要時(shí)間诲锹,少則1個(gè)月繁仁,多則半年,視具體項(xiàng)目大小而定归园。這段期間黄虱,看文檔,和老司機(jī)聊天是主要工作庸诱∧砥郑看代碼的作用,可以說幾乎為0桥爽。

2朱灿、經(jīng)過了熟悉階段后,可以進(jìn)入到邊角性的修復(fù)工作钠四。一般從修復(fù)和主要功能無關(guān)的UI開始盗扒。

3、再過了一段時(shí)間,等工程師對(duì)產(chǎn)品的后臺(tái)邏輯有了更深入的了解之后侣灶,就可以開始從事一些相對(duì)核心的主干功能的修復(fù)甸祭。


好比手術(shù)一樣,一個(gè)主刀醫(yī)師切你一條血管褥影,只需要幾秒鐘池户。但他要知道切那條,怎么切伪阶,需要幾年煞檩。


簡(jiǎn)單來說处嫌,一個(gè)有行業(yè)經(jīng)驗(yàn)的新員工栅贴,從第一天加入公司,到他可以修復(fù)相對(duì)重要的Bug熏迹,中途至少檐薯,需要幾個(gè)月的時(shí)間。


熟悉代碼庫的邏輯注暗,有幾個(gè)東西起著重要作用坛缕。

一、需求文檔捆昏,但這個(gè)非匙可能落后于進(jìn)度;

二骗卜、實(shí)現(xiàn)的結(jié)構(gòu)的描述文檔宠页,這個(gè)在國(guó)內(nèi)的大環(huán)境下,就是呵呵呵呵寇仓,幾乎沒有举户;

三、老員工的口述遍烦,但由于進(jìn)度逼迫俭嘁,他們一般會(huì)用來處理非常緊急且致命的Bug,同時(shí)服猪,由于他們是對(duì)整個(gè)項(xiàng)目最熟悉的人供填,最趕的任務(wù),最迫切的任務(wù)罢猪,都會(huì)交給他們近她。


回顧一下上個(gè)問題,通過招聘更多的工程師坡脐,能解決Bug積累的問題的前提泄私,有幾個(gè):

1、Bug修復(fù)的速度,趕得上Bug出現(xiàn)的速度晌端。

2捅暴、Bug修復(fù)的收益,大于成本咧纠。


我們?cè)賮砜纯催@兩點(diǎn)能否被滿足蓬痒。

老成員一直保持高強(qiáng)度的輸出狀態(tài),由于一直趕進(jìn)度趕任務(wù)漆羔,沒時(shí)間重構(gòu)梧奢,沒時(shí)間補(bǔ)文檔,也沒時(shí)間和團(tuán)隊(duì)的成員同步設(shè)計(jì)概況和進(jìn)度演痒。而新成員流炕,因?yàn)閷?duì)代碼庫的結(jié)構(gòu)和功能預(yù)期不熟悉,所以無法有效地分擔(dān)相對(duì)重要的開發(fā)和修復(fù)工作员帮。更可怕的是亥贸,在不熟悉代碼結(jié)構(gòu)和功能的情況下,任何的修復(fù)讯嫂,都可能引入更多的Bug蹦锋。所以第一點(diǎn),不能被輕易滿足欧芽。

要熟悉一個(gè)亂糟糟的代碼庫莉掂,對(duì)比起一個(gè)結(jié)構(gòu)清晰的代碼庫,更需要時(shí)間千扔,項(xiàng)目越大憎妙,功能越多,這個(gè)時(shí)間就越長(zhǎng)昏鹃。而軟件開發(fā)的成本尚氛,最大的開銷,是人力成本洞渤。目前一個(gè)有3年工作經(jīng)驗(yàn)的工程師的價(jià)格阅嘶,按照目前市場(chǎng)的價(jià)格,至少至少1萬元起载迄。對(duì)公司而言讯柔,算上社保公積金等等,公司的開銷至少1萬5以上护昧。假如一個(gè)這樣的工程師魂迄,進(jìn)入團(tuán)隊(duì),熟悉一個(gè)代碼庫惋耙,需要3個(gè)月捣炬。3個(gè)月之后熊昌,他走不走,是否能了解清楚代碼庫湿酸,另說婿屹。也就是說,這個(gè)人要發(fā)揮作用推溃,公司至少至少要花接近5萬元昂利。而這個(gè)項(xiàng)目本身值多少錢呢?影響客戶有多少呢铁坎?

招更多的人來填坑蜂奸,各位要不要拿出計(jì)算器計(jì)算一下成本收益呢?


是不是所有的Bug都需要被修復(fù)呢硬萍?這個(gè)問題的深層意思是扩所,“Bug修復(fù)的數(shù)目,是不是越多越好”襟铭。

我的答案是“否”碌奉。大部分的Bug產(chǎn)生的原因短曾,可以歸入以下幾類:1寒砖、需求描述不清,理解嫉拐、實(shí)現(xiàn)有二義性哩都;2、代碼的變化婉徘,沒趕上需求的變化漠嵌;3、需求之間產(chǎn)生內(nèi)在沖突盖呼,實(shí)現(xiàn)了A儒鹿,就不能實(shí)現(xiàn)B。而需求的描述几晤,很大部分又是以“看得見”的方式來描述的约炎,說簡(jiǎn)單點(diǎn),就是界面上蟹瘾、用戶操作順序上去描述的圾浅。而這又是很容易被修改的部分『镀樱“加個(gè)簡(jiǎn)單的按鈕狸捕,這里默認(rèn)值不對(duì)”,這種大多數(shù)可以歸入1或2众雷。這種Bug是產(chǎn)生得最多的灸拍,也是最容易修改的做祝,只是需要時(shí)間去找到實(shí)現(xiàn)的細(xì)節(jié)。

需求間的沖突鸡岗,這種是最難搞的剖淀。說實(shí)話,我覺得這種不能算入Bug纤房,因?yàn)閷?shí)現(xiàn)了A纵隔,就不能實(shí)現(xiàn)B,實(shí)現(xiàn)了B炮姨,就不能滿足A捌刮,無論代碼怎么寫,都是錯(cuò)舒岸。這類Bug往往又是很多Bug的深層原因绅作。

如果一味地追求Bug的修復(fù)數(shù)目,那么很容易得到一種情況蛾派,簡(jiǎn)單的表面的Bug搶著干俄认,也頻繁地出,深層的Bug沒人趕動(dòng)洪乍。如果把KPI考核引進(jìn)來眯杏,把Bug的修復(fù)數(shù)目(而不是影響程度)作為一個(gè)比重不低的標(biāo)準(zhǔn),問題會(huì)變得更加復(fù)雜壳澳。

需求間的沖突岂贩,在項(xiàng)目合并和對(duì)接的時(shí)候,會(huì)更容易暴露巷波。

我最討厭無底洞般的Bugfix的地方萎津,在于根源性的Bug沒人敢動(dòng),因?yàn)闋窟B甚廣抹镊,而大多數(shù)的小修小補(bǔ)锉屈,并不會(huì)解決影響體驗(yàn)、或者是直接決定用戶買不買賬的的根源性問題垮耳。也就是說颈渊,雖然大家都很努力,但是并沒有什么用氨菇,到頭來只耗費(fèi)了時(shí)間儡炼,能否感動(dòng)自己還是一個(gè)未知數(shù)。

就拿Evernote為例查蓉,曾有幾次我動(dòng)過購(gòu)買高級(jí)賬號(hào)的念頭乌询,因?yàn)樗臑g覽器插件、Mac下的客戶端豌研,真的解決了我很多問題妹田。但最終唬党,阻礙我購(gòu)買的,原因就一個(gè):它的編輯器有Bug鬼佣。這個(gè)Bug有多影響體驗(yàn)?zāi)厥还埃颗e個(gè)簡(jiǎn)單的例子,我選定一些字晶衷,設(shè)置了格式蓝纲,undo在redo,結(jié)果居然不一樣晌纫?就更別說莫名其妙的鎖進(jìn)和空行問題了税迷。Evernote放著這個(gè)編輯器不管,轉(zhuǎn)而去開發(fā)協(xié)作锹漱,甚至加入了團(tuán)隊(duì)IM功能箭养。只要分析一下,開發(fā)團(tuán)隊(duì)協(xié)作哥牍,無論怎么搞毕泌,歸根到底還是要回到編輯功能上去。一個(gè)筆記軟件的編輯器不穩(wěn)定嗅辣,你圍繞著這個(gè)不穩(wěn)定的編輯器撼泛,無論你周邊做的多么成功,附帶功能多么完美辩诞,用戶并不買賬坎弯。


而軟件一但走到這個(gè)地步,說句不好聽的話译暂,很有可能回天乏力。


軟件和建筑很類似撩炊,都有結(jié)構(gòu)外永,有規(guī)模,都需要精妙的設(shè)計(jì)和準(zhǔn)確的實(shí)現(xiàn)拧咳。區(qū)別在于伯顶,一個(gè)建筑工人不大可能輕易毀掉一動(dòng)大樓的根基,而工程師骆膝,要?dú)У粢粋€(gè)軟件的結(jié)構(gòu)祭衩,只需要?jiǎng)h掉一行。


軟件項(xiàng)目是一個(gè)系統(tǒng)工程阅签,尤其是在當(dāng)下這個(gè)什么都聯(lián)網(wǎng)的年代掐暮。因?yàn)橐粋€(gè)軟件的設(shè)計(jì),需要考慮自身的需求政钟,在互聯(lián)網(wǎng)時(shí)代路克,更需要考慮他人的需求樟结。一個(gè)軟件的價(jià)值,在于它對(duì)數(shù)據(jù)的操控能力精算。這種操控能力瓢宦,建立在需求、實(shí)現(xiàn)的條理性和精確性之上灰羽。而要得到這種條理性和精確性驮履,需要用系統(tǒng)的眼光去看待問題。而系統(tǒng)廉嚼,是不可能通過散沙般的組織方式得到的疲吸。


互聯(lián)網(wǎng)的世界,是贏者通吃前鹅,弱者渣渣都沒得剩摘悴。因?yàn)橐磺卸悸?lián)網(wǎng)了,聯(lián)網(wǎng)需要標(biāo)準(zhǔn)和統(tǒng)一舰绘。


我一直提倡蹂喻,不要盲頭跑,如果出發(fā)的方向錯(cuò)了捂寿,跑得越快口四,錯(cuò)得越遠(yuǎn)。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末秦陋,一起剝皮案震驚了整個(gè)濱河市蔓彩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌驳概,老刑警劉巖赤嚼,帶你破解...
    沈念sama閱讀 217,826評(píng)論 6 506
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場(chǎng)離奇詭異顺又,居然都是意外死亡更卒,警方通過查閱死者的電腦和手機(jī),發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,968評(píng)論 3 395
  • 文/潘曉璐 我一進(jìn)店門稚照,熙熙樓的掌柜王于貴愁眉苦臉地迎上來蹂空,“玉大人,你說我怎么就攤上這事果录∩险恚” “怎么了?”我有些...
    開封第一講書人閱讀 164,234評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵弱恒,是天一觀的道長(zhǎng)辨萍。 經(jīng)常有香客問我,道長(zhǎng)斤彼,這世上最難降的妖魔是什么分瘦? 我笑而不...
    開封第一講書人閱讀 58,562評(píng)論 1 293
  • 正文 為了忘掉前任蘸泻,我火速辦了婚禮,結(jié)果婚禮上嘲玫,老公的妹妹穿的比我還像新娘悦施。我一直安慰自己,他們只是感情好去团,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,611評(píng)論 6 392
  • 文/花漫 我一把揭開白布抡诞。 她就那樣靜靜地躺著,像睡著了一般土陪。 火紅的嫁衣襯著肌膚如雪昼汗。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,482評(píng)論 1 302
  • 那天鬼雀,我揣著相機(jī)與錄音顷窒,去河邊找鬼。 笑死源哩,一個(gè)胖子當(dāng)著我的面吹牛鞋吉,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播励烦,決...
    沈念sama閱讀 40,271評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開眼谓着,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了坛掠?” 一聲冷哼從身側(cè)響起赊锚,我...
    開封第一講書人閱讀 39,166評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎屉栓,沒想到半個(gè)月后舷蒲,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,608評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡系瓢,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,814評(píng)論 3 336
  • 正文 我和宋清朗相戀三年阿纤,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片夷陋。...
    茶點(diǎn)故事閱讀 39,926評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡,死狀恐怖胰锌,靈堂內(nèi)的尸體忽然破棺而出骗绕,到底是詐尸還是另有隱情,我是刑警寧澤资昧,帶...
    沈念sama閱讀 35,644評(píng)論 5 346
  • 正文 年R本政府宣布酬土,位于F島的核電站,受9級(jí)特大地震影響格带,放射性物質(zhì)發(fā)生泄漏撤缴。R本人自食惡果不足惜刹枉,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,249評(píng)論 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望屈呕。 院中可真熱鬧微宝,春花似錦、人聲如沸虎眨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 31,866評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽嗽桩。三九已至岳守,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間碌冶,已是汗流浹背湿痢。 一陣腳步聲響...
    開封第一講書人閱讀 32,991評(píng)論 1 269
  • 我被黑心中介騙來泰國(guó)打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留扑庞,地道東北人譬重。 一個(gè)月前我還...
    沈念sama閱讀 48,063評(píng)論 3 370
  • 正文 我出身青樓,卻偏偏與公主長(zhǎng)得像嫩挤,于是被迫代替她去往敵國(guó)和親害幅。 傳聞我的和親對(duì)象是個(gè)殘疾皇子,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,871評(píng)論 2 354

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,117評(píng)論 25 707
  • 文章來自:http://blog.csdn.net/mj813/article/details/52451355 ...
    好大一只鵬閱讀 9,192評(píng)論 2 126
  • 本文翻譯自 http://www.amibug.com/iamabug/p01.html 非常有趣岂昭,同時(shí)能夠?qū)W習(xí)到...
    豪哥的世界閱讀 2,342評(píng)論 0 9
  • -----轉(zhuǎn)載----- 1以现、問:你在測(cè)試中發(fā)現(xiàn)了一個(gè)bug,但是開發(fā)經(jīng)理認(rèn)為這不是一個(gè)bug约啊,你應(yīng)該怎樣解決邑遏? ...
    花開沉浮閱讀 7,380評(píng)論 4 88
  • 不忘初心,方得始終恰矩! 在社會(huì)這些年的磨礪记盒,還剩下什么! 還記得當(dāng)初的自己么外傅! 還記得當(dāng)初自己說過的豪言壯語么纪吮! 是...
    Jeson李三金閱讀 220評(píng)論 0 1