Date Added: Nov 2010
Modern software is increasingly ubiquitous, commoditized, and (dynamically) configurable. Moreover, such software often must be able to operate in a varied set of heterogeneous environments. Because this software can behave very differently in different environments and configurations, it is difficult to assess his quality purely in-house, outside the actual time and context in which the software executes. Consequently, developers are often unaware of how their systems actually behave in the field and how their maintenance activities affect such behavior, as shown by the countless number of incidents experienced by users because of untested behaviors. On the bright side, the complexity of today's computing infrastructure and of modern software also provides software engineers with new opportunities to address these problems.