Developer Quality Attributes

The quality of software depends on many inter-related attributes of the software.  Some of the more important ones are:

One attribute that I think is very important but I have never seen mentioned before is what I call debugability or how easy it is to track down the cause of a bug.  The debugging process consists of three steps:

1. detecting the presence of a bug (aided by verifiability)
2. tracking down the root cause of the bug (aided by debugability)
3. changing the code to fix the (aided by modifiability)

Sometimes the second step can be the most time-consuming; this is common in poorly written C code.  In C debugability can be greatly improved by such things as assertions (which also improves verifiability, modifiability, reliability, etc).  Other environments can greatly improve debugability, such as using Delphi or C# (w/o unsafe code).
correctnessthe extent to which the soft- ware does what it is meant to
reliabilityhow often it crashes or behaves erratically
efficiencyhow well it uses resources (memory, CPU cycles, etc)
usabilityhow easy the software is to use
reusabilityhow easy the software is to adapt to other uses
verifiabilityhow easy it is to test (ie, verify its correctness)
understandabilityhow easy it is to grasp the design and source code
modifiabilityhow easy it is to make changes to the source code

It is useful to think about these quality attributes for many reasons.  First, you may want to consider which attributes are important for your current project.  Generally, I think modifiability is the most important attribute but for a one-off program it may not be important at all.

You should also be aware of trade-offs between different attributes - for example, how fast the code runs (an aspect of efficiency) is often traded-off with one or more of the other attributes.  On the other hand, some attributes are highly correlated - for example, modifiability is strongly related to understandability.

Note that there are also other attributes (eg, security, compatibility, portability, etc) that I have not mentioned.  The list above is enough for our purposes.

Comments

Popular posts from this blog

ContextSwitchDeadlock was detected

Visual Studio setup and deployment projects

Using SvcUtil.exe to generate the proxy class and config file