上海师范大学自考教材:Chapter 3: General Description of SCM

来源:百度文库 编辑:中财网 时间:2024/04/25 19:09:24
 < Day Day Up > 

Chapter 3: General Description of SCM

... let’s call him Ramses, too … —Ramses the 1st, inventor of versioning, at the birth of his son, —1784 BC

3.1 Introduction

SCM is a software engineering discipline for the control and management of projects and the synchronization of the work of different developers engaged in a project. SCM provides support during the entire development life cycle of a product. SCM is obtained by defining methods and processes, preparing plans, and using tools that help developers and project managers in their daily work in a development project. SCM is focused on supporting the software development phase. Although SCM is of use in all phases of a PLC, most SCM activities are concentrated during the development phase, when the program code is actually produced. The release of software products and their maintenance is supported by many other activities but these provide less support during the early phases. SCM is designed for use in software development, and it mainly supports functions required specifically by the software. The nature of the software determines both these requirements and the development process itself. The development of software products is separated into three parts:

  1. Software design and development by the creation of documentation and source code;

  2. Software building by compiling the source code and generating executables;

  3. The manufacture of software distribution media such as CDs.

Specific properties of software include ease of modification, high cost of development but low or no production costs, the absence of concrete architecture in its final form, and a high degree of complexity during its development phase.

In this chapter, we shall give an overview of the most important characteristics of SCM. After a short historical introduction, we present its basic functions, such as version management, configuration selection, and workspace management. Modern SCM tools include the support of distributed development, change management, collaboration, and integration with other development tools. Like PDM, SCM contains many functions incorporated in other applications or tools. Its relationships with these applications are shortly described. The last part of the chapter contains an overview of trends in development and research in the SCM and related areas.

3.1.1 Historical overview

The history of SCM development follows that of software development. In the 1960s, when software consisted of monolithic programs mostly implemented as one source module, there was no need for SCM. The software engineering community was focused on the art of programming—the production of effective algorithms occupying as little memory as possible.

In the 1970s and the 1980s, software became more complex. Programs were built in two stages, compilation (producing binary modules from the source code) and linking (combining binary modules in a program or a binary library). The first generations of SCM tools appeared during this period: source code control system (SCCS) and Make [1], covering the basic SCM disciplines: CM, build management, and version management. Later, an improved version of SCCS designated revision control system (RCS) [2] replaced SCCS. At this time, SCM was focused on “programming in the large” (versioning, rebuilding, and composition) [3]. It is interesting to note that these tools have dominated the SCM market for many years and that the principles they introduced are still widely used in the majority of modern tools. Make exists today in many forms (e.g., imake, gnumake, and different project files), and RCS is used as a basis for many other, more advanced SCM tools.

During the 1990s, the focus of SCM moved to the “programming in the many,” with emphasis on teamwork (process support, concurrent development, and concurrent engineering in general). Change management, workspace management, and process support became the new purposes of SCM tools. The complexity of SCM tools increased as software became more complex. Several new advanced SCM tools, very complex and very expensive, appeared at this time. In addition to their complexity, they were not easy to introduce into the development process. For this reason, many companies developed their own systems or used simple SCM tools, executing other SCM procedures manually.

The use of SCM increased significantly during this period for several reasons. The development of software became more complex, and a need for tools capable of managing this complexity became obvious. At the same time, software development became more important in business, and many new software companies appeared on the market. Finally, software development focused on development processes influenced by the well-known Capability Maturity Model . (CMM .) from the Software Engineering Institute (SEI) [4], which pointed out SCM as an important ( key process) area. CMM . defines an SCM process as including a number of activities and their planning (with emphasis on the planning) during the entire PLC.

As the software industry continues to grow rapidly, producing larger and more complex software, the need for software management also grows. One example of the increasing complication of the situation is the demand for shorter time to market, which requires incremental and concurrent development process models, which in turn increase the burden on SCM. Another example is the increasing tendency for persons involved in the development of a system to be geographically dispersed. The new focus of software development is therefore on “programming in the wide” ( Webremote engineering, distributed development).

3.1.2 Definition

SCM can be defined as the controlled way to manage the development and modification of software systems and products during their entire life cycle.

The definition of SCM by Babich stresses that a system is often developed and supported by a group of developers: “Configuration management is the art of identifying, organizing, and controlling modifications to the software being built by a programming team” [5].

These are, however, only two of many definitions. Appleton has collected many for presentation on his home page [6]. One reason for there being many definitions is that SCM has two target groups with rather different needs: management and developers. Managers need control and measurement of the development and in particular of the releases of products. This need was previously met with manual routines often managed by an SCM librarian. Today, all developers of a project are involved in SCM, which is highly automated with sophisticated tools that meet the manager’s needs and give developers a broader view of development within a project, increasing their efficiency.

It is important to stress that SCM also is about process management—control of the software development activities. This includes both defining these processes and setting up the necessary organization in order to control them. An example of the goal for such a process is to be able to ensure that a change request existed and had been approved for fixing and that the associated design, documentation, and review activities have been completed before allowed in the code to be checked in again. Later, in Chapter 6, a more thorough description of SCM processes is given.



 < Day Day Up >