Wednesday, October 24, 2007

The importance of a rapid compile/build/test cycle

So this is strictly a software engineering topic; but the fact that I am dealing with an extremely long compile/build/test cycle means that I have plenty of time to post to this and probably my other blog today.

Just as some people say 'you can't be too thin or too rich' (I'm neither); the computer a software engineer uses cannot be too fast (or have too much disk space or memory for that matter). For normal programming I use Eclipse and have learned to use it well enough to maintain a pretty short time between making a change and testing the results of it. For Java, Eclipse checks my syntax as I go, sort of like this editor checks words that are mispeled [sic]; underlining mistakes in red and listing all compiler errors and warnings. In same cases I can run unit tests within Eclipse and get results in a few seconds. For other things I might need to run an actual ant build, but that is usually well less than 20 seconds - even a clean build is done in a minute.

However, today we are preparing for a new 'total' build and I need to make and test a change in the InstallShield script. We used to have a build engineer to do this but he left about a year ago and I haven't been given the means to replace him. This particular fix involves updating our software which InstallShield determines based on the GUID of the previous install. If I forget to update the GUID before I build I don't hit the code I want. Of course the build takes over 10 minutes; and if you forget to change the GUID (like I just did), it can take about a half hour between the time you make the change and the time you 'test' it. Testing is actually doing the install which takes at least 5 - 10 minutes (even thought I'm skipping as much as I can). Thus I spent all morning and will probably spend the rest of the day implementing something that probably represents a half-an-hour actual coding time. Although I could theoretically multitask, my past experience shows this to be usually counter productive.

If I thought I would be doing a bunch more InstallShield work , I could create some test environment but at this point that would take longer than to finish the thing I'm working on. AND I don't need InstallShield for my resume - I need a build engineer! 'cause once I finish this, I will actually do the build which is another long (and boring) task.

No comments: