淺談如何寫(xiě)出一個(gè)讓(坑)人(王)很(之)難(王)發(fā)現(xiàn)的bug

序員的日常三件事:寫(xiě)bug、改bug、背鍋。連程序員都自我調(diào)侃道,為什么每天都在加班?因?yàn)槲业难劾锍:琤ug。
那么如何寫(xiě)出一個(gè)讓(坑)人(王)很(之)難(王)發(fā)現(xiàn)的bug呢?
– 1 –
新手開(kāi)發(fā)+新手測(cè)試=無(wú)敵巨坑
有一天凌晨,某組的程序員們被電話轟炸醒了。用戶(hù)紛紛投訴自己的業(yè)務(wù)數(shù)據(jù)離奇消失了!
大伙排查半天,原來(lái)是新來(lái)的小王埋的坑。他三個(gè)月前開(kāi)發(fā)的定時(shí)任務(wù)出bug了!
那時(shí)剛來(lái)的小王刷刷地將代碼寫(xiě)完后,手把手教新來(lái)的測(cè)試實(shí)習(xí)妹子怎樣測(cè)試這塊代碼,估計(jì)是妹子還沒(méi)搞清楚里面的邏輯時(shí)便稀里糊涂地將代碼上線了。
萬(wàn)萬(wàn)沒(méi)想到這bug隱藏這么久,由于錯(cuò)誤的邏輯導(dǎo)致錯(cuò)誤的數(shù)據(jù),錯(cuò)誤的數(shù)據(jù)導(dǎo)致任務(wù)死循環(huán)執(zhí)行,當(dāng)執(zhí)行的時(shí)間過(guò)長(zhǎng),到某個(gè)點(diǎn)時(shí),系統(tǒng)如汽水開(kāi)瓶般“砰”地崩了。
業(yè)務(wù)不熟導(dǎo)致邏輯理解有問(wèn)題,是大部分新人都會(huì)存在的問(wèn)題。此時(shí)最好安排個(gè)有經(jīng)驗(yàn)的測(cè)試“調(diào)教”下,降低bug發(fā)生率。
– 2 –
不考慮系統(tǒng)拓展性,怎么方便怎么寫(xiě)
史上最出名的“千年蟲(chóng)”bug令全世界恐慌,甚至傳出“世界末日”的謠言。
原因竟讓人啼笑皆非:當(dāng)時(shí)的程序員沒(méi)考慮到軟件會(huì)被使用至21世紀(jì),為了節(jié)省內(nèi)存省略掉代表年份的前兩位數(shù)字”19”,或者默認(rèn)前兩位為”19”。
“千年蟲(chóng)“千年一遇,可日常關(guān)于時(shí)間的低級(jí)bug經(jīng)常發(fā)生,而且通常等到一段時(shí)間后的某個(gè)特定時(shí)間點(diǎn)才暴露出來(lái),讓人防不勝防。
例如正則只匹配了“16”,“17”年,等到18年零點(diǎn)到來(lái)問(wèn)題才暴露。
關(guān)于時(shí)間的bug非常多,大到閏年、夏令時(shí)、節(jié)假日、時(shí)區(qū)等,小到時(shí)間格式,每年都會(huì)碰到不小心遺漏的時(shí)間bug,所以很多公司對(duì)時(shí)間的通用測(cè)試用例就有許多條。
除了時(shí)間問(wèn)題,程序員如果只考慮本次需求或者單個(gè)系統(tǒng)時(shí),常常將字段設(shè)置不正確,后續(xù)業(yè)務(wù)拓展或者和別的系統(tǒng)交互時(shí)發(fā)現(xiàn)字段不夠用,只能修改字段長(zhǎng)度了。
– 3 –
不考慮上下游系統(tǒng),招呼不打便隨意改接口
曾遇到A系統(tǒng)上線后,大伙回歸A系統(tǒng)正常運(yùn)行后,正樂(lè)滋滋地松一口氣之際,本來(lái)好端端運(yùn)行的B系統(tǒng)突然壞了,B組人排查半天發(fā)現(xiàn),原來(lái)是A提供的接口改了,B系統(tǒng)不兼容新接口。
大概程序員走過(guò)最長(zhǎng)的路便是背鍋之路了。
2005 年 12 月 8 日瑞穗證券的交易員因手誤輸入錯(cuò)的股價(jià),2 分鐘后這人試圖通過(guò)交易軟件撤銷(xiāo)這筆賣(mài)單??墒沁B續(xù)輸入 3 次撤單指令,都被東證的交易系統(tǒng)拒絕了。這次事故造成400 億日元的損失。
后來(lái)查明是交易系統(tǒng)出 bug了,程序員在 2000 年某次程序修改時(shí)不小心埋進(jìn)去的。
所以很多公司會(huì)嚴(yán)格要求在程序修改后必須經(jīng)過(guò)嚴(yán)格的回歸測(cè)試,來(lái)驗(yàn)證對(duì)其他業(yè)務(wù)流程有沒(méi)有影響。
– 4 –
復(fù)制、粘貼,我閉著眼,有bug看不見(jiàn),debug了沒(méi)?
已發(fā)布已驗(yàn)證的代碼,是安全可靠的,是可以拿來(lái)即用的,無(wú)需質(zhì)疑,不用浪費(fèi)時(shí)間去調(diào)試,這是程序員的慣性思維。
被記入史上bug王之一的阿麗亞娜5型自毀事件就是因代碼復(fù)用而導(dǎo)致的。1996年6月4日,阿麗亞娜5型運(yùn)載火箭發(fā)射點(diǎn)火后,由于bug,在發(fā)射39秒后火箭發(fā)生偏軌,最終被迫引爆自毀。
這件事情發(fā)生的原因是因?yàn)?型火箭是基于4型火箭開(kāi)發(fā)的,發(fā)射系統(tǒng)的代碼程序員也直接照搬4型的。
該段代碼在4型火箭中被反復(fù)驗(yàn)證,但在5型卻沒(méi)有進(jìn)行驗(yàn)證。實(shí)際上4型的飛行條件和5型的飛行條件截然不同,最終導(dǎo)致事故發(fā)生,此次事故損失3.7億美元。
有測(cè)試工程師說(shuō),最害怕開(kāi)發(fā)說(shuō)這次沒(méi)啥改動(dòng),跟線上某功能差不多。這時(shí)候反而要細(xì)心驗(yàn)證代碼的正確性。
這是因?yàn)?ldquo;安全心理”作祟:程序員直覺(jué)已信任上線的代碼是正確的,便直接復(fù)制過(guò)來(lái)用,不會(huì)再花時(shí)間自測(cè),因?yàn)檫@是“對(duì)的”,“毋庸置疑”的。
此時(shí)測(cè)試人員不可輕易聽(tīng)信開(kāi)發(fā)的話,更要嚴(yán)謹(jǐn)對(duì)待,畢竟程序員的三大謊言有:沒(méi)問(wèn)題的;只改了兩行代碼;和線上一樣。
程序員花30分鐘寫(xiě)程序,花2小時(shí)改bug。bug,子子孫孫無(wú)窮盡也。所以在面對(duì)測(cè)試人員的質(zhì)疑時(shí),程序員們一定要保持鎮(zhèn)定,該甩鍋時(shí)速速甩掉:這是歷史問(wèn)題,我沒(méi)動(dòng)過(guò);剛剛在我這是好的,你環(huán)境配錯(cuò)了;你重啟試試……
最后一招是兩個(gè)字:我改!
以上就是腳本之家分享給大家的關(guān)于淺談如何寫(xiě)出一個(gè)讓(坑)人(王)很(之)難(王)發(fā)現(xiàn)的bug的全部?jī)?nèi)容,希望對(duì)大家有所幫助。感興趣的朋友可以繼續(xù)參閱本站其他相關(guān)專(zhuān)題,如有不足之處,歡迎留言指出。感謝朋友們對(duì)本站的支持!
相關(guān)文章
淺談Linux 之父 Linus 的 8 個(gè)趣聞?shì)W事
這篇文章主要介紹了淺談Linux 之父 Linus 的 8 個(gè)趣聞?shì)W事,小編覺(jué)得還是挺不錯(cuò)的,下面大家就和小編一起來(lái)看看,書(shū)中講了哪些趣聞?shì)W事2018-02-07談?wù)劗?dāng)CPU 空閑時(shí)它都在做什么
這篇文章主要介紹了談?wù)劗?dāng)CPU 空閑時(shí)它都在做什么,通過(guò)這篇文章我們就來(lái)了解下CPU空閑時(shí)它都在做什么,下面我們就來(lái)一起看看具體內(nèi)容,需要的朋友可以了解下2018-02-05程序員們,一起來(lái)看看編程語(yǔ)言之父都有誰(shuí)
這篇文章主要介紹了程序員們,一起來(lái)看看編程語(yǔ)言之父都有誰(shuí)等相關(guān)內(nèi)容,小編覺(jué)得還是挺不錯(cuò)的,這里分享給大家,需要的朋友可以參考下,下面就和小編一起來(lái)看看吧2018-01-31- 這篇文章主要介紹了哀其不幸的墨西哥人工智能,小編覺(jué)得還是挺不錯(cuò)的,具有一定借鑒價(jià)值,下面就和小編一起來(lái)看看具體內(nèi)容吧2018-01-29
128GB 529元!Intel正式發(fā)布760p M.2固態(tài)盤(pán):3230MB/s
1月24日消息 繼三星發(fā)布了旗下新一代的860 RPO、860 EVO固態(tài)硬盤(pán)后,Intel也在今天早些時(shí)候?yàn)槲覀儙?lái)了最新的760p SSD固態(tài)硬盤(pán),那么這款760p SSD固態(tài)硬盤(pán)究竟如何呢?下2018-01-25移動(dòng)聯(lián)通電信三大運(yùn)營(yíng)商再放新號(hào)段 三大運(yùn)營(yíng)商新號(hào)段套餐區(qū)別對(duì)比
移動(dòng)聯(lián)通電信三大運(yùn)營(yíng)商再放新號(hào)段,并且這些新號(hào)段還有對(duì)應(yīng)的套餐,那么這些新號(hào)段所對(duì)應(yīng)的套餐哪一個(gè)比較好呢?下文中會(huì)有詳細(xì)的說(shuō)明2018-01-22- 這篇文章主要為大家分享了信息技術(shù)教師資格證面試真題最新考題,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2018-01-18
18年教師資格證筆試報(bào)名開(kāi)始了 想成為一名信息技術(shù)老師千萬(wàn)不要錯(cuò)過(guò)
想成為一名信息技術(shù)老師的第一步就是需要參加教師資格證考試,并順利獲得教師資格證證書(shū),本文小編就為大家分享了一份教師資格證考試的報(bào)名流程,感興趣的小伙伴們可以參考2018-01-182018春節(jié)高速免費(fèi)幾天 2018年春節(jié)高速免費(fèi)通行時(shí)間表
根據(jù)《重大節(jié)假日免收小型客車(chē)通行費(fèi)實(shí)施方案》發(fā)現(xiàn),收費(fèi)公路免費(fèi)通行時(shí)間為春節(jié)、清明節(jié)、勞動(dòng)節(jié)、國(guó)慶節(jié)等4個(gè)國(guó)家法定節(jié)假日以及當(dāng)年國(guó)務(wù)院辦公廳文件確定的上述法定節(jié)2018-01-16直播競(jìng)賽答題火了,撒幣燒錢(qián)能走多遠(yuǎn)
流量巨頭的入局絲毫沒(méi)有擋住創(chuàng)業(yè)者的熱情,據(jù)了解,接下來(lái)還有一些創(chuàng)業(yè)者的產(chǎn)品都會(huì)陸續(xù)上線。這股勁頭,足以與幾個(gè)月前的“吃雞盛況”匹敵.隨后,各個(gè)直播競(jìng)賽答題類(lèi)APP盤(pán)2018-01-12