[[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 among others our [wiki:path:tutorial:tdfn test-driven fault navigation], [wiki:path:tutorial:tqf test quality feedback], and [wiki:path:tutorial:modelbasedEditor 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. * ''[wiki:path:pathFinder 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. * ''[wiki:path:pathView 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], [wiki:path:pathFinder PathFinder], [wiki:path:pathView PathView] ''[24. February 2014]'' New one-click image with all installed Path tools available. Try it out! ''[22. February 2014]'' Add more documentation for [wiki:path:pathView PathView] and [wiki:path:tutorial:modelbasedEditor Model-based Source Code Editing] ''[10. January 2014]'' We publish the first version of our Path Tools framework (under the [http://www.opensource.org/licenses/mit-license.php MIT license]). Have fun! = How to Install = {{{ #!div class="wiki_infotable" style="float:right;" ||'''Environment'''|| || || [[Image(media/icons/custom:squeak_16.png, title="Recommended Squeak Version", nolink, right)]] || 4.4 || || [[Image(media/icons/silk:application_home.png, title="Recommended Squeak VM Version", nolink, right)]] || any || ||'''Sources'''|| || || [[Image(media/icons/silk:database.png, title="Repository", nolink, right)]] || [http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/PathTools/ PathTools] || ||'''Misc'''|| || || [[Image(media/icons/silk:world.png, title="Website", nolink, right)]] || [http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/PathTools.html PathTools@SqueakSource] || }}} Using Metacello, just run the following code in your workspace: {{{ (Installer mc http: 'http://www.hpi.uni-potsdam.de/hirschfeld/squeaksource/') project: 'PathTools'; install: 'ConfigurationOfPathTools'. (Smalltalk at: #ConfigurationOfPathTools) load. }}} After installation, please check if all test are passing (category !Path-Tests, some tests can only be run alone in the standard test runner or use our [wiki:path:pathMap PathMap] with the ''path'' project instead) = Preinstalled Demonstrations = We offer two preinstalled, ready-to-go, all-in-one Squeak images (Version 4.4). Just download, extract, and execute it! These images work for all operating systems (Windows, Unix, Mac OS). * Complete image with all installed Path tools. ([http://www.michaelperscheid.de/projects/140224_PathTools_AllInOne.zip download (~80 MB)]) * A prepared tutorial in form of an interactive Squeak image. It explains our [wiki:path:tutorial:tdfn test-driven fault navigation] by debugging a difficult failure step by step. ([http://www.michaelperscheid.de/projects/131025_DemoImage.app.zip download (~90 MB)] ('''Note:''' This image does not include [wiki:path:pathView PathView]). = How to Use = In the following two sections, we introduce all features of our tools and present typical applications (including screencasts). == 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 }}} }}} }}} == Applications == {{{ #!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 [wiki:path:pathFinder 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 * Robert Hirschfeld * Vasily Kirilichev * Stephanie Platz * Oliver Richter * Leonhard Schweizer * Eric Seckler * Benjamin Siegmund * Bastian Steinert * Marcel Taeumel * Philipp Tessenow