What is Configuration Management?

Keeping track of all the pieces of a software project.

This sounds simple, but it is harder to do, especially for large complex projects.

Dependencies

Draw example of dependency tree. System analysis at top, then software functional specification, then technical design, then source code and include files, then makefiles, then executables.

An item is one file of any kind: MS Word document, java source code, compiled object code, etc.

A dependency line means that a change to either side may require a change to the other side for the system to remain correct and consistent.

Why is it important to know the dependencies? So you make sure to change the affected items when you change one piece.

Note that change in one place may percolate up or down to many layers.

Edit Versions

Each item in a project is actually a stack of edit versions, from older to newer.

Draw picture of one item, and its stack of edit versions.

System Version

A list of items and an edit version for each. Make an example on the board.

Alternatively...a string connecting one edit version each of many items. Draw example.

Does a system version need to include all items? (No.)

Why is it important to know the item versions that make up a system version? (so you can build the same system again). I have been on projects where we could not build the system in the same way twice. It is VERY important to do repeatable software builds.

Version History

Show example of adding a new version (a new list or string), then going back to a previous version...

Why is it important to rebuild a previous version? (For support, or to go back to a more stable version when you introduce bugs.)

Code Forking

Local, short-lived (OK). Show what this is. Explain why you might do it. (To fix a high-priority bug for one customer. Other?) Goal is to merge the fork together soon, to return to one code path.

System wide, long-lived (bad). Show what this is. Explain how this might happen. (Politics, business, egos.) Unix is a good example; Berkley, AT&T, Sun. Why is it bad? (The versions never merge, customers are confused, overall software acceptance is hindered.)

The Linux community is (correctly) very concerned about code forking. So far it has not happened, but it will be bad for the movement if it does.

 

Copyright 2001 by Charles H. Connell Jr.