Software and code that is robust is capable of handling unexpected inputs or user behaviour not intended/defined for its application/use. Robust software should additionally handle the limitations of the computing platform in which they run on (i.e., watching for number overflow) and should produce correct results for all boundary cases.

Why this is important

Robustness is important in life-critical applications, including in many embedded systems. Prof Vaughn Betz uses the example of Therac-25, a radiation therapy machine which overdosed several patients due to software bugs. One of which was a user-interface error with unexpected inputs, where radiologists that typed fast could backspace on a dosage amount without actually deleting it from the input. 1

Prof Betz also mentioned his time at Altera as an example — where one bug resulted in timing problems about 2% of the time. The marketing and sales people at Altera said it was fine, but Prof Betz thought about how their chips were used in airplanes, MRI machines, and other critical applications. So he put his foot down and got the bug fixed. Would’ve been reckless to release a product like that.

Footnotes

  1. From Data Structures and Algorithms in Java, by Michael Goodrich and Roberto Tamassia.