Change Control
                                                    return to Home page


FEEDBACK  Please click here to add your comments

I've also had some thoughts on managing change control that I'd like to share.  This note is intended mainly for developers, and will probably bore our subject matter experts to death.  Since I wouldn't want to lose any of them, especially this early in the project, they can skip this note, though of course everyone's welcome to comment.  Here then is a first cut at how we might want to use it to manage code (or other documents), based on my experience with ENVY, the change management tool that most large Smalltalk installations wouldn't do without.

First, some terminology:
Component: The building blocks of a system.  For the Littlefish application, the components will be Eiffel classes, clusters, and the application itself.
Containing component: A component that is built from other components.   An
Eiffel cluster is the containing component for Eiffel classes; the
application is the containing component for its  clusters.
Edition: The state of a component that allows modifications.  An edition of
an Eiffel class or cluster can be changed.  Multiple editions may exist at
one time, as in the case where several developers are working on the same
class concurrently.
Version: The state of a component which does not allow change.   Multiple
versions of an Eiffel class, or cluster, or the application, may (and likely
will) exist, but each version is unalterable.  A containing component cannot
be versioned until all of its contained components are also versioned.
Release: The process of specifying that a versioned component is authorized
for use within its containing component.  Only versioned components may be
released, and components may only be released to an edition of the containing
component.  Furthermore, only one version of a component may be released to
its containing component at one time.  The designation of released components
to a versioned containing component cannot be changed; the designation of
released components an edition of a containing component can be changed. 
Thus, for example, once a cluster is versioned, the designation of which
versioned classes are released to it cannot change.
Component ownership: Containing components have designated owners, who are
responsible for the integrity of the components contained within.  Only
component owners release contained components to the containing component
they own.  For our project, each cluster will have an owner, and the
application will have an owner.  One person may own one or more clusters,
while the application will have one owner (possibly also a cluster owner).

Now, here are some procedures for applying these concepts.  I have
necessarily simplified the process that ENVY applies, since we won't have an
automated tool (other than something like SCCS) to assist us:

--To make classes and clusters available, we'll need an ftp site accessible
to all. Each developer would have his or her own directory, with exclusive
write permission, and read-only permission for everyone on the Littlefish
project. In addition, we would need two directories for the application, each
with a subdirectory for each cluster.  One of the application directories
would be for development purposes, with write access for each cluster owner's
subdirectory restricted to the cluster owner, and read-only access restricted
to Littlefish developers.  The other application directory would be for
general public consumption, containing the latest released version of the
application, with write access for the technical manager, and read-only
access to the world.

Under this scheme, all classes within each developer's directory are
considered to be versioned, but not released.  All classes within the cluster
owners' subdirectories in the development directory are considered versioned
and released, while the clusters and the application itself are considered
editions.  All clusters, classes, and the application itself, within the
technical manager's public release directory, are considered versioned and
released.

For convenience, we would need a Windows .zip or Unix .tar file, for both the
development and public release application directories, that could be
downloaded and expanded to the appropriate subdirectories and classes.

--At the beginning of a development session, developers can "load" the latest
released (approved) version of the application by copying (downloading) from
the application development directory. Developers are free to work on
whatever classes they need to, in order to accomplish the task at hand. 
Developers may also copy from other developers' directories, to obtain class
modifications that are in progress but have not yet been released.

--When a developer is satisfied with the state of modifications to a class,
he or she copies it to his/her private directory, and sends a note to the
cluster owner. The cluster owner reviews the changes, and if satisfied copies
the new class to the cluster directory under his/her control, in effect
releasing to other developers.  Developers may also wish to copy class
changes to their personal directories to share with other developers. 
Developers will, by convention, update the Indexing clause of the Eiffel
class to indicate the date of revision, nature of the change, etc.

--If more than one version of a class is submitted to the cluster owner at
the same time, it is the cluster owner's responsibility to combine the
changes from each developer's work into a final, acceptable and released
version.  The cluster owners' directories represent a work in progress, with
the possibility that additional work may be required before the final product
is ready.

--When a cluster owner wishes to release a new cluster version for general
use, he or she notifies the technical manager that a new version of the
cluster is ready.  The technical manager then reviews the cluster, and if it
is approved, copies the current contents of the development cluster directory
to the corresponding public release cluster directory.  When the copy is
complete, the technical manager notifies the cluster owner; until
notification from the technical manager is received, the cluster owner is
prevented from moving new class changes into the cluster directory.

I hope this scheme is not overly complicated; my intention is to provide a
procedure that would work for our geographically widespread group, without
the assistance of a source control management tool like ENVY, while still
providing sufficient control over the work we'll produce.  I've neglected
some aspects, such as how to obtain prior versions of components.  If this is
something the group feels might be necessary, let me know & I'll give it some
thought.  We could surely rely on a general purpose version control utility
like SCCS, and some additional procedures, to obtain prior versions.

Please feel free to comment.  It's still early enough in the project to think
about ways of managing mundane but essential tasks like change control.

David Jenkins


return to Home page