监控多语言产品中的代码度量标准

时间:2009-09-22 15:31:50

标签: language-agnostic build-process reporting metrics

我们有一个由C ++和Java部件组成的产品。 C ++的东西是使用make构建的,java项目由一些ant项目和一些maven2项目组成。

我正在寻找一种工具,可以帮助我逐步从构建系统中获取有用的指标。例子包括

* Total build time
* C++ project build time
* Java build time
* Number of compiler warnings
* Number of unit tests (run/passed/failed/errors). (Tests are written in cxxTest and JUnit)
* Acceptance test metrics (run/passed/failed/errors)
* Total number of files
* LOC (to keep the managers happy)

我可能会想到很多其他指标,但你明白了。

获取一次性报告的这些指标非常简单。我真正需要的是一个简单的工具,可以让我随着时间的推移绘制这些指标。

这是一个非常有用的简单用例是编译器警告,因为我们可以看到警告的数量随着时间的推移趋于零。 (我们无法立即修复它们,因为它是一个非常大的项目,而我们只是没有时间进行大爆炸的方法)。它还可以帮助我们在引入新警告时迅速发现它们。

我已经看到了这个问题Monitoring code metrics in Java over longer time period,但我正在寻找一些与语言无关的东西

所以,总结一下。我正在寻找能够随着时间推移报告指标的内容,这些内容很容易扩展,有基于网络的报告gui,最好是便宜的。 (不要求太多了!)

编辑:为了清楚起见,我们使用CruiseControl作为我们的CI服务器。我还没有看到一种 easy 方式来为其输出添加指标或基于时间的指标。也许我错过了一些明显的东西。我似乎this页面有关添加自定义指标的信息,但对我来说这有点笨拙。

理想情况下,我希望以简单的格式将指标写入文件,并动态生成指标。理想情况下,我想将下面的输出变成简单的图表

Build Id | Build Time | Metric       | Value 
00000001 10:45 TestPassRate 95
00000001 10:45 BuildTime 300
00000001 10:45 C++BuildTime 200
00000001 10:45 JavaBuildTime 50
00000001 10:45 TestTime 50
00000002 11:45 ......

3 个答案:

答案 0 :(得分:1)

如果您正在使用Java CruiseControl,则可以轻松获得所需的指标。您可以在的日志文件中包含任意.xml,然后引用报告.jsp页面中的任何值。这正是PMD趋势图以及checkstyle和Javadoc错误的完成方式。来自metrics.jsp:

<jsp:useBean id="xpathData" class="net.sourceforge.cruisecontrol.chart.XPathChartData" />
<%
    xpathData.add("CheckStyle", "count(/cruisecontrol/checkstyle/file/error)");
    xpathData.add("PMD", "count(/cruisecontrol/pmd/file/violation)");
    xpathData.add("Javadoc", "count(/cruisecontrol/build//target/task[@name='javadoc']/message[@priority='warn' or @priority='error'])");
%>
<cewolf:chart id="chart" title="Coding violations" type="timeseries"  xaxislabel="date" yaxislabel="violations">
    <cewolf:data>
        <cewolf:producer id="xpathData">
          <cewolf:param name="build_info" value="<%=build_info%>" />
        </cewolf:producer>
    </cewolf:data>
    <cewolf:chartpostprocessor id="xpathData" />
</cewolf:chart>
<cewolf:img chartid="chart" renderer="cewolf" width="400" height="300"/>

您可以将其粘贴到metrics.jsp中,将带有xpath的xpath查询替换为您的指标,您就可以了。

答案 1 :(得分:0)

您可能正在寻找CI服务器(持续集成)。这些服务器监视源存储库(CVS,Subversion,等等)并构建所有已更改的项目以及所有依赖项目。

在我们的位置,我们使用TeamCity但还有更多(list on wikipedia

[编辑]大多数CI服务器在构建之后显示某种报告(花了多长时间,运行了多少次测试等)。您需要做的就是在构建之后触发程序,该程序将获取此信息并将其保存在数据库中。

您可以收获CI服务器的历史构建页面,但它们通常不会到达很远的地方,这就是为什么最好将数据保存在不同的地方。如果您正在寻找收获简单的东西,请尝试使用Beautiful Soup的Python。否则,Java和HTTP Client以及jTidy是可行的方法。

答案 2 :(得分:-1)

rrdtool可能会提供您正在寻找的那种历史视图。您只需要让CI服务器在每次运行时在正确的位置转储构建报告,rrdtool可以从那里获取它。