Bob Lewis
Columnist

What has the most impact on software quality?

analysis
Oct 21, 20072 mins

Dear Bob ...I am arguing ... wait ... having an intelligent discussion with my instructor this week regarding software development processes. The class is Fundamentals of Software Programming. I was hoping to get your opinion on the question in discrepancy.The question is, "Drawing upon your knowledge of software development, which process - requirements, design, coding, or testing - do you think has more impact

Dear Bob …

I am arguing … wait … having an intelligent discussion with my instructor this week regarding software development processes. The class is Fundamentals of Software Programming. I was hoping to get your opinion on the question in discrepancy.

The question is, “Drawing upon your knowledge of software development, which process – requirements, design, coding, or testing – do you think has more impact on the overall success and quality of development?”

I will give you my opinion and my instructor’s after I hear back from you. I don’t want to taint your response.

Thanks for weighing in.

– Developing developer

Dear Developing …

Since I have a strong preference for iterative development methodologies, I’d say the practice of dividing development into discrete requirements, design and coding phases is what does the most to prevent development of quality software. The term for this approach is “waterfall methodology.” My take on it is that decades of attempts to make it work pretty much demonstrate that it doesn’t work very well.

The textbook answer would be that mistakes in each phase have an exponential impact on each succeeding phase, so that a defect in the requirements phase will cause far more problems with quality than defects in the design phase, and so on. Certainly, if you’re shooting at the wrong target, the quality of your aim really doesn’t matter very much. So the textbook answer has some validity, if you’re going to use a waterfall methodology.

Otherwise, I’d say the question is wrong. The answer to the right question would be:

  1. Employing programmer/analysts instead of dividing analysis and programming into separate jobs.
  2. Programmer/analyst skill level.
  3. Using adaptive, iterative techniques that include heavy end-user involvement.
  4. Having a pre-established software architecture and coding standards, and adhering to them.

I’m not sure whether 1 and 2 are in the right order.

– Bob

Powered by ScribeFire.