AQTime教程

AQTime教程
簡介
AQTimeMemProof都是AutomatedQA旗下的產品,AQTimeMemProof提供了更豐富強大的功能。該產品含有完整的性能和調試工具集,能夠收集程序運行時關鍵的性能信息和內存/資源分配信息,並提交概要報告和詳細報告,還提供所有的程序優化處理工具,囊括了自定義過濾器、圖形化的調用層次結構一直到源代碼瀏覽等內容。AQTime的特色在於它不僅是一款調試工具,還是一款性能優化工具。另外,還支持與基於SCC API的版本控制軟件集成使用。
使用方法
本文只針對DELPHI,其他開發語言可以參照。
2.1 下載
AQTime是一個商業軟件,你可以在官方網站上下載試用版本:
下載地址http://www.automatedqa.com/products/aqtime/index.asp
本文使用的是AQTime 4.92 版本
2.2 安裝
直接運行安裝即可
2.3 準備
MemProof一樣,要求目標程序帶有完整的調試信息。打開工程選項(Project-Options
1Compiler面板
l 去掉Optimization(代碼優化)選項
l 選擇Stack Frames(爲所有過程函數強制生成調用堆棧)選項
l 選擇Debug information (DCU文件中生成調試信息)選項
2Linker面板
l 選擇Detailed生成完整的MAP文件包含模塊、單元、過程等地址信息選項
l 選擇Include TD32 debug info(將調試信息生成到可執行文件)選項
該選項會導致可執行文件體積增大,但不會影響運行效率以及內存佔用,建議在正式發佈時不要帶上該選項。
3Packages面板
如果希望使用Allocation profiler 資源分配測試方案
去掉 Build with runtime packages
也可以不去掉該選項但是必須使用Add Moudle把下列BPL添加進來
VCL50.BPL Delphi 5.
RTL60.BPL Delphi 6.
RTL70.BPL Delphi 7.
RTL90.BPL Delphi 2005 for Win32.
2.4 面板簡介
Event View 事件瀏覽查看運行過程中的事件
Moniter 監視面板監視運行期間各個模塊的內存使用情況
Disassembler 彙編代碼面板,查看彙編代碼
Editor 代碼瀏覽窗口,如果無法瀏覽代碼,會出現路徑配置,選擇好代碼的路徑即可瀏覽
Details 詳細信息窗口查看比報告中更詳細的內容
Call Graphic 圖表方式顯示方法調用情況
Call Tree 樹方式顯示方法調用情況
PE Reader PE文件瀏覽窗口
 
2.5 開始
選擇FileNew Project From Moudle 打開待測試的程序選擇一種測試方案開始測試。AQTime共有五個大類共八種不同的測試方案,下面一一介紹:
2.5.1 Allocation(資源測試)
測試資源分配釋放情況,檢查內存泄漏。共有兩個測試方案:Allocation Profiler(內存使用剖析) Resource profiler(系統資源使用監測)
2.5.1.1               Allocation Profiler(內存使用剖析)
2.5.1.1.1                   說明
跟蹤程序執行過程中對內存資源的使用情況,按類、對象檢測並顯示程序中對內存資源使用情況,確定明顯或潛在的內存泄露來源, 避免由此造成的程序崩潰。AQTime會跟蹤TObject繼承下來的對象的創建和刪除,以及通過內存管理函數
·      GetMem, ReallocMem, FreeMem
·      GetMemory, ReallocMemory, FreeMemory
·      SysGetMem, SysReallocMem, SysFreeMem
分配和釋放的內存。
       注意這個方案不會跟蹤使用WINAPI創建和釋放的內存
 
2.5.1.1.2                   測試結果報告    
測試結果報告中有類和對象兩種統計報告:
       類統計報告:

Class Name
Total Created
Live Count
Live Size
Total Size
TFont
8
1
36
288
Class Name 類名稱如果是通過內存管理函數分配的內存類名爲VCL native memory如果選擇了Check Memory Bounds內存邊界檢查),類名也有可能爲Memory Overwrite Error
Total Created 程序運行期間創建的內存總數目
Live Count 當前還有多少數目內存未釋放
Live Size 當前還有多大內存未釋放
Total Size 程序運行期間創建的內存總大小
 
       對象統計報告:

Object Name
Size
Root
References To
Address
Get#
TFont.503
60
False
0
0x02CA1D9C
1
Object Name 對象名稱對象名稱的命名規則爲Class Name + period + numberTFont.503 代表503個被創建的TFont對象。
Size 內存泄漏的大小
Root True代表對象可能屬於一個全局變量、本地變量或者函數的參數;爲False代表對象是另一個對象的屬性
References To 當前對象共關聯了多少個其他對象
Address 對象地址
Get# 當運行過程中使用了Run-Get Results手工獲取報告時Get#代表當前報告屬於第幾次Get Results所獲得的報告。(筆者多次使用Get Results後,所有結果依然爲1,奇怪~~)
2.5.1.2               Resource profiler(系統資源使用監測)
2.5.1.2.1                   說明
跟蹤程序運行期間對操作系統資源(fonts, brushes, bitmaps, and other graphic components, registry, COM objects, print spooler, etc.)的使用情況如某時間片內,程序本身開銷的系統資源、因這些資源帶來的內存和CPU開銷、來自於這些資源使用中出現的錯誤使檢測者很容易獲知在程序運行期間與之相關係統資源的分配和使用情況。
2.5.1.2.2                   測試結果報告    
測試結果報告中有類、對象和錯誤三種統計報告:
       類統計報告:

Module Name
Class Name
Live Count
Total Created
Live Size
Total Size
Image
PROJECT1.EXE
TLS
3
13
0
0
 
Module Name 分配這塊資源的模塊
Image 資源類型的圖標
注:其他類型在上面已經介紹過了,不再重複。後面也遵照這條說明
       對象統計報告:

Module Name
Class Name
Object Name
Get#
Image
PROJECT1.EXE
TLS
TLS.13
1
 
2.5.2 Coverage(覆蓋率測試)
覆蓋率測試,共有一個測試方案:Coverage profiler(代碼覆蓋率分析)
2.5.2.1               Coverage profiler(代碼覆蓋率分析)
2.5.2.1.1                   說明
代碼覆蓋率分析,測試出代碼在運行過程中的執行情況。它提供routine line兩種級別,可以幫助查找出程序中的無用代碼。
2.5.2.1.2                   測試級別
AQTime共有3種測試級別routine, line class。不同的測試方案中支持的級別不同routine, line 之在Performance Coverage中支持class只在Allocation中支持。其他測試方案則不支持測試級別的選擇。選擇測試方案可以在Areas面板中選擇。
Routine 按方法以方法或函數爲單位
Line 按行以代碼行爲單位
Class 按類以類爲單位
2.5.2.1.3                   測試結果報告    
測試報告中有三種類型:方法、模塊和源碼文件。每種類型按照線程劃分報告,每個線程有一個報告結果。
方法統計報告:

Routine Name
Hit Count
Total Lines
Lines Uncovered
% Covered
Mark
TForm1::FormCreate
1
5
0
100.00 %
 
Routine Name 方法名稱
Hit Count 方法執行時被記錄的次數。這個屬性不一定完全等於這個方法被運行的次數如果測試過程中選擇了Run-Disable Profiles停止記錄的話Hit Count將不會增加計數而是增加Skip Count計數所以一個方法的完整運行次數應該等於Hit Count Skip Count
Total Lines 方法中總的代碼行數,如果沒有選擇Line測試級別的話,將不會有統計結果。(注意代碼的行數統計包括方法的Begin End,也就是說一個空的過程的代碼行數也會有2行)
Lines Uncovered 方法中未被執行的代碼行數
% Covered 代碼覆蓋率=(Total LinesLines Uncovered/ Total Lines
Mark 該方法在運行期間是否被運行過
模塊統計報告:

Module Name
Hit Count
% Covered
Project1.exe
25209
75.00 %
源碼文件統計報告:

File Name
Hit Count
% Covered
Unit1.pas
2
71.43 %
2.5.3 Performance
性能測試共有一個測試方案Performance profiler代碼層或應用程序層的性能檢測
2.5.3.1               Performance profiler代碼層或應用程序層的性能檢測
2.5.3.1.1                   說明
提供針對程序中任意範圍[sourcefileroutineclassunit]內的程序段或單行代碼進行的性能檢測。在程序執行期間,工具自動收集運行時的性能表徵數據(如調用次數、執行時間、調用與被調用函數、函數調用層次圖、執行期間發生的異常情況等等)。此外,工具提供與運行時間、CPU緩存使用等相關的多種計數器[Elapsed TimeUser TimeUser+Kernel TimeCPU Cache MissesContext Switches],爲了解應用代碼級和應用程序級上的性能使用和確定可能存在的性能瓶頸提供詳實的參考數據。
2.5.3.1.2                   測試結果報告    
測試報告中有三種類型:方法、模塊和源碼文件。每種類型按照線程劃分報告,每個線程有一個報告結果。報告上方有四種時間精確度選擇:Seconds, MilliSeconds, MicroSeconds, Machine Cycles
方法統計報告:

Routine Name
Time
Time with Children
Shared Time
Hie Count
TForm1::FormCreate
526
526
100.00
20.77 %
Time 方法執行花費的總時間,不包括方法中調用的子方法所花費的時間。
Time with Children 方法執行花費的總時間包括子方法所花費的時間
Shared Time Shared Time = Time / Time with Children
模塊統計報告:

Module Name
Time
% Time
Hit Count
Project1.exe
2532
100.00 %
3
% Time 當前模塊在所有被測試的模塊中所佔用的時間比例
源碼文件統計報告:

File Name
Time
% Time
Hit Count
Unit1.pas
2022
79.86 %
2
% Time 當前單元文件在所有被測試的單元文件中所佔用的時間比例
 
以上三種測試報告中還有很多其他的項目,用戶可以自己選擇添加。如:Average Time(平均花費時間)、First Time(第一次被調用的時間)、Max Time and Min Time(最長/短一次調用所花費的時間)等等。
2.5.4 Static Analysis
靜態分析並標識出待測程序的內部結構,共有三個測試方案:Platform ComplianceAPIAPI平臺支持測試)、Sequence Diagram LinkUML關係圖)、Static Analysis(靜態分析)
2.5.4.1               Platform ComplianceAPIAPI平臺支持測試)
程序中使用的API函數與特定平臺的兼容性分析,識別出與操作系統不兼容的函數。
2.5.4.2               Sequence Diagram LinkUML時序圖)
自動識別出待測程序中的函數調用關係,自動生成UML格式時序圖,並通過wordvisio格式顯示。便於檢測者及時檢查程序的行爲。
2.5.4.3               Static Analysis(靜態分析)
靜態分析並標識出待測程序的內部結構[UML時序圖、函數間調用關係、存在的循環語句、判斷語句、異常處理]和程序規模[Byteslines]
2.5.5 Tracing
異常跟蹤,共有一種測試方案:Exception Tracer(異常跟蹤)
2.5.5.1               Exception Tracer(異常跟蹤)
監測程序運行期間出現的預知和未知異常,並將異常在源代碼中進行定位。當程序出現異常時,Event Log窗口會記錄下來,再Event View窗口選中異常查看,在Editor窗口中可以查看到當前異常所在的代碼位置。
2.6 如何測試COM
COM組件的測試可分爲以下幾類:
in-process servers 進程中組件,如:ActiveX controls
out-of-process servers 進程外組件,如:獨立進程中運行的OLE servers
DCOM -在獨立進程中運行的OLE servers 且支持網絡遠程過程調用COM+ applications MTS 作爲服務程序運行在系統中
2.6.1 in-process servers
1、    根據2.3中介紹的方法爲組件加上調試信息,重新編譯並註冊
2、    在Profiling Mode(工具欄第三個按鈕)中選擇Normal
3、    打開RunParameters,選擇HOST APPLICATION(組件的宿主程序),如果有運行參數,在Parameters中加上運行參數
4、    開始測試
2.6.2 out-of-process servers
和普通應用程序一致
2.6.3 DCOM
1、根據2.3中介紹的方法爲組件加上調試信息,重新編譯並註冊
2、在Profiling Mode(工具欄第三個按鈕)中選擇Com Server
3、打開RunParameters,選擇HOST APPLICATION(組件的宿主程序),如果有運行參數,在Parameters中加上運行參數
4、開始測試
2.6.4 COM+ applications MTS
 
1、    根據2.3中介紹的方法爲組件加上調試信息,重新編譯並註冊
2、    在Profiling Mode(工具欄第三個按鈕)中選擇Normal
3、    打開RunParameters,選擇C:/Windows/System32/dllhost.exe作爲宿主程序,運行參數:/ProcessID:Application ID。如:/ProcessID:{52FC412B-819B-47BF-8E22-65426D5C11B7}
4、    開始測試
5、    點擊RunGet Results手工獲取測試報告。這是個特殊的地方,因爲使用Terminate結束運行時,AQTime獲取不到任何通知,所以無法自動生成報告
 
2.7 如何測試服務程序
1、    根據2.3中介紹的方法爲組件加上調試信息,重新編譯並註冊成系統服務
2、    在Profiling Mode(工具欄第三個按鈕)中選擇Services
3、    開始測試,AQTime會重新啓動服務,掛接上去以獲取測試信息
4、    點擊RunGet Results手工獲取測試報告。這是個特殊的地方,因爲使用Terminate結束運行時,AQTime獲取不到任何通知,所以無法自動生成報告
2.8 如何測試IIS
1、    根據2.3中介紹的方法爲組件加上調試信息,重新編譯
2、    在Profiling Mode(工具欄第三個按鈕)中選擇IIS
3、    打開RunParameters,輸入起始頁面的URL
4、    開始測試,AQTime會重新啓動IIS,掛接上去以獲取測試信息
5    點擊RunGet Results手工獲取測試報告。這是個特殊的地方因爲使用Terminate結束運行時AQTime獲取不到任何通知所以無法自動生成報告
2.9 其他功能
2.9.1          選擇測試區域
Ereas窗口中默認測試區域爲Full Check(測試所有),你可以選擇添加Ereas創建自己的測試區域,然後從左邊的Moudles窗口中選擇需要測試的模塊拖過來即可。這樣就可以測試指定的模塊了。
總結
AQTime相對與MemProof來說要龐大複雜多了,需要開發人員有良好的基礎,纔可以應用自如。筆者平時只是拿AQTime來做效率測試,這個功能實在是太棒了。好了,就此打住~~
 
 
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章