Configuration Management software oops
Another piece of the configuration management pie is the ability to move backward and forward from revision to revision. To demonstrate the importance of this concept I will relate a story.
There once was a developer who was writing in assembly language for a new product. He was incrementally developing the features for the product with milestones for a critique of the work performed to a certain level of functionality. He came to one of these milestones; he compiled the software and “burnt” the code into the microcontroller. After the code was in the target system, he conducted a series of tests to ascertain the level of functionality. The developer made note of the things that worked and those that did not and went back to the software. He filed away the compiled code in a secure area, guaranteeing that he would be able to go back to this level of functionality. However, he continued to work with the source file, correcting the known bugs and adding the next phase of new content.
At some point, he compiled the new source code and “burnt” the new code into another microcontroller. He then set about testing the prototype part and nothing worked. The system did absolutely nothing. He went back to retrace is footsteps to find out what went wrong, he “burnt” the microcontroller with the old compiled version and that level of software worked.
The developer had the compiled version of the working software; however, since he did not manage the source code, holding it constant to the same level as the “burned in” code for the microcontroller, he then had to take the binary file and run a conversion program to turn the binary file into the original assembly language. He then was able to compare the reconstructed source code to the current developed non-functioning code. This took considerable time to compare and find out what change caused the entire product to stop working.
Doing a disassembly analysis was probably a suitable self-punishment for not practicing good configuration management. The source code should have been checked into the software configuration management system, where this developer would have been able to protect himself from himself.