Visual Studio 2005 Team System:构建健壮而可靠的软件
发布日期: 6/21/2005 | 更新日期: 6/21/2005
Kamran Iqbal
Microsoft Corporation
适用于:
Microsoft Visual Studio® 2005 Team System
摘要:描述 Visual Studio 2005 Team System 提供的代码分析和性能工具。
注 本文档于产品投入生产之前编写,因此您可能会发现这里所包含的细节与发布的产品有不一致的地方。文中的信息均依据撰写本文时的产品状况,仅供您在规划时参考。如有更改,恕不另行通知。Microsoft 拥有本文档中的主题所涉及的专利、专利应用程序、商标、版权或其他的知识产权。除非 Microsoft 以任何书面许可协议明确提供,向您提供本文档并没给予您使用这些专利、商标、版权或其他知识产权的任何许可证。
本页内容
简介
要开发健壮而可靠的软件,开发人员需要一套集成分析工具,来帮助他们在开发的早期检测代码缺陷和性能问题。
分析工具支持
过去,由于 Visual Studio 中缺少对代码分析的支持,因此开发人员不得不购买第三方工具,构建自定义分析工具,或者发布未经分析的代码。
• |
花费额外的成本购买第三方工具。
从众多的分析工具中选择一个既能满足软件分析的要求又在预算限制范围之内的工具,未必总是一项轻松的任务。另外,这些工具可能没有集成到 Visual Studio 集成开发环境 (IDE) 中,因此通常需要花费额外的时间来学习如何顺利地使用它们。
|
• |
构建自定义分析工具。
构建自定义分析工具需要资源、技能和经验。这对大多数公司中的开发团队而言是不现实的,仅仅是少数公司可以担负得起的选择。
|
• |
发布未经分析的代码。
在工时期限和预算限制紧张的情况下,发布未经分析的代码似乎是一种正确的方法,但如果软件在部署之后发生故障,可能证明采用这种错误方法的代价不菲。
|
我们的解决方案
在 Visual Studio 2005 Team System 中,开发人员将会看到一套全新的、完全集成到 IDE 中的分析工具。这种分析工具与开发环境的紧密集成,可以帮助开发人员在产品开发的早期检测并修复代码缺陷和性能问题。这还可以帮助团队有效且高效地管理软件开发生命周期(Software Development Life Cycle,SDLC)。
在 Visual Studio 2005 Team System 中,有两类分析工具可用于构建健壮而可靠的软件:
在开发环境中集成分析工具可以帮助开发人员检测与编码、性能及安全性相关的问题。此外,可将代码分析工具作为签入策略的一部分用于每日构建 (nightly build) 过程,使开发团队能够在将代码签入到源树 (source tree) 之前修正缺陷。通过在开发的早期(而不是后期)更正问题,团队可降低修复代码缺陷的总体成本。
除了完全集成到 IDE 中之外,开发人员还可以从命令行使用这些工具。
Visual Studio 中的工具集成
在 Visual Studio 2005 Team System 中,通过使用代码分析工具和性能工具,开发人员可以对代码进行静态和动态分析。
代码分析工具
代码分析工具的目标是使开发人员能够对其项目进行静态分析,以检测和修复代码缺陷。为了实现这个目标,Visual Studio 2005 Team System 中包含了两个工具:
PREfast
PREfast 是一个静态分析工具,它为开发人员提供有关其 C/C++ 源代码中可能存在缺陷的信息。PREfast 报告的常见代码错误包括缓冲区溢出、未初始化内存、空指针取消引用、内存泄漏和资源短缺。
IDE
集成
为了使开发人员能够自然地使用分析工具,可以将 PREfast 完全集成到 IDE 中。通过在项目的 Property Pages 上选择 Yes (/prefast),开发人员可以轻松启用 PREfast,如图 1 所示。
图
1.
启用
PRE
f
ast
在生成过程中,为源代码生成的任何 PREfast 警告都出现在 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 还支持批注以改善代码分析的精确性。批注提供有关函数参数和返回类型的之前和之后条件的附加信息。
#include
[SA_Post( MustCheck=SA_Yes )] double* CalcSquareRoot
(
[SA_Pre( Null=SA_No )] double* source,
unsigned int size
)
在上面的示例中:
• |
[SA_Post ( MustCheck=SA_Yes)] 要求调用方检查 CalcSquareRoot 的返回值
|
• |
[SA_Pre ( Null=SA_No)] 要求调用方将非空参数“source”传递给 CalcSquareRoot
|
命令行支持
除了与开发环境完全集成之外,开发人员还可以从命令行使用 PREfast,如下所示。
C:\>cl /prefast Sample.cpp
FxCop
FxCop 是一个静态分析工具,它分析托管代码程序集并报告有关程序集的信息,例如,与 Microsoft .NET Framework Design Guidelines 中阐述的编程和设计规则相冲突。FxCop 表示在分析过程中作为规则执行的检查。规则是一段托管代码,该代码分析程序集并返回有关它发现结果的消息。规则消息识别任何相关的编程和设计问题,并在可能的情况下,提供有关如何修复目标的信息。
IDE
集成
为了使开发人员能够自然地使用分析工具,开发人员可以在项目的 Property Pages 上选择 Run FxCop,如图 3 所示。
图
3.
启用
FxCop
有关包含或排除规则,将规则作为警告或错误的附加选项,也可以在 Property Pages 中找到,如图 4 所示。
图
4. FxCop
规则
一旦启用 FxCop,在生成过程中,FxCop 就会在 Error List 中报告冲突,如图 5 所示。
图
5. FxCop
规则冲突
Error List 提供有关规则冲突的信息和建议,以便于您纠正错误。只需在 Error List 中双击规则冲突,即可轻松地定位到触犯了规则的代码行。
MSBuild
集成
Visual Studio 的下一个版本从根本上改进了生成过程,其方法是引入一个新的、名为 MSBuild 的生成引擎。可以通过 MSBuild 系统调用 FxCop。这使开发人员能够从命令行运行托管项目上的 FxCop。
性能工具
在 Visual Studio 2005 Team System 中,开发人员可以通过性能工具来度量、计算和定位代码中与性能相关的问题。这些工具都完全集成到 IDE 中,以提供无缝、友好的用户体验。
性能工具支持两种分析方法:
在采样的过程中,数据收集基础结构将定期中断正在执行的应用程序,以确定正在执行的是哪个函数,并增加函数的采样计数。它存储有关准备函数调用的调用堆栈的信息。
应用程序退出后,收集到的所有数据会生成为一个报告文件,您可以使用 IDE 中集成的报告功能轻松地查看该文件。
采样的优势在于低开销,因为这只是定期中断应用程序。这使得应用程序的行为能够更接近实际情况。这种方法的缺点是,它只能获取已采样函数的相关性能数据。有可能没有对需要采样的函数进行采样,因而无法获取有关该函数的信息。
使用仪器的优势在于可以收集应用程序的特定部分的精确性能数据。在使用仪器的过程中,“enter”和“exit”探针被插入到应用程序的函数中。这些探针将报告返回给数据收集基础结构,并允许用户捕获函数执行所需的精确时间(或其他衡量标准)。
分析应用程序
分析应用程序的首选使用模式是首先开始采样,然后根据采样所产生的结果检测应用程序的特定方面。
分析应用程序的过程相当简单。首先创建一个新的性能会话。在 Visual Studio 2005 Team System 中,可以使用 Performance Session Wizard 创建一个新的性能会话。
Performance Session Wizard
Performance Session Wizard 设置分析应用程序的必要环境。在 Visual Studio 2005 Team System 中,该向导为 EXE、DLL 和 ASP.NET 应用程序提供内置支持。
可以使用该向导创建一个 New Performance Session,如图 6 所示。
图
6.
启动性能向导
注 要手动创建一个新的性能会话,请使用菜单上的 New Performance Session 命令。可以采用这种方法来手动分析其他类型的应用程序(例如,Windows 服务)。
Performance Explorer
性能会话作为运行会话向导或手动创建会话的结果而创建。Performance Explorer 可以将其直观地表示出来,如图 7 所示。
图
7.
性能资源管理器
Performance Explorer 给用户呈现了层次结构。该层次结构的根节点表示 Performance Session。这种节点的属性是用户在创建 Performance Session 时设置的属性。如果用户使用 Performance Session Wizard 创建会话,则这些属性体现了用户在使用向导的过程中所选择的值。如果用户手动创建 Performance Session,则这些属性包含了它们的默认值。
根节点有两个子节点:Targets 节点和 Reports 节点。Targets 节点包含一个或多个目标,目标可以是 EXE、DLL 或 ASP.NET 应用程序。
Reports 节点包含与某个特定 Performance Session 相关的所有报告。
性能会话报告
一旦应用程序执行完毕,系统就会将一个性能会话报告自动添加到 Reports 节点。可以通过下面的视图来查看这些报告:
Summary
视图
Summary 视图为开发人员提供了其调查的起点。它显示应用程序执行过程中开销最高的函数,如图 8 所示。从该视图中的每个数据点,用户都可以定位到更详细的视图。
图
8. Summary
视图
Functions
视图
Functions 视图显示在应用程序的执行过程中调用的全部函数,这些函数存在于由该应用程序引用的所有模块之中,如图 9 所示。该视图显示的信息取决于所用的分析方法(采样与使用仪器)。
图 9. Functions 视图
Caller/Callee
视图
Caller/Callee 视图提供在 Functions 视图中所列函数的详细信息,如图 10 所示。
图
10. Caller/Callee
视图
Callstack
视图
Callstack 视图使用户能够向下搜索特定的调用跟踪,并分析哪些跟踪对性能的影响最大。
图
11. Callstack
视图
Type
视图
Type 视图提供有关某个特定类型的实例数量和总字节数的信息,如图 12 所示。
命令行支持
可以通过命令行工具使用性能工具功能。这为用户提供了灵活性,用户既可以从命令行运行这些工具,又可以通过脚本来使用它们,以便自动执行任务。