為什么代碼走查沒有效果

老外的代碼走查

有一篇關(guān)于代碼走查的漫畫疤估,一屋子程序員在一起做代碼走查思灌,在屋子外面的人數(shù)一數(shù) WTF 出現(xiàn)的頻率,大概就知道走查代碼的質(zhì)量水平了舌仍。WTF 可能有點(diǎn)夸張了妒貌,但是這至少說明一件事情——這一屋子程序員至少是真的在審查代碼并對(duì)代碼的水平給出了自己的意見通危。

(ps. 搜了半天沒搜到,不過搜到這一幅灌曙,也挺有意思)
image

我們的代碼走查

很難想象我們的代碼走查會(huì)充斥著 WTF 菊碟,因?yàn)槲覀兊拇a走查都很 和諧

我經(jīng)歷過的大多數(shù)代碼走查都是這么過來的:開發(fā)人員把代碼寫完并已經(jīng)調(diào)試通過了平匈,然后不管是為了滿足團(tuán)隊(duì)的驗(yàn)收準(zhǔn)則框沟,還是因?yàn)轫?xiàng)目有強(qiáng)制要求,反正找?guī)讉€(gè)同事一起看看增炭,大致流程就是接上投影儀,然后從第一行開始往下念拧晕,這里是在干什么隙姿,那里是在干什么,正常情況下參加走查的同事大概能堅(jiān)持個(gè)十來分鐘不走神厂捞,然后眼神就開始迷茫了输玷,等所有代碼念完靡馁,象征性的提幾個(gè)大小寫或者格式對(duì)齊的問題欲鹏,然后記錄到excel里面,大功告成臭墨。

代碼走查為什么沒有效果

為什么我們的代碼走查這么和諧呢?看起來并沒有起到應(yīng)有的效果红竭?真是讓人百思不得其解的問題。
而在后來和其他的 team leader 溝通時(shí)才發(fā)現(xiàn)原來所有人都有同樣的疑問

為什么代碼走查的效果一點(diǎn)都不好憾股?

帶著這個(gè)問題參加了一場(chǎng)又一場(chǎng)的代碼走查會(huì)議之后往枣,我找到了下面兩個(gè)可以說服我自己的答案:

  1. 避免沖突:長(zhǎng)期中庸文化熏陶讓我們下意識(shí)的避免沖突,在會(huì)議中指出他人的代碼問題會(huì)讓所有人都不舒服倔叼,多一事不如少一事
  2. 代碼可讀性不高:即使我們能夠說服所有人相信走查代碼并不是針對(duì)個(gè)人汗唱,并消除掉所有的顧忌,但仍會(huì)因?yàn)榇a本身的問題導(dǎo)致走查的效果不理想

代碼可讀性的問題相對(duì)于中庸之道更加隱蔽丈攒。代碼走查本質(zhì)上就是在讀代碼哩罪,如果代碼的邏輯層次不清晰,命名混亂肥印,依賴復(fù)雜识椰,就會(huì)讓人難以理解,更談不上去發(fā)現(xiàn)隱藏在其中的bug了深碱。不妨將待走查的代碼設(shè)想為一個(gè)小 baby 的玩具房間腹鹉,第一個(gè)房間剛剛經(jīng)歷了熊孩子的大鬧天宮,第二個(gè)房間剛剛被勤勞的媽媽整理收拾干凈敷硅,如果我們的目的是從兩個(gè)房間里找到一件特定物品功咒,我想大多數(shù)人都會(huì)認(rèn)為第二個(gè)房間更加容易。

image

image

而且兩個(gè)問題產(chǎn)生的影響還會(huì)疊加——首先绞蹦,演示代碼的同事看起來并不希望有人質(zhì)疑他的設(shè)計(jì)力奋,其次,這些狗屁不通的代碼我完全不知道是在干啥幽七,所以景殷,我還是抽空刷一刷朋友圈吧……

應(yīng)對(duì)之道

一,讓我們不要那么中庸

中庸——這種傳統(tǒng)的東方智慧可以幫助我們?cè)谔幚砗芏嗍虑闀r(shí)得心應(yīng)手,不像西方人那么死板猿挚,但是軟件開發(fā)行為以及衍生出來的技術(shù)和管理實(shí)踐都是根植于西方哲學(xué)(如信息論咐旧、控制論),這種價(jià)值觀的沖突讓東方的程序員在實(shí)施代碼走查之類的實(shí)踐時(shí)出現(xiàn)各種不適應(yīng)绩蜻。

這種不適應(yīng)是無法在短時(shí)間內(nèi)扭轉(zhuǎn)過來的铣墨。我們從出生起就一直在東方哲學(xué)的指導(dǎo)下生活,雖然很少有人意識(shí)到它的存在办绝,但是幾十年的耳濡目染早已深入骨髓伊约。認(rèn)識(shí)的一位管理教練曾經(jīng)說過一句話讓我印象深刻,“改變一個(gè)人是很危險(xiǎn)的孕蝉,但是我們可以改變他所處的環(huán)境”屡律,我想為了讓東方程序員適應(yīng)這些實(shí)踐,大概也只能通過下面這些改變環(huán)境的辦法慢慢來了:

  • 營造安全的技術(shù)環(huán)境
    明確地聲明代碼集體所有權(quán)會(huì)是一個(gè)好的開始降淮。確保任何人可以修改任何一段代碼疹尾,并且鼓勵(lì)將代碼重構(gòu)的更好的行為,鼓勵(lì)面對(duì)面的方案討論骤肛,避免每個(gè)人負(fù)責(zé)小一塊代碼,避免局部范圍的技術(shù)壟斷窍蓝。當(dāng)尷尬或者負(fù)面情緒出現(xiàn)時(shí)及時(shí)發(fā)現(xiàn)和化解(比如可以重申代碼集體所有權(quán)的原則)腋颠。
  • 種子選手的示范作用
    在代碼走查會(huì)議中,經(jīng)驗(yàn)豐富且具備強(qiáng)烈責(zé)任性的開發(fā)人員是優(yōu)秀的種子選手吓笙,邀請(qǐng)或鼓勵(lì)他們對(duì)代碼提出自己的看法淑玫,發(fā)起討論,其他人會(huì)自然參與進(jìn)來面睛。
  • 讓所有人看到這真的管用
    當(dāng)討論發(fā)生后絮蒿,要確保討論形成可以落地的結(jié)論,如果有更優(yōu)的設(shè)計(jì)就堅(jiān)決拋棄掉現(xiàn)有的代碼并按新設(shè)計(jì)進(jìn)行重構(gòu)叁鉴,即使僅僅是提出更準(zhǔn)確的變量命名也應(yīng)該在代碼走查會(huì)議上當(dāng)場(chǎng)重命名土涝。

二,讓代碼具備走查的基礎(chǔ)

心儀的女神到家里做客幌墓,邀請(qǐng)女神參觀房間之前我們肯定會(huì)先收拾一下但壮,同樣的道理,在代碼拿到會(huì)議上進(jìn)行走查之前常侣,我們也要先確保代碼進(jìn)行了初步的收拾蜡饵,比如沒有違反團(tuán)隊(duì)的編碼規(guī)范,檢查了內(nèi)存申請(qǐng)和釋放是否匹配胳施,異常也正確的進(jìn)行了捕獲溯祸,這些動(dòng)作可以通過約定 Check list 來進(jìn)行自檢,避免走查會(huì)議的時(shí)間都浪費(fèi)在這些細(xì)枝末節(jié)的爭(zhēng)論之中。

代碼走查應(yīng)該聚焦于功能實(shí)現(xiàn)的完整性和代碼架構(gòu)的合理性焦辅,關(guān)于第一點(diǎn)本文暫不涉及博杖,代碼架構(gòu)的合理性又由很多因素決定,比如語言氨鹏、架構(gòu)欧募、設(shè)計(jì)模式等等,在《重構(gòu)》一書中 Martin Fowler 整理了很全面的技巧仆抵,在本文中我想重點(diǎn)介紹的是如何控制代碼的邏輯層次來提升代碼的可讀性跟继。

TBD...

三,工具和其他

  1. 一個(gè)順手而強(qiáng)大的 IDE 可以大大降低重構(gòu)的成本(如 Eclipse)镣丑,讓開發(fā)人員重構(gòu)代碼時(shí)行云流水舔糖,滿滿的成就感油然而生
  2. 經(jīng)驗(yàn)豐富的會(huì)議主持人,保證代碼走查會(huì)議是在互相尊重的氛圍下進(jìn)行莺匠,確保合理的會(huì)議時(shí)間安排(時(shí)間不宜太長(zhǎng)金吗,根據(jù)走查的代碼靈活安排走查的重點(diǎn))

我們搞敏捷實(shí)踐,不管是 scrum xp KANBAN 精益 趣竣,每一種方法都有一套具體的實(shí)踐摇庙,這些單個(gè)的實(shí)踐之間其實(shí)是有關(guān)聯(lián)關(guān)系的,很少能獨(dú)立存在遥缕,拿代碼走查來說卫袒,如果團(tuán)隊(duì)缺少集體認(rèn)同的代碼規(guī)范,或者對(duì)CleanCode的理解或價(jià)值存在不一樣的認(rèn)知单匣,沒有集體代碼所有權(quán)的意識(shí)夕凝,沒有擁抱變化、互相尊重的心態(tài)户秤,缺少實(shí)現(xiàn)高擴(kuò)展性代碼的能力码秉、重構(gòu)的能力,那么做集體代碼走查就很難做好鸡号。而一旦做不好转砖,團(tuán)隊(duì)反過來就會(huì)質(zhì)疑做這個(gè)事情的意義,一旦我們對(duì)敏捷實(shí)踐開始質(zhì)疑膜蠢,那我們?cè)趯?shí)施的時(shí)候就會(huì)更加隨意堪藐,按《第五項(xiàng)修煉》里的心智模型,這就是一個(gè)典型的正反饋系統(tǒng)挑围,這個(gè)正反饋系統(tǒng)一旦形成礁竞,我們的敏捷轉(zhuǎn)型失敗就只是時(shí)間問題……

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市杉辙,隨后出現(xiàn)的幾起案子模捂,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 212,884評(píng)論 6 492
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件狂男,死亡現(xiàn)場(chǎng)離奇詭異综看,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)岖食,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 90,755評(píng)論 3 385
  • 文/潘曉璐 我一進(jìn)店門红碑,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人泡垃,你說我怎么就攤上這事析珊。” “怎么了蔑穴?”我有些...
    開封第一講書人閱讀 158,369評(píng)論 0 348
  • 文/不壞的土叔 我叫張陵忠寻,是天一觀的道長(zhǎng)。 經(jīng)常有香客問我存和,道長(zhǎng)奕剃,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 56,799評(píng)論 1 285
  • 正文 為了忘掉前任捐腿,我火速辦了婚禮纵朋,結(jié)果婚禮上,老公的妹妹穿的比我還像新娘茄袖。我一直安慰自己倡蝙,他們只是感情好,可當(dāng)我...
    茶點(diǎn)故事閱讀 65,910評(píng)論 6 386
  • 文/花漫 我一把揭開白布绞佩。 她就那樣靜靜地躺著,像睡著了一般猪钮。 火紅的嫁衣襯著肌膚如雪品山。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 50,096評(píng)論 1 291
  • 那天烤低,我揣著相機(jī)與錄音肘交,去河邊找鬼。 笑死扑馁,一個(gè)胖子當(dāng)著我的面吹牛涯呻,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播腻要,決...
    沈念sama閱讀 39,159評(píng)論 3 411
  • 文/蒼蘭香墨 我猛地睜開眼复罐,長(zhǎng)吁一口氣:“原來是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來了雄家?” 一聲冷哼從身側(cè)響起效诅,我...
    開封第一講書人閱讀 37,917評(píng)論 0 268
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個(gè)月后乱投,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體咽笼,經(jīng)...
    沈念sama閱讀 44,360評(píng)論 1 303
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 36,673評(píng)論 2 327
  • 正文 我和宋清朗相戀三年戚炫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了剑刑。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 38,814評(píng)論 1 341
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡双肤,死狀恐怖施掏,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情杨伙,我是刑警寧澤其监,帶...
    沈念sama閱讀 34,509評(píng)論 4 334
  • 正文 年R本政府宣布,位于F島的核電站限匣,受9級(jí)特大地震影響抖苦,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜米死,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 40,156評(píng)論 3 317
  • 文/蒙蒙 一锌历、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧峦筒,春花似錦究西、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,882評(píng)論 0 21
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至峦失,卻和暖如春扇丛,著一層夾襖步出監(jiān)牢的瞬間翻擒,已是汗流浹背元潘。 一陣腳步聲響...
    開封第一講書人閱讀 32,123評(píng)論 1 267
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留摹恨,地道東北人隧魄。 一個(gè)月前我還...
    沈念sama閱讀 46,641評(píng)論 2 362
  • 正文 我出身青樓卓练,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國和親购啄。 傳聞我的和親對(duì)象是個(gè)殘疾皇子襟企,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 43,728評(píng)論 2 351

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

  • 代碼走查和代碼審查是白盒測(cè)試方法中的2種。 代碼走查: 從參加人員來說狮含,應(yīng)該是項(xiàng)目的整體參與者整吆,如果項(xiàng)目太大拱撵,整體...
    許小小晴閱讀 10,157評(píng)論 1 3
  • 昨天公司進(jìn)行了團(tuán)隊(duì)評(píng)比,其中有一項(xiàng)就是代碼走查表蝙。目前有兩種方式拴测,一種是通過會(huì)議進(jìn)行抽查,一次性多人參加府蛇;另一種是通...
    大女人zz閱讀 1,022評(píng)論 0 0
  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 171,871評(píng)論 25 707
  • 圖文/巴山雨(簡(jiǎn)書作者)轉(zhuǎn)載請(qǐng)聯(lián)系作者授權(quán)集索。 半路出家,非專業(yè)選手汇跨,畫技一般务荆,都是一些習(xí)作和臨摹作品,權(quán)做記錄穷遂。同...
    巴山雨閱讀 300評(píng)論 8 2
  • 我想養(yǎng)只貓函匕,在你不在的時(shí)候可以做個(gè)伴。 習(xí)慣了你在身邊蚪黑,只要你不在便瘋狂的想念盅惜,我知道這樣不好。所以總讓自己忙起來...
    努力才幸運(yùn)閱讀 337評(píng)論 0 0