姜文 劉立康


摘 ?要:在軟件維護階段,需要處理軟件存在的各種問題,其中軟件補丁是軟件維護的核心環節。首先介紹了軟件補丁的相關概念與分類。詳細敘述了軟件補丁測試,內容包括補丁程序開發與測試、補丁包制作、補丁包測試;介紹了補丁包測試過程中遇到的幾個典型問題;最后介紹了一個補丁測試案例,敘述了軟件補丁測試的完整過程。工作實踐表明軟件補丁測試是保證軟件補丁質量的重要步驟。做好補丁測試有助于的保證與提升軟件產品質量。
關鍵詞:軟件維護;熱補丁;補丁測試
中圖分類號:TP311.5 ? ? 文獻標識碼:A
1 ? 引言(Introduction)
軟件維護[1-4]是軟件生命周期的最后一個環節,是持續時間最長的環節。應用軟件維護的成本是開發成本的四倍左右。在軟件交付用戶使用后,需要做好軟件維護工作,不斷處理和解決用戶在軟件使用過程中提出的各種問題,從而延長軟件產品的使用壽命。
軟件補丁是軟件維護的核心環節,補丁測試是保證軟件補丁質量的重要環節。文中介紹了軟件補丁的相關概念與分類、軟件補丁測試過程,最后介紹了一個軟件產品熱補丁測試的工作案例。
2 ?軟件補丁的相關概念和分類(Related concepts and classification of software patch)
2.1 ? 軟件補丁的相關概念
(1)補丁問題
補丁問題是軟件在客戶局點使用過程中發現的軟件缺陷問題,或者軟件產品研發部門自行對軟件產品進行的自主改進問題,這些問題需要修改軟件代碼才能解決。
(2)補丁程序
補丁程序是為了修復補丁問題開發的軟件代碼,每個補丁問題都有對應的補丁程序,這種小程序俗稱“補丁”。過補丁程序修改或者更新軟件,處理補丁問題稱為“打補丁”。
(3)補丁包
軟件企業會定時發布補丁包解決客戶局點存在的軟件缺陷,通常一個補丁包中包含處理多個補丁問題的補丁。對于需要客戶局點緊急處理的補丁問題,也可以發布由單個補丁組成的應急補丁包。
2.2 ? 補丁問題來源
軟件補丁問題來源主要有客戶局點使用過程中發現的問題、研發部門內部測試發現的問題、軟件產品自主改進、客戶定制需求、軟件安全性加固、在研版本同步改進等方面的問題。
2.3 ? 軟件補丁分類
根據軟件補丁實施方式,軟件補丁可以分為冷補丁、熱補丁。
(1)冷補丁
開發工程師編寫補丁程序,提交版本庫,對軟件產品的整個工程文件進行重新編譯,生成軟件補丁版本。在需要在設備上停掉原有的軟件版本,重新安裝軟件補丁版本。
軟件冷補丁包實際上是指打了補丁之后的軟件補丁版本,通過替換原有的軟件版本來處理補丁問題。
(2)熱補丁
熱補丁[5-8]安裝的過程中,并不需要停止軟件系統運行。通常熱補丁適用的軟件系統是廣泛使用的實時操作系統,虛擬機化軟件Openstack上也支持實施熱補丁。
熱補丁能夠在不停止應用軟件運行的情況下實施補丁安裝,同時也支持在軟件產品版本升級過程中以靜默安裝方式實施補丁安裝。靜默安裝方式是指軟件在模擬環境中加載熱補丁包,然后在實際的使用環境中替換原來的軟件版本。
軟件熱補丁包通常由多個補丁程序(函數)組成,通過加載熱補丁包替換當前軟件中的對應函數來處理補丁問題。
3 ? 軟件補丁測試(Software patch testing)
軟件補丁測試主要包括補丁程序開發與測試、補丁包制作、補丁包測試。
3.1 ? 補丁程序開發與測試
(1)提交補丁問題單
通常由軟件客戶或者軟件售后工程師提交補丁問題單。
(2)補丁問題復現
測試工程師根據補丁問題根因、發生的問題軟件版本。搭建補丁測試環境,復現補丁問題。問題復現之后,由系統工程師與開發工程師確認補丁問題已正確復現。
(3)補丁問題澄清
開發工程師分析補丁問題發生的原因,并給出問題解決方案。由系統工程師負責補丁問題澄清,向開發工程師、測試架構師、測試工程師,以及資料工程師講解補丁問題的現象與解決方案。資料工程師完成補丁資料編寫。
(4)補丁程序開發
開發工程師編寫補丁程序代碼編寫,對代碼進行靜態測試和單元測試,代碼評審完成后提交版本庫。
(5)補丁問題測試用例設計
測試架構師完成補丁問題測試用例設計,測試工程師編寫自動化測試腳本。進行補丁測試用例和自動化腳本評審,系統工程師、開發工程師、測試架構師和測試工程師參與評審工作。
(6)補丁程序測試
測試工程師搭建測試環境,下載包含補丁程序的版本包,測試補丁程序的功能。然后連跑自動化腳本,對版本包進行回歸測試,檢測新增加的補丁程序不會影響版本包中其他代碼的功能。若發現問題,與開發工程師共同定位處理。
3.2 ? 補丁包制作
(1)制定補丁計劃
應用軟件補丁包是定期發布的,確定補丁包的版本號之后。補丁版本經理收集需要合入補丁包的補丁問題;主持制定補丁計劃,補丁計劃主要包括補丁包需要合入的補丁問題列表、每個補丁程序的開發和測試工作安排。
(2)設計開發補丁程序
系統工程師負責軟件補丁技術設計,完成需求設計、架構設計和軟件代碼詳細設計。將設計方案以規格文檔形式提供給開發工程師。開發工程師負責開發補丁程序。
(3)補丁程序測試
測試經理根據補丁計劃,準備測試環境,將補丁問題單分配給測試工程師處理,完成補丁程序的測試工作。
(4)制作補丁包
單個軟件補丁程序的開發完成后,軟件補丁程序合入版本庫,對更新后軟件源代碼編譯生成新版本軟件產品的進程文件。將該進程文件與修改后的相關配置文件一起打包生成補丁包。通常在Linux操作系統下使用的補丁包制作成*.tar包,Windows操作系統下使用的補丁包制作成*.rar包。
可以通過持續集成工具完成更新代碼、軟件進程文件編譯和補丁包出包。持續集成工具可以執行冒煙測試初步驗證補丁包的基本功能,提高補丁包測試的效率。
3.3 ? 補丁包測試
補丁包制作完成后,補丁包由版本經理內部發布。補丁問題單提交測試經理,補丁包測試不僅包含功能測試,還要完成補丁包性能和升級測試。
(1)功能測試
測試工程師從補丁包歸檔路徑下,取出補丁包,將補丁包安裝到執行補丁問題復現的環境上,首先觀測補丁版本號是否正確,根據測試架構師給出的補丁測試用例進行測試,確保存在的問題已被解決,并沒與引入新問題。如果發現新問題,知會該問題的軟件開發工程師,問題定位郵件抄送版本經理、補丁測試組長、補丁開發組長、系統工程師與測試架構師。開發工程師負責定位發生的問題是否是軟件缺陷。
(2)性能測試
測試環境安裝補丁包,測試架構師制定性能測試用例,測試工程師執行補丁性能測試;將重點的性能指標(如性能背景下的性能規格、CPU占用率、資源占用率等)與基線版本比較是否保持一致,如果與基線版本的指標有差異則需要開發工程師定位處理軟件性能問題。
(3)升級測試
補丁升級測試,測試軟件產品可以正常的安裝補丁,也可以正常的回退補丁,安裝與回退之后業務功能正常。基線版本安裝之后執行基本功能測試,基本功能測試運行正常。上傳補丁包,進行升級前檢查(如環境狀態、補丁包是否正確上傳、是否有異常告警等)檢查通過之后,進行軟件補丁安裝,安裝之后驗證軟件基本功能。執行回退測試,正常回退之后需要驗證基本功能是否正常。升級測試過程中的升級前檢查報告、升級報告與回退報告均需要作為補丁測試的交付件存留。
(4)自動化連跑驗證
補丁包功能、性能、升級測試完成之后,自動化工廠測試工程師負責搭建補丁測試環境,下發全量軟件功能的特性腳本,完成自動化功能驗證。連跑完成之后,收集自動化連跑結果,將運行失敗的腳本推送給測試工程師進行失敗分析,失敗分析結果有疑似軟件缺陷導致的腳本失敗,需要發給軟件開發工程師進行定位,確保補丁包沒有引入新問題。
3.4 ? 測試回顧與驗收
補丁包測試工作完成之后,測試組長組織進行補丁包測試回歸與驗收。版本經理、開發組長、系統工程師、開發工程師、測試架構師和測試工程師參與回顧與驗收工作。總結補丁包開發測試過程中的優缺點。確認補丁包測試結果的準確性。驗收工作完成之后,可以正式發布補丁包。
4 ?補丁包測試過程中的幾個典型問題(Several typical problems during patches package testing)
在補丁包測試過程中遇到如下一些典型問題。
4.1 ? 熱補丁靜默升級和軟件升級工具不適配問題
測試工程師N對云化通信軟件熱補丁包5.19.0版本的熱補丁SPH203進行靜默升級驗證,當軟件版本部署完成,并完成升級前的產品功能驗證,打開軟件升級—補丁安裝工具準備啟動軟件升級時,發現軟件升級工具頁面上不能正常勾選待升級的軟件。經過軟件開發工程師確認,發現該軟件版本沒有對軟件升級—補丁安裝工具進行適配處理。如果該軟件版本進行升級,必須在軟件升級—補丁安裝工具上進行規避處理。經過規避處理之后,測試工程師順利完成補丁包靜默升級驗證。
4.2 ? 媒體消息環路時延閾值指標未上報問題
測試工程師J對云化通信軟件熱補丁包5.19.1版本的熱補丁SPH205進行媒體消息環路時延閾值指標測試,該問題屬于性能測試問題。通過NTE工具運行性能測試套來模擬同時進行多路呼叫的場景,并通過MML命令將環路時延閾值設置為250ms、500ms、1000ms及閾值不設限的場景。測試工程師在進行測試過程中發現這四個場景下呼叫正常,但是均沒有任何閾值上報,聯系該補丁問題的開發工程師定位之后,發現通過NTE工具模擬呼叫建立之后的媒體流使用的是默認的RTP流,而需要統計的媒體流為RTCP流。發送的媒體流修改為RTCP流之后,環路時延閾值指標可以正常上報。
4.3 ? 第三方軟件導致的安全漏洞問題
客戶局點Q對某大型硬件通信軟件冷補丁包V2R009C10SPC126采用綠盟掃描工具掃描,發現第三方軟件OpenSSL 0.9.8w存在安全漏洞。測試工程師W負責問題重現和處理,搭建測試環境之后,測試過程中先在產品的WEB頁面通過網頁抓包工具確認目前使用的OpenSSL 1.0.1c版本是已經解決安全漏洞的新版本,接下來進行產品基本業務測試與性能基本場景驗證;最后針對產品進行綠盟安全掃描,并對綠盟掃描結果進行分析,確認軟件使用的低版本OpenSSL 0.9.8w相關漏洞問題已經被解決。但是軟件使用高版本OpenSSL 1.0.1c之后,掃描出了新的安全漏洞,將新增漏洞反饋給開發工程師之后,開發工程師經過排查產品源碼確認該漏洞所描述的場景,軟件產品未使用,可以看作掃描誤報。測試工程W將該分析結論歸納到產品安全分析結果庫中。
5 ? 補丁測試案例(Case study of software patching)
以下介紹一個熱補丁案例,案例中只介紹軟件補丁測試的相關內容。
5.1 ? 制定補丁計劃
某通信軟件產品S,SPH206補丁版本計劃合入10個補丁問題,如表1所述。
5.2 ? 補丁問題復現與補丁程序測試
(1)補丁問題復現
補丁開發工程師向測試工程師講解該補丁問題觸發的背景、問題原因。測試工程師在測試環境上分別完成10個補丁問題的復現,問題復現完成之后與每個問題的開發工程師確認補丁問題,補丁問題成功復現之后,將問題復現場景如實記錄到測試交付件中。
(2)補丁程序測試
在測試環境安裝基線軟件版本之后加載SPH206補丁,執行測試用例,如果測試結果與用例預期相符,則表示補丁問題已經被解決;如果測試結果與用例預期不相符,則需要聯系補丁問題對應開發工程師定位處理。并將補丁測試過程記錄下來,作為補丁測試的交付件。
5.3 ? 補丁包測試
(1)制作補丁包
將10個補丁程序合入補丁包,在模擬的軟件環境中安裝軟件版本,在線運行。加載補丁包,開始補丁包測試。
(2)性能測試
軟件產品的性能測試使用華為自研的性能測試工具NTE,性能自動化腳本連跑過程中spider工具會自動調用NTE工具執行自動化性能測試,并將統計指定模塊的CPU占用率、資源占用,以及丟包率統計結果自動寫入excel文件。
性能自動化腳本連跑之后,需要分析CPU占用率、資源占用,以及丟包率是否符合要求;是否出現模塊復位,以及不應該出現的告警等。一旦有異常告警、CPU占用率、資源占用,以及丟包率不正確的情況,需要及時聯系開發工程師進行定位處理。
(3)升級、回退與配套測試
補丁配套測試是指在升級前、升級后,以及回退之后完成基本功能測試。
補丁升級方式分為補丁包升級與靜默升級。補丁包升級方式是在客戶局點的軟件版本上通過升級工具加載補丁包實現補丁版本升級。靜默升級方式是將補丁包與待升級的軟件版本包一起上傳之后,通過升級工具完成軟件版本補丁包安裝升級。
升級驗證,完成升級之后,查看環境上是否有新增的告警信息,完成升級之后的基本業務驗證。回退驗證,完成補丁回退,也要完成基本業務驗證。
(4)自動化腳本連跑測試
通過自動化功能腳本連跑來完成對安裝SPH206補丁包的軟件版本進行功能驗證。自動化工廠的測試工程師搭建測試環境、自動化腳本連跑測試。
工作實踐表明軟件做好補丁測試工作,對于保證軟件補丁質量是非常重要的。
6 ? 結論(Conclusion)
軟件補丁的開發與測試是軟件維護的重要組成部分,在軟件維護中占有很重要的一席之地。工作實踐表明軟件補丁測試是保證軟件補丁質量的重要方法。軟件補丁的測試過程是不斷發現和解決客戶局點各種問題的過程,不斷擴展功能和提升軟件性能的過程。做好軟件補丁測試工作不僅有助于的保證與提升軟件補丁版本的質量,同時也為開發軟件產品新版本提供了良好的基礎。
參考文獻 (References)
[1] Qi Z,Long F,Achour S,Rinard M.An analysis of patch plausibility and correctness for generate-and-Validate patch generation systems[C].In:Proc. of the 2015 Int' l Symp. on Software Testing and Analysis.ACM Press,2015:24-36.
[2] Long F,Rinard M.An analysis of the search spaces for generates and validates patch generation systems[C].In:Proc. of the IEEE/ACM 38th Int' l Conf. on Software Engineering(ICSE).IEEE,2016:702-713.
[3] Tan SH,Yi J,MechtaeV S,Roychoudhury A.Codenaws:A programming competition benchmark for evaluating automated program repair tools[C].In:Proc. of the 39th Int' l Conf. on Software Engineering Companion.IEEE,2017:180-182.
[4] 李斌,賀也平,馬恒太.程序自動修復:關鍵問題及技術[J].軟件學報,2019,30(2):244-265.
[5] 姜文,劉立康.基于VXWORKS系統的熱補丁技術研究[J].計算機技術與發展,2017,27(3):18-22.
[6] 姜文,劉立康.Oracle數據庫補丁問題研究[J].電子設計工程,2014,22(20):10-13.
[7] 姜文,劉立康.應用軟件維護中的補丁開發與管理[J].計算機技術與發展,2015,25(11):11-16.
[8] 姜文,劉立康.軟件產品維護階段的缺陷問題管理[J].計算機技術與發展,2016,26(12):35-44.
作者簡介:
姜 ?文(1986-),女,碩士,高級工程師.研究領域:圖像處理,軟件工程和網絡通信.
劉立康(1962-),男,碩士,副教授.研究領域:數字通信,圖像處理和軟件工程.