談到“策略”,這是如今很火、使用較多的一個詞。不光在IT領域,其他各個行業中也都有各種各樣的策略,如營銷策略、風險規避策略等。策略即謀略、手段、方法,表現為權宜的行動路線、指導原則或過程。
做事情講策略,這是一種智慧,是人們聰明起來的表現,但當越來越多的策略“概念化”的時候,我們不得不去思考我們到底要達到什么樣的目標,什么樣的策略才是我們需要的。
案例
引用網上一位哲人說的話:“概念只是為了方便人們理解和研究世界萬物事物而制造的工具,而最終結果將使概念不再需要,就如同莊子所說的得意而忘言”。語言就是一種包裝材料,它包裝的是某種含義。因為人類傳遞信息必須使用語言,所以我們在研究的時候不得不借助于這種包裝,但是當人的思維能力具備了打開包裝直接取得內部的含義的時候,語言就變得多余了。這時候再關注于語言和概念本身就成了買櫝還珠的現代版了。
因此,我們應該關注的不是概念本身,而是概念背后的含義。理解了含義,再冠予它什么樣的名詞頭銜,如“攻略“,對于我們都無關緊要了。而理解一個概念,我們可以靠WWH方法,即對概念的三個問題:Why、What、How。
好,言歸正傳,回到軟件性能測試策略中來。在性能測試過程中,只要有事情做,就會有策略,如設計用例有設計策略,執行時有執行策略,調優時還有調優策略。為了不產生混淆,我們要說明的是,在本節中討論的策略是性能測試設計策略。
Why(為什么會有不同的策略)
在軟件性能一節中,我們看到軟件的性能來自軟件對空間和時間的綜合方案,這種組合是很多的,因此用戶的軟件性能需求可能會多種多樣。對于軟件人員,我們做性能測試也要因地制宜,根據不同的性能需求,選擇不同的測試策略。
What(什么是性能測試設計策略)
驗證性能需求是測試目的,測試策略即已經被證明是行之有效的測試方法。
How(怎樣實施)
常見的性能測試方法有以下幾種:
1.負載測試
在這里,負載測試指的是最常見的驗證一般性能需求而進行的性能測試,在上面我們提到了用戶最常見的性能需求就是“既要馬兒跑,又要馬兒少吃草”。因此負載測試主要是考察軟件系統在既定負載下的性能表現。我們對負載測試可以有如下理解:
(1)負載測試是站在用戶的角度去觀察在一定條件下軟件系統的性能表現。
(2)負載測試的預期結果是用戶的性能需求得到滿足。此指標一般體現為響應時間、交易容量、并發容量、資源使用率等。
2.壓力測試
壓力測試是為了考察系統在極端條件下的表現,極端條件可以是超負荷的交易量和并發用戶數。注意,這個極端條件并不一定是用戶的性能需求,可能要遠遠高于用戶的性能需求?梢赃@樣理解,壓力測試和負載測試不同的是,壓力測試的預期結果就是系統出現問題,而我們要考察的是系統處理問題的方式。比如說,我們期待一個系統在面臨壓力的情況下能夠保持穩定,處理速度可以變慢,但不能系統崩潰。因此,壓力測試是能讓我們識別系統的弱點和在極限負載下程序將如何運行。
例子:負載測試關心的是用戶規則和需求,壓力測試關心的是軟件系統本身。對于它們的區別,我們可以用華山論劍的例子來更加形象地描述一下。如果把郭靖看做被測試對象,那么壓力測試就像是郭靖和已經走火入魔的歐陽峰過招,歐陽鋒蠻打亂來,毫無套路,盡可能地去打倒對方。郭靖要能應對住,并且不能丟進小命。而常規性能測試就好比郭靖和黃藥師、洪七公三人約定,只要郭靖能分別接兩位高手一百招,郭靖就算勝。至于三百招后哪怕郭靖會輸掉那也不用管了。他只要能做到接下一百招,就算通過。
思考
我們在做軟件壓力測試時,往往要增加比負載測試更多的并發用戶和交易,這是為什么?
3.并發測試
驗證系統的并發處理能力。一般是和服務器端建立大量的并發連接,通過客戶端的響應時間和服務器端的性能監測情況來判斷系統是否達到了既定的并發能力指標。負載測試往往就會使用并發來創造負載,之所以把并發測試單獨提出來,是因為并發測試往往涉及服務器的并發容量,以及多進程/多線程協調同步可能帶來的問題。這是要特別注意,必須測試的。
4.基準測試
當軟件系統中增加一個新的模塊的時候,需要做基準測試,以判斷新模塊對整個軟件系統的性能影響。按照基準測試的方法,需要打開/關閉新模塊至少各做一次測試。關閉模塊之前的系統各個性能指標記下來作為基準(Benchmark),然后與打開模塊狀態下的系統性能指標作比較,以判斷模塊對系統性能的影響。
5.穩定性測試
“路遙知馬力”,在這里我們要說的是和性能測試有關的穩定性測試,即測試系統在一定負載下運行長時間后是否會發生問題。軟件系統的有些問題是不能一下子就暴露出來的,或者說是需要時間積累才能達到能夠度量的程度。為什么會需要這樣的測試呢?因為有些軟件的問題只有在運行一天或一個星期甚至更長的時間才會暴露。這種問題一般是程序占用資源卻不能及時釋放而引起的。比如,內存泄漏問題就是經過一段時間積累才會慢慢變得顯著,在運行初期卻很難檢測出來;還有客戶端和服務器在負載運行一段時間后,建立了大量的連接通路,卻不能有效地復用或及時釋放。
6.可恢復測試
測試系統能否快速地從錯誤狀態中恢復到正常狀態。比如,在一個配有負載均衡的系統中,主機承受了壓力無法正常工作后,備份機是否能夠快速地接管負載?苫謴蜏y試通常結合壓力測試一起來做。
每種測試有其存在的空間和目的。當我們接手一個軟件項目后,在有限的資源條件下,選擇去做哪一種測試,這應該根據當前軟件過程階段和項目的本身特點來做選擇。比如,在集成測試的時候要做基準測試,在軟件產品每個發布點要做性能測試。
文章來源于領測軟件測試網 http://www.k11sc111.com/