I wanted to write this post a long time ago, but since this is a very difficult subject, I never knew what to write exactly. Although I learned a lot about software quality lately, I still don’t know exactly how to achieve it effectively. I am starting to believe that this is the biggest mystery in the software development business.

I am often surfing the web to find articles about the subject and my RSS reader is full of weblogs that are about this subject but I just can’t seem to find a unified way to effectively assure a descent standard of software quality. In this post I am going to talk about various principles, methods and tools to provide pretty good software.

I basically separate the problem into two categories: Human Factor and Tools.

Human Factor

In this category the human factor is accounted for. Even though all the tools are available, people can still mess it up. It is easy to say that developers are responsible for the quality of software but when the requirements are incomplete even the best developer can’t produce the desired result. Sure, a developer is responsible for his own work but it is the responsibility of the business analyst to supply crystal clear requirements.

Clients are also responsible for the quality because they have to know what they want. They have to express their wishes and demands the best way they can to the business analysts.

Based on this knowledge, I think quality is much more about emotion than the amount of bugs in software. This isn’t an excuse to write crappy code though! Sorry developers :P .

Tools

Since developing software requires human input, it is prone to error. Mistakes are easily made in every step of the process and are sometimes hard to detect. Tools are an absolute requirement and it isn’t just software; it is also you and your mind!

With tools I mean:

  • Code quality checkers, like FxCop or RSS validators
  • Unit test frameworks, like NUnit

But also:

  • Code reviews
  • Sanity checks
  • Architectural validation
  • Requirements processing

I didn’t mention one very powerful tool, which is reflection. Reflection is the ability to see your mistakes and learn from them. It might not safe the project you are currently working on but it will prevent you from making the same mistake in another project, thus improving its quality!

As you see this subject is diverse and complicated, there are numerous influences and variables which affect the overall quality of software. I didn’t find one unified way yet and I doubt that I ever will. One promise though: I will keep looking for it and I will keep writing about my experiences and discoveries!

I hope this post has made you more aware about software quality and that your next, or current project, will be of higher quality. If you have something that should have been in this post or if you disagree with my point of view, please let me know. I want this post to be the start of an open discussion.

Bye for now!