Author_Institution :
Dept. of Comput. Sci., Florida Tech., Melbourne, FL, USA
Abstract :
Software is deterministic. Given a starting state and a fixed series of inputs, software will produce the exact same output every single time those inputs are applied. In fact, many of the technologies we apply during development (reviews, formal proofs, testing, and so forth) rely on this determinism; they would not work otherwise. But if software is deterministic, why do weird things happen? Why is it that we can apply a sequence of inputs and observe a failure and then be unable to reproduce that failure? Why does software work on one machine and fail on another? How is it that you can return from lunch and find your Web browser has crashed when it wasn´t being used? The answer is, of course, that modern software processes an enormous number of inputs and only a small percentage of these inputs originate from human users. When testers can´t reproduce failures, the reason is that they are only resubmitting the human input without sufficient regard to the operating system return codes and input from runtime libraries. When software fails on a new computer after running successfully on another, the reason can only be that the new system is supplying input that differs in content from the old one. And the browser that crashes when you are at lunch is responding to input from a nonhuman external resource
Keywords :
operating systems (computers); software reliability; system recovery; Web browser; deterministic software; human input; human users; input processing; invisible software users; nonhuman external resource; operating system return codes; runtime libraries; software failure; Application software; Computer interfaces; Event detection; Humans; Kernel; Libraries; Software systems; Software testing; Software tools; Watches;