您的位置:首页 > 其它

构建健壮而可靠的软件

2005-07-20 07:58 253 查看
作者:Kamran Iqbal (Microsoft Corporation)
相关技术:代码分析、代码检测
难度:★★★☆☆
读者类型:微软技术开发人员、程序代码测试人员

[摘要]本文描述Visual Studio 2005 Team System提供的代码分析和可用执行工具。

简介

要开发健壮而可靠的软件,开发人员需要一套集成分析工具来帮助他们在开发的早期检测代码缺陷和性能问题。

分析工具支持

过去,由于Visual Studio中缺少对代码分析的支持,因此开发人员不得不购买第三方工具,以构建自定义分析工具或者发布未经分析的代码。

花费额外的成本购买第三方工具

从众多的分析工具中选择一个既能满足软件分析的要求又在预算限制范围之内的工具,未必总是一项轻松的任务。另外,这些工具可能没有集成到Visual Studio集成开发环境(IDE)中,因此通常需要花费额外的时间来学习如何顺利地使用它们。

构建自定义分析工具

构建自定义分析工具需要资源、技能和经验。这对大多数公司中的开发团队而言是不现实的,仅仅是少数公司可以担负得起的选择。

发布未经分析的代码

在工时期限和预算限制紧张的情况下,发布未经分析的代码似乎是一种正确的方法,但如果软件在部署之后发生故障,可能证明采用这种错误方法的代价不菲。

解决方案

在Visual Studio 2005 Team System中,开发人员将会看到一套全新的、完全集成到IDE中的分析工具。这种分析工具与开发环境的紧密集成,可以帮助开发人员在产品开发的早期检测并修复代码缺陷和性能问题。这还可以帮助团队有效并且高效地管理软件开发生命周期(Software Development Life Cycle,SDLC)。在Visual Studio 2005 Team System中,有两类分析工具可用于构建健壮而可靠的软件:

代码分析工具
性能工具

在开发环境中,集成分析工具可以帮助开发人员检测与编码、性能及安全性相关的问题。此外,可将代码分析工具作为签入策略的一部分用于日常构建过程,使开发团队能够在将代码签入到源代码树(source tree)之前修正缺陷。通过在开发的早期(而不是后期)更正问题,团队可降低修复代码缺陷的总体成本。除了完全集成到IDE中之外,开发人员还可以从命令行使用这些工具。

Visual Studio中的工具集成

在Visual Studio 2005 Team System中,通过使用代码分析工具和性能工具,开发人员可以对代码进行静态和动态分析。

代码分析工具

代码分析工具的目标是使开发人员能够对其项目进行静态分析,以检测和修复代码缺陷。为了实现这个目标,Visual Studio 2005 Team System中包含了两个工具:

PREfast
FxCop

PREfast

PREfast是一个静态分析工具,它为开发人员提供有关其C/C++源代码中可能存在缺陷的信息。PREfast报告的常见代码错误包括缓冲区溢出、未初始化内存、空指针取消引用、内存泄漏和资源短缺。

IDE集成

为了使开发人员能够自然地使用分析工具,可以将PREfast完全集成到IDE中。通过在项目的Property Pages上选择Yes (/prefast),开发人员可以轻松启用PREfast,如图1所示。



图1 启用PREfast

在生成过程中,为源代码生成的任何PREfast警告都出现在Error List中,这些警告包括缺陷路径信息。双击突出显示缺陷路径的警告,可以进入代码编辑器中的警告,如图2所示。



图2 PREfast警告

#pragma支持

开发者可以使用#pargma指令来将警告视为错误或者禁用警告,如下所示:

#pragma warning (error: 6260) // 将6260号警告视为错误
#pragma warning (disable: 6011) // 禁用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是一个静态分析工具,它分析托管代码程序集并报告有关程序集的信息。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所示。



图12 Type视图

命令行支持

可以通过命令行工具使用性能工具的功能。这为用户提供了灵活性,用户既可以从命令行运行这些工具,又可以通过脚本来使用它们,以便自动执行任务。

小结

Visual Studio 2005 Team System包含一套新的、完全集成到开发环境中的分析工具,并且可以从命令行使用这套工具。通过提供代码缺陷和性能瓶颈检测,这些强大且易于使用的工具可以帮助开发人员构建健壮而可靠的软件。
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: