Developer Quality Attributes
The quality of software depends on many inter-related attributes of the software. Some of the more important ones are:
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.
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).
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).
correctness | the extent to which the soft- ware does what it is meant to |
reliability | how often it crashes or behaves erratically |
efficiency | how well it uses resources (memory, CPU cycles, etc) |
usability | how easy the software is to use |
reusability | how easy the software is to adapt to other uses |
verifiability | how easy it is to test (ie, verify its correctness) |
understandability | how easy it is to grasp the design and source code |
modifiability | how 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