軟件性能的生命周期
影響軟件性能的要素有很多,在需求階段就應(yīng)該對軟件性能進(jìn)行分析,在設(shè)計階段要充分考慮軟件架構(gòu)設(shè)計對性能的影響,在測試階段要充分驗證軟件的性能表現(xiàn)是否滿足需求。
一、需求階段的性能分析
從業(yè)務(wù)角度分析,如果一個系統(tǒng)上線后使用人數(shù)比較多,而且后期數(shù)據(jù)量比較大(如電信、金融證券等對外開放的系統(tǒng)),就有必要做好性能測試,因為這些系統(tǒng)對于實時性交互要求比較高,對系統(tǒng)的響應(yīng)時間、并發(fā)用戶數(shù)等要求都比較高,并且從數(shù)據(jù)角度分析,系統(tǒng)上線幾年后存量數(shù)據(jù)一般都是千萬級數(shù)據(jù)量,因此前期性能設(shè)計與驗證對業(yè)務(wù)系統(tǒng)的后期正常運行維護(hù)至關(guān)重要。
在軟件開發(fā)前期的需求分析階段,需求分析師與客戶業(yè)務(wù)人員溝通時,要明確提出各項性能指標(biāo),包括系統(tǒng)業(yè)務(wù)交易的使用頻度、系統(tǒng)并發(fā)用戶量、業(yè)務(wù)數(shù)據(jù)量評估等各項指標(biāo)。然后對系統(tǒng)的響應(yīng)時間、用戶數(shù)和資源使用進(jìn)行分析。
1、響應(yīng)時間分析
響應(yīng)時間的需求調(diào)研分析,例如查詢類的交易需要在多少秒之內(nèi)響應(yīng),對于URL連接或者刷新整個網(wǎng)頁的時間,它是一個非常重要的度量值,因為它是直接體現(xiàn)用戶體驗的一個指數(shù)。
它同時也是最不容易測量的度量值,因為它比其他的度量值更容易發(fā)生變化。我們需要了解響應(yīng)時間的區(qū)域分布。例如:一般月底是發(fā)工資的時候,查詢當(dāng)前賬戶額度是用戶這段時間最常用的功能,這段時間的系統(tǒng)響應(yīng)時間估計比平常響應(yīng)時間慢些,而對于電信之類的報表查詢,省內(nèi)公司查詢當(dāng)月本省各個分公司、分點的銷售額情況,總公司查詢?nèi)珖魇〉目備N售額情況,這時數(shù)量級別相差甚大,查詢時響應(yīng)時間也相對比較慢。這些情況對于指導(dǎo)服務(wù)器分布、負(fù)載均衡、數(shù)據(jù)庫的設(shè)計都非常重要。
2、用戶數(shù)分析
用戶數(shù)分析,主要分析評估系統(tǒng)上線后的總用戶數(shù)、平均每天在線用戶數(shù)等情況,具體可分析:哪些交易每天都有用戶在執(zhí)行業(yè)務(wù)交易,這些用戶一般占系統(tǒng)總?cè)藬?shù)的比例是多少;哪些交易會在月底、季末或者年底高頻率并發(fā)使用;哪些交易用戶使用得比較少,但卻是相關(guān)重要人物(如上級領(lǐng)導(dǎo))重點關(guān)注的交易。這些用戶數(shù)分析結(jié)果,可為后續(xù)的性能測試設(shè)計中,針對混合場景的用戶數(shù)配比設(shè)計提供有力的參考依據(jù)。
3、資源使用分析
資源使用分析用于衡量系統(tǒng)資源使用率的情況,反映系統(tǒng)的最底層性能情況,對于容量規(guī)劃比較有指導(dǎo)作用,同時它也是比較容易理解的性能度量值。
二、設(shè)計開發(fā)階段的性能分析與驗證
大部分項目的性能問題是設(shè)計出來的,而不是開發(fā)和測試出來的。要獲得性能良好的軟件系統(tǒng),需要根據(jù)需求分析及設(shè)計規(guī)劃,進(jìn)行系統(tǒng)的規(guī)模分析和完整的性能分析,預(yù)估性能瓶頸點,提出解決方案,最后通過架構(gòu)師、程序設(shè)計人員等角色進(jìn)行評審驗證并確認(rèn),保障性能目標(biāo)的達(dá)成。
在代碼開發(fā)階段,需要根據(jù)設(shè)計方案,在開發(fā)過程中關(guān)注性能瓶頸點,進(jìn)行相應(yīng)的白盒測試,通過代碼分析和評審等手段,確認(rèn)性能瓶頸并解決。需要不斷地分析和總結(jié)性能問題和解決方案,形成性能方面的代碼編寫規(guī)范,從而在研發(fā)階段的早期就能確保把軟件系統(tǒng)在性能方面的風(fēng)險降到最低。
系統(tǒng)設(shè)計與代碼實現(xiàn)的很多細(xì)節(jié)都會對軟件系統(tǒng)性能起到關(guān)鍵的作用。例如,在數(shù)據(jù)查詢界面設(shè)計時,需要考慮查詢方式是模糊查詢還是精確查詢、如何設(shè)計查詢分頁展現(xiàn)、對象的創(chuàng)建以及釋放問題等。
在采用具體實現(xiàn)技術(shù)時,也需要注意性能細(xì)節(jié),例如 Hibernate 中對大數(shù)據(jù)量查詢時,需慎用 list() 或者 iterator() 遍歷返回查詢結(jié)果。
在采用Java等托管語言開發(fā)軟件系統(tǒng)時,需要注意對象的生成和對象大小問題,否則容易導(dǎo)致產(chǎn)生大量對象實例,系統(tǒng)不僅要花時間生成對象,還可能要花時間對這些對象進(jìn)行垃圾回收和處理,生成過多的對象將會對程序的性能帶來很大的影響。
在數(shù)據(jù)庫設(shè)計上也有很多細(xì)節(jié)會對后期系統(tǒng)性能表現(xiàn)有決定性的影響,例如:對歷史查詢是否分區(qū)、如何分區(qū)性能更好;如何設(shè)計批量數(shù)據(jù)抽取轉(zhuǎn)換的方式,以保證減少或消除等待;如何設(shè)計索引,減少全表掃描、提高SQL查詢效率;編寫良好的SQL語句以便提高重用率、減少數(shù)據(jù)庫解析。
三、統(tǒng)測試階段的性能驗證與優(yōu)化
性能問題越早發(fā)現(xiàn)、修改,越能保證系統(tǒng)上線后的穩(wěn)定性,因此應(yīng)該在軟件生命周期的不同階段進(jìn)行軟件性能測試。
性能測試大致可以分為單元性能測試、集成性能測試、系統(tǒng)性能測試、多套系統(tǒng)互聯(lián)接口性能測試等。其中,對一套系統(tǒng)進(jìn)行的系統(tǒng)性能測試,也就是在特定的環(huán)境下、一定量的數(shù)據(jù)情況下,進(jìn)行的系統(tǒng)級的性能測試,是最常用的,也是最為測試人員所熟悉的一種性能測試。
系統(tǒng)性能測試階段的一般測試過程如下:在系統(tǒng)功能被確認(rèn)后,模擬真實生產(chǎn)環(huán)境進(jìn)行軟件系統(tǒng)的部署(包括硬件設(shè)備、操作系統(tǒng)、網(wǎng)絡(luò)搭建、負(fù)載均衡部署、中間件部署、數(shù)據(jù)庫部署等),然后再根據(jù)前期的性能測試需求分析結(jié)果及測試策略定義的方法,模擬一定量的虛擬并發(fā)用戶數(shù),進(jìn)行壓力測試,同時監(jiān)控分析系統(tǒng)是否滿足預(yù)期的性能指標(biāo),識別性能可能出現(xiàn)的瓶頸點(應(yīng)用代碼、網(wǎng)絡(luò)設(shè)備、硬件設(shè)備、操作系統(tǒng)、中間件配置、數(shù)據(jù)庫等),并進(jìn)行性能優(yōu)化處理,調(diào)優(yōu)后再進(jìn)行復(fù)測,確保軟件系統(tǒng)最終達(dá)到性能要求。
posted on 2012-06-26 09:49 順其自然EVO 閱讀(319) 評論(0) 編輯 收藏 所屬分類: 性能測試