Students are divided into three-person teams of their own choosing. Teams are formed early in the term and all assignments, such as those described in the previous section, are completed by teams. As a result, the teams have considerable experience working together before the project begins. The project is initiated by roughly describing the required changes in behavior to an existing system. This system is comprised of a Requirements Specification, Module Interface Specifications, Module Implementations, Test Plans and Test Suites []. All teams respond by submitting a new Requirements Specification and a change analysis. Changes to the system behavior are detailed in the new Requirements Specification. The change analysis lists the other work products that must be modified along with an estimate of the time required to make each modification.
Following the change analysis, a single Requirements Specification is adopted for use by all teams. Each team is asked to modify one or more modules and test one or more other modules; for a given module, the modifying and test teams are always different. To provide training in independent verification, teams are never asked to test the module that they modify.
The instructors choose ``superteams,'' each consisting of three or four teams working together. The grouping of teams into superteams is largely random. Each superteam is responsible for producing a complete modified system. Communication between teams and the instructor is primarily by electronic mail. There is little or no direct intra-team communication.