軟件性能測試理論分析研究

文章摘要:通過軟件性能測試可以測算出當前系統可以承載的負荷,保證系統在實際的壓力下正常工作。本文主要闡述了軟件性能測試的分類和衡量指標,并提出了分析和調優的方法,最后羅列了一些常見的性能瓶頸和產生原因。

一、軟件性能測試的分類及衡量指標

軟件性能測試是系統測試的一種,在軟件質量模型中,軟件性能測試是屬于效率這一類的。對軟件的性能進行衡量,需要考慮軟件效率的時間特性、資源利用率及效率依從性。時間特性是指在特定的軟硬件條件下,軟件產品在運行功能時需要滿足的系統響應時間及吞吐率能力。資源利用率是指軟件產品在執行功能時需要滿足合適的數量和類別的軟硬件資源的能力。效率依從性是指軟件產品遵循與效率相關的標準或約定的能力。

軟件性能測試的最終目的是驗證軟件系統的各種性能指標是否滿足用戶需求及根據測試結果對系統中可能存在的性能瓶頸進行分析和優化。主要包括以下幾個方面:

1、對系統的負載能力進行評估。根據測試數據,可以對系統的內存、進程、磁盤、網絡等負載能力進行評估,并根據評估結果分析定位性能瓶頸,為性能的優化提供決策依據。

2、識別系統弱點。大量的負載可以評估系統在極端情況下的性能狀況,找到系統的薄弱點并進行修復。

3、系統調優。通過反復運行測試,對系統性能優化后的結果進行驗證,檢查其是否得到了預期的結果。同時,長時間運行測試,可能會導致內存泄漏、系統崩潰等問題的發生,揭示程序中隱含的問題或沖突。

4、驗證系統的可靠性、穩定性。在特定的負載情況下,長時間運行測試可以對系統的可靠性和穩定性進行驗證。

對一個軟件系統而言,性能主要包括軟件的資源占用率,系統的穩定性、可靠性等。本文中提到的軟件性能測試主要是通過自動化測試工具Performance Center模擬測試業務時正常、異常及峰值負載條件來對比模塊的各項性能指標進行測試。

軟件性能測試的方法很多,本文主要介紹以下四種類別的測試。

??? 1、負載測試(Load Testing)。指在不同的軟硬件及網絡環境下,運行一種或多種業務,通過對系統逐步增加負載的方式,對系統性能的變化進行測試,并確定系統在滿足各項性能指標的情況下,所能承受的各項閥值。

??? 2、基準測試(Benchmark Testing)。指模擬一定數量的虛擬用戶行為,在系統測評或調優過程中,根據測試出的基準數據運行相同的業務場景并對測試結果進行分析比較,以確定測試結果是否能對系統調優提供決策數據或對系統性能的改善提供幫助。

??? 3、壓力測試(Stress Testing)。指通過逐漸增加系統負載,確定在什么負載條件下系統性能處于失效狀態,并獲得系統所能承受的最大壓力數據,并根據測試數據對系統的壓力瓶頸進行定位及調優。壓力測試更強調在極端情況下系統的可靠性及健壯性。

??? 4?、并發測試(Concurrency Testing)。主要用來測試系統是否存在死鎖、數據錯誤及在并發用戶量大的情況下系統是否會出現頁面滯后、系統崩潰等故障。并發測試是軟件性能測試中最常用的測試方法,為了避免出現函數方法或數據庫等在并發下的錯誤,需要專門針對每個模塊進行并發測試。

對于一個應用系統來說,還需要對性能指標進行監控。衡量一個軟件系統性能的常見指標有:

1、響應時間(Response time)。對于網站系統來說,響應時間就是從點擊了一個頁面計時開始,到這個頁面完全在瀏覽器里展現計時結束的這一段時間間隔,響應時間越短越好.可以細分為服務器端響應時間、網絡響應時間、客戶端響應時間。響應時間描述如下圖所示。

軟件性能測試理論分析研究(圖1)

在軟件性能測試中一般是通過事務函數Transaction Response Time來統計響應時間。

2、吞吐量(Throughput)。吞吐量反映的是系統的處理能力,具體來說,就是指軟件系統在每單位時間內能處理多少個事務/請求/單位數據等。吞吐量的大小由負載或行為方式來決定。在Performance Center中,吞吐量反映單位時間內系統處理的事務數目。一般以TPS(Transaction Per Second)即每秒事務數表示。

3、資源使用率(Resource utilization)。指系統在負載情況下軟硬件上各種資源的占用情況。例如,CPU占用率、內存使用率、磁盤I/O等。

4、并發用戶數(Concurrent users)。并發用戶數用來度量多個用戶同時訪問同一個應用、同一個模塊或者數據記錄時是否存在死鎖或者其他性能問題,反映了系統的并發處理能力。

5、點擊數(Hits per second)。點擊數是按照客戶端向Web Server 發起了多少次 HTTP請求計算的。

二、性能分析及調優原理

軟件性能測試的目的是評估當前系統性能指標,根據測試結果對性能瓶頸進行定位及優化,以預防規避性能風險。在進行系統的調優過程中,好的策略是按照由易到難的順序對系統性能進行調優。性能分析主要是根據測試結果對可能導致性能瓶頸的原因進行定位,而調優則是解決發現的性能瓶頸??梢酝ㄟ^以下兩種方法來對性能進行調優:

(一)、性能分析法

1、指標達成法。指根據用戶需求,將得出的測試結果與之進行比較,如果能夠滿足用戶需求則測試通過。如果不滿足,則對測試數據進行分析定位,并解決查找出的性能問題,直到系統性能在用戶可接受的范圍內。

2、最優化分析法。指根據測試數據,對性能瓶頸進行分析及優化,以使系統資源得到充分利用,使系統的處理能力最大化。

性能調優方向如下圖所示:

軟件性能測試理論分析研究(圖2)


1)應用程序診斷。通過模擬大量用戶的操作對系統形成負載,根據測試結果對應用程序進行檢驗,看其是否能夠滿足用戶的性能需求。如果滿足需求則測試通過。反之,則對測試數據進行分析定位并找出解決瓶頸的方案,以保證系統的可靠性、穩定性。

2)系統調優。主要包括對獨立的瓶頸進行調優及對軟硬件迭代調優。在測試過程中,模擬大量用戶形成負載,并且對系統的軟硬件環境進行迭代測試,根據測試結果找出影響性能的要素,對其進行優化后最終提升系統的性能。對系統軟硬件進行迭代調優是一個循序漸進的過程。

(二)、調優的基本步驟

對系統進行分析及調優的步驟主要包括:

1、確定詳細的軟件性能測試計劃、方案和目標,并按優先級排列。

2、利用合適的軟件性能測試工具執行測試,并對測試結果進行分析和整合。

3、拆分分布式系統的各個組件,如Web層、業務層、集成層、網絡層等,分別進行調優。

4、按照軟件性能測試 -> 定位瓶頸 -> 性能調優 -> 再次執行測試的方法對系統進行逐步調優。

5、確定影響系統性能的主要因素:CPU、Memory、Process還是I/O。

6、找出主要的性能瓶頸,首先處理最容易的瓶頸問題,再重復測試。

7、提高 CPU的性能:例如更優化的算法、更高效率的代碼、優化的SQL 等,以減少短期生存的對象。

8、提高內存性能:主要是減少長期生存的對象。

9、提高I/O性能:重新對應用進行設計,減少輸入輸出的交互。

10、性能優化完成之后,進行 QA 測試。

11、在代碼中對優化的地方進行記錄,并對舊代碼進行注釋。

?

三、常見的性能瓶頸

1、硬件上的性能瓶頸。

主要指RAM、CPU方面的瓶頸。分為服務器操作系統瓶頸;Web服務器、數據庫等中間件瓶頸;服務器硬件瓶頸;數據庫設計、算法、業務邏輯、SQL語句等的應用瓶頸及網絡瓶頸。例如,在測試過程中發現數據庫服務器CPU的持續利用率超過90%以上,此數據庫服務器需要5個CPU、10GB 內存,這時可以認為系統出現了硬件上的性能瓶頸。

2、應用軟件上的性能瓶頸。

一般指的是應用服務器、Web服務器等應用軟件,還包括數據庫系統。例如,在Weblogic平臺上配置了JDBC連接池的參數,最大連接數為50,最小連接數為5,增加量為10。在測試時發現,當負載增加時,現有的連接數不足,系統會動態生成10個新的連接,導致交易處理的響應時間大大增加。這時可以認為在應用軟件上出現了性能瓶頸。

除此之外,還包括應用程序上的性能瓶頸、操作系統上的性能瓶頸、網絡設備上的性能瓶頸等.性能瓶頸的分析及定位十分復雜,本文只對硬件上的性能瓶頸和應用軟件上的性能瓶頸進行簡單介紹。

四、常見性能問題及成因

1、常見的性能問題有以下幾個特征:

1)隨著時間推移越來越慢:在負載不變的情況下,隨著時間的推移,系統可能由于緩存中數據量大或者達到某個閾值,導致頁面滯后,系統被鎖定或出現大量錯誤而崩潰。

2)隨著負載增加越來越慢。在負載增加的情況下,每增加若干用戶,系統響應時間慢,在用戶較少的情況下,系統響應時間相對較快。

3)鎖定:在系統出現掛起或錯誤的情況下加速出現鎖定,直到系統完全鎖定。通常需要重啟系統才能解決。

4)突然混亂。系統運行一直都較為正常,在持續運行或者負載量較大的情況下,系統突然出現大量錯誤或鎖定。

2?、常見性能問題及成因包括:

1)資源泄漏。主要是CICS 事務網關連接、JDBC語句等泄露導致了橋接層及對后端系統產生了影響。并隨著時間的推移,出現鎖定或系統崩潰等問題。

成因:遺漏了finally塊,沒有用close()關閉外部資源的對象。

2)內存泄露。分為線性內存泄漏和指數方式內存泄漏。內存泄露會隨著時間推移及負載增多而增加系統內存消耗降低系統性能。

成因:原因較多,主要與資源泄露及向集合(Vector、HashMap)中加入不刪除的元素有關。

3)外部瓶頸問題。隨著負載的增加,后端運行持續緩慢,減緩了應用服務器及應用程序的響應時間.或者應用程序通過大量請求濫用后端系統。

成因:后端系統不合理或者冗余的工作請求??梢酝ㄟ^咨詢專家、分解工作請求等方法解決。

4)線程阻塞、死鎖/活動鎖?!矮@得順序”的問題或線程遇到同步阻塞,隨著負載量的增加,系統會出現掛起、鎖定或異常錯誤。

成因:鎖定策略及“獲得順序”的算法不合理。

5)中間層問題。數據庫連接池管理及JDBC驅動程序橋接層不合理,隨著負載的增加系統持續緩慢。在早期階段很容易與外部瓶頸混淆。

成因:有可能是橋接層和外部系統的版本不兼容造成的。

6)內部資源瓶頸。對象池、線程池等內部資源稀缺,隨著負載的增加系統持續緩慢并且出現掛起或異常錯誤。

成因:分配不足或過度使用??梢愿鶕A期的最大負載量,通過提高對象池、線程池的最大尺寸等方法解決。

軟件性能測試對于確保系統的正常運行有著重要的意義。因此,分析和研究產生性能瓶頸的成因,有助于與我們更好的理解軟件性能測試,解決性能瓶頸問題,確保系統健康有序的運行。

?

聯系我們

電話:400?108?9880?

網址:www.svtest.cn

? 郵箱:kj-sv@svtest.cn

傳真:020-31707367


聯系地址
廣州:廣州開發區科學城玉樹創新園?J?棟?103?房
北京:北京市海淀區永定路?15?號院南門?208?室
長沙:長沙市雨花區保利東郡?8?棟?1803?房
深圳:深圳市南山區西麗深圳大學城學苑大道?1068?號(深圳先進院內)
石家莊:石家莊市鹿泉區山尹村鎮濱海路19號2號樓


相關推薦

09-21
2022
數字診療裝備可靠性工程技術》介紹了數字診療裝備可靠性的背景、基礎知識、設計方法、失效建模分析方法、仿真計算分析方法、測試技術,圍繞“十三五”期間國家“數字診療裝...
09-20
2022
空調澳大利亞澳大利亞標委會發布一系列新版標準,包括:● AS/NZS 60335.1:2022 家用及類似用途電器-安全 第1部分:一般要求(對應IEC 6.0...