GEN 110: Computers and Society

Dr. R. M. Siegfried

Software Reliability

Does the software industry really seek to foist unreliable software on us?

Who among us hasn't been the victim of defective software? You type a report in your word processor, compose a bit of e-mail, or try to buy something over the Web in your favorite Web browser, and all of a sudden something goes wrong. The program stops responding, or just disappears from the screen altogether, or maybe the whole system ignores your keystrokes and mouse clicks, forcing you to shut down the whole computer. Whatever caused it, the result is the same - you lost your ideas, your time, and squandered some creativity, perhaps never to get it back again.

Admittedly, sometimes the cause of the trouble is us ourselves - we've all accidentally quit a program without saving - but more often it's due to a defect in the software itself. Like everything else, software has defects (the software industry has trained us to call them by the more innocuous "bug"), but the number of defects in software as compared to that found in other off-the-shelf consumer products is stunning. It's not unusual for a piece of software to have hundreds or thousands of defects. Can you imagine buying a car, a toaster, a newspaper or even a cheeseburger with that many defects?

But wait, it gets worse. Those aren't defects that just crop up as people start using that software. No, it's a fact that on average software vendors know about 90 percent of the bugs in that software before they even release it to the public.

Sadly, software companies are perfectly capable of writing low-defect software. But they don't because they believe that you, the consumer, don't really care about software reliability. They believe that the only thing that motivates you to buy new software is features - bells and whistles by the truckload. Don't believe it? Listen to Bill Gates in a quote from The Software Conspiracy:

"There are no significant bugs in our released software that any significant number of users want fixed... The reason we come up with new versions is not to fix bugs. It's absolutely not. It's the stupidest reason to buy a new version I ever heard... And so, in no sense, is stability a reason to move to a new version. It's never a reason."

But it's not just Bill; virtually every software executive feels this way. They think that equipping the latest version of your word processor with rotating 3-D bullet points in color and stereo sound is the thing that will convince you to buy the newest software, no matter how often that software unexpectedly dies, taking your work with it. They spend their time on doodads, rather than doing it right.

And the effects of this reach far beyond your computer. The U.S. recently lost $130 million on the Mars Climate Orbiter because some of the program worked in metric units and some in English units. The probe was supposed to orbit 65 miles above Mars, but instead tried to orbit 65 kilometers (40 miles) and so met a fiery -- and unnecessary -- death. American software firms currently make most of the world's software and as a result the software business contributes more to our international trade balance than any other industry. But once that was true of the American automotive industry as well, and the U.S. lost that lead to other countries by shipping low-quality goods. This could happen to software as well, and sooner than we expect.[FrOm http://softwareconspiracy.com]

From where does the current attitude toward quality come?

Today's commercial software packages have much in common with the shoddy US automobiles of the 1950s and 1960s, according to the software industry's critics. It's basically the same formula: put out shoddy products and use high-pressure marketing to keep consumers focused on new software versions that offer glitzy new features. In reality, you're hoodwinking people into buying the same defective product over and over again, but hey-you make tons of money. And who cares about quality, anyway? Sure, industry executives concede that they could reduce the number of bugs in their products, but only by raising the price of their products by 50 per cent or more-and consumers won't stand for it. "Quality? We'll give you 'good enough' quality, and that's all you're going to get," they say.

It's incredibly cavalier of these companies to say that quality isn't needed in products such as word processors, spreadsheet programs and the rest. People have lost jobs, flunked classes and contemplated jumping off bridges after software glitches destroyed work that was critical to them. And these very same products are finding their way into virtually every aspect of life, including situations in which human life and limb could very well be at stake if the E-mail doesn't get through.

Shoddy, bug-ridden software isn't safe to use under any condition, and these companies know it. My evidence? Instead of improving their products, commercial software vendors are busily trying to rewrite United States and international law to shield themselves from the consequences of their corporate negligence.[From http://www.india-today.com/ctoday/20000716/master.html]

For software to have quality, it must meet whatever requirements are set for it; failure to meet these requirements means that the software has bugs.

Types of bugs in software:

Syntax errors:Misspelling or misuse of words and other symbols in a program.

Example:

The correct program:The incorrect program:
int main(void)
{
     cout < < "Hello, world"    endl;
     return(0);
}
int main(void)
{
     cout < < "Hello, world" < , endl;
     return(0);
}

Semantic errors: The logic that governs how the program works is incorrect. E.g., adding when you should subtract, reading when you mean to write, etc.

Unlike syntax errors, semantic errors can be hard to find and even harder to correct.

System Development Life Cycle Model

Most software is designed and implemented using the Software Development Life Cycle. This is the classical approach t software development:

How is software different from other technologies?

  • Software is complex - Precise documentation, even for simple programs can be sizeable. And it can take a programmer a long time to become familiar with a program.
  • Software is sensitive to errors - With most hardware, use is not exact, most things can be within tolerances. With software there are no tolerances. Trivial errors can make a program execute incorrectly.
  • Hard to Test Adequately - It is difficult to consider all the test cases that are necessary to ensure that an undetected bug will be found.
  • Errors are Hard to Localize - An error may manifest itself in a part of the program that is far removed from where the defective code is located.
  • Program Verification

    Edsger Dykstra advocated the belief that all programs should be provably correct. In practice, this is a very difficult thing to do, if not outright impossible. Similarly, formal specifications (as in mathematically formal) are equally difficult.

    "Formal specifications yield PhD theses. They may also occasionally yield programs as by-products, but no useful ones." - Ronald F. Guilmette on http://mfx.dasburo.com/quotations.html

    Software Engineering

    Computer Professionals frequently try to approach software design with the same rigor as civil and mechanical engineers do their designs. The term software engineering is defined as "the establishment and use of sound engineering principles in order to obtain economical software that is reliable and works on real machines." - Fritz Bauer, Software Engineering:, Information Processing 71 p. 530 as quoted in Morality and Machines by Stacey Edgar.

    Software Engineering concerns itself with the process by which all aspects of software development are handled. It frequently concerns itself very heavily with ensuring that software is reliable and maintainable.

    Documentation is important to the process because it ensure that all of the various activities can be accounted for and the project can remain manageable.

    [Back to the Notes Index]