實戰篇 近期線上BUG分析及解決方案總結
昨天下午大神把組內幾十號人召集在一起開Online bug分析大會,主要是針對近期線上事故從事故原因和解決方案兩個維度來分析:
對金融軟體來說,每一次的線上事故都有可能給公司帶來重大的損失,少扣了用戶的錢,為公司帶來資金方面的虧損;多扣了用戶的錢,則為帶來不必要的合約或法律糾紛,故測試金融軟體不比其他行業的軟體,後者線上bug大多不會直接引起資金方面損失,最多就是用戶體驗不好,功能沒有實現,導致用戶量的流失。
對金融軟體來說沒有小bug,一旦出現bug那就是重大的bug,必須引起高度重視。
俗話說」人非聖賢,孰能無過「,軟體是由人編寫的,所以再所難免都會有問題,而我們所要做就是盡量避免出現問題,或者是避免出現重複的問題。
對於軟體測試人員來說分析線上BUG是非常好的一個措施,這樣可以檢測到測試人員在測試過程中哪些地方考慮不周,或沒有考慮到,從而可以提醒測試人員下次思考的範圍擴大,儘可能地完全覆蓋測試範圍。
從分析結果的角度出發,線上bug大多都是開發人員和測試人員麻痹大意所導致的,並不是不可避免的。
經過分析得出線上的bug出現的原因基本有以下幾類:
1.開發人員使用java框架錯誤
2.開發人員上線時合併代碼不仔細,導致代碼有遺漏
3.測試人員回歸測試流程不全
4.多系統一起上線,缺少聯調或者聯調不全
01 開發人員使用java框架錯誤
這個問題已經出現了兩次,在8月份就出現過一次,原因就是開發人在使用多線程時,將多例使用成單例,導致系統在高並發進出現了串數據的現象,導致系統在處理時放錯款,將A的錢放到B的賬戶中去了。
雖然使用單例能節省資源,降低系統的佔用率,但這種情況並不合適目前的系統。
而此中情況在測試過程中並不一定能測試出來,這種出現的機率不定,必須在數據高並發時才有可能出現。
解決方案:技術問題,將單例修改成多例。
02 開發人員上線時合併代碼有遺漏
開發人員上線時刪除了master中的某行代碼,引起有個變數沒有定義,導致上線之後某功能失效。
開發人員將git分支上的代碼合併到master時,master提示某一行代碼沒有,開發人員就將分支上的代碼刪除再合併到master,等將代碼上線之後,導致某個功能失效。
解決方案1:開發人員將代碼合併到master時,先將master上的代碼拉到一個新分支上,然後再將要合併的代碼合到新分支上,最終將新分支上的代碼合併到master上。
解決方案2:開發人員建立良好的習慣,在開發某個項目時,每天(固定頻率)都將master上的代碼合併到自己代碼的分支上
03 測試人員回歸測試不全==漏測
說是回歸測試不全,其實就是相當於一定程度上的漏測,漏測應該是軟體測試人員盡量避免,一般漏測是因為測試人員思考不全,導致某個方面沒有測試到。
這次線上bug分析有以下幾個問題:
回歸測試時,驗證某個流程,但只驗證到任務創建,就沒有執行任務,上線後,該任務創建後執行會報錯。
未測試冪等性,上線後,導致兩次返回的結果不一樣。
開發修改某一個bug,回歸測試未回歸以前的流程,導致上線後,原來正常的流程執行不通過。
解決方案:
1.回歸測試時,主流程必須回歸,並且有完整的回歸步驟。
2.一個業務流程測試必須跑完一個完整流程。
3.測試過程中一定要細緻,不能遺漏重要的點。
軟體中的bug不可能完全測試出來,但最不應該出現的就是原本是正確的流程或功能,經過版本改動,在後期又出現,但測試人員再次測試時竟然沒有發現,像這種情況是軟體測試人員最應該避免的,所以回歸測試很重要,不僅要回歸主要流程,還需要回歸修改bug相關的代碼部分。
解決回歸測試流程測試不全最好的解決方案就是引入自動化,就目前我們的系統不夠成熟,改動太多,業務流程或需求都不穩定,所以自動化測試還未正式引入。
04 多系統一起上線,缺少聯調或聯調不全
因為聯調出現問題也不再是一次二次了,為什麼聯調會出現問題呢?
公司業務是由有多個系統組成的,同時還需要調用其他公司業務介面,測試人員在測試時調用相關係統介面時模擬返回或回調,基本都是使用的mock,mock返回的值並不是真的從相應系統的返回值,所以如果聯調測試時沒有把握好,就非常容易出現問題。
在測試過程中聯調就非常重要,但由於聯調測試人員的放鬆,對聯調內容的遺漏,導致業務上線之後:
1.調用某查詢任務,對方會一直返回處理中,導致流程卡住。
2.A系統回調B系統失敗,原因是編碼方式不一樣。
3.某系統功能失敗後,調用查詢介面報錯。
4.調用某系統,應返回code=1,結果返回code=0,導致業務處理錯誤。
以上問題都是由於系統之間的調用或回調導致的線上bug。
解決方案:
1.在聯調之前先將自己系統中本次項目所有用例測試完全。
2.編寫聯調用例,並且與多方測試人員溝通,確保聯調用例能全面覆蓋業務流程和任務。
3.在聯調時,確保所有業務流程是全部走通,且返回的值正確。
聯調測試與平時的功能測試重點和關注點都不同:
1.聯調測試保證業務流程是通的。
2.聯調測試時要檢查其他系統返回來的數據是否正確?檢查相同數據在各個系統存的值是否相同?
3.檢查推送的報文mapping與其他系統介面文檔中的mapping是否一致(映射)。
此次線上BUG分析再次驗證程序中的bug就是人為的,避免這些情況就需要開發人員在開發過程中多注意,培養良好的編程習慣,而測試人員在測試過程中需要將測試範圍考慮完全,盡量避免遺漏測試點,對於不清楚的點,不管是開發還是測試人員,都應該拿出來討論,切忌閉門造車,不懂裝懂。
大家可以一起來說說你們線上發生了哪些重大事故?讓你開始引以為戒了。想要了解更多測試內容可以前往51Testing軟體測試網-中國軟體測試人的精神家園詳解,使你收穫豐富的IT知識哈~
推薦閱讀: