9.8: Briefly describe the three main types of software maintenance. Why is it sometimes difficult to distinguish between them?
-
Fault repairs to fix bugs and vulnerabilities.
-
Environmental adaptation to adapt the software to new platforms and environments.
-
Functionality addition to add new features and to support new requirements.
These seem like distinct processes, but frequently blend together simply by all describing the act of modifying old code. After all, if one is fixing a bug, they have to rewrite a small portion of the code; that portion might in the process become better adapted to new environments, or the developer might add a small new functionality while they are still in the region. When adding a function, new bugs may be introduced which must be fixed; and those bugs might arise due to a dependency which now must be better adapted to the new environment. Changing the environment of a large project might require vast rewrites; rewrites that might as well fix bugs or add features since those code segments are being altered anyways. In this way, from any one of the types of maintenance it is extremely easy to blend into another; or to put it another way, it is very difficult to not do a combination of them even if the original intent was only one.
9.10: Do software engineers have a professional responsibility to develop code that can be easily maintained even if their employer does not explicitly request it?
Of course they do. The entire purpose of software engineering is to make better code. Included in that definition is maintainability. Software engineers have a professional responsibility to create well-designed projects, which when done correctly makes the code easier to maintain.