Bug是什麼?
漏洞是在硬件、軟件、協議的具體實現或系統安全策略上存在的缺陷,從而可使攻擊者可以在未受權的狀況下訪問或破壞系統。具體舉例來講,好比在Intel Pentium芯片中存在的
邏輯錯誤,在
Sendmail早期版本中的編程錯誤,在
NFS協議中認證方式上的弱點,在Unix
系統管理員設置匿名Ftp服務時配置不當的問題均可能被攻擊者使用,威脅到系統的安全。於是這些均可以認爲是系統中存在的
安全漏洞。bug狹義的概念是指軟件程序漏洞或缺陷,廣義的概念還包括測試工程師或用戶所發現和提出的軟件可更改的細節、或與需求文檔存在差別的功能實現等。
如何發現Bug ?
第一種Bug的發現途徑, 主要靠滲透工程師的測試 或者來自黑客的管教. (好比 XSS, CSRF..) 第二種Bug的發現途徑, 主要靠項目交付後一行一行的執行測試用例與 有着火眼金睛的產品經理的把關. (好比 Ant Design 聖誕節日彩蛋) 而第三種Bug 則是最多見的. 對於業務認知與實踐上的欠缺, 有些Bug可能在上線前的自測種就能察覺到, 可有些Bug就隨着時間的流逝被雪藏了起來, 好比使用 JDK1.7的HashMap在多線程業務中致使的死鎖問題, 使用分詞器不創建單列模式加載語料包致使的OOM, 以及在金融場景使用 不安全的流式處理的漏算問題等等. 爆發之時, 宕機之日. 看完這麼多Bug發生方式, 有沒有一種 衆生皆苦 的感受~
如何在Bug發生後Debug?
-
項目必須有日誌框架收集天天的日誌, 在計算密集型系統(單機)中須要捕獲Bug後將異常快照發往值班人員郵箱 , 而在數據密集型系統(分佈式)部署中須要引入 ElasticStack 分析日誌事件.
騰訊技術工程:騰訊技術課|基於Elastic Stack 搭建日誌分析平臺
zhuanlan.zhihu.com
2. 日誌框架可對易錯業務進行埋點, 而 ElasticStack 則可配置日誌分析事件. 方便Debug,
3. 上面的兩步操做是爲了獲取Bug發生後的第一現場. 有利於定位Bug.
4. 定位到了Bug ,就要沉住氣, 告訴本身告訴本身已經成功了一半, 什麼事情均可以解決, 要麼花錢要麼花時間, Bug必定會解決的.
5. 面對滿屏日誌, 不要慌. 日誌打印範圍從大到小分別爲 DEBUG , INFO , WARN , ERROR , 若是已經對易錯的業務埋點就使用 全局搜索 WARN , 大體看一眼下面有沒有錯誤的. 若是沒有則, 直接 搜索 ERROR , 從第一個 ERROR 開始看, 主要看 異常名和異常信息調用堆棧 而後根據 異常信息找到 發生 ERROR 的代碼行數, 接下來就是在本身的項目中找到異常的調用類, 打個斷點, 要想復現BUG需先將日誌級別調整爲 DEBUG, 這樣就能夠輸出所有日誌, 而後去啓動當前項目. 一步一步Debug這個類直到異常再次復現.
6. 將當前項目中未提交代碼提交, 爲了不解決Bug而引起的Bug, 根據本身對這個 Bug的理解去修復出現Bug的代碼, 而後在這個過程當中去查資料, 去請教大佬,也是提高的一個過程 !
7. 對於初學者建議創建一個Bug手冊, 將本身知道的全部Bug 都記錄在上面, 以及相應的解決方案, 以便下次直接套用.
如何防止Bug發生?
首先研發團隊要有正視Bug的勇氣, Bug從有這個名字開始就一直存在到今天, 我相信 一百年之後仍然還有Bug存在, 只要代碼是人寫的, 人非聖賢熟能無過? 要有積極預防Bug的心態, 對於生產事故要理性對待, 從表面上看這是人的責任 但其本質實際上是制度的問題, 好比以 蘋果公司的 iOS 和 OS X 系統的安全漏洞爲例
-
第一道關:程序員(提升程序員的修養,是一個永不過期的課題。從別人的失敗和本身的失敗中學習、積累、提升,是一個程序員成長的必修課)
-
第二道關:編譯器(編譯器在代碼質量方面,做爲機器,恪盡職守,它能夠幫助咱們清除不少錯誤)
-
第三道關:迴歸測試 (通常地,軟件測試會盡量地覆蓋關鍵邏輯和負面清單,以確保關鍵功能可以正確執行,關鍵錯誤可以有效處理)
-
第四道關:代碼評審 (代碼評審是一個有效的在軟件研發過程當中抵禦人類缺陷的制度)
-
第五道關:代碼分析 (靜態代碼分析是經過對源代碼的檢查來發現潛在問題的一種軟件質量保障方式)
代碼製造的流水線咱們分析了這重重關卡,我特別想傳遞的一個想法就是,編寫優秀的代碼,不能僅僅依靠一我的的戰鬥。代碼的優秀級別,依賴於每一個關卡的優秀級別。高質量的代碼,依賴於高質量的流水線。每道關卡都應該給程序員提供積極的反饋。這些反饋,在保障代碼質量的同時,也能幫助程序員快速學習和成長。
微信掃描二維碼,關注個人公衆號
深刻淺出分享 Java 乾貨 , 找回對代碼的 Passion , 助力月入 20K+
原文地址: https://mp.weixin.qq.com/s/e2arxLqnsbKZ_arFPTRwBw程序員