qileilove

          blog已經(jīng)轉(zhuǎn)移至github,大家請?jiān)L問 http://qaseven.github.io/

          軟件性能測試的本質(zhì)

             淘寶網(wǎng)每年的雙11 活動(dòng)都是對其服務(wù)器性能的挑戰(zhàn)。因?yàn)槟翘斓幕顒?dòng)所有商品半價(jià),在那一天購物的用戶量劇增。做淘寶網(wǎng)的高層更多的關(guān)心在線用戶數(shù),用戶交易量,總交易金額 等,做為一名技術(shù)人員,我們可以更關(guān)心當(dāng)天系統(tǒng)的吞吐量、每秒鐘點(diǎn)擊率以及系統(tǒng)資源的消耗情況等。

            基于用戶體驗(yàn)的性能測試

            但對于一個(gè)用戶來說,他可以不關(guān)心上面這些,大約有一部分的消費(fèi)者會因?yàn)榫W(wǎng)站過于技術(shù)化或者性能問題而選擇了離開。換言之,如果你的網(wǎng)站速度太慢客戶就會離去。這是所有的互聯(lián)網(wǎng)用 戶都熟知的道理。這時(shí)你的第一想法不是“哎呀,不知道站點(diǎn)的吞吐量怎樣”,而是“簡直太慢了!我可沒有時(shí)間在這里等,到別處去吧”?,F(xiàn)在想想,人們離開你 的站點(diǎn)是否因?yàn)樾阅軉栴}?所以,在做性能測試的時(shí)候除關(guān)注吞吐量、點(diǎn)擊率這些參數(shù)外,我們更需要站在用戶的角度來測試實(shí)際的性能感受。如果你經(jīng)過測試聲稱 網(wǎng)站可以承受更多的用戶同時(shí)訪問,但實(shí)際的用戶體驗(yàn)性非常差,那么做你的性能測試又有什么意義呢?

            現(xiàn)在市場 上有大量的書討論如何設(shè)計(jì)良好的性能,還有更多的書把重點(diǎn)放在如何使得站點(diǎn)更加直觀、生動(dòng)和易于炒作上。關(guān)于速度的好處也討論過,但如何真正并優(yōu)化系統(tǒng)來 提高用戶體驗(yàn)?zāi)??那就是直接的用戶體驗(yàn)測試了。有兩點(diǎn)方法可以做一這點(diǎn)。一是可以把站點(diǎn)直接投入到能夠進(jìn)行數(shù)據(jù)采集和系統(tǒng)調(diào)優(yōu)的生產(chǎn)環(huán)境中,并祈禱你的網(wǎng) 站不會太慢或崩潰。另一個(gè)種明智的選擇是模擬真實(shí)的用戶活動(dòng),進(jìn)行重復(fù)的測試和調(diào)優(yōu),最后再投入到生產(chǎn)環(huán)境。

            “明確”的性能需求

            當(dāng)測試人員進(jìn)行性能測試工作時(shí),真正讓他們感到困難的不是測試工具如何使用,也不是如何對測試數(shù)據(jù)進(jìn)行分析與系統(tǒng)調(diào)優(yōu)(對于一個(gè)經(jīng)驗(yàn)豐富有性能工程師來說,這真的不難)。讓他們感到困惑的是如何得到準(zhǔn)確的量化的需求,比如:

            A、網(wǎng)站可以支撐多少在線用戶數(shù)

            B、網(wǎng)站可以支持多少用戶同時(shí)交易

            C、電子郵件系統(tǒng)每秒種可以處理多少封郵件

            D、可以支持多少人同時(shí)瀏覽網(wǎng)頁

            類似于這樣的數(shù)據(jù)會出現(xiàn)客戶對系統(tǒng)的性能需求中,好吧,有了這些需求,我就開始性能工作了,這些需求真的很明確么?

            我們來看下面的例子,一個(gè)購買汽車的用戶想知道:

            這輛汽車開100公里的耗油是多少升。(對,就是他坐在里面試駕的那輛)

            如果你是一個(gè)嚴(yán)謹(jǐn)?shù)钠囦N售,不會馬上會說這輛車每公理的耗油是多少。而是在大腦中快速的列出的汽車駕駛環(huán)境:

            1、車上坐幾個(gè)人?

            2、車上帶多重的物品

            3、路況如何,是高速還是擁擠的市區(qū)?

            4、天氣如何,溫度如何,要開空調(diào)碼?

            5、駕駛時(shí)間是白天還是晚上(如果是晚上要開車燈)?

            6、駕駛習(xí)慣是怎樣的?

            ....................................

            其實(shí)我們在做性能測試做了很多假設(shè)。你唯一能做的就是繼續(xù)向客戶確認(rèn)更明確的需求,很多時(shí)候其實(shí)客戶也無法給出精確的需求。這就是時(shí)候你就要多參考常規(guī)的情況下,參考同類產(chǎn)品,或盡量引導(dǎo)用戶去明確具體的需求,盡量與客戶達(dá)到統(tǒng)一的共識。

          “假設(shè)”的測試環(huán)境

            現(xiàn)在是不是覺得性能測試有太多的前置條件,它他們或大或小的影響著測試的結(jié)果。

            關(guān)于這些前置條件,或者我們稱之為假設(shè)(assumption),我把一些做法歸納為三個(gè)階段。

            一:做了假設(shè)卻不知道自己做了假設(shè)

            比如前面提到的那個(gè)耗油的問題,有人的做法是我就開100公里看看,得出來是多少就是多少,比如9L。然后就告訴別人這個(gè)車的100公里耗油是9L。

            問題是這樣的結(jié)果對你是OK,因?yàn)槟阌星猩淼牡捏w驗(yàn),知道遇到的狀況,可是測試的報(bào)告是要給別人,甚至你都無法直接面對或者溝通的人參考。這就 會很容易誤導(dǎo)別人,即便這不是你的本意,而且你自已也確定你是真實(shí)的記錄了結(jié)果。這里的問題在于你并不清楚自己所做的假設(shè),因?yàn)槲覀円恢痹谧鲞@樣的假設(shè)。

            二:做過多的假設(shè)

            “當(dāng)路面平坦,無任何紅綠燈,風(fēng)速5km/h只有一名70kg的乘客,時(shí)速穩(wěn)定在70km/h,良好駕駛習(xí)慣,....的情況下,耗油是7.1L/100km。”

            這樣可能很嚴(yán)謹(jǐn),但是對你的報(bào)告的讀者而言,這樣的數(shù)據(jù)有多大意義,因?yàn)樗麄儧]有你這么幸運(yùn),有這么良好的環(huán)境。

            三:做必要和合理的假設(shè)

            生活有時(shí)候是需要一些妥協(xié)和折衷,如果這些折衷是必要的和合理的。因?yàn)樘鰜砜?,我們的測試需要提供有價(jià)值的信息,所以為了這樣有價(jià)值的信息,做出必要和合理的假設(shè)是可以接受的。

            好吧,也許這不是你想要的答案,但它是我目前給自己的解釋和安慰。

            性能測試環(huán)境需要在嚴(yán)格獨(dú)立監(jiān)控下管理,盡量保持與真實(shí)生產(chǎn)環(huán)境的一致性能。保持一致性應(yīng)該注意哪些方面,等搜索蟲師的《性能測試知多少---測試環(huán)境搭建》。

            “精確”的測試數(shù)據(jù)

            對于一個(gè)嚴(yán)謹(jǐn)?shù)臏y試員,我們的測試結(jié)果的描述也相當(dāng)精確,如:用戶每個(gè)用戶的訪問時(shí)間為2.8729秒,10分鐘系統(tǒng)處理請求8634個(gè)。我以前一直認(rèn)為,只要我把測試環(huán)境描述的很詳細(xì),我的測試結(jié)果就是精確的。

            實(shí)際上功能測試很容易得到測試結(jié)果,而性能測試很難得到精確的量化結(jié)果,我買了一輛汽車,開車去上班,去時(shí)車的各個(gè)功能非常正常,回來的時(shí)候車 的功能也非常正常。將過我的上下班測試,這個(gè)車的功能沒有問題。再來看耗油情況,我去時(shí)上耗油3.29升,回來時(shí)耗油3.42升,同樣的一條路,同樣的人 開同樣的車,那么是不一樣的耗油結(jié)果?如果我再試一遍,可能情況還會有變化。所以,我們很難得到精確的數(shù)據(jù),但是這絲毫不影響我們測試結(jié)果的參考價(jià)值。

            “宏觀/圍觀”的性能測試

            這也是一個(gè)有趣的對立。在做性能測試,特別是整個(gè)產(chǎn)品的性能測試的時(shí)候,我們看到的是產(chǎn)品的核心功能和主要的大的功能模塊,比如數(shù)據(jù)庫、web 服務(wù)器、核心的daemon等等。在腦海里,我們有一個(gè)架構(gòu)圖,哪怕你沒有把它畫出來。所以有時(shí)候,我們會想,性能測試對于產(chǎn)品的視角是宏觀的,看大的組 件,而不是具體的細(xì)節(jié)的東西。果真是如此嗎?看看下面的例子:

            1、把daemon的log級別改為debug (log_level從2改到5)之后,性能下降了差不多一半。

            2、關(guān)掉一個(gè)cache選項(xiàng)

            3、打開keepalive選項(xiàng)

            4、打開DNS反向查詢

            .....

            上面都是些細(xì)枝末節(jié)的設(shè)置,一個(gè)配置項(xiàng)而已,藏在DB的某張表或者某個(gè)ini里面。但是改變之后,得到的性能結(jié)果可能大不相同。這些都是否改變了我們以往的看法。

           Scott Barber(性能測試方面的專家)在他的一篇文章里討論了這個(gè)話題。

            “Macro- and Micro-tests, macro strategies and micro-plans, macro-level application usage and micro-level usage implementation details, macro-level result summaries for executives and micro-level test results for developers... it sounds like a day in the life of a performance tester to me.”

            摘自他為Software Test & Performance雜志寫的一個(gè)系列文章,叫做Peak Performance,其中的2006年9月的一期,文章名是 Macro to Micro And Back Again Macro to Micro And Back Again,嗯,很好的詮釋。

            亞里士多德說世上的道理不是被講一遍兩遍而是成千上萬遍,是的,因?yàn)閃einberg也講了一遍,就在上面提到的那本書里面。請?jiān)徫以俅我?他的話,粉絲嘛。“Although it's necessary to have an overview of the problem, the big picture often turns on one critical detail.”

            critical detail, 對,就是這個(gè)term。其實(shí)不光是這里說的測試,工作和生活中的很多事情都是一樣,不是要不要關(guān)心細(xì)節(jié),而是它是否critical。

            那么,怎么區(qū)分一個(gè)細(xì)節(jié)是不是critical或者怎樣找到critical的detail呢?

            嗯...,這是個(gè)好問題,不過不好意思這個(gè)不是這里要討論的范疇。

            所以,你還認(rèn)為性能測試只是學(xué)習(xí)如何使用性能工具么?它需要一個(gè)長期的個(gè)技術(shù)的積累,我們的路還很長。也許,我講的不夠本質(zhì),但性能測試這個(gè)領(lǐng) 域,看到太多的新手在整天問工具的使用,學(xué)會了工具的使用就大言“我會(精通)性能測試!”。太多的公司叫新手的做性能測試,環(huán)境神馬的也不提供,你找個(gè) 工具對軟件加壓一下吧!哎~!這未免是太貶低“軟件性能測試”了。

            本文參考:

            基于用戶體驗(yàn)的性能測試:http://www.51testing.com/html/72/n-64672.html

            關(guān)于性能測試的三個(gè)觀念:http://www.51testing.com/html/02/n-227002.html

          相關(guān)鏈接:

          性能測試知多少----性能測試分類之我見

          性能測試知多少---并發(fā)用戶

          性能測試知多少---吞吐量

          性能測試知多少---響應(yīng)時(shí)間

          性能測試知多少---了解前端性能

          性能測試知多少---性能測試工具原理與架構(gòu)

          性能測試知多少---性能測試流程

          性能測試知多少---性能需求分析

          性能測試知多少---性能測試計(jì)劃

          性能測試知多少---系統(tǒng)架構(gòu)分析

          性能測試知多少---測試工具介紹

          性能測試知多少---測試環(huán)境搭建

          性能測試知多少--系統(tǒng)計(jì)數(shù)器與硬件分析

          posted on 2012-12-24 14:21 順其自然EVO 閱讀(204) 評論(0)  編輯  收藏 所屬分類: 性能測試

          <2012年12月>
          2526272829301
          2345678
          9101112131415
          16171819202122
          23242526272829
          303112345

          導(dǎo)航

          統(tǒng)計(jì)

          常用鏈接

          留言簿(55)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          主站蜘蛛池模板: 水城县| 高密市| 漠河县| 随州市| 大城县| 麦盖提县| 宣武区| 海伦市| 固镇县| 军事| 新巴尔虎左旗| 综艺| 澎湖县| 温泉县| 民权县| 胶南市| 峡江县| 闻喜县| 浑源县| 鹤庆县| 邵阳县| 桐城市| 大城县| 安康市| 开阳县| 阳信县| 河曲县| 珠海市| 房山区| 禹城市| 白水县| 新沂市| 武山县| 上蔡县| 和平区| 玉林市| 临夏市| 特克斯县| 邳州市| 镇康县| 屏东县|