A new approach to testing component-based applications is presented, which exploits the practice in component-based systems of generating stub/skeleton modules and using these stubs/skeletons to construct a global perspective of end-to-end causality of inter-component communication. This global causality is captured regardless of reentrancy, callbacks, thread and process boundaries, and unsynchronized clocks. The captured logs created from the interception points are used to construct a system-wide component interaction model that can expose the inter-component dependencies usually hidden in static analysis of application code. These discovered dependencies are used to create a test boundary for applying a component test harness for that component and the set of dependent components. Similarly, the discovered dependencies can be applied to pruning the available test cases to identify those cases that are best suited to exposing defects when one or more components are changed. A particular advantage of the approach has been the ability to isolate the sequence of events that led up to a crash or a deadlock condition and view the entire system behavior (not just a particular thread's perspective or a linear log of intercepted messages).
['Jun Li', 'Keith Moore']
Exploiting global causality in testing of distributed and component-based applications