[Engineering] 編程哲學(xué)(八):償還不起的技術(shù)債務(wù)

修改代碼的風(fēng)險(xiǎn)

重構(gòu),就是在不改變外部行為的前提下断部,有條不紊地改善代碼猎贴。
為了保障軟件的外部行為,唯一的辦法就是通過測(cè)試。
因此她渴,重構(gòu)是建立在完備的測(cè)試覆蓋基礎(chǔ)之上的达址。

如果我們不能保證修改后的代碼還能提供相同的功能,
那么這種修改就是錯(cuò)誤的趁耗,會(huì)給用戶帶來極大的損失沉唠。
在有風(fēng)險(xiǎn)意識(shí)的團(tuán)隊(duì)中,不會(huì)同意發(fā)生這樣的修改苛败。

什么是所有的功能

一個(gè)涉及幾百個(gè)頁面的網(wǎng)站满葛,多個(gè)角色處于不同狀態(tài)的用戶都可以訪問它,
那么它總共提供了哪些功能罢屈?
頁面之間的跳轉(zhuǎn)嘀韧,以及同一個(gè)網(wǎng)頁為他們展示的不同功能,都是業(yè)務(wù)邏輯的細(xì)節(jié)表現(xiàn)缠捌。
沒有人知道“所有的功能”指的是什么锄贷,因?yàn)樘珡?fù)雜。

代碼中的某個(gè)分支曼月,看起來似乎用不到谊却,但是可能就是有那百分之一的用戶會(huì)使用它。
另外某處哑芹,為什么這里要向一個(gè)莫名的服務(wù)器發(fā)送請(qǐng)求炎辨,很可能必不可少。
某個(gè)類到底有沒有人在使用它聪姿,我們只知道自己的依賴碴萧,很難知道誰依賴了我們。
如果不確定誰在以什么方式使用它咳燕,就不能進(jìn)行修改勿决。

償還周期

哪怕我們已經(jīng)有了完備的測(cè)試,如果重構(gòu)所花費(fèi)的時(shí)間周期太長(zhǎng)招盲,還是很危險(xiǎn)低缩,
我們不得不在這段時(shí)間內(nèi),同時(shí)應(yīng)付重構(gòu)工作和新功能的開發(fā)曹货。

框架遷移就是這樣的一個(gè)典型例子咆繁,如果我們打算把舊框架的功能遷移到新框架,
那么幾乎所有的功能顶籽,都不得不在新框架下重新開發(fā)并測(cè)試一遍玩般,
新需求也不得不在舊框架中完成,并且最終還得再遷移過去礼饱。

高利貸

我們很容易低估重構(gòu)的成本坏为,
假設(shè)框架遷移需要n個(gè)“人日”的工作量究驴,團(tuán)隊(duì)中有x人,需要y天才能把事情做完匀伏,
則n不等于xy洒忧。

因?yàn)檫@y天中會(huì)有新功能要開發(fā),這些新功能需要xy人日的工作量够颠,
于是熙侍,人們必須加班,假設(shè)人們比原來努力t倍履磨,
則蛉抓,n+xy=txy,因此xy=n/(t-1)剃诅。

如果以前已經(jīng)在加班了巷送,那么我只能說,真是太不幸了综苔。

如果框架遷移需要100人日惩系,有5個(gè)人來完成它,他們都用1.5倍的努力進(jìn)行工作如筛,
則事實(shí)上需要40天才能完成,而不是20天抒抬,居然比原來估算的時(shí)間多了一倍杨刨。
這40天中,每人每天必須想辦法比原來多做一半的事情擦剑,
我們知道妖胀,就算加班其實(shí)也很難達(dá)到這個(gè)目標(biāo)。

這就是技術(shù)負(fù)債的利滾利效應(yīng)惠勒,也是著名的牛頓問題赚抡。
償還周期越長(zhǎng),所需償還的債務(wù)總量就越多纠屋。

試錯(cuò)的代價(jià)

重構(gòu)其實(shí)很難進(jìn)行下去涂臣,即使進(jìn)行下去了也做的很不徹底,
項(xiàng)目中混雜了各個(gè)時(shí)代的代碼遺骸售担,戰(zhàn)場(chǎng)從來沒有干凈過赁遗。

一開始就寄希望于用重構(gòu)來逐漸解決問題,可能是有害的族铆,
代碼中會(huì)留下很多做到一半的事情岩四,開發(fā)者必須小心謹(jǐn)慎的理解所有技術(shù)細(xì)節(jié)。

快速試錯(cuò)能反映出這種僥幸心理哥攘,雖然快速試錯(cuò)的目的是為了降低最終出錯(cuò)的代價(jià)剖煌,
但是實(shí)際上很難承認(rèn)自己的確是錯(cuò)了材鹦,人們會(huì)想盡辦法彌補(bǔ)它,
于是耕姊,等我們看到失敗時(shí)侠姑,再退出已經(jīng)來不及了。
快速試錯(cuò)通常是一個(gè)借口箩做,掩飾自己還沒有想清楚它莽红。


參考

重構(gòu):改善既有代碼的設(shè)計(jì)
測(cè)試驅(qū)動(dòng)開發(fā)
程序員的職業(yè)素養(yǎng)
人月神話

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市邦邦,隨后出現(xiàn)的幾起案子安吁,更是在濱河造成了極大的恐慌,老刑警劉巖燃辖,帶你破解...
    沈念sama閱讀 206,723評(píng)論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件鬼店,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡黔龟,警方通過查閱死者的電腦和手機(jī)妇智,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,485評(píng)論 2 382
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來氏身,“玉大人巍棱,你說我怎么就攤上這事〉靶溃” “怎么了航徙?”我有些...
    開封第一講書人閱讀 152,998評(píng)論 0 344
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)陷虎。 經(jīng)常有香客問我到踏,道長(zhǎng),這世上最難降的妖魔是什么尚猿? 我笑而不...
    開封第一講書人閱讀 55,323評(píng)論 1 279
  • 正文 為了忘掉前任窝稿,我火速辦了婚禮,結(jié)果婚禮上凿掂,老公的妹妹穿的比我還像新娘伴榔。我一直安慰自己,他們只是感情好缠劝,可當(dāng)我...
    茶點(diǎn)故事閱讀 64,355評(píng)論 5 374
  • 文/花漫 我一把揭開白布潮梯。 她就那樣靜靜地躺著,像睡著了一般惨恭。 火紅的嫁衣襯著肌膚如雪秉馏。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 49,079評(píng)論 1 285
  • 那天脱羡,我揣著相機(jī)與錄音萝究,去河邊找鬼免都。 笑死,一個(gè)胖子當(dāng)著我的面吹牛帆竹,可吹牛的內(nèi)容都是我干的绕娘。 我是一名探鬼主播,決...
    沈念sama閱讀 38,389評(píng)論 3 400
  • 文/蒼蘭香墨 我猛地睜開眼栽连,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼险领!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起秒紧,我...
    開封第一講書人閱讀 37,019評(píng)論 0 259
  • 序言:老撾萬榮一對(duì)情侶失蹤绢陌,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后熔恢,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體脐湾,經(jīng)...
    沈念sama閱讀 43,519評(píng)論 1 300
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 35,971評(píng)論 2 325
  • 正文 我和宋清朗相戀三年叙淌,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了秤掌。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,100評(píng)論 1 333
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡鹰霍,死狀恐怖闻鉴,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情衅谷,我是刑警寧澤椒拗,帶...
    沈念sama閱讀 33,738評(píng)論 4 324
  • 正文 年R本政府宣布,位于F島的核電站获黔,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏在验。R本人自食惡果不足惜玷氏,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 39,293評(píng)論 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望腋舌。 院中可真熱鬧盏触,春花似錦、人聲如沸块饺。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,289評(píng)論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽授艰。三九已至辨嗽,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間淮腾,已是汗流浹背糟需。 一陣腳步聲響...
    開封第一講書人閱讀 31,517評(píng)論 1 262
  • 我被黑心中介騙來泰國打工屉佳, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人洲押。 一個(gè)月前我還...
    沈念sama閱讀 45,547評(píng)論 2 354
  • 正文 我出身青樓武花,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親杈帐。 傳聞我的和親對(duì)象是個(gè)殘疾皇子体箕,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 42,834評(píng)論 2 345

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

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,516評(píng)論 25 707
  • 有時(shí)候真的覺得累铅,很多事情真的是命中注定,是因?yàn)槲仪笆狼废聜阢澹圆坏貌唤袷纼斶€争群,突然不知道該從何說起,分開兩個(gè)月...
    Faye楓葉閱讀 263評(píng)論 1 1
  • 1. 2014年11月的時(shí)候大部分同學(xué)都出去實(shí)習(xí)了,有的是靠著父母托了關(guān)系翔试,更多的是大家都沖忙的轉(zhuǎn)向了各個(gè)不同的行...
    離曦問路閱讀 555評(píng)論 0 1
  • 我站在后海一家名叫“停駐”的pub門口轻要,手心冒汗,動(dòng)彈不得垦缅。 隔幾步的距離冲泥,對(duì)面一位帥氣的singer,眼神若有似...
    金環(huán)閱讀 217評(píng)論 0 1
  • 還有三個(gè)月我十七歲壁涎,現(xiàn)在高二 在我現(xiàn)在還是十六的時(shí)候凡恍,我特別想記錄一下我對(duì)于世界的小小看法,在我心里十六歲是一個(gè)坎...
    邡迪閱讀 899評(píng)論 0 3