很多時候我們能把大部分的Bug或一些部署等問題在業務上線之前就解決了,但由于某些因素,線上問題還是時而出現,影響業務生產甚至是公司效益。
避免線上問題的發生以及線上問題及時處理是測試人員的一項重要職責,如何快速地處理,最大限度地降低影響范圍,后續如何避免此類問題的發生,是我們需要復盤的重點內容。
一 為什么要復盤?
在發布上線后,對測試過程進行復盤,總結遇到的問題,對當時的解決方案進行探討。通過復盤,從而達到指導后續工作,減少重復踩坑。并在可以在個人復盤完成后,在部門內進行信息共享。每個人負責的項目雖然不同,但是測試思想確有共通之處。通過復盤分享,可以有效提升團隊整體測試經驗。
從質量保障的角度來說,針對線上問題進行復盤可以發現工作中的不足并持續改進,不斷提高線上的交付質量。
從團隊管理的角度來說,針對線上問題進行復盤也可以發現團隊短板并針對性的補齊技術體系,提高團隊效率。
從業務目標的角度來說,技術團隊作為成本中心,也需要不斷提高自身的交付產出質量,來支撐業務目標更好的達成。
二 故障復盤的步驟
故障復盤的實施步驟通常包含以下步驟:
理解故障的技術背景
梳理故障的整體情況
識別故障的直接/間接影響
梳理故障時間線
識別和分析故障觸發條件和關鍵環節
層層下鉆故障根因
分析解決方案
歸納推演出后續的跟進措施
總結經驗教訓
復盤的意義:
1.不是為了逃避現實,也不是為了炫耀,而是能真正解決某些問題。
2.檢驗完成的結果,回溯過程,總結利弊得失,做好資源沉淀。
3.為后續工作積累經驗,提升個人能力。
4.作為跟領導匯報的材料用,方便未來查詢。
GRAI復盤法:
G(Goal)回顧目標:回顧最初情景,列出當時的目標。
R(Rult)對比結果:列出目標完成情況,將結果和目標進行比較。
A(Analysis)分析過程:用今天的眼光和能力審視昨天的做法,學到對未來有用的信息。
I(Insight)總結規律:總結提煉出適用于類似情況的規律,合理進行模塊整理。
三 問題跟進前提
進行一切線上問題跟進的活動是基于測試人員本身對業務系統的熟悉程度,業務系統,也就是指業務和系統,除了業務之外,需要測試人員對業務所在的整體系統架構具備一定的熟悉程度,這里從上到下分應用層,軟件層,系統層來分析。
1、應用層
在應用層,我們主要關注的是我們能直接接觸到的內容。首先,我們需要了解自己負責的業務系統在整體業務系統中的位置。除了了解業務系統內部的情況,我們還需要了解外部系統如何調用我們的業務系統,以及我們的業務系統如何調用外部系統。
同時,我們也需要清楚最基本的關鍵要素:量。這包括了業務系統的訪問量,比如日訪問量等。此外,我們還需要熟悉核心接口或核心功能的最大并發量,以應對突然的高流量以及網絡攻擊等問題。
2、軟件層
在軟件層,我們主要涉及到數據、配置和相關組件。數據通常指的是數據庫,了解數據庫的部署情況可以幫助我們解決數據讀寫等問題。同時,對于基礎組件如nginx,涉及到負載均衡和跨域訪問等業務配置,了解這些信息可以幫助我們定位問題。此外,對于緩存的合理使用情況的分析也有助于我們分析持久化和數據庫使用方面的問題。還有一些相關的事項,比如JDK版本、JVM的啟動參數等等,也需要了解。
3、系統層
在系統層面,與硬件相關的內容更多。這包括業務系統的部署方式,是在單臺機器上還是分布式部署,具體所在的機房和網絡段,以及部署時使用的是物理機還是docker等虛擬化技術。同時,還需要了解部署機器的硬件信息,比如內存大小、CPU數量和磁盤類型大小等。
要做好線上問題跟進,就得對自己所負責的業務系統了如指掌,只有知己知彼,才能百戰百勝。
四 問題跟進策略
對于問題跟進的策略,可以分為四個環節,包括影響范圍評估、快速恢復、定位方法和問題復盤,接下來具體介紹這四個環節的內容。
策略1:影響范圍評估
在跟進問題時,首要步驟是評估問題的影響范圍,根據評估結果來設計應對策略和救火方案。評估過程中,首先要確定問題的類型,例如功能、性能或硬件方面的故障。例如,突然的大流量和大并發可能導致資源不足,造成許多待處理請求;內存故障可能導致資源效率下降等等。
對于功能上的故障,可以確定功能的重要性和優先級。對于核心功能的故障,需要盡快制定救火策略,減少影響范圍,并確保敏感功能和信息的安全穩定。根據問題的影響范圍采取相應措施。如果是面向用戶的功能,應盡量避免問題功能與用戶接觸;如果是與上下游業務相關的功能,應及時通知相關業務方采取規避措施。
在評估和制定救火策略時,必須迅速行動,因為問題的影響范圍和程度會隨時間擴大。建立良好的告警反饋體系至關重要,通過線上監控、客服反饋等手段實時了解問題情況,以有效降低時間帶來的影響。
策略2:快速恢復
在評估問題的影響范圍后,需要快速響應并恢復系統。一般情況下,問題的定位速度可分為快速定位和無法快速定位兩種情況。
對于可以快速定位問題的情況,如果是由業務功能導致的問題,通常會采取修復補丁的方式。但對于無法立即回收或發布版本的客戶端應用程序(如移動應用),可以通過后臺配置功能降級或關閉來處理。此外,一些問題可以通過調整配置參數來規避,也可以采取這種方式減小線上問題的影響范圍。
當無法快速定位問題時,就需要果斷行動,首要原則是將問題的影響范圍降到最低。可以通過回滾版本來規避問題,這是最有效且首選的方法,回滾版本可以切斷問題發生的原因,并保證最初的穩定業務。
當然,對于負載過高導致的問題,回滾版本并不能解決。這時通常采用重啟的策略,重新啟動后繼續觀察資源情況,通常是由于新版本的問題導致資源死鎖等情況,所以有必要時回滾版本和重啟策略可以同時使用。
如果問題涉及硬件方面,一般可以通過擴容來解決,例如增加硬盤、增加內存等,先提供足夠的資源,然后再考慮性能優化方案。
對于已進行功能配置的情況,可以先關閉。
或降級功能,然后在測試環境中繼續定位和解決問題,最后再發布修復版本。
策略3:定位方法
在處理線上問題時,降低影響范圍后的下一步是定位問題的原因。無論是功能問題、性能問題還是環境問題,日志是重要的定位工具。因此,通常要求業務日志要準確記錄,并及時告警錯誤。然而,也不能將所有內容都記錄在日志中,只有精確的業務日志才能為業務系統的穩定運行提供有效依據。通過排查日志信息來定位問題的原因是最有效的方法。
功能問題通常可以在測試環境中重新出現,盡量模擬線上的情況,包括數據和配置,這樣問題再次發生的概率就會增加,便于更容易地定位。
對于資源性能問題,可以通過監控告警日志和一些常用命令來獲取信息,然后采取相應的解決措施。
一旦定位到問題,就要迅速制定修復和上線方案,確保業務系統在穩定狀態下繼續運行。
策略4:問題復盤
經過上述過程的執行,我們還需要進行總結,也就是問題復盤。我們都不希望問題再次發生,因此通過復盤來總結經驗,可以提升大家規避問題和處理線上問題的能力。
在問題復盤中,我們可以分析問題的原因,是由人為因素導致的還是系統Bug,是遺漏的Bug還是新引入的Bug,以及是否由于外部系統數據流或組件不兼容等問題導致的。
處理問題的流程是否合理也是需要考慮的。有時候明明需要回滾版本卻沒有做,有時候又回滾了不必要的版本。在這方面需要權衡成本和方案的合理性,畢竟有時候版本很緊急,回滾會延遲進度,對業務來說并不是理想的結果。
如何避免類似問題再次發生也是問題復盤的核心環節。我們需要檢查監控是否完善,是否由于監控告警不及時或信息不完善而影響了整體救火進度。同時,在系統架構上是否可以進行性能相關的優化,建立起對系統的保護措施,例如過載保護、服務降級、數據解耦等。
問題的復盤對于團隊救火能力的提升是最有效果的,同時建立起相關文檔,加強團隊對業務以及系統的了解程度。
總結: 線上問題跟進是測試工程師的一項重要的職責,也是測試工程師的一門重要的能力,除了發現在研發測試階段的問題,我們需要去解決線上的問題,為業務系統保駕護航,對于測試工程師來說責無旁貸。
提升自己代碼能力,測試工具使用能力,寫用例能力的同時,也要提升自己應對問題處理的能力,豐滿自己在各個質量保證環節的能力,這樣才能成為一名優秀的測試工程師。
最后感謝每一個認真閱讀我文章的人,禮尚往來總是要有的,雖然不是什么很值錢的東西,如果你用得到的話可以直接拿走:
這些資料,對于【軟件測試】的朋友來說應該是最全面最完整的備戰倉庫,這個倉庫也陪伴上萬個測試工程師們走過最艱難的路程,希望也能幫助到你!