Software Engineering Goals
I talk a lot, in conversation, about the software engineering goals. I don’t know who officially defined these as the goals of software engineering, but this is what the mountains of documentation that I was required to read and be tested on in the branch of the military that I served in defined as the “Software Engineering Goals.” So, since these have stuck with me over the past many years, and because I talk about them, and want to relate them to my previous post I thought now would be a good time to introduce them.
They are, modifiability, understandability, reliability, and efficiency.
Modifiability
Modifiability is the hardest goal to attain, and it’s even harder to measure. Modifiability is controlled change to the software in which some parts are altered without increasing the complexity or obscuring the logic that has already been established. There are two reasons you might have to modify programs: to change the system due to a change in the original specifications or to correct an error made earlier in the development.
Whenever you’re involved in designing a software system, you must try to structure it so that the logic is clear and consistent. Then, software can be modified effectively without increasing the intricacy of the original structure. As a maintainer, or one who is modifying the code, it is important that you follow the rules that have been established, and strive for consistency among that code base, even if the style that the code is in, is not your own.
Understandability
Understandable code is crucial in managing complex systems. Software that’s easily understood acts like a bridge between the problem and its solution. Understandability depends on the programming language: one that uses “English-like†constructs and control structures is more readable, making it easier to express design concepts.
Understandability can also depend on things like design patterns, and a well defined domain. Understandability could also be minor things, like using a variable i vs index, or id vs userId.
Reliability
Reliability is critical for any software system that must operate for long periods without human intervention. Reliability is important in any software that is expected to be available 24×7, such as your typical public web application, or atypical nuclear power plant where the cost of failure is too great to allow anything less than the highest reliability possible.
Efficiency
The software system is efficient when it operates using available resources optimally. Resources can be divided into time resources and space resources. If the system must respond to real events, efficient use of time resources becomes critical. If space resources are important, such as in an automobile, efficiency of space resources can become more critical. You should use your judgment to select which resource to accompany each individual application.
So there they are. I, and we are 72 Miles write web applications, typically with Java, so, given the nature of web development, I focus on Modifiability and Understandability, followed closely by Reliability. Efficiency isn’t always a huge concern, until an issue comes up.
Here is an extended list of goals, that I frequently lookup.
So how can you use Software Engineering Goals to help make the ‘better’ decision? Thats the next post…
good resource, please continue