我們一起聊聊如何在開發過程中減少 Bug?
愛因斯坦曾說過:“如果我有一個小時來解決一個關系到我生死的問題,我會花55分鐘弄清楚問題是什么。一旦我知道了問題是什么,我可以在五分鐘內解決它。”
雖然我們的軟件開發過程并不涉及生死抉擇,但它直接影響用戶體驗,并決定產品的方向。因此,程序員在開發過程中如何減少 Bug 反映了代碼質量,并展示了他們的整體能力。
那么,我們如何在開發過程中有效減少 Bug 呢?
我認為我們應該從兩個方面入手:業務層和代碼層。
業務層
我們不詳細討論軟件開發過程,直接看最重要的關鍵點:
需求討論階段
在需求討論階段,必須明確需求,并使測試、開發和產品團隊達成共識。如果在早期階段沒有明確的問題,后期將導致無效的返工和不必要的爭執,這在日常開發中尤為常見。因此,在軟件開發的早期階段,我們將經歷三個階段:“審查、反饋、評估”。
開發完成階段
開發完成后,程序員需要首先完成“自測”,即軟件開發中的“冒煙測試”,以確保主要流程沒有錯誤。否則,開發工程師提交代碼后,測試工程師將難以進行有效的測試,導致資源的大量浪費。
一個更標準化的過程要求測試工程師在明確需求后編寫“測試用例”。開發完成后,開發人員可以自行對照“測試用例”進行初步驗證,然后提交代碼進行測試。
這樣做的好處不僅是確保“高質量的代碼交付”,還可以減少測試工程師的工作量。為什么不這樣做呢?
代碼提交測試階段
自測和代碼提交測試有什么區別?從軟件開發的角度來看,開發人員和測試人員在不同的階段進行測試:
開發人員的“白盒測試”:
白盒測試是指通過使用源代碼進行測試,而不使用用戶界面來運行測試程序。這種測試需要通過代碼的語法分析發現與算法、溢出、路徑、條件等相關的內部編碼缺陷或錯誤,然后進行修正。
測試工程師進行“黑盒測試”:
黑盒測試,也稱為功能測試,是通過測試來檢測每個功能是否可以正常使用。在測試中,程序被視為一個不能打開的黑盒子,完全不考慮程序的內部結構和特性,只對程序接口進行測試。
黑盒測試只檢查程序功能是否按照需求規范文檔正常使用,程序能否正確接收輸入數據并生成正確的輸出信息。黑盒測試關注外部程序結構,不考慮內部邏輯結構,主要針對軟件接口和軟件功能進行測試。
黑盒測試是一種從用戶角度出發,以輸入數據和輸出數據之間的對應關系為起點進行的測試。
顯然,如果外部特性的設計有問題或規范有錯誤,使用黑盒測試方法是無法發現的。黑盒測試主要針對軟件的功能需求,主要試圖發現以下類型的錯誤:
- 功能不正確或缺失;
- 接口錯誤;
- 輸入和輸出錯誤;
- 數據庫訪問錯誤;
- 性能錯誤;
- 初始化和終止錯誤。
代碼層
在代碼層面,我們需要從以下幾個方面入手:
Eslint 避免低級語法問題
這顯而易見。在編碼過程中,識別問題,避免諸如逗號缺失、變量名稱錯誤、大小寫敏感等簡單的語法錯誤。
邊界處理
確保容錯性,必要的空值檢查,并解決代碼邊界問題。考慮如何處理不存在的數組或數組越界等場景。如何防止頁面因數據丟失而崩潰?
單元測試
如果時間允許,進行徹底的單元測試。在每次編譯代碼或部署之前運行測試腳本,確保核心代碼被測試覆蓋,并盡量減少錯誤率。
積累為什么要談積累?原因很簡單:隨著開發經驗的增加,可能會遇到許多問題。通過細心地積累知識,許多錯誤可以在不知不覺中得到解決。否則,將不斷陷入同一個陷阱,并在其中迷失。那么我們如何積累?
首先,當遇到無法立即解決的問題時,如果通過研究或向他人尋求幫助解決了問題,請務必記下在筆記本中,或者更好的是使用云筆記以便隨時訪問。
其次,構建函數庫,通過封裝常用方法進行不斷完善。也許有一天會發現自己不知不覺地創建了自己的 Lodash 庫。
最后,積累優秀的代碼片段;“我們不生產代碼,我們只是優秀代碼的搬運工。”
學習
簡而言之:沒有什么比從優秀的開源代碼中學習更有趣的了!閱讀優秀的源碼不僅可以讓我們學習作者的思想,還可以讓我們站在他們的肩膀上走得更遠!
結語
關于這樣一個開放性的問題,每個人可能會有不同的意見,智者見智。每個人都有自己的觀點和獨特的方法。不管是黑貓還是白貓,只要能抓住老鼠就是好貓。對于程序員來說,任何可以減少 Bug 的方法都是好方法。
程序員常說:“沒有代碼,就沒有 Bug。”
我們不應因為害怕犯錯而減少編碼,而是要勇敢地面對挑戰,并在面對挫折時更加堅定。重要的是要理解,Bug 在日常開發中是不可避免的,只能盡量減少。當然,這不應該成為我們將 Bug 歸咎于他人的借口。不斷超越自我是走向永恒的關鍵。