Visual Studio 2005 Team System:構(gòu)建健壯而可靠的軟件
發(fā)布日期: 6/21/2005 | 更新日期: 6/21/2005
Kamran Iqbal
Microsoft Corporation
適用于:
Microsoft Visual Studio? 2005 Team System
摘要:描述 Visual Studio 2005 Team System 提供的代碼分析和性能工具。
注 本文檔于產(chǎn)品投入生產(chǎn)之前編寫,因此您可能會發(fā)現(xiàn)這里所包含的細(xì)節(jié)與發(fā)布的產(chǎn)品有不一致的地方。文中的信息均依據(jù)撰寫本文時的產(chǎn)品狀況,僅供您在規(guī)劃時參考。如有更改,恕不另行通知。Microsoft 擁有本文檔中的主題所涉及的專利、專利應(yīng)用程序、商標(biāo)、版權(quán)或其他的知識產(chǎn)權(quán)。除非 Microsoft 以任何書面許可協(xié)議明確提供,向您提供本文檔并沒給予您使用這些專利、商標(biāo)、版權(quán)或其他知識產(chǎn)權(quán)的任何許可證。
本頁內(nèi)容
簡介
要開發(fā)健壯而可靠的軟件,開發(fā)人員需要一套集成分析工具,來幫助他們在開發(fā)的早期檢測代碼缺陷和性能問題。
分析工具支持
過去,由于 Visual Studio 中缺少對代碼分析的支持,因此開發(fā)人員不得不購買第三方工具,構(gòu)建自定義分析工具,或者發(fā)布未經(jīng)分析的代碼。
? |
花費額外的成本購買第三方工具。
從眾多的分析工具中選擇一個既能滿足軟件分析的要求又在預(yù)算限制范圍之內(nèi)的工具,未必總是一項輕松的任務(wù)。另外,這些工具可能沒有集成到 Visual Studio 集成開發(fā)環(huán)境 (IDE) 中,因此通常需要花費額外的時間來學(xué)習(xí)如何順利地使用它們。
|
? |
構(gòu)建自定義分析工具。
構(gòu)建自定義分析工具需要資源、技能和經(jīng)驗。這對大多數(shù)公司中的開發(fā)團隊而言是不現(xiàn)實的,僅僅是少數(shù)公司可以擔(dān)負(fù)得起的選擇。
|
? |
發(fā)布未經(jīng)分析的代碼。
在工時期限和預(yù)算限制緊張的情況下,發(fā)布未經(jīng)分析的代碼似乎是一種正確的方法,但如果軟件在部署之后發(fā)生故障,可能證明采用這種錯誤方法的代價不菲。
|
我們的解決方案
在 Visual Studio 2005 Team System 中,開發(fā)人員將會看到一套全新的、完全集成到 IDE 中的分析工具。這種分析工具與開發(fā)環(huán)境的緊密集成,可以幫助開發(fā)人員在產(chǎn)品開發(fā)的早期檢測并修復(fù)代碼缺陷和性能問題。這還可以幫助團隊有效且高效地管理軟件開發(fā)生命周期(Software Development Life Cycle,SDLC)。
在 Visual Studio 2005 Team System 中,有兩類分析工具可用于構(gòu)建健壯而可靠的軟件:
在開發(fā)環(huán)境中集成分析工具可以幫助開發(fā)人員檢測與編碼、性能及安全性相關(guān)的問題。此外,可將代碼分析工具作為簽入策略的一部分用于每日構(gòu)建 (nightly build) 過程,使開發(fā)團隊能夠在將代碼簽入到源樹 (source tree) 之前修正缺陷。通過在開發(fā)的早期(而不是后期)更正問題,團隊可降低修復(fù)代碼缺陷的總體成本。
除了完全集成到 IDE 中之外,開發(fā)人員還可以從命令行使用這些工具。
Visual Studio 中的工具集成
在 Visual Studio 2005 Team System 中,通過使用代碼分析工具和性能工具,開發(fā)人員可以對代碼進行靜態(tài)和動態(tài)分析。
代碼分析工具
代碼分析工具的目標(biāo)是使開發(fā)人員能夠?qū)ζ漤椖窟M行靜態(tài)分析,以檢測和修復(fù)代碼缺陷。為了實現(xiàn)這個目標(biāo),Visual Studio 2005 Team System 中包含了兩個工具:
PREfast
PREfast 是一個靜態(tài)分析工具,它為開發(fā)人員提供有關(guān)其 C/C++ 源代碼中可能存在缺陷的信息。PREfast 報告的常見代碼錯誤包括緩沖區(qū)溢出、未初始化內(nèi)存、空指針取消引用、內(nèi)存泄漏和資源短缺。
IDE
集成
為了使開發(fā)人員能夠自然地使用分析工具,可以將 PREfast 完全集成到 IDE 中。通過在項目的 Property Pages 上選擇 Yes (/prefast),開發(fā)人員可以輕松啟用 PREfast,如圖 1 所示。
圖
1.
啟用
PRE
f
ast
在生成過程中,為源代碼生成的任何 PREfast 警告都出現(xiàn)在 Error List 中。這些警告包括缺陷路徑信息(如果有);雙擊突出顯示缺陷路徑的警告,可以進入代碼編輯器中的警告,如圖 2 所示。
圖
2. PRE
f
ast
警告
#pragma support
Developers can use the #pragma directive to treat warnings as errors, or disable warnings, as shown below.
#pragma warning (error: 6260) //treat warning 6260 as an error
#pragma warning (disable: 6011) //disable warning 6011
批注支持
PREfast 還支持批注以改善代碼分析的精確性。批注提供有關(guān)函數(shù)參數(shù)和返回類型的之前和之后條件的附加信息。
#include
[SA_Post( MustCheck=SA_Yes )] double* CalcSquareRoot
(
[SA_Pre( Null=SA_No )] double* source,
unsigned int size
)
在上面的示例中:
? |
[SA_Post ( MustCheck=SA_Yes)] 要求調(diào)用方檢查 CalcSquareRoot 的返回值
|
? |
[SA_Pre ( Null=SA_No)] 要求調(diào)用方將非空參數(shù)“source”傳遞給 CalcSquareRoot
|
命令行支持
除了與開發(fā)環(huán)境完全集成之外,開發(fā)人員還可以從命令行使用 PREfast,如下所示。
C:\>cl /prefast Sample.cpp
FxCop
FxCop 是一個靜態(tài)分析工具,它分析托管代碼程序集并報告有關(guān)程序集的信息,例如,與 Microsoft .NET Framework Design Guidelines 中闡述的編程和設(shè)計規(guī)則相沖突。FxCop 表示在分析過程中作為規(guī)則執(zhí)行的檢查。規(guī)則是一段托管代碼,該代碼分析程序集并返回有關(guān)它發(fā)現(xiàn)結(jié)果的消息。規(guī)則消息識別任何相關(guān)的編程和設(shè)計問題,并在可能的情況下,提供有關(guān)如何修復(fù)目標(biāo)的信息。
IDE
集成
為了使開發(fā)人員能夠自然地使用分析工具,開發(fā)人員可以在項目的 Property Pages 上選擇 Run FxCop,如圖 3 所示。
圖
3.
啟用
FxCop
有關(guān)包含或排除規(guī)則,將規(guī)則作為警告或錯誤的附加選項,也可以在 Property Pages 中找到,如圖 4 所示。
圖
4. FxCop
規(guī)則
一旦啟用 FxCop,在生成過程中,F(xiàn)xCop 就會在 Error List 中報告沖突,如圖 5 所示。
圖
5. FxCop
規(guī)則沖突
Error List 提供有關(guān)規(guī)則沖突的信息和建議,以便于您糾正錯誤。只需在 Error List 中雙擊規(guī)則沖突,即可輕松地定位到觸犯了規(guī)則的代碼行。
MSBuild
集成
Visual Studio 的下一個版本從根本上改進了生成過程,其方法是引入一個新的、名為 MSBuild 的生成引擎。可以通過 MSBuild 系統(tǒng)調(diào)用 FxCop。這使開發(fā)人員能夠從命令行運行托管項目上的 FxCop。
性能工具
在 Visual Studio 2005 Team System 中,開發(fā)人員可以通過性能工具來度量、計算和定位代碼中與性能相關(guān)的問題。這些工具都完全集成到 IDE 中,以提供無縫、友好的用戶體驗。
性能工具支持兩種分析方法:
在采樣的過程中,數(shù)據(jù)收集基礎(chǔ)結(jié)構(gòu)將定期中斷正在執(zhí)行的應(yīng)用程序,以確定正在執(zhí)行的是哪個函數(shù),并增加函數(shù)的采樣計數(shù)。它存儲有關(guān)準(zhǔn)備函數(shù)調(diào)用的調(diào)用堆棧的信息。
應(yīng)用程序退出后,收集到的所有數(shù)據(jù)會生成為一個報告文件,您可以使用 IDE 中集成的報告功能輕松地查看該文件。
采樣的優(yōu)勢在于低開銷,因為這只是定期中斷應(yīng)用程序。這使得應(yīng)用程序的行為能夠更接近實際情況。這種方法的缺點是,它只能獲取已采樣函數(shù)的相關(guān)性能數(shù)據(jù)。有可能沒有對需要采樣的函數(shù)進行采樣,因而無法獲取有關(guān)該函數(shù)的信息。
使用儀器的優(yōu)勢在于可以收集應(yīng)用程序的特定部分的精確性能數(shù)據(jù)。在使用儀器的過程中,“enter”和“exit”探針被插入到應(yīng)用程序的函數(shù)中。這些探針將報告返回給數(shù)據(jù)收集基礎(chǔ)結(jié)構(gòu),并允許用戶捕獲函數(shù)執(zhí)行所需的精確時間(或其他衡量標(biāo)準(zhǔn))。
分析應(yīng)用程序
分析應(yīng)用程序的首選使用模式是首先開始采樣,然后根據(jù)采樣所產(chǎn)生的結(jié)果檢測應(yīng)用程序的特定方面。
分析應(yīng)用程序的過程相當(dāng)簡單。首先創(chuàng)建一個新的性能會話。在 Visual Studio 2005 Team System 中,可以使用 Performance Session Wizard 創(chuàng)建一個新的性能會話。
Performance Session Wizard
Performance Session Wizard 設(shè)置分析應(yīng)用程序的必要環(huán)境。在 Visual Studio 2005 Team System 中,該向?qū)?EXE、DLL 和 ASP.NET 應(yīng)用程序提供內(nèi)置支持。
可以使用該向?qū)?chuàng)建一個 New Performance Session,如圖 6 所示。
圖
6.
啟動性能向?qū)?/b>
注 要手動創(chuàng)建一個新的性能會話,請使用菜單上的 New Performance Session 命令。可以采用這種方法來手動分析其他類型的應(yīng)用程序(例如,Windows 服務(wù))。
Performance Explorer
性能會話作為運行會話向?qū)Щ蚴謩觿?chuàng)建會話的結(jié)果而創(chuàng)建。Performance Explorer 可以將其直觀地表示出來,如圖 7 所示。
圖
7.
性能資源管理器
Performance Explorer 給用戶呈現(xiàn)了層次結(jié)構(gòu)。該層次結(jié)構(gòu)的根節(jié)點表示 Performance Session。這種節(jié)點的屬性是用戶在創(chuàng)建 Performance Session 時設(shè)置的屬性。如果用戶使用 Performance Session Wizard 創(chuàng)建會話,則這些屬性體現(xiàn)了用戶在使用向?qū)У倪^程中所選擇的值。如果用戶手動創(chuàng)建 Performance Session,則這些屬性包含了它們的默認(rèn)值。
根節(jié)點有兩個子節(jié)點:Targets 節(jié)點和 Reports 節(jié)點。Targets 節(jié)點包含一個或多個目標(biāo),目標(biāo)可以是 EXE、DLL 或 ASP.NET 應(yīng)用程序。
Reports 節(jié)點包含與某個特定 Performance Session 相關(guān)的所有報告。
性能會話報告
一旦應(yīng)用程序執(zhí)行完畢,系統(tǒng)就會將一個性能會話報告自動添加到 Reports 節(jié)點。可以通過下面的視圖來查看這些報告:
Summary
視圖
Summary 視圖為開發(fā)人員提供了其調(diào)查的起點。它顯示應(yīng)用程序執(zhí)行過程中開銷最高的函數(shù),如圖 8 所示。從該視圖中的每個數(shù)據(jù)點,用戶都可以定位到更詳細(xì)的視圖。
圖
8. Summary
視圖
Functions
視圖
Functions 視圖顯示在應(yīng)用程序的執(zhí)行過程中調(diào)用的全部函數(shù),這些函數(shù)存在于由該應(yīng)用程序引用的所有模塊之中,如圖 9 所示。該視圖顯示的信息取決于所用的分析方法(采樣與使用儀器)。
圖 9. Functions 視圖
Caller/Callee
視圖
Caller/Callee 視圖提供在 Functions 視圖中所列函數(shù)的詳細(xì)信息,如圖 10 所示。
圖
10. Caller/Callee
視圖
Callstack
視圖
Callstack 視圖使用戶能夠向下搜索特定的調(diào)用跟蹤,并分析哪些跟蹤對性能的影響最大。
圖
11. Callstack
視圖
Type
視圖
Type 視圖提供有關(guān)某個特定類型的實例數(shù)量和總字節(jié)數(shù)的信息,如圖 12 所示。
命令行支持
可以通過命令行工具使用性能工具功能。這為用戶提供了靈活性,用戶既可以從命令行運行這些工具,又可以通過腳本來使用它們,以便自動執(zhí)行任務(wù)。