零Bug的代碼是怎么煉成的悬蔽?

請(qǐng)支持原文作者 :碼農(nóng)翻身
碼農(nóng)寫代碼的最高境界就是:一次寫成, 沒有bug捉兴。

這個(gè)境界我是達(dá)不到的蝎困, 但是我能達(dá)到這個(gè)層次: 多次寫成, 沒有bug倍啥。

或者更準(zhǔn)確的說法是:我已經(jīng)在寫代碼階段把bug都消滅了禾乘,測試團(tuán)隊(duì)運(yùn)行完測試用例以后,發(fā)現(xiàn)的Bug數(shù)為零虽缕。

其實(shí)沒有bug也不準(zhǔn)確盖袭,因?yàn)闇y試階段沒有發(fā)現(xiàn)Bug 并不代表上線以后也沒有Bug, 但至少證明這是一段高質(zhì)量的代碼彼宠。

可能有人要跳出來了:這不可能,肯定是你的功能太簡單了弟塞。 實(shí)際上我最近寫的這段代碼應(yīng)該是屬于中等復(fù)雜度的:

需要從一個(gè)消息隊(duì)列中獲得不同類型的XML消息凭峡, 對(duì)消息進(jìn)行解析,更新數(shù)據(jù)庫决记,獲取數(shù)據(jù)庫中符合條件的用戶摧冀, 發(fā)送郵件。

一個(gè)比較好的地方是:沒有界面 系宫! 其實(shí)我個(gè)人不喜歡寫Web界面的索昂,覺得很繁雜 :-)

那零Bug代碼是怎么寫出來的呢? 我想了想扩借,主要有這些關(guān)鍵點(diǎn):
1
透徹理解需求
很多人看到需求以后椒惨, 想都不想立刻就開始編碼,這是有問題的潮罪。

作為碼農(nóng)康谆,雖然不是需求分析人員领斥, 也要考慮下為什么要有這個(gè)需求 , 這個(gè)需求有哪些主干路徑沃暗, 有哪些分支路徑 月洛, 在腦子里要形成一個(gè)圖譜。

把自己假想成用戶孽锥,換位思考下嚼黔,看看用戶會(huì)如何使用這個(gè)功能, 通常你都會(huì)發(fā)現(xiàn)一些意想不到的情況惜辑。
2
良好的設(shè)計(jì)
把功能劃分成接口良好的模塊唬涧,讓每個(gè)模塊各司其職,又能依靠良好的接口有效合作韵丑, 能極大的減少Bug的產(chǎn)生爵卒。

這考驗(yàn)就是基本功了 , 沒有速成大法撵彻, 只有自己慢慢苦練钓株。

注意:我這里說的設(shè)計(jì)不一定是文檔 ,有可能只是在你的腦子里陌僵。
3
處理好邊界條件
據(jù)說80%的Bug是在“邊界”發(fā)生的轴合,這些邊界條件包括:
輸入數(shù)據(jù)不合法
數(shù)組越界
調(diào)用的方法拋出異常
文件不存在
文件權(quán)限不夠
調(diào)用其他系統(tǒng)接口時(shí)數(shù)據(jù)未能正常返回
打不開數(shù)據(jù)庫連接
數(shù)據(jù)庫表在初始情況下沒有值
運(yùn)行時(shí)間過長導(dǎo)致超時(shí)
......
我經(jīng)常發(fā)現(xiàn), 大量的代碼被用來處理邊界條件碗短, 有時(shí)候甚至比業(yè)務(wù)代碼都要多受葛。
4
充分的測試:不放過一行代碼
這是我最想說的,測試不僅僅是測試人員的事情 偎谁, 也是開發(fā)人員的事情总滩。

一定要保證每一行代碼都被你執(zhí)行過,不留任何死角巡雨。

這一點(diǎn)非常重要闰渔, 要么你是通過寫自動(dòng)化測試覆蓋到的,要么是手工執(zhí)行測試覆蓋到的铐望。
千萬不能是你覺得代碼簡單冈涧,不會(huì)出問題,就不管了正蛙。
5
考慮代碼修改對(duì)別的模塊的影響
很少代碼是完全獨(dú)立的督弓,總是或多或少和別人扯上關(guān)系, 修改這樣的代碼就要小心了乒验, 這也是個(gè)主要的Bug發(fā)生地愚隧。

一定要考慮代碼的修改對(duì)別人的影響, 并且做回歸測試锻全。

零Bug代碼會(huì)帶來巨大的好處奸攻,開發(fā)完成蒜危,進(jìn)入功能測試或者驗(yàn)收測試階段以后, 成本會(huì)很低睹耐, 測試會(huì)很快辐赞, 因?yàn)榛旧隙际且淮瓮ㄟ^,沒有bug 就不需要修改代碼硝训,返工的成本就不存在响委。

寫出零Bug代碼,或者接近于零Bug代碼應(yīng)該是每個(gè)碼農(nóng)的追求窖梁,其實(shí)也不太難赘风,只要用心, 有著對(duì)需求的透徹理解纵刘,清晰的思路邀窃,良好的設(shè)計(jì)和編碼,以及非常充分的測試假哎,基本上就差不多了瞬捕。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市舵抹,隨后出現(xiàn)的幾起案子肪虎,更是在濱河造成了極大的恐慌,老刑警劉巖惧蛹,帶你破解...
    沈念sama閱讀 221,695評(píng)論 6 515
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件扇救,死亡現(xiàn)場離奇詭異,居然都是意外死亡香嗓,警方通過查閱死者的電腦和手機(jī)迅腔,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 94,569評(píng)論 3 399
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來靠娱,“玉大人钾挟,你說我怎么就攤上這事”グ叮” “怎么了?”我有些...
    開封第一講書人閱讀 168,130評(píng)論 0 360
  • 文/不壞的土叔 我叫張陵徽千,是天一觀的道長苫费。 經(jīng)常有香客問我,道長双抽,這世上最難降的妖魔是什么百框? 我笑而不...
    開封第一講書人閱讀 59,648評(píng)論 1 297
  • 正文 為了忘掉前任,我火速辦了婚禮牍汹,結(jié)果婚禮上铐维,老公的妹妹穿的比我還像新娘柬泽。我一直安慰自己,他們只是感情好嫁蛇,可當(dāng)我...
    茶點(diǎn)故事閱讀 68,655評(píng)論 6 397
  • 文/花漫 我一把揭開白布锨并。 她就那樣靜靜地躺著,像睡著了一般睬棚。 火紅的嫁衣襯著肌膚如雪第煮。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 52,268評(píng)論 1 309
  • 那天抑党,我揣著相機(jī)與錄音包警,去河邊找鬼。 笑死底靠,一個(gè)胖子當(dāng)著我的面吹牛害晦,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播暑中,決...
    沈念sama閱讀 40,835評(píng)論 3 421
  • 文/蒼蘭香墨 我猛地睜開眼壹瘟,長吁一口氣:“原來是場噩夢(mèng)啊……” “哼!你這毒婦竟也來了痒芝?” 一聲冷哼從身側(cè)響起俐筋,我...
    開封第一講書人閱讀 39,740評(píng)論 0 276
  • 序言:老撾萬榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎严衬,沒想到半個(gè)月后澄者,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 46,286評(píng)論 1 318
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡请琳,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 38,375評(píng)論 3 340
  • 正文 我和宋清朗相戀三年粱挡,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片俄精。...
    茶點(diǎn)故事閱讀 40,505評(píng)論 1 352
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡询筏,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出竖慧,到底是詐尸還是另有隱情嫌套,我是刑警寧澤,帶...
    沈念sama閱讀 36,185評(píng)論 5 350
  • 正文 年R本政府宣布圾旨,位于F島的核電站踱讨,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏砍的。R本人自食惡果不足惜痹筛,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,873評(píng)論 3 333
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧帚稠,春花似錦谣旁、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,357評(píng)論 0 24
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至馆衔,卻和暖如春瘟判,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背角溃。 一陣腳步聲響...
    開封第一講書人閱讀 33,466評(píng)論 1 272
  • 我被黑心中介騙來泰國打工拷获, 沒想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人减细。 一個(gè)月前我還...
    沈念sama閱讀 48,921評(píng)論 3 376
  • 正文 我出身青樓匆瓜,卻偏偏與公主長得像,于是被迫代替她去往敵國和親未蝌。 傳聞我的和親對(duì)象是個(gè)殘疾皇子驮吱,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 45,515評(píng)論 2 359

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