【问题标题】:Visual Studio Maintainability Index has hierarchy only down to main()Visual Studio 可维护性索引的层次结构仅向下到 main()
【发布时间】:2014-01-30 01:51:28
【问题描述】:

我是旧版 C++ 代码库的当前所有者。它有几十个源文件和头文件。该项目通常在 linux 上开发、构建和部署。在 linux 中,构建系统是 scons/gcc,产品是单个可执行文件。

我想为代码的各个部分生成可维护性指数 (MI),以帮助表明对代码区域的架构更新比以前的架构更易于维护。所以,我做了一些研究,发现 Visual Studio 2013(我拥有 Ultimate 许可证)可以做到这一点。

我成功地将所有源代码导入到一个新的 VS2013“Win32 控制台应用程序”中。通过进行一些更改以适应 gcc 和 VS2013 之间的差异,我还获得了构建源代码。

我尝试运行“分析 | 计算 [项目] 的代码指标”,而 VS2013 产生了这个错误:

项目:[省略] 配置:调试 范围:无 组装:[省略] 可维护性指数: 圈复杂度: 继承深度: 类耦合: 代码行: 消息:项目目标文件“[省略]”不包含托管代码。

所以我将“Properties | Configuration Properties | General | Common Language Runtime Support”的值从“No CLR Support”更改为“Pure MSIL CLR Support”,重新运行它,并在“Code Metrics Results”窗口中得到了这个(尽我所能显示输出的内容,因为我还不能发布图片):

层次结构可维护性指数圈复杂度... -------------------------------------------------- -------------------------------- * [可执行文件](调试)36 31 * 全球 36 31 * main(int, char** const): int 36 31

我无法获得比 main() 更详细的信息,无法像 [executable] 或 Global 那样扩展 main()。我认为我能够在每个文件、每个功能或每个类级别上获得分数。

谁能告诉我:

  • VS2013 能否在每个文件、函数或类级别生成 MI?
  • 怎么做?
  • 有没有什么软件

我想对代码进行最少的更改,但我可以轻松地更改项目类型、项目属性、创建新项目并重新导入源、将构建产品更改为 .dll 或 .lib 等。

【问题讨论】:

  • 什么是可维护性指数?可能有一个众所周知的 Linux 工具使用不同的命名(例如 c++check [免责声明 - 我没有使用该工具 - 我只是用谷歌搜索了它])。
  • 可维护性指数基本上是一个指标,表明维护代码的相对难易程度。更多详情:msdn.microsoft.com/en-us/library/bb385914.aspx & projectcodemeter.com/cost_estimation/help/…。感谢您提供指向 c++check 的链接,现在正在查看。
  • 刚刚看了c++check——它是一个很好的静态分析工具,但不是我要找的……我要找的是可以量化一种实现方式的东西复杂的数学算法比其他实现方式更容易阅读和维护。
  • 快速谷歌搜索显示 code.google.com/p/… 至少有一些关键字匹配(圈复杂度数)并计数 nloc。 Loc 您可以使用wc -l 获得,因此您可以使用 Halstead Volume 获得此号码。
  • 我认为发生这种情况是因为我的代码是非托管 C++,并且我发现代码指标仅在托管代码上运行的文档。显然,添加 /clr* 选项之一不足以产生有用的结果。我的一位同事告诉我,我可以使用他为 Klocwork 编写的一些自定义脚本生成 MI,我也有许可证,所以我打算试试。

标签: c++ visual-studio visual-studio-2013 code-metrics maintainability


【解决方案1】:

正如我在评论中指出的那样,发生这种情况是因为我的代码是非托管 C++,而且我发现代码指标仅在托管代码上运行的文档。即使添加 /clr 选项之一也不足以获得在函数级别生成的指标。

【讨论】:

  • 我认为您只需要使用不同的工具。确实,为托管代码创建一个要容易得多,但也有一些用于 C++ 的代码分析器。如果它不是非常复杂的指标,它应该很容易找到。然而,在 C++ 中,由于模板和预处理器有时确实会造成严重破坏,因此代码分析器经常会被严重混淆。小心点;)
  • 这就是我最终要做的事情......我能够使用 Klocwork 和同事编写的一些 python 脚本来生成指标。我认为,经过这次考验,我将创建一个新的 Metric Metric,这是一个描述在特定代码库上生成指标是多么容易的索引。
猜你喜欢
  • 2012-01-23
  • 1970-01-01
  • 2011-10-24
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多