實戰篇 近期線上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知識哈~


推薦閱讀:

TAG:軟體測試 | Bug修復 | 軟體開發 |