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

使用 Klocwork 进行编码:开发者的视角

starIconstarIconstarIconstarIcon
emptyStarIcon
starIcon

4.80/5 (4投票s)

2015年3月6日

CPOL

9分钟阅读

viewsIcon

28134

Klocwork 就像我的代码拼写检查器或专业编辑器。它让我的代码听起来更专业。如果我是一个大型开发团队的一员,它将是一个非常强大的管理工具。

引言

应用程序安全和代码质量。这是我们投入大量精力关注的两个方面,但随着应用程序复杂性和应用程序组件数量的增加,这两个方面也变得越来越困难。

这就是代码重构、分析和安全工具发挥作用的地方。最近,我有幸测试了 Klocwork 静态代码分析 10.2 的受控发布版本。这是一个代码重构、组件安全和报告平台。本文将分享我对该工具的看法。

首先,简单介绍一下背景。我是一名客户端 .NET 开发者,后来转变为 PHP Web 应用开发者。我写的大部分代码是 B2B 领域的数据解析和文件分析工具。我从埋头写代码,发展到将编码作为一种爱好,现在是一名 DevOps 市场分析师。

我自称是“胶带程序员”,因为我擅长原型开发,但不擅长生产代码。这更需要我在背后有代码分析工具的支持。我的视角更多地是从开发经理的角度,而不是埋头苦干的开发人员的视角。

环境

在我的测试中,我进行了两个测试场景,并测试了一些一次性功能。它们是:

  1. 一个用于分析文件共享并在浏览器中显示结果的 win32 应用程序。代码在此
  2. 以及一个酒庄的电子商务 Web 应用程序。

我的环境是在 CloudShare 上使用 Windows 2012 Server(16GB RAM,双核 Xeon 处理器)和一个 Apache Web 服务器。我使用 Mono 在 Apache 上运行 .NET 应用程序(通常不会这样做,但我试图将所有东西都放在一台机器上),我的 IDE 是 Visual Studio 2012。我最初使用的是 Visual Studio 2015,因为我想看看它是否可用,但当时它还不可用。

在实际场景中,会有一个用于静态代码分析的开发人员机器和一个用于 Klocwork Web 应用程序的独立 Web 服务器。你会从开发人员机器部署到 Web 服务器,分析会在发布的应用程序上进行,但很可能也会在开发人员机器上进行。好处是你可以为所有环境的开发、测试、集成、暂存和生产环境执行此操作。

Install

当然,我的测试是从安装开始的。安装体验对我来说非常重要。我的期望是,在 30 分钟内就能开始使用任何新工具。对于 Klocwork,在我收到许可证文件和下载链接后,我最初担心它会很复杂。但事实并非如此,只需 15 分钟即可完成安装(请注意,我不是服务器专家)。以下是我在安装方面的一些笔记:

  • 安装分为两部分。一部分是服务器,一部分是桌面静态代码分析工具。在我这里是 Visual Studio,但它也支持 Eclipse。
  • 我发现他们为服务器安装提供了整个堆栈(Klocwork、Apache、FLEXlm、MySQL),这真的很酷。我已经安装了 Bitnami WAMP 堆栈,并认为这会是个问题,但事实并非如此。我确实需要将 Klocwork 设置为使用与 8080 不同的端口。
  • 安装很快,我原本以为需要进行很多 Web 服务器配置。唯一的问题是 Klocwork 许可证服务器服务没有自动启动。这阻止了我进行初始登录。我手动启动了服务,一切都工作正常。

安装完成,是时候开始分析了!我为我的每个 VS 项目创建了一个 Klocwork 项目。我的项目相对较小。最大的项目也只有大约 100 个文件。下一步是对我的两个项目文件进行初始完整分析。此后,每次构建都会进行增量分析。

我完成了两个应用程序的运行。一旦我学会了命令,一切都很顺利。每个项目有三个命令。出现了一些错误,但似乎没有影响到我正在查看的任何内容。然后我在 Klocwork Web 应用程序中审查了所有结果。

值得注意的是,我的测试非常个人化。然而,我认为团队和报告方面是最重要的价值,我将在下面解释。

在应用程序方面,我花了大量时间在代码分析结果和报告上。以下是我的测试中的优点、缺点和愿望清单:

缺点

  • 完整分析运行有一些令人恼火的地方。首先,它是命令行操作。其次,你希望你的项目位于一个方便的位置,如 C:\,以便于输入命令,但这并非最佳实践。第一次运行有很多步骤,我认为可以进行整合。我的想法是编写一个应用程序/批处理文件,允许我浏览到 SLN 文件并运行分析。
  • 我希望 Visual Studio 插件可以在 VS Gallery 中提供。我认为在未来的 VS 版本中,他们将不得不这样做。
  • 我觉得用户体验的某些部分有些过时。
  • C# 的支持仅限于大约 40 个检查器,而 C++ 有大约 250 个。我真的很希望有 C# 的实时(代码补全)分析。忘记运行分析实在太容易了。
  • 需要一个更好的警报系统。可以设置警报,但很复杂。现有的警报是电子邮件警报,但你必须设置特殊规则,这样 Klocwork 才知道警报发送给谁。你必须使用源所有权文件或构建日志。我还希望它能扩展到短信、Zapier 等。或者与 PagerDuty 或 VictorOps 等警报工具集成。
  • 服务器更新过程是个问题。当有更新时,你必须安装一个新的服务器。然后你决定是否迁移。对我来说,迁移是一个令人望而生畏的词。我希望看到“安装覆盖”选项,但我也希望看到自动更新或手动检查更新并提供安装选项。即使只是为了新的检查器,就像垃圾邮件软件做的那样。

值得强调的优点

  • 团队聚焦(详见下文)。
  • C++ 内置的实时重构非常棒。我需要那个小红箭头来告诉我发生了什么。
  • 能够关联所有文件中的问题(追溯)和引用非常棒。VS 会帮助你处理简单的逐行问题,但追踪器会跨越整个应用程序范围内的更广泛问题。

  • 文档。非常好。特别是关于检查器代码细节的参考。
  • 可以在 Web 应用程序中快速查看代码,而无需打开 Visual Studio,这很方便。
  • 报告和分析对我来说非常重要且有用。
  • VS 中的静态代码分析会告诉你问题的严重性。这有助于集中注意力,并且在 Web 应用程序中也有体现。
  • 优点/缺点:你可以编写自己的检查器。这对于建立的公司标准或团队设计标准非常有用。缺点是它们似乎不太容易实现,并且围绕它们的变更控制有点复杂。
  • 内置的检查器安全基于 CCSLP 标准。所以它是相对静态的。我想要更多,然后我发现它与 Maven 集成。这真的很酷,也是我想要的组件安全。尽管我希望这是默认设置。
  • 圈复杂度指标非常棒。它帮助团队专注于特定问题,并随着时间的推移监控问题复杂性与发布之间的关系。
  • 它们通过钩子系统与 Bugzilla、Jira、Rational Team Concert 等票据系统集成。你还将在两个系统之间拥有双向引用 URL。从我的角度来看,这是强制性的,因为你不想在两个不同的地方进行潜在的票据管理。

愿望清单

  • 公共自定义检查器库。就像一个列表,列出了为他人编写自定义检查器的人,供他人受益。或者 Klocwork 专业服务团队编写的通用检查器。
  • 我希望有一个 IIS 版本,这样我就可以更轻松地将其与我的 .NET Web 应用程序配合使用。但实际上,正确的设置应该是让你的应用程序运行在自己的服务器上,Klocwork 运行在自己的服务器上,代码分析从一个发送到另一个。
  • 错误监控。能够获取整个堆栈跟踪中的数据将非常酷。这可以通过自动在异常块中插入对 Web 应用程序的调用来实现。
  • 像杀毒软件那样自动更新检查器。
  • PHP 支持。
  • 预配置的 AWS 或 Azure 实例。

团队

对我来说,最大的收获不是一个单独的功能,而是更广泛的团队级分析概念。我在 DevOps 领域倡导需要全面思考,不仅要看单个开发者的代码,还要看整个流水线。

通常代码分析是高度个人化的,但 Klocwork 允许你从个人抽象到团队。例如,你可以查看发布趋势、整体代码质量以及与待办事项列表到错误的关联。

每次构建都会收集分析数据,并且通过一些工作,你可以将其集成到 ALM 或持续集成 (CI) 流程中。你可以通过将分析脚本添加到你的编译和运行过程中,或者将其添加到你的 TFS (inject)、Jenkins、Octopus Deploy、Go 等构建脚本中来实现。

分析,哦,那些分析!它们讲述了一个精彩的故事。例如,看看我构建的仪表板。

作为团队负责人,这张图表告诉我很多事情。首先,我们的错误类型(右上角)分布相对均匀。我想了解最常见的错误,以便我们在站会中花一些时间来重点关注这些错误。令我尴尬的是,在我编写的两个应用程序中,60% 的问题分布是空的异常块 (CS.EMPTY.CATCH: 11)。

左上角是最有趣的图表。每个条形代表一个构建,以及该构建中的问题数量和严重性。如果你看看最后两个版本,我们可以看到数量和严重性都有大幅增长,这可能是团队压力过大!或者新功能存在一些持续存在的大问题。

这是如此强大的东西,可以让你摆脱杂乱,专注于团队和整体代码质量。

总结

我一开始很犹豫,但不得不承认,我真的很喜欢 Rogue Wave 的 Klocwork 产品。(然而,我认为其用户体验需要改进,并且其自身的交付和应用程序功能需要现代化。)

我没有成为主流程序员的部分原因是我太懒得重构我的代码。因此,我的代码,嗯……不太好。

Klocwork 就像我的代码拼写检查器或专业编辑器。它让我的代码听起来更专业。如果我是一个大型开发团队的一员,它将是一个非常强大的管理工具。

© . All rights reserved.