孟祥豐
(渭南師范學院 陜西 渭南 714000)
軟件性能測試,作為軟件工程的一部分,隨著軟件生產(chǎn)的產(chǎn)業(yè)化運作應運而生,是軟件生產(chǎn)的一個動態(tài)監(jiān)控過程,對軟件開發(fā)全過程進行檢測,可以隨時發(fā)現(xiàn)問題、報告問題,并重新評估新的風險,設置新的監(jiān)控基準,并持續(xù)下去。軟件測試是軟件質(zhì)量控制的過程,是對軟件系統(tǒng)中潛在的各種風險進行評估的活動,其目的是監(jiān)測和排除缺陷,以確保軟件產(chǎn)品在可用性、功能性、可操作性等多方面滿足質(zhì)量需求。目前,軟件測試已經(jīng)由被動的以監(jiān)測和發(fā)現(xiàn)錯誤為目的發(fā)展到從軟件質(zhì)量控制(Software Quality Control,SQC)開始轉移到軟件質(zhì)量保證(Software Quality Assurance,SQA),使軟件測試從單純的缺陷檢測和發(fā)現(xiàn)覆蓋到整個軟件開發(fā)過程,避免了軟件開發(fā)過程中由于軟件需求和設計等方面的缺陷所帶來的巨大風險。一個典型的軟件過程可以分為測試需求分析、測試設計、測試執(zhí)行、缺陷和配置管理過程等許多個不同的階段。在軟件測試技術方面已經(jīng)被細化為單元測試、集成測試、系統(tǒng)測試、用戶驗收測試等不同的測試技術。而在對軟件產(chǎn)品質(zhì)量呼聲日高的今天,軟件性能測試技術尤為重要。
性能測試的目的不僅是發(fā)現(xiàn)軟件缺陷,還可能包括以下幾個方面:
1)驗證能力 這是性能測試中最簡單也是最常用的一個應用領域,典型的能力驗證問題會采用這樣的描述方式:“***系統(tǒng)能夠在***條件下具有***能力?”。通常情況下,企業(yè)在進行項目驗收階段要求能力驗證型的性能測試或者委托第三方軟件測試機構開展獨立的性能驗證,其主要特點是在已確定的生產(chǎn)環(huán)境中實際使用被測系統(tǒng),即這套系統(tǒng)能不能承受大量的并發(fā)用戶同時訪問?
2)規(guī)劃能力 這與1)有較大的不同,以規(guī)劃能力為目的的性能測試關注的是“應該如何才能使系統(tǒng)具有要求的性能能力?”或者“系統(tǒng)能否支持未來一段時間內(nèi)的用戶增長?”。因此,這種性能測試強調(diào)對系統(tǒng)當前性能的評估,通過評估可以在應用實際部署之前,預見系統(tǒng)負載壓力的承受能力。
3)調(diào)優(yōu)性能 性能調(diào)優(yōu)是以第一種或第二種為目的的性能測試實施后提供原始數(shù)據(jù)進而分析系統(tǒng)瓶頸和優(yōu)化為目的,因此3)常與其他的性能測試活動交雜在一起。該類性能測試需要在確定的基準環(huán)境下,采用基準負載,關注基準性能指標后,調(diào)整系統(tǒng)運行環(huán)境和實現(xiàn)方法,執(zhí)行測試,記錄測試結果進行分析,再調(diào)整、執(zhí)行、分析,不斷往復,直到系統(tǒng)性能達到要求為止。比如:用戶提出業(yè)務操作響應時間長,如何定位問題,調(diào)整性能?
現(xiàn)以Loadrunner為例,說明性能測試的一般步驟:
1)確定用戶要測試的業(yè)務。也就是通過需求分析,確定測試的目的和測試的性能指標(響應時間,并發(fā)用戶數(shù),吞吐量和資源利用率等)。
2)通過用戶對軟件的操作和Vugen的錄制功能記錄并生成虛擬用戶腳本。
3)修改腳本,確定腳本能夠回放成功。
4)在Controller中根據(jù)需求配置測試場景。包括虛擬用戶數(shù)、運行參數(shù)、用戶增長方式、測試循環(huán)方式、用戶退出方式和需要監(jiān)視的性能指標等。
5)執(zhí)行測試場景。Controller控制Load Generator對被測系統(tǒng)的加壓方式和行為,同時搜集被測系統(tǒng)各個環(huán)節(jié)的性能數(shù)據(jù)。Load Generator記錄最終用戶響應時間和腳本執(zhí)行日志,并將數(shù)據(jù)傳送到Controller中,由其進行結果的匯總。
6)借助Analysis分析測試數(shù)據(jù),設計調(diào)優(yōu)方案。
7)進行調(diào)優(yōu)測試,重復測試過程,直至符合系統(tǒng)性能測試的要求。
性能測試的一般流程如圖1所示。
圖1 軟件性能測試流程圖Fig.1 Processing diagram of software performance testing
在軟件性能測試的初始階段,首先應對業(yè)務模型和系統(tǒng)架構進行調(diào)研,收集測試需求,然后生成性能測試計劃。業(yè)務調(diào)研和系統(tǒng)調(diào)研,需要性能測試團隊提前了解被測試項目的業(yè)務功能和系統(tǒng)架構。其間,開發(fā)部門應協(xié)助提供被測系統(tǒng)相關的文檔和說明,如系統(tǒng)總體介紹、系統(tǒng)規(guī)格書、用戶使用手冊、網(wǎng)絡拓撲結構圖和系統(tǒng)配置說明、關鍵服務器及應用部署與配置等文檔。通過和業(yè)務部門協(xié)商明確本次測試針對哪些業(yè)務行為,制定此次測試的目標,細化測試的關注點和性能指標要求。通過以上內(nèi)容制定詳細的測試方案,并制定詳細測試計劃和各階段目標。軟件性能測試的方法可以根據(jù)測試目的的不同,選擇不同的方法,具體如表1所示。
表1 測試目的與測試內(nèi)容的對應關系Tab.1 The purpose of testing and testing items’correspondence
測試環(huán)境準備分為環(huán)境搭建和數(shù)據(jù)準備。
環(huán)境搭建包括被測試系統(tǒng)的硬件環(huán)境建立和軟件應用系統(tǒng)建立及基礎數(shù)據(jù)環(huán)境建立。只有在充分認識測試對象的基礎上,才知道每一種測試對象需要什么樣的配置,才有可能配置一種相對公平、合理的測試環(huán)境(這在性能對比測壓中尤其重要)??紤]到其它因素,如網(wǎng)絡鎖、網(wǎng)速、顯示分辯率、數(shù)據(jù)庫權限、容量等對測試結果的影響。如條件允許,我們最好能配置幾組不同的測試環(huán)境。同時必須保障被測試系統(tǒng)的業(yè)務可用性和功能的正確性,包括測試系統(tǒng)(如被測試項目的操作系統(tǒng)、中間件、數(shù)據(jù)庫、壓力測試控制臺、壓力測試發(fā)起工具等)的環(huán)境搭建、軟件的安裝;測試環(huán)境的網(wǎng)絡環(huán)境建立(如開放防火墻和網(wǎng)關等);最后進行測試環(huán)境可用性驗證。測試環(huán)境應該在架構上一致,測試用機的單元因子也必須和生產(chǎn)環(huán)境一致。
測試數(shù)據(jù)準備包括測試應用系統(tǒng)基礎數(shù)據(jù)準備,即需要按性能測試規(guī)模要求,準備足夠的、一定規(guī)模的基礎數(shù)據(jù),通常采用全量恢復生產(chǎn)數(shù)據(jù)的方式以達到和生產(chǎn)環(huán)境數(shù)據(jù)一致性的要求。在所有的測試中,測試數(shù)據(jù)的收集工作都是較為困難的,GIS軟件更是如此,每一種軟件都有它的文件格式,有的軟件還有幾種格式。在這種情況下,只能把第3方格式的數(shù)據(jù)轉換成每一種被測試軟件自已的格式。同時,還應對數(shù)據(jù)作一定的處理,如處理數(shù)據(jù)冗余,處理顯示風格等。如在測試時會更新數(shù)據(jù),操作前一定要備份數(shù)據(jù)。其外,還應評估數(shù)據(jù)格式和數(shù)據(jù)量對測試的影響,如有必要,應準備多組數(shù)據(jù)。最后,一定要檢查測試數(shù)據(jù)的有效性,避免損壞數(shù)據(jù)對測試結果的影響。測試數(shù)據(jù)的抽取,即按測試用例要求,嚴格按其數(shù)據(jù)約束條件,定義數(shù)據(jù)抽取策略和方法(如按數(shù)據(jù)類型事先寫好SQL)。測試數(shù)據(jù)準軟件測試技術應用,即按其抽取原則,從基礎數(shù)據(jù)中提取符合要求的測試數(shù)據(jù),作為測試程序(腳本)參數(shù)化數(shù)據(jù)。
測試中需要對服務器相應的性能計數(shù)器進行監(jiān)視,其監(jiān)視結果既是性能測試指標的一部分,又可以用于結果分析,協(xié)助確定引起性能問題的原因。主要監(jiān)視服務器端操作系統(tǒng)相關的計數(shù)器、應用服務器相關的計數(shù)器、數(shù)據(jù)庫相關的計數(shù)器等。
測試前期的準備工作紛繁復雜,做好測試準備工作,已是完成了測試工作的一大半,但要產(chǎn)生一份具有說服力的測試報告,還應正確把握測試的強度,保持測試的一致性,提高測試的精度。判斷軟件的好壞,要看軟件解決實際應用的能力,只有在一定的測試強度下,才能測試出各種軟件資源的消耗率,軟件運行的速度,軟件的穩(wěn)定性。通過對比在不同的測試強度下,不同軟件每一個功能模塊解決實際問題的能力和軟件運行的效率,我們才可能判斷出不同軟件的每一個模塊的強弱,甚至于整個軟件的優(yōu)劣。性能測試開始后,所有參數(shù)的輸入都應遵循統(tǒng)一的標準,無論是哪一個環(huán)節(jié),哪怕是一點點偏差,都應立即糾正,絕不能心存僥幸。要特別注意外部環(huán)境對測試結果的影響,如果在整個測試過程中,外部境不一致,如網(wǎng)速、機器內(nèi)存使用率不一樣,就有可能導致測試結果與實際情況有出入。
測試執(zhí)行階段可以劃分為兩個子階段,前一個階段的目的非常清楚,就是發(fā)現(xiàn)缺陷,督促大家就是找出缺陷。測試用例的執(zhí)行,應該是幫助我們更快地發(fā)現(xiàn)缺陷,而不是成為“發(fā)現(xiàn)缺陷”的障礙——使發(fā)現(xiàn)缺陷的能力降低。從理論上說,如果缺陷都找出來了,質(zhì)量也就有保證了。所以在這一階段,要不顧風險,就是發(fā)現(xiàn)缺陷,這樣不僅對開發(fā)團隊也非常有利,能盡早地修正大部分缺陷;對測試有利,測試效率高,后面的回歸測試也會穩(wěn)定,信心更充分。 在代碼凍結或產(chǎn)品發(fā)布前的稍后的子階段,目的是減少風險,增加測試的覆蓋度,這時測試的效率會低一些,以損失部分測試效率以極大降低風險、獲得更高質(zhì)量的收益。
性能測試報告和結果分析是在測試執(zhí)行完成以后,對性能數(shù)據(jù)進行采集結果收集工作和針對性能測試過程中暴露的問題進行分析的階段。性能測試報告是對性能測試過程中的監(jiān)控結果以及報表進行匯總,按照一定的模板整理出的一份結論性文檔。開發(fā)團隊和性能測試團隊應依據(jù)對性能測試實施過程中監(jiān)控和記錄的數(shù)據(jù)和表格,分析系統(tǒng)中存在的性能問題和程序缺陷。首先,最好從所有的測試數(shù)據(jù)中,篩選出具有代表意義的數(shù)據(jù),做出統(tǒng)計圖,然后和開發(fā)人員一起,認真分析數(shù)據(jù),找出軟件存在的問題,得出測試結論。其次,要針對在報告中闡述問題,分析其中的原因,提出解決或優(yōu)化方案。
以上對軟件性能測試方法和過程進行了簡單的分析和研究,但這只是其中冰山一角,總的說來,對軟件的性能測試有許多方法和嘗試,其中技巧和方法因軟件本身性質(zhì)和復雜程度而有所不同,并沒有什么固定的模式和方法。各種軟件性能測試,范圍大小不同,強度高底有別,但只要本著認真、客觀,科學的工作態(tài)度,遵循本文論述的方法,做好測試工作是不難的。本篇文章主要談的是軟件性能測試方面的問題,相信對其它方面的測試也有一定的借鑒作用。
[1]朱少民.全程軟件測試[M].北京:電子工業(yè)出版社,2007.
[2]韓慶良.軟件性能測試過程研究與應用[D].濟南:山東大學,2007.
[3]段念.軟件性能測試過程詳解與案例剖析[M].北京:清華大學出版社,2006.
[4]劉慧梅,徐華宇.軟件測試中代碼分析與插裝技術研究[J].計算機工程,2007,33(1):86-88.
LIU Hui-mei;XU Hua-yu.Research on code analysis and instrumentation in software testing[J].Computer Engineering,2007,33(1):86-88.
[5]李軍鋒,任世鵬.軟件可靠性及其測試分析[J].軟件導刊,2010,9(8):46-48.
LI Jun-feng,REN Shi-peng.Analysis on software reliability and its testing[J].Software Guide,2010,9(8):46-48.
[6]方海光.我國教育軟件價值評測研究[D].成都:中國科學院研究生院(成都計算機應用研究所),2006.
[7]陳紹英,夏海濤,金成姬.Web性能測試實戰(zhàn)[M].北京:電子工業(yè)出版社,2006.