Read the text. Distinguish operating systems, programming languages and application programs, define software
Software quality
We all want our software systems to be fast, reliable, easy to use, readable, structured and so on. But these adjectives describe two different sorts of qualities. On one side, we are considering such qualities as speed or ease of use, whose presence or absence in a software product may be detected by its users. These properties may be called external quality factors.
Other qualities applicable to a software product, such as being modular, or readable, are internal factors, perceptible only to computer professionals who have access to the actual software text. In the end, only external factors matter. If you use a Web browser or live near a computer-controlled nuclear plant, little do you care whether the source program is readable or modular if graphics take ages to load, or if a wrong input blows up the plant. But the key to achieving these external factors is in the internal ones: for the users to enjoy the visible qualities, the designers and implementers must have applied internal techniques that will ensure the hidden qualities. The internal techniques are not an end in themselves, but a means to reach external software qualities.
Here are the most important external quality factors, whose pursuit is the central task of object-oriented software construction.
Correctness and robustness
Correctness is the prime quality. If a system does not do what it is supposed to do , everything else about it matters little. It is still difficult to produce software without defects (bugs), and too hard to correct the defects once they are there. Techniques for improving correctness and robustness are of the same general flavors: more systematic approaches to software construction; more formal specifications; built-in checks throughout the software construction process; better language mechanisms such as static typing, assertions, automatic memory management and disciplined exception handling, enabling developers to state correctness and robustness requirements, and enabling tools to detect inconsistencies before they lead to defects. Because of thus closeness of correctness and robustness issues, it is convenient to use a more general term, reliability, to cover both factors.
Compatibility
Compatibility is important because we do not develop software elements in a vacuum: they need to interact with each other. But they too often have trouble interacting because they make conflicting assumption about the rest of the world. An example is the wide variety of incompatible file formats supported by many operating systems. A program can directly use another’s result as input only if the file formats are compatible. Lack of compatibility can yield disaster. The key to compatibility lies in homogeneity of design, and in agreeing on standardized conventions for inter-program communication.
Approaches include:
-Standardized file formats where every text file is simply a sequence of characters.
- Standardized data structures where all data, and programs as well, are represented by binary trees.
- Standardized user interfaces where all tools rely on a single paradigm for communication with the user, based on standard components such as windows, icons, menus etc.
Portability
Portability addresses variations not just of the physical hardware but more generally of the hardware-software machine, the one that we really program, which includes the operating system, the window system if applicable, and other fundamental tools.
Ease to use
This requirement poses one of the major challenges to software designers preoccupied with ease to use: how to provide detailed guidance and explanations to novice users without bothering expert users. A well-designed system, built according to a clear, well thought-out structure, will tend to be easier to learn and use than a messy one.
Timeliness
Timeliness is one of the great frustrations of our industry. A great software product that appears too late might miss its target altogether. This is true in other industries too, but few evolve as quickly as software. Timeliness is still, for large projects, an uncommon phenomenon. When Microsoft announced that the latest release of its principal operating system, several years in the making, would be delivered one month early, the event was newsworthy enough to make ( at the top of an article recalling the lengthy delays that affected earlier projects) the frontpage headline of ComputerWorld.