65.9K
CodeProject 正在变化。 阅读更多。
Home

Visual Studio 2005 (C#、VB.NET) 中的代码质量保证

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.54/5 (32投票s)

2007 年 7 月 25 日

CPOL

6分钟阅读

viewsIcon

126843

一篇关于 VS2005 中/针对 VB.NET 和 C# 项目的质量保证选项/工具的文章。

引言

代码分析和代码度量是验证软件质量的一些**策略**。软件作为产品的质量可以用对软件的期望与我们实际拥有的(或我们如何看待它)来描述。“符合目的”标准是确定软件质量的一个重要概念。

除了满足功能需求外,我们还可以从另一个角度看待软件质量。软件的其他利益相关者(开发、运营等)也对软件产品的质量感兴趣。这些通常表示为软件产品必须具备的质量属性:可靠性、资源效率、可维护性、可测试性、可管理性等。

为了对软件质量属性进行一些客观的**测量**和量化,使用了过程和软件度量。过程度量更多地与软件开发过程方面和操作相关:例如,某段时间内的错误修复数量、每日构建错误数量、平均故障间隔时间等。软件度量更多地基于其静态形式的软件测量:软件代码。其中一些测量可以通过工具执行,而另一些则需要更多的人工干预。除了度量,还有另一组工具可以分析代码,但这些工具会检查代码是否(例如)符合特定的命名约定,或者代码是否引入了潜在的安全漏洞。

尽管这些工具可以用于审计场景,但它们也可以在编码期间使用,甚至集成到构建过程中。当然,在收到工具的反馈并确定可维护性、性能或其他质量属性方面的潜在问题后,是时候修改代码了。重构是指在不改变代码功能的情况下修改其内部结构,以提高源代码的可理解性,从而提高未来的可维护性。

手动检查是好的,也是最灵活的,但也是最繁琐的。这就是为什么工具支持必不可少。尽管如此,一份书面检查清单仍然很有价值,可以作为编码期间的参考或指导(主动与被动)。

以下是一些工具和 VS2005 功能的**列表**,可帮助您避免潜在的错误和不符合某些规则的情况。它绝不打算完整。我包含了一些截图,让您了解这些工具或功能的作用。

FXCop

**FxCop** 是一种代码分析工具,用于检查 .NET 托管程序集是否符合 Microsoft .NET Framework 设计准则。它使用反射、MSIL 解析和调用图分析来检查程序集(最新版本 1.3.5:www.gotdotnet.com)。

Screenshot - FxCop.jpg

当您在程序集上运行此工具时,您将收到一个警告列表

Screenshot - fxcopresult.jpg

早期警告

**早期警告**随 VB.NET 2005 后台编译器提供。它在编写代码时捕获运行时错误。例如

  • 未使用的局部变量
  • 没有返回值的函数、运算符
  • 对可能为空的引用的引用

Screenshot - EarlyWarning.jpg

编译选项

在“编译”选项卡中,您可以指定在发生某些编译条件时执行的操作。作为最佳实践,您应该启用**“将所有警告视为错误”**(警告是正在形成的错误!)。对于发布版本当然是必须的(调试版本也最好启用)。

Screenshot - compileTab.jpg

VS2005 代码分析

VS2005 软件开发人员团队版在质量保证领域具有一些附加功能。它有一个集成的 FxCop 版本(**代码分析**),必须明确启用(在编译期间运行,或者您可以按需运行它)。

Screenshot - carules.jpg

Screenshot - cawarning.jpg

重构

**重构**是一种有纪律的技术,通过改变现有代码的内部结构而不改变其外部行为来重构代码。如果您编写了代码来执行应用程序中的特定功能,您可以将其重构为一个方法,以便在应用程序中需要时可以重用。它在 C# 中开箱即用,但在 VB.NET 中需要一个附加组件(例如,devExpress)。一些例子

  • 提取方法:拆分大方法
  • 封装字段:提升为属性变量
  • 引入常量:避免字符串的重复定义

Screenshot - Refactor.jpg

该领域另一个备受推崇的参与者是 JetBrains 的 Resharper。

SourceMonitor

SourceMonitor 是一个免费软件,可以分析您的源代码(C#、VB.NET、C++ 等)并计算一些度量(非常快)。一个有趣的功能是能够在软件开发项目期间将度量保存在检查点中进行比较,这样您就可以比较它们,看看您的发展方向。还有几种其他方式查看计算出的度量。还有一个 Kiviat 图可以同时可视化多个度量。

Screenshot - sourcemonitorCheckpoints.jpg

Screenshot - SourceMonitorDetails.jpg

Screenshot - sourcemonitorKiviat.jpg

VS 2008 (Orcas)

新的 **Visual Studio 2008** 在 Visual Studio Team Developer 和 Team Suite 中提供了**代码度量**功能。此新功能允许用户为项目和解决方案生成代码度量,并在“代码度量结果”工具窗口中显示结果。它目前计算五种不同的度量:可维护性指数、圈复杂度、继承深度、类耦合和代码行数。

Screenshot - vs2008metricsA.jpg

Screenshot - vs2008metricsB.jpg

NDepend

.NET 项目中度量和代码分析最常引用的工具之一是 **NDepend**。它在应用程序级别、程序集级别、类型级别(LCOM、RFT…)和 IL 指令级别(CC、指令数量)提供了许多度量。它可以帮助您检测哪些程序集可能难以维护。它是非侵入式的,主要在编译的 IL 上工作。对于某些度量,需要 PDB 文件。不过,某些度量仅适用于 C# 代码。作者 Patrick Smacchia 还维护了一个网站,描述了每个度量。对于交互式分析,您将串联使用两个应用程序:NDepend.Project 和 Visual NDepend。还有一个控制台程序可以集成到构建过程中并生成 XML 文件。最强大的功能之一是 NDepend 允许您编写和评估用代码查询语言 (CQL) 编写的查询。这是一种类似于 SQL 的语言,允许您查询 NDepend 对代码结构的内部视图。它允许一个可定制的系统来监视公司编码标准的违规情况。当然,NDepend 附带了许多预构建的 CQL 查询。NDepend 是收费的。

Screenshot - ndependproject.jpg

Screenshot - ndependresults.jpg

Screenshot - VisualNDepend.jpg

Screenshot - VisualNDependResults.jpg

Reflector 插件

Lutz Roeder 的 .NET **Reflector** 是一个用于检查程序集的工具,它有**插件**来计算一些度量并可视化程序集之间的依赖关系(www.codeplex.com)。

Screenshot - ReflectorGraph.jpg

Screenshot - ReflectorMetrics.jpg

Screenshot - ReflectorMetrics2.jpg

Screenshot - ReflectorMetrics3.jpg

代码样式强制执行器

**代码样式强制执行器** 是 Visual Studio 2005 的 DXCore 插件,它根据可配置的代码标准和最佳实践检查代码。它是为 C# 开发的,但其中一些规则也适用于 VB.NET,尽管未经测试。它基于 Idesign 样式指南

Screenshot - StyleEnforcer.jpg

结束语

我建议您试用这些工具。许多这些工具还附带命令行版本,因此您可以将它们集成到(例如)您的构建过程中。

当然,代码分析和代码度量只是质量保证技术的一个子集,但那些是另一篇文章的主题。

历史

  • 2007 年 10 月 8 日:更新了文章,加入了多条留言中的评论。
© . All rights reserved.