Home

Developer Services Home | Public Server | Stable Release | Last Build | Build Archive | Telemetry Report | Defect Tracking | People | About

Hackystat is an open source framework for automated collection and analysis of software engineering process and product metrics. Hackystat users attach software "sensors" to their development tools, which unobtrusively collect and send raw data about development to a Hackystat web application for analysis and display. This website provides access to the source and binary versions of the system, publications, technical reports, documentation, and the developer community.

Hackystat Version 8

We are pleased to announce that we are now at work on a major redesign of Hackystat. The new design will implement Hackystat as a set of RESTful web services, and is intended to provide the following benefits:

As part of the Version 8 implementation process, we are moving the sources and documentation to Google Project Hosting. Please see the Hackystat Version 8 Home Page for details on this version and the status of development.

Release Announcements

01-May-2007 Stable release of 7.7 configurations.
23-December-2006 Stable release of 7.6 configurations.
18-October-2006 Stable release of 7.5 configurations.
07-June-2006 Stable release of 7.4 configurations.
17-March-2006 Stable release of 7.3 configurations.

Documentation

Hackystat documentation is organized into four volumes: the User, Administrator, Developer, and Reference Guide. Like the rest of Hackystat, this documentation framework is modular, extensible, and customizable to the set of modules making up a particular configuration of Hackystat. The following configuration of the Hackystat documentation guides is generated nightly from the set of all public Hackystat modules, and thus may refer to features not present in any particular configuration (including the configuration installed on the public Hackystat server.)

The Hackystat Documentation Framework is relatively new, and we have not yet ported all prior documentation to this format. The following links provide access to older documentation while we transition it into the new framework.

Selected Publications and Tech Reports

  1. Results from the 2006 Classroom Evaluation of Hackystat-UH
  2. Automated Recognition of Test-Driven Development with Zorro
  3. Requirement and Design Trade-offs in Hackystat: An in-process software engineering measurement and analysis system
  4. Improving Software Development Process and Product Management with Software Project Telemetry
  5. Automated recognition of low-level process: A pilot validation study of Zorro for test-driven development
  6. Actual Process: A Research Program
  7. Continuous GQM: An automated framework for the Goal-Question-Metric paradigm
  8. Telemetry Plate Lunch Contest Results
  9. A continuous, evidence-based approach to discovery and assessment of software engineering best practices
  10. Studying Micro-Processes in Software Development Stream
  11. Cedar: Cyberinfrastructure for Empirical Data Analysis and Reuse
  12. Understanding HPCS development through automated process and product measurement with Hackystat
  13. Measuring the Processes and Products of HPCS Development: Initial Results for the Optimal Truss Purpose-based Benchmark
  14. Improving Software Development Management through Software Project Telemetry
  15. Proceedings of the First Hackystat Developer Boot Camp
  16. Overview of the Software Telemetry Research Project
  17. Hackystat Hacker Certification Exam
  18. Practical automated process and product metric collection and analysis in a classroom setting: Lessons learned from Hackystat-UH
  19. Results from the 2003 Classroom Evaluation of Hackystat-UH
  20. The Hackystat JPLBuild System: Overview and Initial Results
  21. Beyond the Personal Software Process: Metrics collection and analysis for the differently disciplined

Features in a nutshell

Sensors Ant, BCML, Bugzilla, CCCC, Checkstyle, CLI, CppUnit, CVS, DependencyFinder, Eclipse, Emacs, Emma, FindBugs, Idea, JBlanket, Jira, JUnit, Jupiter, LoadTest, LOCC, Office, PMD, SCLC, SVN, Vim, VisualStudio
Sensor Data Types Activity, BuffTrans, Build, CLI, CodeIssue, Commit, Coverage, Dependency, DevEvent, FileMetric, Issue, Perf, ReviewActivity, ReviewIssue, UnitTest
Analysis Types Personal metrics, Project metrics, Cross-Project metrics, Workflow, Software Telemetry
Languages Java, C#, C++, Ada, Chapel, Eiffel, Fortran, Lisp, Matlab, Pascal, Perl, Tcl, ZPL, XML, HTML, JSP, SQL
Reports and Charts XML, HTML, CSV, Charts (Bar, Line, Scatter, Box-and-Whisker).

Getting Hackystat

There are several ways to obtain Hackystat. Which one you choose depends upon your needs for stability and/or modifiability.

See the Administrator Guide for complete instructions on installing and configuring Hackystat.

Hackystat Architecture: modules, subsystems, and configurations

Hackystat is designed to be extensible and configurable along three primary dimensions: (1) the set of "sensors" (i.e. plugins to development tools that gather process and product data); (2) the set of "sensor data types" (i.e. structures that represent raw sensor data of various types); and (3) the set of "applications" (i.e. analyses that provide useful information based upon the data collected by the sensors).

To provide this flexibility, Hackystat has an architecture consisting of over 60 public "modules" that are organized into four "subsystems". The "Core" subsystem includes modules that provide basic framework mechanisms. Modules in the "Sdt" subsystem implement sensor data types. Modules in the "Sensor" subsystem implement sensors for development tools. Finally, modules in the "App" subsystem provide applications that generate useful analyses over the sensor data collected by the sensors.

A Hackystat "configuration" consists of a subset of modules from across the four subsystems providing the specific sensors, sensor data types, and applications best suited for a particular development context. The Stable Release and Last Build pages provide access to a set of pre-defined configurations that we build and maintain. It's relatively easy to build your own custom configuration if none of these fit your needs. You can even build a custom configuration that includes one or more "private" Hackystat modules you have implemented yourself and which are not part of the public Hackystat distribution.

The following table lists the set of public Hackystat modules in alphabetical order. The module name prefix indicates the subsystem that the module belongs to---"hackyApp" indicates the Application subsystem, and so forth. Each module appears with a brief description of its purpose and a list of "Dependent modules". This list indicates the modules that this module is directly dependent upon. To create a configuration, the modules that are dependent both directly and indirectly must be included in the build.

hackyApp_BuildAnalysis Provides analyses of daily build data to improve the rate of successful builds.

Dependent modules: hackyCore_Telemetry, hackySdt_Commit, hackySdt_Build, hackySdt_Activity

hackyApp_Cgqm Provides support for the "continuous goal-question-metric (cGQM)" analysis method.

Dependent modules: hackyCore_Common, hackyCore_Telemetry, hackySdt_Activity, hackySdt_Build, hackySdt_Commit, hackySdt_Coverage, hackySdt_Dependency, hackySdt_FileMetric, hackySdt_Issue, hackySdt_UnitTest, hackySdt_WorkspaceMap, hackyApp_StdCmd

hackyApp_Cocomo Provides analyses to support the basic Cocomo cost estimation model.

Dependent modules: hackyCore_Kernel

hackyApp_Course Provides support for comparative analysis of software engineering projects in a classroom setting.

Dependent modules: hackySdt_Activity, hackySdt_Coverage, hackySdt_FileMetric, hackySdt_UnitTest

hackyApp_Experiment Provides support for setup and execution of empirical experiments with Hackystat.

Dependent modules: hackyCore_Telemetry, hackySdt_Activity

hackyApp_Hpcs Provides support for analysis of high performance computing application development products and processes.

Dependent modules: hackyCore_Telemetry, hackySdt_FileMetric, hackySdt_Perf

hackyApp_Mds Provides support for analysis of the Mission Data System (MDS) workflow and build process.

Dependent modules: hackyCore_Telemetry

hackyApp_Pri Provides analyses supporting the "Priority Ranked Inspection" method.

Dependent modules: hackyCore_Telemetry, hackySdt_Activity, hackySdt_Build, hackySdt_Coverage, hackySdt_Dependency, hackySdt_FileMetric, hackySdt_Issue, hackySdt_Commit, hackySdt_ReviewIssue, hackySdt_UnitTest, hackySdt_WorkspaceMap

hackyApp_PrjSize Provides (partially implemented) support for size estimation based upon prior Project data.

Dependent modules: hackyCore_Common, hackySdt_FileMetric, hackySdt_Activity

hackyApp_Review Provides support for analysis of review activity and review issue sensor data.

Dependent modules: hackyCore_Telemetry, hackySdt_ReviewActivity, hackySdt_ReviewIssue

hackyApp_Sdsa Provides support for "software development stream analysis", a rule-based approach to inferring higher level developer behavioral patterns (such as Test Driven Design episodes) from sequences of low level sensor data.

Dependent modules: hackyCore_Kernel, hackySdt_Activity, hackySdt_BuffTrans, hackySdt_Build, hackySdt_Cli, hackySdt_Commit, hackySdt_WorkspaceMap

hackyApp_StdCmd Provides standard (i.e. administrative and multi-SDT) commands helpful in most Hackystat applications.

Dependent modules: hackyCore_Common, hackySdt_Activity, hackySdt_Coverage, hackySdt_FileMetric, hackySdt_UnitTest

hackyApp_TelemetryControlCenter Provides the "Telemetry Control Center" application, which is a stand-alone client-side application for automatic retrieval and display of a set of telemetry charts at predefined intervals.

Dependent modules: hackyCore_Telemetry

hackyApp_Workflow Provides support for setup and execution of empirical experiments with Hackystat.

Dependent modules: hackyCore_Telemetry

hackyApp_Zorro Provides support for inference of Test Driven Design practices using the rule-based "Software Development Stream Analysis" technique.

Dependent modules: hackyCore_Kernel, hackySdt_Activity, hackySdt_BuffTrans, hackySdt_Build, hackySdt_Cli, hackySdt_Commit, hackySdt_WorkspaceMap

hackyCore_Build Provides the Ant-based build system for Hackystat.

Dependent modules: none

hackyCore_Common Provides common abstractions useful to most Hackystat applications, including Projects and Workspaces.

Dependent modules: hackyCore_Report

hackyCore_Installer Provides a GUI and CLI installer service for Hackystat clients to support downloading, installation, and updating of Hackystat sensors.

Dependent modules: hackyCore_Kernel

hackyCore_Kernel Provides the basic language features and web application implementation for Hackystat.

Dependent modules: hackyCore_Build

hackyCore_Report Provides a high-level interface to the JFreeChart graphical chart package for use by Hackystat analyses.

Dependent modules: hackyCore_Statistics

hackyCore_Statistics Provides support for basic statistical operations for use by hackystat analyses.

Dependent modules: hackyCore_Kernel

hackyCore_Telemetry Provides the language implementation and analysis interface for Software Project Telemetry.

Dependent modules: hackyCore_Common

hackySdt_Activity Provides the Activity sensor data type, which records developer activities. To be replaced by the DevEvent SDT.

Dependent modules: hackyCore_Telemetry

hackySdt_BadData Provides the BadData sensor data type, which is used by the server to log receipt of syntactically incorrect data sent by incorrectly implemented sensors.

Dependent modules: hackyCore_Telemetry

hackySdt_BuffTrans Provides the BuffTrans sensor data type, which records patterns of context switching between buffers in an editor.

Dependent modules: hackyCore_Telemetry

hackySdt_Build Provides the Build sensor data type, which records system build attempts and the results.

Dependent modules: hackyCore_Telemetry

hackySdt_Cli Provides the Cli sensor data type, which records command line invocations.

Dependent modules: hackyCore_Telemetry

hackySdt_CodeIssue Provides the CodeIssue sensor data type, which records problems discovered in code by static analysis tools.

Dependent modules: hackyCore_Telemetry

hackySdt_Commit Provides the Commit sensor data type, which records information about each commit made to a configuration management system.

Dependent modules: hackyCore_Telemetry

hackySdt_Coverage Provides the Coverage sensor data type, which records test coverage information.

Dependent modules: hackyCore_Telemetry, hackySdt_WorkspaceMap

hackySdt_Dependency Provides the Dependency sensor data type, which records structural coupling and complexity measures based upon static analysis of source code.

Dependent modules: hackyCore_Telemetry, hackySdt_FileMetric, hackySdt_WorkspaceMap

hackySdt_DevEvent Provides the DevEvent sensor data type, which records development events.

Dependent modules: hackyCore_Telemetry

hackySdt_FileMetric Provides the FileMetric sensor data type, which records static size information about files of various types.

Dependent modules: hackyCore_Telemetry, hackySdt_Activity

hackySdt_Issue Provides the Issue sensor data type, which records information about each issue posted to an issue management system (such as BugZilla or Jira).

Dependent modules: hackyCore_Telemetry, hackySdt_FileMetric

hackySdt_Perf Provides the Perf sensor data type, which records performance analysis information based upon execution timing data.

Dependent modules: hackyCore_Telemetry

hackySdt_ReviewActivity Provides the ReviewActivity sensor data type, which records developer activities during software review.

Dependent modules: hackyCore_Telemetry

hackySdt_ReviewIssue Provides the ReviewIssue sensor data type, which records issues generated during software review.

Dependent modules: hackyCore_Telemetry, hackySdt_ReviewActivity

hackySdt_UnitTest Provides the UnitTest sensor data type, which records the occurrence and results of running an automated test.

Dependent modules: hackyCore_Telemetry, hackySdt_WorkspaceMap

hackySdt_WorkspaceMap Provides the WorkspaceMap construct for sensor data types, which builds a mapping between workspaces (acquired using the Activity SDT) and classes (acquired using the FileMetric SDT) for use by other SDT-related analyses (Coverage, Dependency, UnitTest.) This mechanism is brittle and we will be developing alternatives to it during the Version 7 release stream.

Dependent modules: hackySdt_Activity, hackySdt_FileMetric

hackySensor_Ant Provides a sensor for the Ant build system that records build invocation events.

Dependent modules: hackyCore_Installer, hackySdt_Build, hackySdt_DevEvent

hackySensor_Bcml Provides a sensor for the Bcml size counting tool that records Java file size and several Chidamber-Kemerer OO complexity metrics via bytecode analysis.

Dependent modules: hackyCore_Installer, hackySdt_FileMetric

hackySensor_Bugzilla Provides a sensor for the Ant build system that records build invocation events.

Dependent modules: hackyCore_Installer, hackySdt_Issue

hackySensor_Cccc Provides a sensor for the CCCC size counting tool for C/C++ and Java code that records size and other structural information.

Dependent modules: hackyCore_Installer, hackySdt_FileMetric

hackySensor_Checkstyle Provides a sensor for the Checkstyle code format analysis tool that records instances of checkstyle violations.

Dependent modules: hackyCore_Installer, hackySdt_CodeIssue

hackySensor_Cli Provides a sensor for the (Unix) command line that records information about each command entered.

Dependent modules: hackyCore_Installer, hackySdt_Cli, hackySdt_DevEvent

hackySensor_CppUnit Provides a sensor for the CppUnit test system that records unit test invocation events and their results for C/C++ systems.

Dependent modules: hackyCore_Installer, hackySdt_UnitTest, hackySdt_DevEvent, hackySensor_XmlData

hackySensor_Cvs Provides a sensor for the CVS configuration management system that records data about each commit event.

Dependent modules: hackyCore_Installer, hackySdt_Commit, hackySensor_Vcs

hackySensor_DependencyFinder Provides a sensor for the DependencyFinder Java structural metrics tool that records structural complexity (i.e. coupling) information.

Dependent modules: hackyCore_Installer, hackySdt_Dependency

hackySensor_Eclipse Provides a sensor for the Eclipse IDE that records Activity, UnitTest, and other developer and product data.

Dependent modules: hackyCore_Installer, hackySdt_Activity, hackySdt_UnitTest, hackySdt_DevEvent

hackySensor_Emacs Provides a sensor for the Emacs IDE that records Activity and DevEvent event data.

Dependent modules: hackyCore_Installer, hackySdt_Activity, hackySdt_BuffTrans, hackySdt_DevEvent

hackySensor_Emma Provides a sensor for the Emma coverage tool that records Coverage information.

Dependent modules: hackyCore_Installer, hackySdt_Coverage

hackySensor_Europa Provides a sensor for the Europa code review tool that records ReviewActivity and ReviewIssue data.

Dependent modules: hackyCore_Installer, hackySdt_ReviewIssue, hackySdt_ReviewActivity

hackySensor_FindBugs Provides a sensor for the FindBugs tool that records coding violations using the CodeIssue SDT.

Dependent modules: hackyCore_Installer, hackySdt_CodeIssue

hackySensor_Idea Provides a sensor for the Idea IDE that records DevEvent data.

Dependent modules: hackyCore_Kernel, hackySdt_DevEvent

hackySensor_JBlanket Provides a sensor for the JBlanket coverage tool that records coverage data.

Dependent modules: hackyCore_Installer, hackySdt_Coverage

hackySensor_JBuilder Provides a sensor for the JBuilder IDE that records Activity data.

Dependent modules: hackyCore_Installer, hackySdt_Activity

hackySensor_JUnit Provides a sensor for the JUnit test tool that records test invocations and their results.

Dependent modules: hackyCore_Installer, hackySdt_UnitTest

hackySensor_Jira Provides a sensor for the Jira issue management system that records issue creation using the Issue SDT.

Dependent modules: hackyCore_Installer, hackySdt_Issue

hackySensor_Jupiter Provides a sensor for the Jupiter code review plugin for Eclipse that records ReviewActivity and ReviewIssue data.

Dependent modules: hackyCore_Installer, hackySdt_ReviewIssue, hackySdt_ReviewActivity, hackySensor_Eclipse

hackySensor_LoadTest Provides a sensor for the HackyLoadTest performance analysis tool that records performance data about the Hackystat system itself.

Dependent modules: hackyCore_Installer, hackySdt_Perf

hackySensor_Locc Provides a sensor for the LOCC size counting tool that records FileMetric (size) data for Java systems.

Dependent modules: hackyCore_Installer, hackySdt_FileMetric

hackySensor_Office Provides a sensor for the Microsoft Office tool suite that records Activity data.

Dependent modules: hackyCore_Installer, hackySdt_Activity

hackySensor_OpenOffice Provides a sensor for the OpenOffice tool suite that records Activity data.

Dependent modules: hackyCore_Installer, hackySdt_Activity

hackySensor_Pmd Provides a sensor for the PMD static analysis tool for Java that records complexity problems using the CodeIssue SDT.

Dependent modules: hackyCore_Installer, hackySdt_CodeIssue

hackySensor_ShellLogger Provides a sensor for the ShellLogger tool, which logs shell commands and timestamps from the command line.

Dependent modules: hackyCore_Telemetry, hackySdt_Cli, hackySdt_DevEvent, hackySensor_XmlData

hackySensor_Svn Provides a sensor for the Subversion configuration management tool that records commit events.

Dependent modules: hackyCore_Installer, hackySdt_Commit, hackySensor_Vcs

hackySensor_Vcs Provides generic utility code for use by configuration management sensors such as hackySensor_Cvs and hackySensor_Svn.

Dependent modules: hackyCore_Installer, hackySdt_Commit

hackySensor_Vim Provides a sensor for the Vim IDE that records Activity data.

Dependent modules: hackyCore_Installer, hackySdt_Activity, hackySdt_DevEvent

hackySensor_VisualStudio Provides a sensor for the Visual Studio IDE that records DevEvent data.

Dependent modules: hackyCore_Installer, hackySdt_DevEvent

hackySensor_XmlData Provides a "generic" sensor for XML data that has already been formatted as Hackystat sensor data. For tools that can output their results in XML and configure the format, the xmldata sensor can be an easier way to provide a sensor.

Dependent modules: hackyCore_Installer, hackySdt_Coverage, hackySdt_UnitTest, hackySdt_FileMetric

Mailing Lists

If you would like to stay in touch with Hackystat development, there are several mailing lists:

To subscribe to any of these lists, email a standard listserv subscription request to listserv@hawaii.edu. In other words, the "Subject" line is ignored, and the body should contain a line similar to:

subscribe hackystat-users-l Philip Johnson

where you replace 'hackystat-users-l' with the mailing list you are interested in, and 'Philip Johnson' with your own first and last name. If you wish to subscribe to more than one list, just put each 'subscribe' command on its own line.

If you wish to remove yourself from a hackystat mailing list, then send an email to listserv@hawaii.edu with a line in the body similar to the following:

signoff hackystat-users-l

Be sure to send the signoff command from the same email address used to subscribe to the list.

You can also subscribe and unsubscribe from any of these lists using the web-based interface to the University of Hawaii ListServ system.

Finally, several of the Hackystat mailing lists are archived at: The Mail Archive. (Archives available only since September, 2004).