Thursday, July 2, 2009

Naval Analogies

“Software Development” is like navigating upriver with a 20 year old chart – you have a general idea where you are going, but never know when you will run around on an uncharted shoal.

“Mere matter of implementation” is like the rocky jetties at the harbor entrance – they can still sink the boat, but most crews should be able to easily avoid them. Brought up when the real topic of discussion is whether you’ve actually found a safe harbor.

Tuesday, May 19, 2009

Code as Design

A colleague of mine referred me to the notion of Emergent Design as discussed by Neal Ford. Part of Emergent Design is Code = Design. This reminded my of the elegant essays by Jack W. Reeves.

In both cases the argument is the same: code is the final manifestation of the design process. You don't "build code" to a design - the code is the design. You then take your design through a build process (compilation) to get an actual useful product (executable code). So you don't complete the design process until your code has been completed. It really explains a lot about software development and is a core belief of mine.

Wednesday, April 8, 2009

Debunking Cyclomatic Complexity

Great article by Andrew Binstock. Basically they did a survey that showed for the majority of modern code, the McCabe Cyclomatic Complexity Number does not tell you anything useful about the probability of defects. Basically, the number has to be greater than 25 to predict defects but must code is below 25 and from 1-25 the survey found no correlation between the number and the defect count.

Saturday, January 24, 2009

Component Testing

The January 2009 issue of Software Test & Performance has an article on Better Quality Through Software Reuse. The author recommends a reusable component size of 700-800 lines of code with about 3,000 lines of test code. Then you need to document the component both for the application designers who need to understand when to use the component and for coders who need to know component details. Then off to white-box and black-box testing. So while reusable components are a great idea, they take considerably more work to create initially...