Change controls
Change control is based on a number of distinct roles for the persons on the development team, noted as follows:
• Class owner
• Class developer
• Application manager
• Configuration map manager
Class owner
A class owner is the team member responsible for the integrity of a class in an application edition. Class ownership promotes the creation and maintenance of quality code, for the following reasons:
• Classes are not equivalent to modules in the traditional structured programming sense. Classes are building blocks for present and future systems. To improve code quality and reuse, class ownership helps to ensure a class's reliability and generality throughout the software life cycle.
• The semantic dependencies of an object-oriented model (such as inheritance) increase the risk that a poorly considered change could have a calamitous ripple effect. Only a class owner can change a class and be reasonably expected to understand the ramifications of that change.
• The semantics of check-in/check-out are unclear when inheritance is introduced. If an abstract superclass is checked out, for example, should all of its concrete subclasses be reserved also?
• Long-term class ownership introduces cultural changes in the software team. When developers know they will be maintaining a class for a significant period of time, they will be less likely to program short-term fixes.
Class ownership provides the controls necessary for serious software development while offering the flexibility to let developers quickly experiment. The key is that only the class owner can release a class into its containing application. Other developers can create an edition of a class, change the edition, and even version the edition. The class owner, however, determines the main stream of development for the class through releasing.
Only a class owner can do the following:
• Release a class version
• Delete a class from an application
The scope of class ownership is restricted to a single application edition. This means that where a class is defined in one application and extended in others, its definition and each of its extensions can have different owners. Further, if an application has multiple streams of development, the class might have a different owner in each stream.
Class developers
A class developer is a team member who develops and changes classes.
A class developer need not be the class owner. Unless restricted by access controls, any user can change a class and become a developer of the new edition or version. However, the class owner retains responsibility for ensuring that the released version of the class is correct.
A class developer can do the following:
1. Load the edition into an image
2. Create a version of a class edition
3. Change the class definition
4. Change a method (load, release, save, or delete)
5. Change the public or private status of a method
6. Change the comment or notes for the class
The second, third, fourth, and sixth items cannot be performed on versions. A new edition of the class must be created before such changes can be made.
Application managers
An application manager is responsible for the overall status of an application. An application manager coordinates the activities of the application's developers and ensures that the configuration information for the application is correct.
Only an application manager can do the following:
• Add a new user to the application's group
• Delete a user from the application's group
• Assign class ownership or allow members of the application group to transfer ownership of classes among themselves
• Change the manager of the application
• Change the prerequisites of the application
• Change lineups for the configuration of the application
• Change the subapplications of lineups
• Create an edition of the application
• Create a version of the application
Configuration map managers
A configuration map manager maintains the integrity of a configuration map.
Only a configuration map manager can do the following:
• Create a version of the configuration map
• Create an edition of the configuration map version
• Change the applications specified by the configuration map
• Release an application edition or version to the configuration map
• Change the required configuration maps
• Change the lineups of the configuration map
• Allow application managers to release new editions of existing applications into the lineup