【敏捷开发每日一贴】代码走查
代碼走查
怎樣走查
“高手本來自己就要開發(fā)很多代碼,還要替新手檢查代碼,多花費(fèi)時(shí)間啊……”這是一個(gè)常見問題,答案是:“每天,在后檢查點(diǎn),花費(fèi)不超過15分鐘時(shí)間,能看出什么來就說什么,時(shí)間到了就停。”
一般而言,大致每天高手能編寫100多行有效代碼(按分號(hào)計(jì)數(shù)),新手會(huì)多一些但也不超過200(他們編寫代碼比較費(fèi)),也就是10個(gè)屏幕以內(nèi)。有經(jīng)驗(yàn)的人一定知道:高手看新手的軟件,5秒鐘就能發(fā)現(xiàn)問題。
常存在的一種情況是高手“看不懂”新手的代碼,當(dāng)然不是因?yàn)榧夹g(shù)太精妙了,而是寫得太亂了。但在松結(jié)對(duì)編程里邊不存在,由于師傅徒弟天天在一起,這200行代碼可謂一目十行,如果以往一直每天檢查代碼,那么里邊存在的問題應(yīng)該不會(huì)很多。
走查什么
這個(gè)是重點(diǎn),整體包括:
1. 結(jié)構(gòu)問題
代碼最大的問題,不是一兩個(gè)地方有技術(shù)缺陷,也不是業(yè)務(wù)邏輯錯(cuò)誤,而是整個(gè)軟件編寫的不好。前兩者都可以通過測(cè)試或使用來發(fā)現(xiàn)和更正,但后者就不同了。如果回想一下自己見過的各種爛攤子,是不是有同感?具體哪里有問題怎么改說不上來,就是整個(gè)軟件看上去混亂無章,無從下手。
具體結(jié)構(gòu)問題包括:重復(fù)拷貝代碼(不封裝函數(shù),不用Template/泛型……),函數(shù)過長(zhǎng)(超過一屏幕就叫過長(zhǎng)),錯(cuò)誤封裝(不恰當(dāng)?shù)?/span>public/不用Interface/不內(nèi)聚/強(qiáng)耦合/在類中封裝了無關(guān)方法……),內(nèi)容錯(cuò)誤(多個(gè)無關(guān)類置于一個(gè)文件/不恰當(dāng)?shù)拿?/span>……)等等。
改正結(jié)構(gòu)問題,是從編寫可靠軟件向編寫精美軟件邁進(jìn)的重要方法。
2. 業(yè)務(wù)邏輯問題
就是軟件是否與需求的要求符合的問題。師傅和徒弟經(jīng)常對(duì)業(yè)務(wù)需求的理解有差異,借此機(jī)會(huì)同步一下,必要時(shí)引入PO(產(chǎn)品經(jīng)理/策劃人員……)。
有人會(huì)說業(yè)務(wù)邏輯問題不是一測(cè)試就知道了嗎?可是測(cè)試一般發(fā)生在很久以后,有些邏輯測(cè)試還需要一定的觸發(fā)條件,而且測(cè)試只會(huì)發(fā)現(xiàn)失效(failure, 與預(yù)期不符)而不能發(fā)現(xiàn)缺陷(defect, 具體哪里出了錯(cuò)),等積累長(zhǎng)了,誰也找不到原因了。
3. 編程素養(yǎng)問題
很多問題屬于那種“這樣也行那樣也行”的狀態(tài),比如命名/初始值/縮進(jìn)/斷行……但是高手的做法總是比新手好一些。
比如bool?result= true; 這句話就有問題,剛初始化就先宣布成功,必有隱患。這是一個(gè)真實(shí)案例,而下面也的確有一個(gè)分支錯(cuò)誤地返回了這個(gè)true(實(shí)際案例是個(gè)HRESULT)。而發(fā)現(xiàn)這個(gè)問題,不是測(cè)試而是代碼檢查。實(shí)際上測(cè)試幾乎發(fā)現(xiàn)不了這些問題,比如上面那段代碼會(huì)在某文件打不開的時(shí)候錯(cuò)誤地返回這個(gè)true,而在測(cè)試中幾乎不會(huì)故事破壞那個(gè)文件來測(cè)試其結(jié)果。
實(shí)際使用時(shí),不用拉太長(zhǎng)的清單,師傅能想到的看到的告訴徒弟就行。
徒弟不需要學(xué)到天上去,只要能學(xué)到師傅那么好就可以了。之前在做CMMI咨詢的時(shí)候我弄過一些檢查表,推廣均以失敗而告終。那些表都是為了頂級(jí)安全性的軟件考慮的,在普通項(xiàng)目里邊使用是個(gè)災(zāi)難。
幾個(gè)問題
1. 師傅天天檢查,會(huì)不會(huì)很累?
檢查不全是為了發(fā)現(xiàn)缺陷,而是為了提高成長(zhǎng)。如果總是發(fā)現(xiàn)重復(fù)問題,此徒不可教。好學(xué)的徒弟有半年時(shí)間就能接近師傅了,考慮到師傅一般比徒弟多工作2年,我們因此讓一個(gè)人加速1.5年。
2. 不會(huì)餓死師傅嗎?
會(huì),也不會(huì)。如果師傅止步不前,即使他不教別人,也遲早被人超越;師傅也是需要學(xué)習(xí)的。事實(shí)是會(huì)教徒弟的師傅才會(huì)學(xué)習(xí),而會(huì)學(xué)習(xí)的師傅才會(huì)教徒弟。
3. 師傅跟誰學(xué)?
師徒制度是最底層團(tuán)隊(duì)制度(1個(gè)師傅+1~3個(gè)徒弟左右),其上還有更大的結(jié)構(gòu)和更高的高手。我們之前曾把人員層次設(shè)為需指導(dǎo)的(徒弟)/可免于指導(dǎo)的(也是徒弟)/可提供指導(dǎo)的(師傅)/可培訓(xùn)的(團(tuán)隊(duì)最高級(jí)別的高手),最后一級(jí)需要定期與大家分享內(nèi)容。
師傅作為高級(jí)技術(shù)人員,還享有機(jī)會(huì)外出培訓(xùn)/采購(gòu)圖書等待遇。
師傅自學(xué)也很重要,經(jīng)驗(yàn)更是不可取代的。前事不忘后事之師,要把自己的經(jīng)歷和別人的經(jīng)歷都當(dāng)作經(jīng)驗(yàn)來看待。
4. 師傅努力編好自己的軟件不久已經(jīng)有很大貢獻(xiàn)了,為何要幫助徒弟?
軟件整體是一個(gè)串聯(lián)系統(tǒng),一個(gè)環(huán)節(jié)出了問題整個(gè)軟件崩潰(Web軟件好一些)。因此軟件質(zhì)量取決于最差的部分,而不是最好的部分。
代碼審查的確會(huì)占用時(shí)間導(dǎo)致最好的部分變差,但卻使最差的地方變得好得多,整體質(zhì)量因此而得以提高。
從工作層面講,代碼檢查使得代碼的質(zhì)量尤其是結(jié)構(gòu)質(zhì)量,整體上保持在師傅可能達(dá)到的水平,從而保證了項(xiàng)目的成功。
從學(xué)習(xí)層面講,代碼檢查使得徒弟可以不斷/漸進(jìn)地學(xué)習(xí),從而花費(fèi)遠(yuǎn)遠(yuǎn)低于師傅的時(shí)間成本達(dá)到更高層次。
心態(tài)是其中的關(guān)鍵。徒弟不能因此而覺得有一個(gè)后盾了可以放任存在問題等師傅發(fā)現(xiàn),要珍惜師傅的時(shí)間,也要利用師傅的時(shí)間每次都學(xué)不同的內(nèi)容;師傅也不能覺得徒弟學(xué)會(huì)了對(duì)自己是個(gè)威脅,威脅時(shí)刻都在,不來自于自己的徒弟,也會(huì)來自于別人的徒弟,唯有自我提高。
----本文摘自CSDN文章
?
總結(jié)
以上是生活随笔為你收集整理的【敏捷开发每日一贴】代码走查的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 深度学习第五课-训练注意事项与框架使用
- 下一篇: [Leetcode][第79题][JAV