Software Runtime Analytics for Developers: Extending Developers’ Mental Models by Runtime Dimensions
Total Page:16
File Type:pdf, Size:1020Kb
Zurich Open Repository and Archive University of Zurich Main Library Strickhofstrasse 39 CH-8057 Zurich www.zora.uzh.ch Year: 2018 Software runtime analytics for developers: extending developers’ mental models by runtime dimensions Cito, Jürgen Posted at the Zurich Open Repository and Archive, University of Zurich ZORA URL: https://doi.org/10.5167/uzh-152966 Dissertation Published Version Originally published at: Cito, Jürgen. Software runtime analytics for developers: extending developers’ mental models by runtime dimensions. 2018, University of Zurich, Faculty of Economics. Department of Informatics Software Runtime Analytics for Developers Extending Developers’ Mental Models by Runtime Dimensions Dissertation submitted to the Faculty of Business, Economics and Informatics of the University of Zurich to obtain the degree of Doktor / Doktorin der Wissenschaften, Dr. sc. (corresponds to Doctor of Science, PhD) presented by Jürgen Cito from Vienna, Austria approved in February 2018 at the request of Prof. Dr. Harald C. Gall, University of Zurich, Switzerland Dr. Philipp Leitner, Chalmers University of Technology, Sweden Prof. Dr. Nenad Medvidovic, University of Southern California, USA The Faculty of Business, Economics and Informatics of the University of Zurich hereby authorizes the printing of this dissertation, without indicating an opinion of the views expressed in the work. Zurich, February 14th, 2018 Chairwoman of the Doctoral Board: Prof. Dr. Sven Seuken Abstract Software systems have become instrumental in almost every aspect of modern society. The reliability and performance of these systems plays a crucial role in the every day lives of their users. The performance of a software system is governed by its program code, executed in an environment. To ensure reliability and performance, developers need to understand both code and its execution effects in the context of this environment. Reasoning about source code of programs is a complex cognitive process in which developers construct mental models that are informed by their knowledge of control- and data-flow. Reasoning about runtime aspects of code (e.g., performance) requires consulting external information sources, such as profilers, to construct a more complete image. For software deployed in scalable cloud infrastructures, developers gain insight into operational aspects of code by inspecting distributed runtime data (logs, traces, metrics) to reason about the peculiarities of production environments. Runtime data is currently presented in dashboards that display metrics in time series graphs and enable search capabilities for properties of the data. In a mixed-method empirical study with software developers who deploy in cloud infrastructures, we found that this particular presentation of data is an obstacle to gain actionable insights for software maintenance and debugging tasks. Developers end up relying on their beliefs and intuition about the system to introduce potential fixes, rather than making informed decisions based on data. We propose an approach called Software Runtime Analytics for Developers that integrates operational aspects from production into the daily workflow of software developers, thereby extending their existing mental models of programs by runtime dimensions, and enables ii data-driven decision making for developers. Specifically, we design a framework that is an abstract representation of potential solution spaces that can guide implementations of this approach. We instantiate two concrete solutions out of the abstract framework and implement prototypes that serve as proof-of-concepts. PerformanceHat is an Eclipse IDE plugin that models runtime performance data and matches it to specific, performance-related elements of source code in the IDE (methods, loops, and collections). Given the information on the source code level, we leverage fast inference models that provide live feedback of performance properties of newly written and modified code to prevent performance problems from reaching production. Context-based Analytics is a web application in Python that supports problem diagnosis by establishing explicit links between runtime data and program code fragments. The resulting graph allows developers to navigate the solution space and relate problems at runtime to their origin in source code. We evaluated PerformanceHat in a controlled experiment with 20 professional software developers, in which they worked on software maintenance tasks using our approach and a representative baseline (Kibana). We found that using our approach, developers are significantly faster in (1) detecting the performance issue, and (2) finding the root-cause of the issue. We also let both groups work on non-performance relevant tasks and found no significant differences in task time. We conclude that our approach helps detect, prevent, and debug performance problems faster, while at the same time not adding a disproportionate distraction for maintenance tasks not related to performance. For Context-based Analytics we conducted a case study within IBM to evaluate to what extent our approach can be used to diagnose runtime issues in real-life applications. We designed a study that compares the problem diagnosis process for two issues taken from the issue tracker of an application in IBM Bluemix and found that our approach reduced the effort of diagnosing these issues. In particular, it decreased the number of required analysis steps by 48% and the number of needed inspected traces by 40% on average as compared to a standard diagnosis approach within the application team (Kibana). Zusammenfassung Softwaresysteme haben eine tragende Rolle in fast jedem Aspekt der modernen Gesellschaft. Die Zuverlässigkeit und Performance dieser Systeme spielt eine entscheidende Rolle im täglichen Leben ihrer Benutzer. Die Performance eines Softwaresystems ist abhängig von seinem Programmcode, der in einer Umge- bung ausgeführt wird (beispielsweise in der Cloud). Um Zuverlässigkeit und Performance zu gewährleisten, müssen Entwickler sowohl Code als auch dessen Auswirkungen in der Umgebung verstehen. Das Verstehen des Quellcodes von Programmen ist ein komplexer kognitiver Prozess, bei dem Entwickler mentale Modelle konstruieren, die durch ihr Wissen über Kontroll- und Datenflüsse ges- teuert wird. Um Laufzeitaspekte von Code (z.B. Performance) zu verstehen müssen externe Informationsquellen, beispielsweise Profiler, in Betracht gezogen werden. Bei Software, die in skalierbaren Cloud-Infrastrukturen deployed wird, können Entwickler nur dann Laufzeitaspekte des Codes in Erfahrung bringen indem sie verteilte Laufzeitdaten (Logs, Traces, Metriken) untersuchen, um die Besonderheiten von komplexen Produktionsumgebungen zu verstehen. Laufzeit- daten werden in heutigen Systemen in Dashboards angezeigt, die Messwerte des Systems als Visualisierung von Zeitreihen anzeigen und Suchfunktionen für Eigenschaften der Daten ermöglichen. In einer empirischen Studie mit Soft- ware Entwicklern, die ihre Applikationen in Cloud-Infrastrukturen deployen, haben wir festgestellt, dass diese spezielle Darstellung von Daten ein Hindernis für verwertbare Erkenntnisse für Softwarewartungs- und Debugging-Aufgaben darstellt. Entwickler verlassen sich letztendlich auf ihre Intuition über das Sys- tem um mögliche Korrekturen einzuführen, anstatt fundierte Entscheidungen iv auf Basis von Daten zu treffen. Wir schlagen einen Ansatz namens Software Runtime Analytics for Developers vor, der Laufzeit Aspekte aus der Produktion in den täglichen Workflow von Softwareentwicklern integriert, und damit die vorhandenen mentalen Modelle um Laufzeitdimensionen erweitert und damit datengestützte Entscheidungsfindung für Entwickler ermöglicht. Insbesondere entwerfen wir ein Framework, der eine abstrakte Darstellung möglicher Lö- sungsräume repräsentiert, der die Implementierungen dieses Ansatzes leiten können. Wir instanziieren zwei konkrete Lösungen aus dem abstrakten Framework und implementieren Prototypen, die als Proof-of-Concepts dienen. PerformanceHat ist ein Eclipse-IDE-Plug-in, das Laufzeitdaten modelliert und mit bestimmten Elementen des Quellcodes in der IDE (Methoden, Schleifen, und Collections) abgleicht. Auf Basis der Informationen auf Ebene des Quellcodes verwenden wir schnelle Inferenzmodelle, die eine Live-Rückmeldung der Performance Eigen- schaften von neu geschriebenem und geändertem Code bieten, um zu verhindern, dass Performance Probleme in Produktion deployed werden. Context-based Ana- lytics ist eine Webanwendung in Python, die die Problemdiagnose unterstützt, indem explizite Verknüpfungen zwischen Laufzeitdaten und Programmcode Frag- menten hergestellt werden. Der resultierende Graph ermöglicht es Entwicklern, im Lösungsraum zu navigieren und Probleme zur Laufzeit mit ihrem Ursprung im Quellcode in Beziehung zu setzen. Wir haben PerformanceHat in einem kontrollierten Experiment mit 20 professionellen Entwicklern evaluiert, in dem sie mit unserem Ansatz und einer repräsentativen Baseline (Kibana) an Soft- warewartungsaufgaben gearbeitet haben. Wir haben festgestellt, dass Entwickler mit unserem Ansatz wesentlich schneller (1) das Performance Problem erken- nen und (2) die Ursache des Problems finden. Wir ließen beide Gruppen an nicht-performance relevanten Aufgaben arbeiten und fanden keine signifikanten Unterschiede in der Zeit in denen die Aufgaben erledigt wurden. Wir kommen zu dem Schluss, dass unser Ansatz hilft Performance Probleme schneller zu erkennen, zu verhindern und zu beheben, während gleichzeitig Wartungsaufgaben,