wiki:Development/Resources

Developer Resources

Acro development involves a wide variety of tools for managing, building and testing the Acro software. This page provides a summary of these tools, with links to related internet resources.

Compilers and Programming Languages

A variety of compilers are used to build C and C++ software in Acro, including:

Additionally, Acro includes many  Python scripts, which are compatible with Python 2.4, Python 2.5 and Python 2.6. (Some features are not available in Python 2.4.)

Software Configuration

Configuration and building of the Acro software is currently managed with  autoconf tools: automake, autoconf, libtool, etc.

The UTILIB software library also includes a preliminary  SCons configuration setup.

Software Version Management

 Subversion is used to manage the Acro software.

Issue Tracking

 Trac is used for issue/ticket/bug tracking for Acro. Acro's Trac pages rely on several customized third-party plugins:

  • TracIncludeMacro
  • TracNav
  • TracDownloader
  • TracSpamFilter

Additionally, the  TracTicketModerator plugin was developed by Sandia to support moderated ticket submission.

Software Testing

Acro software libraries rely on a variety of tools for software testing. The  Hudson framework is used to manage software tests on a variety of build hosts. The  SRN Hudson site coordinates the execution of software tests, including both continuous integration and nightly builds. The  SON Hudson site mirrors select tests (e.g. to provide test results to external collaborators). These Hudson sites use a  Page Markup plugin developed by Sandia to inject the metadata needed for Sandia's web page publication guidelines.

The following test categories are currently employed by Acro software libraries:

  • Portability Tests

Hudson supports portability testing by distributing software tests on a heterogeneous set of build hosts. Currently, this is managed in a very manual manner (using test naming conventions).

  • Unit Tests

    Unit testing is a software verification and validation method where the programmer gains confidence that individual units of source code are fit for use. Thus, unit tests involve detailed tests of individual subroutines and classes, which are tested in isolation to the extent possible.

    • C++ Unit Tests

      The  CxxTest unit testing framework is used to test C and C++ code. This is a light-weight framework that does not rely on precompiled libraries. Further, CxxTest performs test discovery, so the developer is not required to write test driver scripts. CxxTest has been customized to support xUnit XML output formats, which are commonly used in test management frameworks.

    • Python Unit Tests

      The  nose framework is used to test Python software. This is an extension of the standard unittest framework, particularly to support test discovery.

The standard  Python unittest framework is used to perform integration and functionality tests. Python scripts manage the execution of Acro executables, as well as the validation that the executable output matches a given baseline. Extensions to the Python unittest framework have been develop to simplify these types of baseline comparisons.

Test Coverage Analysis

Test coverage information is generated for both C++ and Python software. The C++ coverage data is generated by  gcov. Further, the  gcovr tool has been developed by Sandia to provide simple text summaries, as well as XML summaries that can be processed by Hudson. The Python coverage data is generated by the Python  coverage.py package. This package provides simple text summaries, and Sandia has extended it to include XML summaries.

Web Resources and Mailing Lists

The Acro Trac wiki is hosted on software.sandia.gov, which provides world-readable access to software documentation, release history and browsable access to the Acro subversion repository. A variety of Acro-related mailing lists are also managed on software.sandia.gov for developers and Acro users.

Misc System Utilities

Acro's software development is currently performed on Linux and MS Windows platforms. The development activities also rely on a variety of system-level tools, including Apache, SSH, Kerberos, and Cygwin.