• <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>
  • Web應用程序的整體測試(2)

    發表于:2015-08-05來源:未知作者:娃娃點擊數: 標簽:web
    上面所說的是對問題的發現,下面就是分析問題原因,這一步的要求比較高,一般由測試人員與程序員配合完成,當然如果你有相當的開發經驗,再做這方

      上面所說的是對問題的發現,下面就是分析問題原因,這一步的要求比較高,一般由測試人員與程序員配合完成,當然如果你有相當的開發經驗,再做這方面的測試,就更為難得。下面我們說說如何精確定位問題,出現問題的可能性可能有很多種,大致分以下幾種:

      一、性能達不到目標;

      二、性能達到目標,但有一些其它的問題,比如異常,死鎖,緩存命中過低,網絡流量較大;

      三、服務器穩定性的問題,比如內存泄漏……。

      要發現這些問題起碼的要求要有一款使用的比較稱心的性能分析與優化工具,比如微軟的.NET下就有自己開發的工具,對Borland的Java開發工具中也有類似的工具,但我個人認為更好的工具是Rose下的Purify與Quantify,主要是他對.net與java、C++都有支持,而且分析效果特別專業,我們先了解一下Rational Purify, Rational Purify能自動找出Visual C/C++Java 代碼中與內存有關的錯誤,確保整個應用程序的質量和可靠性。在查找典型的Visual C/C++ 程序中的傳統內存訪問錯誤,以及Java,C# 代碼中與垃圾內存收集相關的錯誤方面;Rational Quantity 則是一款針對函數級的性能分析利器,使用它你可以從圖形化的界面中得到函數調用的時間,百分比與次數,以及子函數所占時間,使你可以更快的定位性能瓶頸。

      我們先說性能優化與異常的處理,性能優化有一個原則,即用時間比例最大的進行優化,效果才最明顯,比如有個函數它的執行時間為30秒,如果你優化了一百倍則執行時間為0.3秒,提升了29.7秒,而如果它的執行時間為0.3秒,優化后為0.003秒,實際提升了0.297秒,提升的效果并不明顯,而且寫過程序的人都知道,后者性能優化的代價更大。在性能優化的過程中,一般是先數據庫,后程序,因為數據庫的優化不需要修改程序,修改的風險很小。但如何才能確定是數據庫的問題,這就需要技巧,在使用Quantity時,你一路分析下去,大多數最終會發現,是數據庫查詢函數占用時間比較大,比如什么,SqlCmd.ExecuteNoQuery等等數據庫執行函數,這時你就需要分析數據庫。

      數據庫的分析原則是先索引,后存儲過程,最后表結構視圖的優化,索引的優化是最簡單也是通常最有效的方法,如果合理的使用會帶來意想不到不到的效果。在這里我要給大家簡單的介紹一下我的最愛,SQLProfile,SQL查詢分析器,Precise,SQLProfile是一個SQL語句跟蹤器,可以跟蹤程序流程使用的SQL語句與存儲過程,結合查詢分析器對SQL的分析,可以對索引的優化做出很好的判斷,但索引也不是萬能的,在增刪改較多的表,索引過多會引起這些操作的性能下降,所以判斷還是需要一定的經驗。

      同時針對用戶使用頻度最高的SQL進行優化也是最行之有效的,這時我則需要Precise,它可以觀測某一個較長時間內的SQL語句的執行情況。數據庫優化的潛能挖光后,如果還是達不到性能要求或是還有問題,則要從程序來進行優化,這是程序員做的事,測試人員要做的,就是告訴他們,哪個函數執行過多引起了性能下降,比如異常過多,某個循環過多,或是DCOM調用過多等等,但說服程序員也是一件不容易的事,你要在這一階段做的出色一定要有幾年的編程經驗,并且要讓程序員感到聽你的性能會有提升,這是一件很不容易的事情。

      內存的分析,一般是一個長期分析的過程,要做好不容易,首先要有長期奮戰的準備,其次內存泄漏的分析最好是放在單元測試之中同步進行,而不是要等到最后再去發現問題,當然出了問題也只好面對,一般這類問題都是在服務器運行了很久才暴露出來,一旦發現問題后,則需要定位問題,分析的原則采用子系統相互獨立運行,找到最小問題的系統集,或是借助內存分析工具觀察內存對象情況,初步定位問題,再用Purify進行運行時分析,通常C++ 內存問題比較多,Java與.NET比較少,一般由GC不合理引起。C++的內存錯誤就比較多了,主要常見的有:

      1、 Array Bounds Read (ABR) :數組越界讀

      2、 Array Bounds Write (ABW):數組越界寫

      3、 Beyond stack Read (BSR):堆棧越界讀

      4、 Free Memory Read(FMR):空閑內存讀

      5、 Invalid pointer Read(IPR):非法指針閱讀

      6、 Null Pointer Read(NPR): 空指針閱讀

      7、 Uninitialized Memory Read(UMR):未初始化內存讀寫

      8、 Memory Leak:內存泄漏

      注:如果需要更多的信息,可以參見Purify的幫助信息。

    原文轉自:http://www.uml.org.cn/WebService/200508224.htm

    老湿亚洲永久精品ww47香蕉图片_日韩欧美中文字幕北美法律_国产AV永久无码天堂影院_久久婷婷综合色丁香五月

  • <ruby id="5koa6"></ruby>
    <ruby id="5koa6"><option id="5koa6"><thead id="5koa6"></thead></option></ruby>

    <progress id="5koa6"></progress>

  • <strong id="5koa6"></strong>