  When interacting with their software systems, users may have to deal with
problems like crashes, failures, and program instability. Faulty software
running in the field is not only the consequence of ineffective in-house
verification and validation techniques, but it is also due to the complexity
and diversity of the interactions between an application and its environment.
Many of these interactions can be hardly predicted at testing time, and even
when they could be predicted, often there are so many cases to be tested that
they cannot be all feasibly addressed before the software is released.
  This Ph.D. thesis investigates the idea of addressing the faults that cannot
be effectively addressed in house directly in the field, exploiting the field
itself as testbed for running the test cases. An enormous number of diverse
environments would then be available for testing, giving the possibility to run
many test cases in many different situations, timely revealing the many
failures that would be hard to detect otherwise.
