Configuration Management and Distributed Software Engineering

By June 20, 2015

SOFTWARE ENGINEERING PROCESSES  Configuration Management

Coordination efforts within software development projects is not a new concept; NATO organized a meeting of software developers in 1968 that defined the term “software engineering” and identified the complexity of managing software development as a key challenge within the field [Grinter, 1998]. Thirty-seven years later, the issue of coordinating the software development process – including the technical side and the human side – is still a challenge. Brooks, Parnas, and Conway (among others) all recognize the importance of team structure and collaboration among members as key to the success of software development [Grinter, 1998].

Computer-Aided Software Engineering (CASE) tools are useful in supporting the development of software systems. Lower-CASE tools are primarily focused on supporting the implementation and testing phases of software development; upper-CASE tools are those that are primarily focused on supporting the design and analysis phases of software development [Sommerville, 2001].

It is important to note that most software engineering activities involve the coordination and collaboration of documents related to the software system. These documents consist of system requirements specifications, design documents, project schedules, risk tracking, features list documents, test case documents, and software source code. While many CASE tools exist to help manage the software development process, fundamentally all software engineering activities involve collaborating on documents; even source code, as structured as it is, can be viewed as a text document.

Regardless of whether the system employs lower-CASE and/or upper-CASE tools, modern software engineering of large-scale software systems involves a high level of collaboration and coordination. Software engineering offers an excellent opportunity to examine systems, subsystems, groups, and subgroups within the context of CSCW [Borghoff and Teege, 1993]. Consequently, the features of general-purpose CSCW tools are readily applied to software engineering.

Locasto et al [2002] define three fundamental elements of collaborative systems; all of these are central to software engineering systems, as the core of software engineering is the collaboration and coordination of a project team to develop a system. These fundamental elements are: user management, content management (and version control), and process management. These are defined as (emphasis added):

“User management is defined as the administration of user accounts and associated privileges. This administration should be as simple as possible to avoid wasted time and confused roles.

Content management is the process of ensuring the integrity of the data at the heart of the project. Content management systems often employ versioning control that transparently preserves the progression of the project as the associated documents mature and grow.

A workflow is an abstraction of the process that a task takes through a team of people. During the execution of the workflow, it is often difficult and time-consuming to manage individual processes. Process management handles the interaction between different levels of project contributors.”

Sections II and III of the paper examine two main areas that are particularly relevant to the topic at hand – managing collaborative teams and managing collaborative code. Section IV then continues and goes into more detail with regard to version control strategies.