DevCreek was a metrics gathering, analytics, and sharing platform that I worked on at Intelliware for a few years starting in 2006.
It all started with a sketch from Kent Beck for real-time feedback during a test-driven development session for developers. As an instrument it would reveal their development patterns and provide feedback to guide their personal development process. To this end we first created a simple Eclipse plugin to show test executions and whether the test passed or failed. This stream of testing data could then by sent to a server as XML to provide a longer term perspective on an individuals testing and to share that amongst all the members of a team.
Over time this grew into TestCreek and then DevCreek. The server supported an extensible XML representation of events, and this grew to support more types of events over time, such as deployments and builds, and so on. The number of clients, or agents, increased from Eclipse to collecting test executions from maven and and other Java sources, to tests written in ruby, to other software analytics libraries.
|Code Coverage||DevCreek Eclipse plug-in||Java/JUnit, Ruby|
|Code Metrics||Eclipse Code Metrics||Eclipse based Java code metrics|
|Code Metrics||Maven||Maven based Java code metrics|
|Community||DevCreek Eclipse plug-in|
|Dependency||Maven||Maven component and Java dependencies|
|Performance||Performance||Java and Spring based framework for collecting runtime performance data|
|Unit Test||DevCreek Eclipse plug-in||Java/JUnit with EclEmma|
|Unit Test||Maven||Java build tests|
|Unit Test||Ruby||Native Ruby|
The system was implemented from a basic record that could be extended by any agent without needing to update the server code. Here is an example sharing the current task with a team.
<record> <community.message>Working on Documentation</community.message> <core.principal>DGJ</core.principal> <core.project>Example</core.project> <core.sessionId>75bb3da-72cd13e1-6045e566-60f4f98b-d0ecebdc</core.sessionId> <core.timeStamp>1173661254518</core.timeStamp> <core.timeZoneOffset>-14400000</core.timeZoneOffset> <core.type>community.SendMessage</core.type> </record>