|
Are We Safe Yet? I travel by airplane a lot, which means I spend too much of my life in a "locked and upright position". Whenever I fly, I have the usual safety concerns: unruly or suspicious fellow-travelers, weather problems, inebriated pilots, and mechanical failures. But as a software developer I have another, uncommon concern that does not disturb the salesman in the next seat, or the soccer-mom in 24A: is the software flying this airplane safe? I have been developing, and working with software development groups, for 30 years. Almost all of my professional work has been in commercial, business software development. But I remain astounded that not once in 30 years have I ever seen, or heard, a requirement or IT policy that the software under development must be safe. This may be because the discipline of software safety did not exist before the mid-1980s, when Nancy Leveson started her initial research in this area. Or, it might be because many people assume if the software has no bugs, it must be safe - which is patently not a true statement. Here are some known examples of unsafe software accidents and the escalating damage they have produced over the decades. In the 1970s:
In the 1980s:
In the 1990s:
In the 2000s we are confronted with compromised encryption schemes, aircraft such as the Boeing 717 that take-off and land solely under computer control, Denial Of Service and buffer overrun attacks, cyber terrorism, and ubiquitous reliance on computer software from email to pacemaker operation. But one of the first examples of horrific software failure is the Therac-25, and it deserves some inspection. The Therac-25 was a medical diagnostic machine that emitted either x-radiation or electron beams. Because of a race condition in the kludged operating software that controlled the position of a metal plate in the beam path, and a bug in the user interface code, the machine operator could cause the machine to emit lethal amounts of electron beam radiation into a patient's body, all while the UI indicated that safe amounts of X-radiation were being emitted. The Therac-25 killed five people before the manufacturer removed it from every installation. But My Software is Safe You may be thinking, "I don't write software for avionics, or spacecraft, or even telephone systems. My business software cannot hurt anyone, so it has to be safe." Let me disabuse you of this idea with a real scenario on how to kill someone with a word processor. Consider that you prepare a word processor document like the one below. The " <\t> " symbol represents a TAB character.
You then save the document, and sometime later read it back into your word processor. The document is different now:
We see that a TAB character has been lost. Well, how dangerous can that be? The answer is in what I neglected to put in the original document. I left off the headers corresponding to the columns identified by the tabs. Here is the "real" document after reading it back in:
Sorry, Chester! Fixed in next release! (This example came from a U.S. Navy Test Plan for document fidelity. I have modified the scenario a bit for simplicity.) Software safety become an interest of mine when I was in a Communications group quite a few years ago. I was writing driver software for a Front-End Processor, passing data to a mid-range computer. This was a new product line, and the Sales group informed us that one of our first installations would be at a hospital. My wake-up call came when I realized my software would be shipping patient records, prescriptions and diagnoses across a 50-pin, high-speed Common Trunk connection. In this world dropping a bit, or hitting a race condition wasn't just a bug: it could mean ending a life. Our craft has made tremendous progress, but we still cannot boldly state "my software is safe". In next month's newsletter I will discuss some innovative testing ideas that can help us come closer to "safer", more reliable software. Forward this email to your QA people and let them know. Have a productive (and safe) month, Gary K. Evans |
Subscribe to our newsletter! Send an email to You will find all prior About Evanetics Evanetics provides on-site consulting, training, and assessments for teams and management in Business Analysis, Object-Oriented Modeling with UML, Project Definition, Iterative process, RUP, Agile principles and practices. Phone: 803-781-7628
Evanetics is an Endorsed Education Provider (EEP) for the International Institute of Business Analysis Domain Power I have had the privilege recently to work with a very talented team. Their company provides hardware and software solutions world-wide. My role was to assist in producing Unified Modeling Language (UML) domain diagrams for multiple product lines with various degrees of functional overlap. The team consisted of software managers, a project manager or two, and developers. What delighted me was how quickly they saw the value of these non-technical UML models. The transition in mindset was challenging for the developers, who came to the team "knowing too much" - i.e., too much about the design and implementation of their own products. Owners of this low-level knowledge can easily describe "how" a product works, and how its architecture is constructed. But they usually have some difficulty articulating "what" the product does, and what the main abstractions are in the product, independent of its design, platform, and implementation. Over a period of just a few days we established the scope of our analysis and constructed UML domain class diagrams for each product. We quickly recognized that each product team was using different names for the same concepts: one team identified that their product managed Devices that generated Events. Another team's product created Elements that fired Signals. Different words, but the same tune. With each product diagram, subsequent diagrams became easier and faster to produce. We kept the UML at an absolute level of simplicity so we could focus on the products, not the nuances of the modeling language. As the diagrams evolved our vocabularies converged to a common subset. As we explored the details that suggested significant non-alignment across the products, we found more similarities of concept than differences. Eventually, we produced a single domain class diagram that captured the superset of concepts and functionality across the individual products. Now, the company can identify the "best of breed" functionality in each product, and move intelligently toward a single, unified product. At the end, even the developers were talking to each other using the unified conceptual names rather than the names in their code. Now they were explaining "what" their products' components and relationships were, rather than "how" they are implemented entirely differently. |
||||||||||||||||||||||||||||||||||||||||||
|
Published by: Evanetics, Inc.13 Stonebriar Road Columbia, SC 29212 803-781-7628 Copyright (C) 2010 Evanetics, Inc. All rights reserved. www.evanetics.com |
|||||||||||||||||||||||||||||||||||||||||||