MotivationMutually agreeable software development process guidelines should be documented and put in place whenever possible to increase the efficiency of cPath development in the context of a potentially geographically spread out developer team. This process should serve to reduce bugs, increase the stability and regularity of cPath releases and generally help us to develop high-quality software in less time. Additionally, documenting this process should provide clarity for new and existing members of the development team and make it easier for new people to join. Development process guidelinesVersion controlVersion control tracks and coordinates revisions to a set of resources (typically program source files) and makes it easier for multiple authors to revise files and maintain document integrity. The cPath project uses CVS (Concurrent Versions System - http://www.cvshome.org/). There are more advanced version control systems available these days, but CVS is free, the de facto standard and sufficient for our needs. Issue trackingIssue tracking has the following advantages:
Regression testingRegression testing is the developer centric process of running an automated test suite to find out if recent changes have broken the software. cPath uses the freely available JUnit tool (http://www.junit.org), which requires unit tes ts to be written for each test. An example test would read in a file and check to see that values read from the file are properly stored in memory after the read operation. It is recommended that developers write unit tests, that these tests are organized into suites, and that all tests be organized to run from the single ant 'test' target. This makes regression testing easier. Unit tests are currently organized so they can be run individually and locally if desired. Full details are available in the cPath.unitTests.AllTests class. Integration and release testingThis user-centric quality assurance process involves a typical user testing the application on a typical platform. Currently cPath does not have dedicated QA staff, but a minimal integration test process is performed by the development team members before any major software release. Documentation
Analysis and estimation (A&E)Feature prioritization and planning are important things to consider in any software development project and should allow the most important features to be implemented to a stable level first. Currently, cPath performs A & E in weekly meetings in the Sander group. Build ProcesscPath is currently built using Ant scripts. Ant also automates testing and other tasks as well. Changes to the build process should be localized to the single build.xml file for clarity. ProtocolsUser testing protocol (integration and release testing)A minimal set of user tests should be performed before a public cPath release. This should include some basic tests, such as loading up a few data sets and testing the web site. This should be done at least to ensure basic functionality before a release. Ideally, more testing should be done before a release, but the project currently doesn't have a dedicated QA person. If one becomes available, then this protocol should be expanded. Release protocolInternal releases should be made every month. This allows new projects (e.g. plugins) that need to be based on a stable core) to get started within the group. The internal release should include the following steps: regression and integration testing, tagging the CVS repository with a release tag and documenting the release tag on a web page. This release should be certified as stable and subsequent development of internal release of software (e.g. to internal users) should use this codebase. Subsequent inter-release development could continue in t he CVS repository, but that code should not be distributed to most users until the next stable release. Public releases should occur when significant new features have been added to cPath. A larger amount of integration testing should occur before public release than for an internal release. User documentation should be updated and the binaries should be posted to the cPath.org website. CommunicationThe following communication tools are typically used in cPath development:
|