軟件測(cè)試 | 性能調(diào)整基礎(chǔ)
在性能測(cè)試工作中經(jīng)常會(huì)提到“性能調(diào)優(yōu)”或者“系統(tǒng)調(diào)優(yōu)”等概念,實(shí)際上“性能調(diào)優(yōu)“或者”系統(tǒng)調(diào)優(yōu)”都屬于性能調(diào)整的范疇。性能調(diào)整是比性能調(diào)優(yōu)更準(zhǔn)確的說(shuō)法,例如可能為了讓某些部分“更優(yōu)”而把某些部分調(diào)得“不優(yōu)”。
所謂性能調(diào)整是為了改變系統(tǒng)特性而對(duì)系統(tǒng)軟件或者硬件進(jìn)行的修改,性能調(diào)整不是測(cè)試人員的職責(zé),性能測(cè)試工程師的主要任務(wù)是主要任務(wù)是發(fā)現(xiàn)定位性能問(wèn)題。對(duì)于性能測(cè)試中發(fā)現(xiàn)的問(wèn)題,通常由性能測(cè)試工程師、DBA、系統(tǒng)管理員、開(kāi)發(fā)人員共同來(lái)解決,但是對(duì)于測(cè)試人員,了解調(diào)整的相關(guān)知識(shí)則是十分必要的。
1)確定問(wèn)題
通常情況下,首先確定系統(tǒng)是否存在問(wèn)題,并對(duì)問(wèn)題進(jìn)行正確的定位,重點(diǎn)是發(fā)現(xiàn)系統(tǒng)瓶頸。通常,確定系統(tǒng)問(wèn)題從下面幾個(gè)方面入手。
應(yīng)用程序代碼:通常情況下,很多程序的性能問(wèn)題都是寫出來(lái)的,因此對(duì)于發(fā)現(xiàn)瓶頸的模塊,應(yīng)該首先檢查一下代碼;
數(shù)據(jù)庫(kù)配置:數(shù)據(jù)庫(kù)配置經(jīng)常會(huì)引起整個(gè)系統(tǒng)運(yùn)行緩慢,一些諸如Oracle的大型數(shù)據(jù)庫(kù)都是需要DBA進(jìn)行正確的參數(shù)調(diào)整才能投產(chǎn)的。
操作系統(tǒng)配置:操作系統(tǒng)配置不合理也可能引起系統(tǒng)瓶頸。
硬件設(shè)置:磁盤速度、內(nèi)存大小等都是容易引起瓶頸的原因,因此這些都是分析的重點(diǎn)。
網(wǎng)絡(luò):網(wǎng)絡(luò)負(fù)載過(guò)重會(huì)導(dǎo)致網(wǎng)絡(luò)沖突和網(wǎng)絡(luò)延遲。
同時(shí),還要對(duì)系統(tǒng)的使用情況進(jìn)行調(diào)查,例如,以下幾種情況。
是否聽(tīng)到了很多用戶的抱怨?
是否某些操作的響應(yīng)時(shí)間會(huì)隨著時(shí)間越來(lái)越長(zhǎng)?
CPU的使用率是否很低而I/O的使用率卻很高?
使用過(guò)程中性能是否穩(wěn)定?
系統(tǒng)性能問(wèn)題不是顯而易見(jiàn)的,要進(jìn)行仔細(xì)的查找才能夠進(jìn)行正確的定位。
2)確定原因
確定系統(tǒng)存在問(wèn)題后就要仔細(xì)分析,確定引起問(wèn)題發(fā)生的原因。確定原因很大程度上靠的是個(gè)人經(jīng)驗(yàn),涉及的知識(shí)有操作系統(tǒng)、數(shù)據(jù)庫(kù)、網(wǎng)絡(luò)和程序開(kāi)發(fā)等許多方面。
和確定性能問(wèn)題一樣,確定原因仍要廣泛地搜集信息。通常要進(jìn)行如下的分析。
問(wèn)題的影響是什么,是響應(yīng)時(shí)間還是業(yè)務(wù)吞吐量,或者是其他問(wèn)題?
是大多數(shù)用戶還是少數(shù)用戶遇到了問(wèn)題,如果是少數(shù)用戶,這幾個(gè)用戶與其他用戶的操作有什么不同?
系統(tǒng)資源監(jiān)控的結(jié)果是否正常:CPU的使用是否到了極限?I/O情況如何?
問(wèn)題是否集中在某一類模塊中?
是客戶端還是服務(wù)器出現(xiàn)了問(wèn)題?
系統(tǒng)硬件配置是否夠用?
是否實(shí)際負(fù)載超過(guò)了系統(tǒng)的負(fù)載能力?
是否未對(duì)系統(tǒng)進(jìn)行優(yōu)化?
通過(guò)這些分析以及一些具體系統(tǒng)相關(guān)的問(wèn)題,可以對(duì)系統(tǒng)瓶頸有更深入的了解,進(jìn)而分析出真正的原因。
3)確定調(diào)整目標(biāo)和解決方案
在分析出問(wèn)題的原因后,測(cè)試人員和其他系統(tǒng)調(diào)整人員首先要確定調(diào)整目標(biāo),然后設(shè)計(jì)解決方案。確實(shí)調(diào)整目標(biāo)的主要作用是明確何時(shí)停止調(diào)整系統(tǒng),否則工作將永無(wú)盡頭。
每個(gè)系統(tǒng)都有不同的特點(diǎn),因此調(diào)整目標(biāo)可能不同。例如,下面這些都是系統(tǒng)的調(diào)整目標(biāo)。
提高系統(tǒng)吞度量
縮短響應(yīng)時(shí)間
更好地支持并發(fā)
設(shè)計(jì)解決方案的主要依據(jù)就是這些調(diào)整目標(biāo),有了明確的方案和目標(biāo),就可以進(jìn)行后面的工作了。
4)測(cè)試解決方案
實(shí)施解決方案后,就要對(duì)方案進(jìn)行測(cè)試。測(cè)試人員可以使用以前的測(cè)試場(chǎng)景來(lái)進(jìn)行測(cè)試,驗(yàn)證系統(tǒng)是否解決了性能問(wèn)題。測(cè)試解決方案盡量在仿真測(cè)試環(huán)境下進(jìn)行,因?yàn)樵谏a(chǎn)環(huán)境下可能會(huì)帶來(lái)破壞,除非充分估計(jì)了測(cè)試的風(fēng)險(xiǎn),并且準(zhǔn)備了充分的補(bǔ)救方案。
5)分析調(diào)整結(jié)果
性能調(diào)整的最后一步是分析調(diào)整結(jié)果,如果沒(méi)有解決問(wèn)題,則要重復(fù)前面的工作。在測(cè)試系統(tǒng)調(diào)整方案過(guò)程中,要經(jīng)常分析所做的工作,例如沒(méi)能準(zhǔn)確定位問(wèn)題或調(diào)整方案不正確,預(yù)期目標(biāo)可能不會(huì)達(dá)到,盡早發(fā)現(xiàn)這些問(wèn)題可以使工作方向正確。
分析結(jié)果主要考慮下面的問(wèn)題。
系統(tǒng)調(diào)整是否達(dá)到或者超出了預(yù)期目標(biāo)?
系統(tǒng)是調(diào)整性能得到了改善,還是犧牲某部分性能來(lái)解決問(wèn)題?
調(diào)整是否可以結(jié)束了?
最后,如果達(dá)到了預(yù)期目標(biāo),則調(diào)整工作完成。