Мониторинг метрик кода в мультиязычном продукте - PullRequest
1 голос
/ 22 сентября 2009

У нас есть продукт, который состоит из частей 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)

Возможно, есть множество других метрик, о которых я мог бы подумать, но вы поняли.

Получить эти показатели для разового отчета довольно просто. Что мне действительно нужно, так это простой инструмент, который позволит мне строить эти показатели с течением времени.

Простым вариантом использования, где это было бы весьма полезно, были бы предупреждения компилятора, поскольку мы могли видеть количество предупреждений, стремящихся к нулю с течением времени. (мы не можем исправить их все сразу, так как это довольно большой проект, и у нас просто нет времени для подхода большого взрыва). Это также поможет нам быстро обнаружить новые предупреждения по мере их появления.

Я видел этот вопрос Мониторинг метрик кода в Java в течение более длительного периода времени , но я ищу что-то немного более независимое от языка

Итак, подведем итоги. Я ищу что-то, что со временем сообщает о показателях, оно легко расширяемо, имеет веб-интерфейс для создания отчетов и желательно дешево. (не спрашивая много да!)

Редактировать: Для ясности, мы используем CruiseControl в качестве нашего CI-сервера. Я просто не видел простого способа добавления метрик или метрик на основе времени к его выводу. Может быть, я упускаю что-то очевидное. Мне показалось эта страница о добавлении пользовательских метрик, но это немного неуклюже для меня.

В идеале я хотел бы записать метрики в файл в простом формате и иметь возможность генерировать метрики динамически. В идеале я хотел бы превратить что-то вроде вывода ниже в простой график

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

Ответы [ 3 ]

1 голос
/ 25 сентября 2009

Если вы используете 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 на ваши метрики, и все готово.

0 голосов
/ 25 сентября 2009

rrdtool может обеспечить вид исторического представления, которое вы ищете. Вам просто нужно заставить свой CI-сервер каждый раз запускать отчет о сборке в нужном месте, и rrdtool может взять его оттуда.

0 голосов
/ 22 сентября 2009

Возможно, вы ищете CI-сервер (непрерывная интеграция). Эти серверы просматривают исходный репозиторий (CVS, Subversion и т. Д.) И создают все измененные проекты, а также все зависимые проекты.

Вместо нас мы используем TeamCity , но есть много других ( список в википедии )

[EDIT] Большинство CI-серверов показывают какой-то отчет после сборки (сколько времени прошло, сколько тестов было выполнено и т. Д.). Все, что вам нужно сделать, это запустить программу после сборки, которая получает эту информацию и сохраняет ее в базе данных.

Вы можете собрать исторические страницы сборки сервера CI, но обычно они не доходят очень далеко, поэтому лучше сохранять данные в другом месте. Если вы ищете что-то простое для сбора урожая, попробуйте Python с Beautiful Soup . В противном случае Java и HTTP-клиент плюс jTidy - это путь.

...