[[PageOutline(1-3)]] = !PathFinder = !PathFinder is a lightweight back-in-time debugger for navigating through specific test case behavior and state. It assists developers in localizing root causes by accessing entire execution histories, highlighting infection chains, and answering questions about object states. == Description == A test case executes one specific path through the system which can be recorded with all its behavior and state to understand the complete execution history. However, traditional approaches for analyzing a program’s run-time are time-consuming and expensive. They capture comprehensive information about the entire execution up-front, which is in large parts not required at all. We solve this problem with the reproducible and deterministic properties of test cases. We assume that a test case always takes the same path through the system so that each execution comprises the same behavior and state information. With this insight, we are able to split the expensive analysis of a program’s run-time over multiple test runs. Based on developers’ decisions, we divide the analysis into multiple steps: A high-level analysis followed by on-demand refinements. Thus, we incrementally collect only the data developers are interested in and so reduce the analysis overhead to a minimum while preserving instantaneous access to detailed execution histories. Based on this analysis technique, !PathFinder implements a lightweight back-in-time debugger for introspecting specific test case executions that supports the characteristics of immediacy. Moreover, this tool reuses [wiki:path:pathMap PathMap's] [wiki:path:tutorial:tdfn anomalies] in order to classify traces with suspicious behavior and state. So, developers can follow infection chains back to their root causes without much effort. '''See also the following tutorials:''' [wiki:path:tutorial:tdfn Test-driven Fault Navigation] and [wiki:path:tutorial:backintime Back-in-time Debugging]. == Screenshot == [[Image(pathFinderLarge.png, 800px)]] == How to Use == * First, you need a proper Path project that is selected as current. For more information see [wiki:path:pathProject PathProject]. * To start !PathFinder choose the tool either in the world docking bar at the top (Apps -> !PathFinder) or in the world menu (open... -> !PathFinder). * After that, you will see a tool as in the screenshot above with a large white space in the middle. * In order to get the execution history of a specific test case, please click on the rectangle in the upper left corner and choose the corresponding test case from the list. * Afterwards, the executed call tree is presented in the former white area below and developers can start exploring its execution history. '''Note:''' Developers can start exploration either directly at a test case or out of covered methods as provided by [wiki:path:pathMap PathMap]. Subsequently, !PathFinder opens at the chosen method instead of the test case's beginning. == User Interface == !PathFinder's main components are a control panel on the top and the test case call tree representing its execution history at the bottom. === Control Panel === The control panel offers from left to right the following buttons and input fields: [[Image(pathFinderLargeControl.png, 800px)]] Colored rectangle (left, ''Green''):: Drop down list button (''Class View''):: Drop down list button (''Without Profiling''):: Five icon buttons (from left to right):: Text box (right, ''DTRCorrectionWindowTest>>testAddToDictionary''):: === Call tree === [[Image(pathFinderLargeMethodCallTree.png, 300px)]] [[Image(pathFinderLargeMethodLarge.png, 700px)]]