After completing this chapter, you will be able to:
In many industries, the result of a production process is a product that you can see, touch, and measure. In software, code is the most important deliverable and it is an intangible product for most people. To give it the most visibility, it is necessary to document it and communicate its characteristics at each step of its development. For the same reasons, during its life cycle, it will be possible to review it, improve it, and expand the documents supporting it. This progression originates from change requests, omissions, defects, and problems encountered when developing the product. Also, when software must reside on a processor that receives data and controls a process, changes to the hardware can result in change requests to the software. As long as the software supports a business process of the organization, modifications will need to be made to keep it current with the evolution of business rules and technology.
All these documentation activities and constant changes can become costly. In large projects, these activities represent a percentage of the effort that cannot be ignored. This is why it is important to be familiar with these activities, thus optimizing this effort. In this chapter, all the different activities of software configuration management (SCM) are explained. This topic is one of the knowledge areas that a software engineer should master and where software quality assurance (SQA) is actively involved to ensure project teams understand its importance and are guided given that it is an area that is often audited.
We have already discussed the importance of creating, updating, and managing quality records in the project file to keep track of all the changes that happen over time. Today, this information can be found in documents, emails, wikis, ticket systems, and team chats and contain a wealth of knowledge for the organization. Some say it is strategic to be able to harness this knowledge. Be it for knowledge transfer, project management, laws and regulations, or the obligation to conform to standards, organizations must be able to manage all this information coherently.
The configuration of a system [BUC 96] is composed of many perspectives: functional from software, firmware and/or physical hardware, as normally described in the accompanying documentation of the product.
In this section, we present SCM processes as recommended by ISO 12207, IEEE 828, and the CMMI.
Essentially, SCM describes answers to the following questions [STS 05]:
Good configuration management (CM) will bring about the following benefits [STS 05]:
According to the ISO 12207 standard, the purpose of CM is to [ISO 17]: manage and control system elements and configurations over the life cycle. CM also manages consistency between a product and its associated configuration definition. SCM is part of SQA practices. SQA must give assurance that processes and products used in the development life cycle meet their requirements by planning, using and executing activities that ensure that quality is integrated in the final product during its production. The SCM activities help SQA meet its goals and the goals of the project. It is recommended that it be used by every software project, maintenance activity as well as for its infrastructure.
ISO 12207 defines the requirements of CM as an essential process for software developers. We will not describe the detailed requirements here but provide only a high-level description and focus on the expected results of using this process.
As a result of the successful implementation of the CM process [ISO 17]:
The six activities of the ISO 12207 CM process are [ISO 17]:
The six CM activities of ISO 12207 are composed of 19 tasks that are not described here. The last activity, however, includes audit configuration tasks that are described later in this chapter.
CM in ISO 12207 is also applicable to maintenance, hardware and base software. The maintainer will implement or use the CM process for managing modifications to the existing system. The scope also recommends that the configuration of the infrastructure should be planned and documented as well: the infrastructure (e.g., software tools) shall be maintained, monitored, and modified as necessary. As part of maintaining the infrastructure, the extent to which the infrastructure is under CM shall be defined.
IEEE 828 is the IEEE Standard for Configuration Management in Systems and Software Engineering [IEE 12b] and provides the requirements and the details concerning the SCM process. IEEE 828 also supports the ISO 12207 standard. It states the minimum acceptable requirements for CM in both systems and software. Consequently, it applies to all class/type of systems or software.
IEEE 828 describes the CM activities to be performed at what point of the life cycle and describes planning and the required resources. The standard details the items that should be included in a CM plan and are aligned with ISO 12207 (for software engineering), ISO 15288 (for systems engineering), and ISO 15939 (measurement standard presented in a later chapter). According to IEEE 828, the purpose of CM is to [IEE 12b]:
IEEE 828 also specifies [IEE 12b] that CM establishes and protects the integrity of a product or product component throughout its lifespan, from determination of the intended users’ needs and definition of product requirements through the processes of development, testing, and delivery of the product, as well as during its installation, operation, maintenance, and eventual retirement. In so doing, CM processes interface with all other processes involved in the product's life.
The CMMI-DEV has a process area named “configuration management”. The purpose of this process area is to [SEI 10a]: establish and maintain the integrity of work products using configuration identification, configuration control, configuration status accounting, and configuration audits. This process area describes the following activities be conducted [SEI 10a]:
These CMMI activities apply to both systems and software engineering. The following text box describes the specific goals (SG) and specific practices (SP) of this CMMI process.
Figure 8.1 shows a graphical representation of the CMMI recommendations for CM.
In large organizations, the responsibility for SCM is often assigned to a separate department. In small organizations, the SCM tasks can be shared with developers performing software development tasks. Software is often developed as part of a system including hardware, software, and documentation. SCM activities included with project team responsibilities will need to align with the infrastructure CM (e.g., hardware and software). In this chapter, we will only focus on SCM.
SCM constraints that can make it difficult to meet these obligations originate from many situations. Published policies and procedures could impose or influence the use of SCM in projects. In the case of acquisition of software, an agreement or a contract may contain specific SCM clauses.
When software products planned to be developed may present safety issues, external regulating authorities and standards will likely impose the use of SCM.
Examples from the medical devices sector were described in Chapter 2 (Therac-25), however, similar problems can be happening right now all over the world in other domains such as avionics, nuclear energy, automobiles and banking, just to name a few.
A SCM plan is typically developed during the planning of a project. It should be ready and approved by the time the project reaches the end of the software specification stage. During planning, the following should be considered: a list of SCM-related activities, the work and role assignments, the required resources and schedule, the choice and installation of tools, and the identification of supplier responsibilities.
The planning outputs will be placed in a separate SCM plan or in a section of the project planning documentation for agile projects and will be typically accessible for SQA review/audit. IEEE 828 [IEE 12b] defines six SCM information categories to be placed in the SCM plan (adapted from [IEE 12b]):
IEEE 828 describes, in a normative annex, the content of a SCM plan. Following is a typical table of contents for a SCM plan:
If the software is developed and maintained for many years, as for the controls for railway and planes, it is necessary to add:
Organizational units that have to be involved in the SCM process have to be clearly identified. Table 8.1 illustrates the assignment roles for the execution of SCM of a complex project involving many players.
Table 8.1 Example of SCM Task Allocations [CEG 90a] (© 1990, ALSTOM Transport SA)
Task | SCM manager | Project manager | Participants | SQA | Implementation manager |
Collect and centralize change requests | Produce | ||||
Manage change request process | Lead and request | Participate | Participate | Participate if system is modified | |
Manage access rights | Produce | Participate | |||
Name components | Produce | ||||
Identify relationships | Participate | Produce | Participate | ||
Mark items | Produce | ||||
Store items | Keep items active and request archiving |
||||
Organize libraries | Produce | ||||
Control changes to the libraries | Produce (form) | Produce (content) | |||
Control completeness and coherence of the libraries | Produce (form) | Produce (content) | |||
Provide copies | Produce | ||||
Report on configuration status | Produce |
Depending on the size of the project, the tasks listed could be managed by the project manager, whereas for very small projects, one or more different people could be directly involved.
Updates to the plan are approved when the need arises during development. Depending on the importance of the project, SQA can be done to ensure the plan is executed correctly. In more involved projects, SCM compliance audits can be called to ensure adherence to plans.
It can be a bit overwhelming to be assigned the development of a SCM plan for the first time. Most organizations have examples and templates that can be used to kick start this process. It is common to reuse the majority of sections of existing SCM plans in an organization. Therefore, SQA should ensure that the reference documents are of high quality so it can be reused in the future. Table 8.1 shows an example of SCM task allocations for a project.
This activity aims at identifying which software elements will need to be controlled during the development and maintenance life cycle of the project to avoid creating elements without proper identification or links with other elements already identified.
The identification of CI requires: (1) an already established classification reference nomenclature for items and (2) a predefined list of planned baselines identified uniquely throughout the project schedule.
The definition of a baseline implies that a document or software product was approved following a formal review. It is then available to the customer or ready for another step in the development process. Baselines for the production of new versions are also used.
The different project artifacts are typically located in a document or on the project server in folders (see an example in Figure 8.2). This folder structure is often mandated by the SQA or the project office as good practice for all projects. We will see in section 8.8 that this structure can be repeated in all the branches of the CM repository. It is recommended that developers do not change this hierarchy so that it is consistent during the project and can also be compared with other projects.
Each CI should be assigned a unique identifier that helps with recognizing the evolution of the item over time and can be recognized by everyone involved in a project.
An identifier is composed of a fixed part and a variable part. The fixed part is the name and the variable part reflects its evolution. When an evolution of the item does not add value, we call it a revision. This is the case when an item has been corrected or improved but no functionality, interface or operational constraints have been altered.
To indicate that an evolution of a configuration item affects descending compatibility but ensures it still works with previous versions of other CI, we use a new release version. This is the case when functionalities or existing interfaces were not modified but new interfaces and functionalities were added.
For example, for a radar display software-based system, we could use the following naming convention: Identification of the contract—System identification— Identification name of the software component—evolution indicator (version/revision). For version 1 and revision 2 of the architecture document of the radar display document, we would obtain: C001-Rad-Aff-DA-01-02.
Marking identifies a configuration item such as a software or a requirement specification document.
A software item could be identified with the help of the following information (e.g., its metadata): the software component identification information, its author, its creation date, its functional description, its history of modifications including a date, the modification reason as well as the author and finally, a summary of its design. For documents, this metadata could be saved using the following structure: a presentation page, a section explaining the evolution of the document, the main text, and possibly attachments.
The presentation page could contain the following information:
The evolution section is updated when the document is modified and includes the following information:
The evolution section is often formatted as a table as shown in Table 8.2.
Table 8.2 Example of Table Describing the Evolution of a Document
Revision | Date (yyyy-mm-dd) | Page or section modified | Author | Description of the modification |
00 | C. Laporte | First version | ||
1.1 | 2006-03-01 | P 5 | A. April | Added section 2.1 |
1.2 | 2007-02-13 | Section 3.1 | A. Abran | Corrected a reference |
A software configuration item (SCI) is an aggregation of software components identified for CM and treated as a whole (e.g., one entity) by the SCM process. In addition to the source code, there are a number of software work products, such as plans, requirements, specifications, and design documents, that can be controlled by SCM. The project manager and his team must decide which ones to select to be controlled by the SCM process.
The SCI selection is always some form of compromise between enough visibility to provide tight control on an element versus not managing it at all. It is not possible to tightly manage all the elements of a software project at a reasonable cost. Once an item is chosen, it will be subject to formal review and acceptance by a number of individuals. Some reviews are not too formal, as we have seen in the review chapter. Formal reviews, on the other hand, require that a process be followed, minutes be issued and that defects be tracked, corrected and verified. This is why choosing the right amount of CI is an important task. The following text box lists criteria to help with this decision.
A software development life cycle model defines each of the development processes uniquely and places them in a pipeline. Each step is defined as a coherent group of activities and is characterized by a dominant activity. Normally, to ensure its quality, a review is performed at the end of each stage or iteration.
A baseline is a set of CI that have been carefully pre-selected and are fixed along with specific milestones throughout the project. A baseline can only be changed through a change control procedure. A given baseline, plus all the changes subsequently approved to it, represents its current configuration. This is important because we want our employees to work on the right version of things and know where they are. The baselines for key project milestones commonly referred to by team members and listed in a typical CM plan are:
Figure 8.3 shows an example of a product development cycle that includes hardware and software. The dotted lines indicate some of the milestones. For example, the system requirements analysis phase produces the software and hardware requirements document. A review of this document, called “System Requirement Review,” is then performed with the customer. Once this document is approved, it is placed in the functional baseline of the project. Then, the document software requirements are reviewed by the development team. It can then be presented to the customer for approval at a formal review called the “Software Specification Review.” Once this document is approved, it is stored in the repository called “allocated baseline.” Other software reviews that could occur are: a review of the preliminary design (Preliminary Design Review), a detailed design review (Critical Design Review), and a review to ensure that software components are ready for testing (Test Readiness Review).
Once the CI are tested and corrections are made, they are incorporated into the hardware. Lastly, the system is production tested and is then validated with the client.
Figure 8.4 presents elements of the specification phase of a project using the Entry-Task-Verification-eXit (ETVX) process notation [RAD 85] described in an earlier chapter. Notice that a CM plan is part of the inputs. Other CI will also be added to the baseline throughout the software life cycle.
Following the incorporation of a SCI into the SCM repository, any further changes to the SCI will need to be approved as described in the SCMP. Following this approval process, the item will be incorporated to its proper location in the project repository.
There are many options for SCM repository tools, often called version control software or software repository. They have been created to facilitate working as a group on software development, maintenance, and production, where code and documentation need to be shared and updated.
The software repository is central to development, maintenance, and release management activities during a project. Table 8.3 lists some of the functions of a software repository. Several types of libraries may be employed. For example, one of following three types of libraries can be used:
Table 8.3 Examples of Functions Provided by the SCM Repository
Functions of a software repository |
Supports multiple levels of SCM (managers, developers, SQA, systems engineering, etc.); |
Enables the storage and retrieval of CI; |
Enables the sharing and transfer of CI between groups and developers; |
Enables the storage and recovery of archive versions of CI; |
Provides verification of status, of the presence of all the elements, and allows for the integration of changes into new baselines; |
Ensures the correct build and correct versions of products; |
Provides storage, update, and retrieval of SCM records; |
Supports the production of SCM lists and reports; |
Supports backward and forward traceability of the requirements throughout the life cycle; |
Provides safe storage and restricted access of CI so that they cannot be changed without authorization. |
Source: Adapted from [CEG 90a].
When configuring the SCM repository, a number of decisions must be made by the librarian. It might be a bit confusing (see Figure 8.5) the first time you do this but after using it for a time, this becomes second nature. One key item of the SCM plan is the proposal of a branching strategy that will be appropriate for the project. Nearly every software repository tool has some form of branching support. Branching means you diverge from the main line of development (also called the trunk) and continue to do work without affecting them. This is called isolating yourself. In many tools, this is a somewhat expensive process often requiring you to create a new copy of your source code directory, which can take a long time for large projects. You will also find many other resources online. The following text summarizes the basic strategies for typical branches used in software development projects.
Before getting into the description of the different branching strategies, we draw your attention to the fact that each branch incurs a certain management cost. It is therefore important to choose a strategy that will have a minimal impact on your specific project. Adding a new branch has the potential of additional costs that will be incurred later, in the integration and testing phases. With this in mind, here are just some of the many popular branching strategies (e.g., patterns) used in software projects:
The elements of these strategies are iterative, so it is possible to start with a simple strategy and gradually move toward an advanced strategy. Again, trying to minimize the complexity of your project in order to facilitate its development is the key to success with SCM.
This strategy is appropriate for simple cases, for the development of a website for example, and requires the creation of two types of branches (see Figure 8.6):
This simple branching strategy proposes that the main branch is used by the developers of the software. It implies that the main branch must remain stable at all times as we are always in it. Once the software is quite advanced and the team wants to deliver a version to its client, a version branch is created (e.g., 1.0.1) that will contain a complete version of all artifacts from the first production version. On the main branch, the team can continue working and improving the software. Over time, the development team will be ready to deliver a subsequent release and create another release branch (e.g., 1.1.3) and this branch will become the new production version for the client. The previous branch can be kept as historical or may be archived given that the customer has been provided a new version.
This strategy is appropriate for the following conditions:
This strategy responds to the needs of more than 80% of the SCM requirements for software projects. It requires the implementation of three branches (see Figure 8.7):
In this strategy, no one works directly in the main branch. It is only used for the integration of components from the team members. This strategy will force team members to work in the development branch. It is in this branch that most of the activity and changes will take place. The development team must control its content. As a general principle, components in a branch should always be able to compile without error. The main branch will receive an intermediary version from time to time that marks progress and can be used for demonstrations as well. Its rate of change will depend on the number of merges coming from development (typically every few days, but at least once a week). Finally, the version branch will also be quite stable as it contains the production version. This branch can be used to fix production problems but if it is changed, then someone must merge these changes to the development branch to ensure it is kept in sync. This strategy can be applied in the following situations:
Configuration control (also named change control) is concerned with managing changes during the project. Change control identifies and documents the relative importance of proposed or needed changes to the product, when they will be deployed and who will approve the change (except urgent fixes that will follow a fast path process).
Changes to the software can have several origins:
In some organizations, these types of changes require that an engineering change request be raised in a centralized system (e.g., often referred to as a change report or ticket). Figure 8.8 describes the impact of a change request involving software and its intermediate products.
A change request management process, as shown in Figure 8.9, describes the typical sequence for processing a change request (called a ticket in some environments):
Note that the request will change state at each stage of this process (see Figure 8.9).
During the verification activity, developers and maintainers will also typically perform a series of regression tests to ensure that a change has no impact on other characteristics. Some automation servers, like Jenkins (https://jenkins.io/) or locally developed test robots are also used to perform accelerated regression testing.
Regarding critical software, it is common to add evaluation tasks to assess the level of risk for each of the proposed changes. Individuals who can conduct this type of risk evaluation will need to be invited to contribute to the impact analysis of this change request.
The notion of traceability was introduced in an earlier chapter. Traceability is also used in SCM to facilitate the impact analysis of a change request.
Typically, the authority that can accept or reject a proposed change to a software is named a configuration control board (CCB) or a change management office. In smaller projects, this authority may be directly delegated to the project manager or a maintainer. There may be several levels of change authority depending on your organizational processes, the criticality of the software involved, the nature of change (e.g., impact on budget or schedule), or the current step of the life cycle of the project.
The composition of a CCB with respect to a particular project changes on a case by case basis depending on the criticality of the change. The project specialists, according to project size and criticality, may be asked to give their opinion at CCB meetings. In addition to the project manager, a SCM representative and even a SQA representative may be present to verify that the change process and CM plan are followed.
The main tasks of the CCB are: take a go/no-go decision, assign a priority, assign the change to a future version, answer request issuers, issue access rights to libraries and write a change order with decisions taken. The change request includes the following information: identification of the affected software, the list of items in a baseline to modify, SQA tasks to ensure quality checks, if any.
The constraints imposed during the development activities may lead to situations where some constraints may need to be relaxed to ensure the success of the project (e.g., a process is not adequate to meet project needs, a request for a non-compliance). A waiver may then be raised on project plans or obligations (e.g., agreement or contract) of the approved life cycle processes. A waiver is an authorization to depart from an obligation. When approved, it also allows the use of that item when completed although it does not meet all of its requirements.
A procedure for submitting and approving waivers should be described in the organizational processes.
A policy sets out general principles that have to be followed and are reflected in the processes and procedures of an organization. The elements of a change management policy are:
The status accounting of CI represents all the recording and reporting activities required for managing the SCM.
Information concerning the state of configuration elements must be identified, collected, and maintained. The following information should be available to managers and developers: the approved configuration identification, as well as the identification and current status of changes, deviations and waiver approvals. SCM items are recorded in sufficient detail so that previous versions can be recovered when needed. Questions answered by the status of CI:
Reported information can be used by various organizational units and the project team. The CMMI noted that this report typically includes [SEI 10a]:
Figure 8.10 shows the output of a tool that reports on CI.
As presented already, the IEEE 1028 standard defines audits as an independent examination of a software product, software process, or set of software processes performed by a third party to assess compliance with specifications, standards, contractual agreements, or other criteria [IEE 08b].
A SCM audit could be called for a software project to assess how CIs satisfy the functional and physical characteristics needed and as well as to assess how the SCM plan was implemented in the project. Two types of formal audits are typically performed: a functional configuration audit (FCA) and the physical configuration audit (PCA). Details about these audits can be found in the informative annex J of IEEE 828 titled “Examples of how configuration auditing is applied.” We will now present an overview of these two audits.
The objective of the FCA is to provide an independent evaluation of software products to verify that the actual functionality and performance of each configuration item is within specifications. FCA should be concerned not only with the functionality, but also with the non-functional requirements. FCA typically includes the following [KAS 00]:
FCA of the outputs of the design process verifies the following [IEE 12b]:
The objective of the PCA is to provide an independent assessment of CI to confirm that each element that makes up the software as delivered is present and traceable to specifications [KAS 00]. This audit verifies that the software and documentation are correct, consistent and ready for delivery. The available documentation typically includes: installation manuals, operation manuals, maintenance manuals, and version description documents.
A PCA will typically include the following elements [KAS 00]:
PCAs of the outputs of the requirements process in the life cycle verify the following [IEE 12b]:
These audits are required during the phases of design and development (before the PCA and FCA) to verify the consistency of the design during its evolution. These audits are performed [KAS 00]:
As described in the management and engineering guide of the Basic profile of the ISO 29110 standard for a small organization, a simple approach to CM is to perform the following tasks [ISO 11e]:
ISO 29110 recommends that a repository be set up to store work products and their versions. Table 8.4 describes one task of the software process associated with CM.
Table 8.4 A CM task of ISO 29110 [ISO 11e]
Role | Task list | Input work products | Output work products |
TL | SI.3.8 Incorporate the Software Design, and Traceability Record to the Software Configuration as part of the baseline. Incorporate the Test Cases, and Test Procedures to the project repository. |
Software Design [verified] Test Cases, and Test Procedures [verified] Traceability Record [verified] |
Software Configuration
|
Table 8.5 shows an example of the suggested content of a change request as proposed by the ISO 29110 management guide. The column on the right shows the source of the request, that is, who asked for the change. In this example, a change request could be raised by the customer, by the development team or the project manager. Note that the states of the request are also listed at the bottom of the description column.
Table 8.5 A Change Request as Recommended by ISO 29110 [ISO 11e]
Name | Description | Source |
Change request | Identifies a software, or documentation problem or desired improvement, and requests modifications. It may have the following characteristics:
The applicable statuses are: initiated, evaluated, and accepted. |
Customer Project manager Software implementation |
The IEEE 730 standard [IEE 14] defines the requirements for SQA activities during the project. As we said earlier, each project needs to have one SQAP. Here are the questions that the project team must answer before project planning is approved:
The SQAP should describe the SCM activities that are planned, how they should be performed, and who is responsible for SCM tasks. This plan should also define the methods and tools used to conserve, store, secure and control software records and artifacts, and all their versions, created during all phases of the software life cycle.
During project execution, the team should ask the following questions related to the evaluation of their adherence to the SQAP as well as the tracking of the status of the CIs:
Concerning the tracking of change requests and problem reports, the following questions should be addressed:
If a project is required by its customer to have a stand-alone CM plan, then information listed in IEEE 730 could be used to develop a CM plan separate from the SQAP. IEEE 828 could be used to develop the CM plan. In such a case, the SQAP would have to refer to the CM plan regarding CM issues.
Following are some factors related to an organization's CM practices that can promote or discourage the development of quality software.
Here are some excuses that you may hear when you want to implement SCM in your project [SPM 10]:
Present a definition and the expected results of using SCM.
What are the issues/problems addressed by SCM?
What are the six SCM information categories that need to be included in a software configuration management plan (SCMP)?
Why do we need to place our tools, software and the libraries used for developing a software under configuration management?
How do we identify the CI to be controlled in a project?
List the potential tasks to be executed when changing an existing requirement in an ongoing project. Using this list, create a checklist of items that are impacted when there is a change to an existing requirement during a project.
Extend the checklist developed in question 6 by adding the software items affected by the proposed requirement change.
Describe the typical branching strategy used to manage the software configuration of source code during a software development project?
Develop a process map that explains how to process a change in your software project.
Your project includes firmware. Are the SCM concepts that apply to hardware and software independently also applicable to the firmware portion of your project?
Your manager asks you to perform an impact assessment for a major change planned in your portion of the existing software. He also sends you a copy of the new requirements to be added to the software. Develop a list of SCM factors you need to consider in order to provide a better estimate of this impact (e.g., effort, schedule, etc.).
Regarding the criteria for selecting the software CI: what are the consequences (e.g., risks) of the lack of choosing all the necessary CI for your project?
According to the CMMI-DEV model, what is suggested in a SCM report?
Write a checklist for a FCA.
Write a checklist for an audit of physical configuration.
3.137.184.90