Procedures and Tools

Agile Software Development

The creation of software requires planning and organization. Although the requirements for some software are often vaguely defined and rapidly changing, quality should not be sacrificed. Industry-standard Agile development techniques address this requirement by using an iterative approach to requirements gathering, developing, and testing that are designed for rapid deployment and are focused on delivering high-quality, robust software. Software created by the AES Software Services Group (SSG) used for experiments and data analysis by beamline staff and users is developed using the industry standard Agile methodology shown in the figure below. SSG follows policies and software development plans specified in the APS Software Quality Assurance document.

Agile Methodology
Agile Methodology

The Agile software development methodology is an iterative design and management approach focused on creating highly reliable software quickly while under demand of continuously changing user requirements. New features are continuously integrated to extend the software’s capabilities. Each iteration is based on a short development sprint that delivers desired, working, and tested features to the user. Iterations generally consist of four distinct phases: planning, development, user review, and retrospective.

Planning

A sprint iteration begins with the sprint planning phase. During the first half of the sprint planning phase the product owner meets with the development team, users, and other stakeholders to define and select new features to be added to the software, or changes to existing features. As much detail as possible related to the desired features or changes is discussed and documented so that all parties have an understanding of the desired results.

Features are usually captured in terms of a user story, that is, a description of the desired feature or change from the perspective of the product owner or user. User stories are then added to the sprint backlog. This backlog of stories is documented and maintained by the project manager. After all features are defined, the order of completion of features is prioritized based on the product owner’s needs. The project manager documents these priorities.

During the second half of the sprint planning phase, the development team decomposes user requirements into the smaller technical tasks required to implement the story, and estimates the time and resources required to perform each technical task, considering the time required to properly test, verify, and validate the software. The project manager records time estimates for each story and technical task.

The sprint planning phase may iterate until the product owner, development team, users, and other stakeholders reach an agreement upon the features to be implemented within the given resource and time constraints.

Development Sprint

The development sprint phase is the time in which the development team works together to implement as many of the features in the backlog as possible within allotted resource and time constraints. The software developed during the development sprint is based upon the agreement of the product owner and other stakeholders as determined during the sprint planning phase.

Based upon the task, the development team decides upon the set of best practices to use to implement and test the feature. Software written during this phase adheres to the AES SSG code style and standard guide and to industry best practices according to the nature of the task and any associated risks. The development team uses testing procedures based on the AES SSG code style and standard guide and industry best practices according to the nature of the task and any associated risks.

All software developed, including configuration files, should be stored in a revision control system that is properly maintained and regularly backed up. The project manager records time and resources used during this phase.

User Review

The user review phase is the part of the Agile development process allotted for validating that the functionality of the software is complete and correct. It ensures that the software implements the requirements specified by the product owner and other stakeholders.

During this phase, the development team demonstrates the software and its newly implemented features or changes to the product owner. The product owner determines if the software is correct and complete. Only the product owner may make the final determination of completeness and correctness.

Completed features and changes are removed from the backlog. Incomplete features are kept on the backlog until completed in a future iteration.

Retrospective

The sprint team retrospective is the last phase in an Agile iteration. During this phase the sprint team meets to reflect on the iteration and discuss those tasks, techniques, and interactions that worked well, and those that could be improved. The project manager notes important topics during the discussion and works to improve the process based on the discussion.

After these phases have been completed, the process begins again with the planning phase. Iterations continue based upon remaining backlog features, project priorities, and allocated resources.

Revision Control and Documentation

The SSG follows its Engineering Document Management Plan's guidelines for storing source code and maintaining documentation. All source code is kept in a revision control system (RCS); either SVN or CVS. The table below lists the locations of documentation by type.

Documentation Type Location
Project documentation, design and discussions SSG Wiki
EPICS documentation EPICS Website
synApps documentation synApps Project Page

Tools

Under construction...