[[PageOutline(1-2)]] = The Path Tools Framework = The Path Tools Framework comprises several development tools for supporting typical software maintenance tasks such as debugging, testing, and program comprehension. It realizes our test-driven fault navigation, test quality feedback, and model-based source code editing approach. Our implementation primarily consists of three tools that are built on top of a flexible dynamic analysis framework: * ''[wiki:path:pathMap PathMap]'' is an extended test runner that analysis test case behavior and provides feedback about the entire system under observation. For example, it visualizes suspicious system parts, identifies experienced developers, derives type information, automatically creates contracts from likely invariants, reveals missing test cases and performance bottlenecks, or traces requirements down to program entities. * ''PathFinder'' is a lightweight back-in-time debugger for navigating through specific test case behavior and state. It assists developers not only in understanding entire execution histories but also in localizing root causes by highlighting infection chains and answering questions about corrupted object state. * ''PathView'' is a single-source model-based editor that allows developers to apply a direct round-trip engineering approach-changes in source code are immediately reflected in our UML-like views and vice versa. We automatically create such models based on specific test case executions and harvested type information from the entire test base. ''The Path analysis framework'' provides the basis for our tools. It is an extensible realization of our incremental dynamic analysis for Smalltalk’s SUnit framework. By leveraging unit tests as a basis for dynamic analysis, we can ensure reproducibility and a high degree of automation, scalability, and performance with our tools. '''Keywords:''' Software Maintenance, Testing, Debugging, Program Comprehension, Anomalies , Back-in-time, Test-driven fault navigation, Test Quality Feedback, Path Tools Framework, [wiki:path:pathMap PathMap], PathFinder, PathView ''[1. December 2013]'' We start to publish our Path tools framework. = How to Install = TODO: Configuration TODO: All-in-one one click image! Try it out = How to Use = In the following two sections, we introduce all features of our tools and present in short tutorials (including screencasts) how to apply them step by step. == Tools == {{{ #!div class="gallery" {{{ #!div class="gallery_item" [[Image(pathProject.png, 150px, link=wiki:path:pathProject)]] {{{ #!div class="item_description" [wiki:path:pathProject PathProject] [[br]] Definition of the system under observation }}} }}} {{{ #!div class="gallery_item" [[Image(pathMap.png, 150px, link=wiki:path:pathMap)]] {{{ #!div class="item_description" [wiki:path:pathMap PathMap] [[br]] Extended test runner feedback }}} }}} {{{ #!div class="gallery_item" [[Image(pathFinder.png, 150px, link=wiki:path:pathFinder)]] {{{ #!div class="item_description" [wiki:path:pathFinder PathFinder] [[br]] Lightweight back-in-time debugger for test cases }}} }}} {{{ #!div class="gallery_item" [[Image(pathBrowser.png, 150px, link=wiki:path:pathBrowser)]] {{{ #!div class="item_description" [wiki:path:pathBrowser PathBrowser] [[br]] Connection of source code and hidden test knowledge }}} }}} {{{ #!div class="gallery_item" [[Image(pathView.png, 150px, link=wiki:path:pathView)]] {{{ #!div class="item_description" [wiki:path:pathView PathView] [[br]] Single-source and round-trip engineering code editor }}} }}} }}} == Tutorials == {{{ #!div class="gallery" {{{ #!div class="gallery_item" [[Image(tdfn.png, 150px, link=wiki:path:tutorial:tdfn)]] {{{ #!div class="item_description" [wiki:path:tutorial:tdfn Test-driven Fault Navigation] [[br]] integrates anomaly detection into a systematic breadth-first search for debugging failure causes back to defects. We answer important questions such as where to start, who understands failure causes best, what happened before failures, and which state properties are infected? }}} }}} {{{ #!div class="gallery_item" [[Image(backintime.png, 150px, link=wiki:path:tutorial:backintime)]] {{{ #!div class="item_description" [wiki:path:tutorial:backintime Back-in-time Debugging] [[br]] follows execution histories from observable failures back to their root causes. We demonstrate how to apply PathFinder and all its debugging features step by step. [[BR]][[BR]][[BR]][[BR]] }}} }}} {{{ #!div class="gallery_item" [[Image(tqf.png, 150px, link=wiki:path:tutorial:tqf)]] {{{ #!div class="item_description" [wiki:path:tutorial:tqf Test Quality Feedback] [[br]] guides developers in identifying missing tests and correcting low-quality tests. We provide developers with a tool that analyzes test suites with respect to their effectivity and efficiency. [[BR]][[BR]] }}} }}} {{{ #!div class="gallery_item" [[Image(traceability.png, 150px, link=wiki:path:tutorial:traceability)]] {{{ #!div class="item_description" [wiki:path:tutorial:traceability Requirements Traceability] [[br]] combines external concerns of a system with test cases and automatically derives corresponding program entities. This allows developers to follow requirements down to their implementation without much effort. }}} }}} {{{ #!div class="gallery_item" [[Image(modelbasedEditor.png, 150px, link=wiki:path:tutorial:modelbasedEditor)]] {{{ #!div class="item_description" [wiki:path:tutorial:modelbasedEditor Model-based Source Code Editing] [[br]] generates UML-like views of classes, methods, and their relationships being involved in a specific test case. Based on such mid-level abstractions, developers can edit these models and the related source code is changed automatically in background. }}} }}} {{{ #!div class="gallery_item" [[Image(typeHarvesting.png, 150px, link=wiki:path:tutorial:typeHarvesting)]] {{{ #!div class="item_description" [wiki:path:tutorial:typeHarvesting Type Harvesting] [[br]] is a practical approach to obtain type information. Based on unit tests, we automatically derive run-time types and enrich the development environment with it. [[BR]][[BR]][[BR]][[BR]] }}} }}} }}} = Acknowledgments = The Path Tools Framework has been developed by [http://www.michaelperscheid.de Michael Perscheid] as part of his [http://opus.kobv.de/ubp/volltexte/2013/6815/ dissertation]. [[Image(media/icons/silk:user.png, title="Contributors", nolink)]] To date the following people also contributed to this project: * Franz Becker * Tim Felgentreff * Anton Gulenko * Markus Güntert * Michael Haupt * Vasily Kirilichev * Stephanie Platz * Oliver Richter * Leonhard Schweizer * Eric Seckler * Benjamin Siegmund * Bastian Steinert * Philipp Tessenow