怎么樣能讓程序員少寫B(tài)UG
編輯導(dǎo)語:作為一名產(chǎn)品經(jīng)理,除了要關(guān)注你的產(chǎn)品需求和用戶需求,還要參與到每一個(gè)步驟里;比如開發(fā)測試,參與到其中,才能更好的做到結(jié)合,完成項(xiàng)目的開發(fā)。本文作者介紹了在程序員寫代碼時(shí)如何避免出錯(cuò)。
有沒有覺得,有時(shí)候程序員哥哥的腦回路不同凡響,能自己想出一套邏輯,甚至寫一些讓你哭笑不得的BUG。
那有沒有思考過,怎么樣讓他們少些BUG呢?
其實(shí),我為此是操碎了心,在公司之前各方面都不不成熟,且沒有測試人員的時(shí)候,我是兼任測試的。
我在測試的時(shí)候,主要有以下三個(gè)問題。
- 我們以為達(dá)成共識的公共組件,開發(fā)哥哥們很容易因?yàn)槲臋n需求沒有明確說明而進(jìn)行自己新的一套東西;還美其名曰:我比你們產(chǎn)品想的多,我讓我們系統(tǒng)更加完美。但其實(shí)是他們美好的yy,很多東西的實(shí)現(xiàn)效果讓你覺得很反人類。
- 需求理解不一致,未真正達(dá)成共識,各自在各自的頻道,天馬行空;你以為你跟他說清楚了,他以為自己理解了,實(shí)際上就是雞同鴨講,誰也沒理解誰,最后導(dǎo)致開發(fā)出來的東西,用戶根本不能用。
- 粗心大意,考慮不全面,寫出了真正的BUG;這類BUG要么很明顯,要么就會藏得很深。
這三個(gè)問題,在我經(jīng)歷了許多項(xiàng)目開發(fā)后發(fā)現(xiàn),其實(shí)是能夠通過完善的文檔和充足的軟件設(shè)計(jì)去避免的。
第一個(gè)問題,其實(shí)不止是組件,還有很多文檔中并不明確的東西,這些都是能夠通過我們詳細(xì)需求文檔描述或者詳細(xì)的原型設(shè)計(jì)去避免;如果是通用的東西,我們可以形成一套通用的規(guī)范說明,或者讓開發(fā)形成一套公共功能庫,通用或者公共的東西,不需要每次都單獨(dú)寫,只要按規(guī)范去做就好。
第二個(gè)問題,我們可以讓書面的描述,落成更直觀的邏輯圖、流程圖或是直接舉例的數(shù)據(jù)計(jì)算過程,讓程序員哥哥們可以多角度深刻的去理解;這樣做,不僅可以讓繁瑣復(fù)雜的文字表述文檔變成更通俗易懂的圖形和數(shù)據(jù),還可以檢查需求和邏輯的完整性。
也就是說這兩個(gè)問題,其實(shí)我們都可以通過詳細(xì)的軟件設(shè)計(jì)和規(guī)范的開發(fā)流程,盡量去避免。
那么第三個(gè)問題呢?
第三個(gè)問題,則要從測試上入手。
在《人月神話》一書中,曾提到過“易除BUG 的設(shè)計(jì)”。
這所謂的“易除BUG 的設(shè)計(jì)”其實(shí)是通過三塊內(nèi)容:測試規(guī)格說明、自下而上的設(shè)計(jì)和結(jié)構(gòu)化編程。
一、測試規(guī)格說明
在編寫代碼之前提交測試規(guī)格說明,也就是我們常說的測試用例;以詳細(xì)的檢查和說明的完整性和明確性的文檔,并組織項(xiàng)目組全體成員進(jìn)行測試用例評審,以達(dá)到項(xiàng)目需求的真正共識。
這個(gè)過程中,也是對需求文檔和原型的檢查,其中不免會對原需求文檔和原型進(jìn)行進(jìn)一步的需求細(xì)化和存疑點(diǎn)的修改。
這一點(diǎn)非??简?yàn)測試用例編寫人員對業(yè)務(wù)理解的能力和逆向思維能力,測試想要覆蓋全面,則需要深刻理解業(yè)務(wù)需求,且能對異常操作場景進(jìn)行細(xì)化設(shè)計(jì);數(shù)據(jù)類的測試,還需要數(shù)據(jù)用例去驗(yàn)證邏輯。
因此,測試人員編寫測試用例只是第一步,想要測試用例覆蓋全面,做到大家真正達(dá)成共識,則需要大家群策群力,一起去完善;這一過程,可能是系統(tǒng)開發(fā)正確最關(guān)鍵的一步。
二、自下而上的設(shè)計(jì)
將系統(tǒng)開發(fā)分為體系結(jié)構(gòu)設(shè)計(jì)、設(shè)計(jì)實(shí)現(xiàn)和物理編碼實(shí)現(xiàn),即精化步驟、細(xì)化任務(wù)。
這一點(diǎn),其實(shí)就是在開發(fā)上入手,讓系統(tǒng)開發(fā)分步設(shè)計(jì),這樣做,則有以下優(yōu)點(diǎn):
- 清晰的結(jié)構(gòu)和表達(dá)方式,更容易對需求和模塊功能進(jìn)行精確的描述;
- 模塊分割和模塊獨(dú)立性,則避免系統(tǒng)級的BUG;
- 細(xì)節(jié)的抑制使結(jié)構(gòu)上的缺陷更加容易識別;
- 設(shè)計(jì)在每個(gè)精化步驟上都是可以測試的,所以測試可以盡早開始,并且每個(gè)步驟的重點(diǎn)樂于放在合適的級別上。
三、結(jié)構(gòu)化編程
將系統(tǒng)分為單元調(diào)試和集成調(diào)試。將相同的組件們作為某個(gè)單元,可以減少重復(fù)工作,也能控制變更;這樣不僅能夠方便測試,也可以階段化的迭代。
四、總結(jié)
軟件的開發(fā)是所有參與人員共同朝著一個(gè)目標(biāo)前進(jìn),每一個(gè)人都在為項(xiàng)目辛勤付出,都希望項(xiàng)目做到有結(jié)果,所以每個(gè)人都要為項(xiàng)目的質(zhì)量、結(jié)果進(jìn)行負(fù)責(zé)。
過程中大家要各司其職,也要互相幫助,盡量避免走歪路和出錯(cuò)。
我們都要對整個(gè)軟件開發(fā)過程負(fù)責(zé),因此,我們產(chǎn)品經(jīng)理不僅僅只是把需求做得完美,還要協(xié)助開發(fā)測試,更好的完成項(xiàng)目開發(fā)目標(biāo),達(dá)成真正可用的系統(tǒng)。
本文由 @阿虛 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載
題圖來自 unsplash,基于 CC0 協(xié)議
寫bug根本原因缺乏思考,作為執(zhí)行者,不會往深層次去想一層,所以導(dǎo)致改好了A,b出現(xiàn)了bug。日復(fù)一日,有個(gè)詞叫懶政,也適用于這行。