Designing Robust Software
by Jessica Winblad
- Capable of performing without failure under a wide range of conditions (Merriam Webster)
- Performs well not only under ordinary conditions but under unusual conditions that stress its designer's assumptions (The Linux Information Project)
- Accounts for and protects against certain classes of software (and/or hardware) errors or failures
Example: Unix is often said to be robust because it can operate for prolonged periods without crashing or requiring rebooting, and if individual programs crash, they usually do so without affecting other programs or the operating system.
Software is often instead:
- doesn't work how it "should" or hasn't been tested thoroughly for correctness of the design and implementation
- "This is in large part because programs are usually too big and too complicated for a single human mind to comprehend in their entirety, and thus it is difficult for their developers to be able to discover and eliminate all the errors, or to even be certain as to what extent of errors exist. This is especially true with regard to subtle errors that only make their presence known in unusual circumstances." -The Linux Information Project"
- often an issue of scaleability or unanticipated workloads (eg: the slashdot effect) - will your program be brought to its needs in this case?
Tactics to Deliver Robustness:
Design Goals are not always for Robustness:
|Rapid Application Design
- Proof of concept
- to assess feasibility
- Demos/things that aren't built to last
Faster to implement typically (less worrying about the possible "what ifs" of what could go wrong)
|When code needs to:
- work under all circumstances
- be stable and not crash
- handle unexpected cases gracefully
Requires more thorough testing to verify as many errors as possible are avoided
"Exception handling code can be difficult to represent in
terms of design and documentation, largely because it generally falls outside normal program flow, and can occur at
virtually any point in a program."
Return to Homepage