TY - BOOK A1 - Appeltauer, Malte A1 - Hirschfeld, Robert T1 - The JCop language specification : Version 1.0, April 2012 N2 - Program behavior that relies on contextual information, such as physical location or network accessibility, is common in today's applications, yet its representation is not sufficiently supported by programming languages. With context-oriented programming (COP), such context-dependent behavioral variations can be explicitly modularized and dynamically activated. In general, COP could be used to manage any context-specific behavior. However, its contemporary realizations limit the control of dynamic adaptation. This, in turn, limits the interaction of COP's adaptation mechanisms with widely used architectures, such as event-based, mobile, and distributed programming. The JCop programming language extends Java with language constructs for context-oriented programming and additionally provides a domain-specific aspect language for declarative control over runtime adaptations. As a result, these redesigned implementations are more concise and better modularized than their counterparts using plain COP. JCop's main features have been described in our previous publications. However, a complete language specification has not been presented so far. This report presents the entire JCop language including the syntax and semantics of its new language constructs. N2 - Das Verhalten von modernen Software-Anwendungen benötigt häufig Informationen über den Kontext ihrer Ausführung, z.B. die geografische Position, die Tageszeit oder die aktuelle Netzwerkbandbreite. Dennoch bieten heutige Programmiersprachen nur wenig Unterstützung für die Repräsentation kontextspezifischen Verhaltens. Kontextorientiertes Programmieren ist ein Ansatz, der die explizite Modularisierung und Laufzeitaktivierung von kontextspezifischem Verhalten auf der Ebene von Programmiersprachkonstrukten ermöglicht. Die bisherigen Umsetzungen von kontextorientiertem Programmieren schränken jedoch die Kontrolle der Laufzeitaktivierungen solches kontextspezifischen Verhaltens ein. Daraus folgt eine Einschränkung der Anwendungsbereiche für kontextorientiertes Programmieren, unter anderem für solche Domänen, in denen Programme sehr häufig kontextabhängiges Verhalten bereitstellen, z.B. ereignisbasierte, mobile und dienstorientierte Systeme. Die Programmiersprache JCop erweitert Java um Sprachkonstrukte für kontextorientieres Programmieren und bietet zusätzlich eine domänenspezifische Aspektsprach an, mit deren Hilfe Laufzeitadaptionen deklarativ spezifiziert werden können. Die Kernkonzepte von JCop wurden bereits in mehrern Publikationen vorgestellt, dieser Bericht enthält nun eine umfassende Sprachspezifikation von JCop. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 59 KW - Programming Languages KW - Context-oriented Programming KW - Aspect-oriented Programming KW - Java KW - JCop KW - runtime adaptations Y1 - 2012 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-60208 SN - 978-3-86956-193-6 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Baltzer, Wanda A1 - Hradilak, Theresa A1 - Pfennigschmidt, Lara A1 - Prestin, Luc Maurice A1 - Spranger, Moritz A1 - Stadlinger, Simon A1 - Wendt, Leo A1 - Lincke, Jens A1 - Rein, Patrick A1 - Church, Luke A1 - Hirschfeld, Robert T1 - An individual-centered approach to visualize people’s opinions and demographic information N2 - The noble way to substantiate decisions that affect many people is to ask these people for their opinions. For governments that run whole countries, this means asking all citizens for their views to consider their situations and needs. Organizations such as Africa's Voices Foundation, who want to facilitate communication between decision-makers and citizens of a country, have difficulty mediating between these groups. To enable understanding, statements need to be summarized and visualized. Accomplishing these goals in a way that does justice to the citizens' voices and situations proves challenging. Standard charts do not help this cause as they fail to create empathy for the people behind their graphical abstractions. Furthermore, these charts do not create trust in the data they are representing as there is no way to see or navigate back to the underlying code and the original data. To fulfill these functions, visualizations would highly benefit from interactions to explore the displayed data, which standard charts often only limitedly provide. To help improve the understanding of people's voices, we developed and categorized 80 ideas for new visualizations, new interactions, and better connections between different charts, which we present in this report. From those ideas, we implemented 10 prototypes and two systems that integrate different visualizations. We show that this integration allows consistent appearance and behavior of visualizations. The visualizations all share the same main concept: representing each individual with a single dot. To realize this idea, we discuss technologies that efficiently allow the rendering of a large number of these dots. With these visualizations, direct interactions with representations of individuals are achievable by clicking on them or by dragging a selection around them. This direct interaction is only possible with a bidirectional connection from the visualization to the data it displays. We discuss different strategies for bidirectional mappings and the trade-offs involved. Having unified behavior across visualizations enhances exploration. For our prototypes, that includes grouping, filtering, highlighting, and coloring of dots. Our prototyping work was enabled by the development environment Lively4. We explain which parts of Lively4 facilitated our prototyping process. Finally, we evaluate our approach to domain problems and our developed visualization concepts. Our work provides inspiration and a starting point for visualization development in this domain. Our visualizations can improve communication between citizens and their government and motivate empathetic decisions. Our approach, combining low-level entities to create visualizations, provides value to an explorative and empathetic workflow. We show that the design space for visualizing this kind of data has a lot of potential and that it is possible to combine qualitative and quantitative approaches to data analysis. N2 - Der noble Weg, Entscheidungen, die viele Menschen betreffen, zu begründen, besteht darin, diese Menschen nach ihrer Meinung zu fragen. Für Regierungen, die ganze Länder führen, bedeutet dies, alle Bürger nach ihrer Meinung zu fragen, um ihre Situationen und Bedürfnisse zu berücksichtigen. Organisationen wie die Africa's Voices Foundation, die die Kommunikation zwischen Entscheidungsträgern und Bürgern eines Landes erleichtern wollen, haben Schwierigkeiten, zwischen diesen Gruppen zu vermitteln. Um Verständnis zu ermöglichen, müssen die Aussagen zusammengefasst und visualisiert werden. Diese Ziele auf eine Weise zu erreichen, die den Stimmen und Situationen der Bürgerinnen und Bürger gerecht wird, erweist sich als Herausforderung. Standardgrafiken helfen dabei nicht weiter, da es ihnen nicht gelingt, Empathie für die Menschen hinter ihren grafischen Abstraktionen zu schaffen. Darüber hinaus schaffen diese Diagramme kein Vertrauen in die Daten, die sie darstellen, da es keine Möglichkeit gibt, den verwendeten Code und die Originaldaten zu sehen oder zu ihnen zurück zu navigieren. Um diese Funktionen zu erfüllen, würden Visualisierungen sehr von Interaktionen zur Erkundung der angezeigten Daten profitieren, die Standardgrafiken oft nur begrenzt bieten. Um das Verständnis der Stimmen der Menschen zu verbessern, haben wir 80 Ideen für neue Visualisierungen, neue Interaktionen und bessere Verbindungen zwischen verschiedenen Diagrammen entwickelt und kategorisiert, die wir in diesem Bericht vorstellen. Aus diesen Ideen haben wir 10 Prototypen und zwei Systeme implementiert, die verschiedene Visualisierungen integrieren. Wir zeigen, dass diese Integration ein einheitliches Erscheinungsbild und Verhalten der Visualisierungen ermöglicht. Die Visualisierungen haben alle das gleiche Grundkonzept: Jedes Individuum wird durch einen einzigen Punkt dargestellt. Um diese Idee zu verwirklichen, diskutieren wir Technologien, die die effiziente Darstellung einer großen Anzahl dieser Punkte ermöglichen. Mit diesen Visualisierungen sind direkte Interaktionen mit Darstellungen von Individuen möglich, indem man auf sie klickt oder eine Auswahl um sie herumzieht. Diese direkte Interaktion ist nur mit einer bidirektionalen Verbindung von der Visualisierung zu den angezeigten Daten möglich. Wir diskutieren verschiedene Strategien für bidirektionale Mappings und die damit verbundenen Kompromisse. Ein einheitliches Verhalten über Visualisierungen hinweg verbessert die Exploration. Für unsere Prototypen umfasst dies Gruppierung, Filterung, Hervorhebung und Einfärbung von Punkten. Unsere Arbeit an den Prototypen wurde durch die Entwicklungsumgebung Lively4 ermöglicht. Wir erklären, welche Teile von Lively4 unseren Prototyping-Prozess erleichtert haben. Schließlich bewerten wir unsere Herangehensweise an Domänenprobleme und die von uns entwickelten Visualisierungskonzepte. Unsere Arbeit liefert Inspiration und einen Ausgangspunkt für die Entwicklung von Visualisierungen in diesem Bereich. Unsere Visualisierungen können die Kommunikation zwischen Bürgern und ihrer Regierung verbessern und einfühlsame Entscheidungen motivieren. Unser Ansatz, bei dem wir niedrigstufige Entitäten zur Erstellung von Visualisierungen kombinieren, bietet einen wertvollen Ansatz für einen explorativen und einfühlsamen Arbeitsablauf. Wir zeigen, dass der Designraum für die Visualisierung dieser Art von Daten ein großes Potenzial hat und dass es möglich ist, qualitative und quantitative Ansätze zur Datenanalyse zu kombinieren. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 136 KW - data visualization KW - demographic information KW - visualization concept exploration KW - web-based development environment KW - Datenvisualisierung KW - demografische Informationen KW - Visualisierungskonzept-Exploration KW - web-basierte Entwicklungsumgebung Y1 - 2021 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-491457 SN - 978-3-86956-504-0 SN - 1613-5652 SN - 2191-1665 IS - 136 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - JOUR A1 - Bauman, Spenser A1 - Bolz, Carl Friedrich A1 - Hirschfeld, Robert A1 - Kirilichev, Vasily A1 - Pape, Tobias A1 - Siek, Jeremy G. A1 - Tobin-Hochstadt, Sam T1 - Pycket: A Tracing JIT for a Functional Language JF - ACM SIGPLAN notices N2 - We present Pycket, a high-performance tracing JIT compiler for Racket. Pycket supports a wide variety of the sophisticated features in Racket such as contracts, continuations, classes, structures, dynamic binding, and more. On average, over a standard suite of benchmarks, Pycket outperforms existing compilers, both Racket's JIT and other highly-optimizing Scheme compilers. Further, Pycket provides much better performance for Racket proxies than existing systems, dramatically reducing the overhead of contracts and gradual typing. We validate this claim with performance evaluation on multiple existing benchmark suites. The Pycket implementation is of independent interest as an application of the RPython meta-tracing framework (originally created for PyPy), which automatically generates tracing JIT compilers from interpreters. Prior work on meta-tracing focuses on bytecode interpreters, whereas Pycket is a high-level interpreter based on the CEK abstract machine and operates directly on abstract syntax trees. Pycket supports proper tail calls and first-class continuations. In the setting of a functional language, where recursion and higher-order functions are more prevalent than explicit loops, the most significant performance challenge for a tracing JIT is identifying which control flows constitute a loop-we discuss two strategies for identifying loops and measure their impact. KW - Experimentation KW - Languages KW - Measurement KW - Performance KW - JIT compilers KW - contracts KW - tracing KW - functional languages KW - Racket Y1 - 2015 U6 - https://doi.org/10.1145/2784731.2784740 SN - 0362-1340 SN - 1558-1160 VL - 50 IS - 9 SP - 22 EP - 34 PB - Association for Computing Machinery CY - New York ER - TY - BOOK A1 - Beckmann, Tom A1 - Hildebrand, Justus A1 - Jaschek, Corinna A1 - Krebs, Eva A1 - Löser, Alexander A1 - Taeumel, Marcel A1 - Pape, Tobias A1 - Fister, Lasse A1 - Hirschfeld, Robert T1 - The font engineering platform T1 - Eine Plattform für Schriftarten BT - collaborative font creation in a self-supporting programming environment BT - kollaborative Schriftartgestaltung in Einer selbsttragenden Programmierumgebung N2 - Creating fonts is a complex task that requires expert knowledge in a variety of domains. Often, this knowledge is not held by a single person, but spread across a number of domain experts. A central concept needed for designing fonts is the glyph, an elemental symbol representing a readable character. Required domains include designing glyph shapes, engineering rules to combine glyphs for complex scripts and checking legibility. This process is most often iterative and requires communication in all directions. This report outlines a platform that aims to enhance the means of communication, describes our prototyping process, discusses complex font rendering and editing in a live environment and an approach to generate code based on a user’s live-edits. N2 - Die Erstellung von Schriften ist eine komplexe Aufgabe, die Expertenwissen aus einer Vielzahl von Bereichen erfordert. Oftmals liegt dieses Wissen nicht bei einer einzigen Person, sondern bei einer Reihe von Fachleuten. Ein zentrales Konzept für die Gestaltung von Schriften ist der Glyph, ein elementares Symbol, das ein einzelnes lesbares Zeichen darstellt. Zu den erforderlichen Domänen gehören das Entwerfen der Glyphenformen, technische Regeln zur Kombination von Glyphen für komplexe Skripte und das Prüfen der Lesbarkeit. Dieser Prozess ist meist iterativ und erfordert ständige Kommunikation zwischen den Experten. Dieser Bericht skizziert eine Plattform, die darauf abzielt, die Kommunikationswege zu verbessern, beschreibt unseren Prototyping-Prozess, diskutiert komplexe Schriftrendering und -bearbeitung in einer Echtzeitumgebung und einen Ansatz zur Generierung von Code basierend auf direkter Manipulation eines Nutzers. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 128 KW - smalltalk KW - squeak KW - font rendering KW - font engineering KW - prototyping KW - Smalltalk KW - Squeak KW - Schriftrendering KW - Schriftartgestaltung KW - Prototyping Y1 - 2019 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-427487 SN - 978-3-86956-464-7 SN - 1613-5652 SN - 2191-1665 IS - 128 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Bein, Leon A1 - Braun, Tom A1 - Daase, Björn A1 - Emsbach, Elina A1 - Matthes, Leon A1 - Stiede, Maximilian A1 - Taeumel, Marcel A1 - Mattis, Toni A1 - Ramson, Stefan A1 - Rein, Patrick A1 - Hirschfeld, Robert A1 - Mönig, Jens T1 - SandBlocks T1 - SandBlocks BT - Integration visueller und textueller Programmelemente in Live-Programmiersysteme BT - integration of visual and textual elements in live programming systems N2 - Visuelle Programmiersprachen werden heutzutage zugunsten textueller Programmiersprachen nahezu nicht verwendet, obwohl visuelle Programmiersprachen einige Vorteile bieten. Diese reichen von der Vermeidung von Syntaxfehlern, über die Nutzung konkreter domänenspezifischer Notation bis hin zu besserer Lesbarkeit und Wartbarkeit des Programms. Trotzdem greifen professionelle Softwareentwickler nahezu ausschließlich auf textuelle Programmiersprachen zurück. Damit Entwickler diese Vorteile visueller Programmiersprachen nutzen können, aber trotzdem nicht auf die ihnen bekannten textuellen Programmiersprachen verzichten müssen, gibt es die Idee, textuelle und visuelle Programmelemente gemeinsam in einer Programmiersprache nutzbar zu machen. Damit ist dem Entwickler überlassen wann und wie er visuelle Elemente in seinem Programmcode verwendet. Diese Arbeit stellt das SandBlocks-Framework vor, das diese gemeinsame Nutzung visueller und textueller Programmelemente ermöglicht. Neben einer Auswertung visueller Programmiersprachen, zeigt es die technische Integration visueller Programmelemente in das Squeak/Smalltalk-System auf, gibt Einblicke in die Umsetzung und Verwendung in Live-Programmiersystemen und diskutiert ihre Verwendung in unterschiedlichen Domänen. N2 - Nowadays, visual programming languages exist but are rarely used because textual languages dominate the field. Even though visual languages can offer many virtues - such as protection from syntax errors, concise notation for specific domains, improved readability and maintainability of programs – professional software developers tend to only employ textual programming languages. We propose an approach to combine both textual and visual elements in a shared programming system. Developers can rely on the familiar textual representation of source code but also leverage the programming experience with a visual language as needed. This work presents the SandBlocks framework, which enables a joint experience of visual and textual programming elements. It discusses the virtues of visual languages and related work, describes a technical integration of visual elements into the Squeak/Smalltalk programming system, sketches potential workflows in live programming systems, and illustrates applications for several domains. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 132 KW - Programmieren KW - Benutzerinteraktion KW - visuelle Sprachen KW - Liveness KW - Smalltalk KW - programming KW - user interaction KW - visual languages KW - liveness KW - Smalltalk Y1 - 2020 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-439263 SN - 978-3-86956-482-1 SN - 1613-5652 SN - 2191-1665 IS - 132 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Berov, Leonid A1 - Henning, Johannes A1 - Mattis, Toni A1 - Rein, Patrick A1 - Schreiber, Robin A1 - Seckler, Eric A1 - Steinert, Bastian A1 - Hirschfeld, Robert T1 - Vereinfachung der Entwicklung von Geschäftsanwendungen durch Konsolidierung von Programmierkonzepten und -technologien N2 - Die Komplexität heutiger Geschäftsabläufe und die Menge der zu verwaltenden Daten stellen hohe Anforderungen an die Entwicklung und Wartung von Geschäftsanwendungen. Ihr Umfang entsteht unter anderem aus der Vielzahl von Modellentitäten und zugehörigen Nutzeroberflächen zur Bearbeitung und Analyse der Daten. Dieser Bericht präsentiert neuartige Konzepte und deren Umsetzung zur Vereinfachung der Entwicklung solcher umfangreichen Geschäftsanwendungen. Erstens: Wir schlagen vor, die Datenbank und die Laufzeitumgebung einer dynamischen objektorientierten Programmiersprache zu vereinen. Hierzu organisieren wir die Speicherstruktur von Objekten auf die Weise einer spaltenorientierten Hauptspeicherdatenbank und integrieren darauf aufbauend Transaktionen sowie eine deklarative Anfragesprache nahtlos in dieselbe Laufzeitumgebung. Somit können transaktionale und analytische Anfragen in derselben objektorientierten Hochsprache implementiert werden, und dennoch nah an den Daten ausgeführt werden. Zweitens: Wir beschreiben Programmiersprachkonstrukte, welche es erlauben, Nutzeroberflächen sowie Nutzerinteraktionen generisch und unabhängig von konkreten Modellentitäten zu beschreiben. Um diese abstrakte Beschreibung nutzen zu können, reichert man die Domänenmodelle um vormals implizite Informationen an. Neue Modelle müssen nur um einige Informationen erweitert werden um bereits vorhandene Nutzeroberflächen und -interaktionen auch für sie verwenden zu können. Anpassungen, die nur für ein Modell gelten sollen, können unabhängig vom Standardverhalten, inkrementell, definiert werden. Drittens: Wir ermöglichen mit einem weiteren Programmiersprachkonstrukt die zusammenhängende Beschreibung von Abläufen der Anwendung, wie z.B. Bestellprozesse. Unser Programmierkonzept kapselt Nutzerinteraktionen in synchrone Funktionsaufrufe und macht somit Prozesse als zusammenhängende Folge von Berechnungen und Interaktionen darstellbar. Viertens: Wir demonstrieren ein Konzept, wie Endnutzer komplexe analytische Anfragen intuitiver formulieren können. Es basiert auf der Idee, dass Endnutzer Anfragen als Konfiguration eines Diagramms sehen. Entsprechend beschreibt ein Nutzer eine Anfrage, indem er beschreibt, was sein Diagramm darstellen soll. Nach diesem Konzept beschriebene Diagramme enthalten ausreichend Informationen, um daraus eine Anfrage generieren zu können. Hinsichtlich der Ausführungsdauer sind die generierten Anfragen äquivalent zu Anfragen, die mit konventionellen Anfragesprachen formuliert sind. Das Anfragemodell setzen wir in einem Prototypen um, der auf den zuvor eingeführten Konzepten aufsetzt. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 71 KW - Geschäftsanwendungen KW - Programmierkonzepte KW - Datenbank KW - Hauptspeicherdatenbank KW - Python KW - Spaltenlayout KW - Nebenläufigkeit KW - Transaktionen KW - Anfragesprache Y1 - 2013 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-64045 SN - 978-3-86956-231-5 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Calmez, Conrad A1 - Hesse, Hubert A1 - Siegmund, Benjamin A1 - Stamm, Sebastian A1 - Thomschke, Astrid A1 - Hirschfeld, Robert A1 - Ingalls, Dan A1 - Lincke, Jens T1 - Explorative authoring of Active Web content in a mobile environment N2 - Developing rich Web applications can be a complex job - especially when it comes to mobile device support. Web-based environments such as Lively Webwerkstatt can help developers implement such applications by making the development process more direct and interactive. Further the process of developing software is collaborative which creates the need that the development environment offers collaboration facilities. This report describes extensions of the webbased development environment Lively Webwerkstatt such that it can be used in a mobile environment. The extensions are collaboration mechanisms, user interface adaptations but as well event processing and performance measuring on mobile devices. N2 - Vielseitige Webanwendungen zu entwickeln kann eine komplexe Aufgabe sein - besonders wenn es die Unterstützung mobiler Geräte betrifft. Webbasierte Umgebungen wie Lively Kernel können Entwicklern helfen Webanwendungen zu entwickeln, indem sie den Entwicklungsprozess direkter und interaktiver gestalten. Zudem sind Entwicklungsprozesse von Software kollaborativ, d.h. Enwicklungsumgebungen müssen so gestaltet sein, dass sie mit kollaborativen Elementen zu unterstützen. Diese Arbeit beschreibt die Erweiterungen der webbasierten Entwicklungsumgebung Lively Webwerkstatt, so dass diese in einer mobilen Umgebung genutzt werden kann. Die Reichweite dieser Erweiterungen erstreckt sich von Kollaborationsmechanismen und Benutzerschnittstellen bis hin zu Eventbehandlung und Performanzmessungen auf mobilen Geräten. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 72 KW - Web applications KW - Mobile Application Development KW - CSCW KW - Lively Kernel Y1 - 2013 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus-64054 SN - 978-3-86956-232-2 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - RPRT A1 - Döllner, Jürgen Roland Friedrich A1 - Friedrich, Tobias A1 - Arnrich, Bert A1 - Hirschfeld, Robert A1 - Lippert, Christoph A1 - Meinel, Christoph T1 - Abschlussbericht KI-Labor ITSE T1 - Final report "AI Lab ITSE" BT - KI-Labor für Methodik, Technik und Ausbildung in der IT-Systemtechnik N2 - Der Abschlussbericht beschreibt Aufgaben und Ergebnisse des KI-Labors "ITSE". Gegenstand des KI-Labors bildeten Methodik, Technik und Ausbildung in der IT-Systemtechnik zur Analyse, Planung und Konstruktion KI-basierter, komplexer IT-Systeme. N2 - Final Report on the "AI Lab ITSE" dedicated to Methodology, Technology and Education of AI in IT-Systems Engineering. KW - Abschlussbericht KW - KI-Labor KW - final report KW - AI Lab Y1 - 2022 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-578604 ER - TY - BOOK A1 - Dürsch, Falco A1 - Rein, Patrick A1 - Mattis, Toni A1 - Hirschfeld, Robert T1 - Learning from failure BT - a history-based, lightweight test prioritization technique connecting software changes to test failures N2 - Regression testing is a widespread practice in today's software industry to ensure software product quality. Developers derive a set of test cases, and execute them frequently to ensure that their change did not adversely affect existing functionality. As the software product and its test suite grow, the time to feedback during regression test sessions increases, and impedes programmer productivity: developers wait longer for tests to complete, and delays in fault detection render fault removal increasingly difficult. Test case prioritization addresses the problem of long feedback loops by reordering test cases, such that test cases of high failure probability run first, and test case failures become actionable early in the testing process. We ask, given test execution schedules reconstructed from publicly available data, to which extent can their fault detection efficiency improved, and which technique yields the most efficient test schedules with respect to APFD? To this end, we recover regression 6200 test sessions from the build log files of Travis CI, a popular continuous integration service, and gather 62000 accompanying changelists. We evaluate the efficiency of current test schedules, and examine the prioritization results of state-of-the-art lightweight, history-based heuristics. We propose and evaluate a novel set of prioritization algorithms, which connect software changes and test failures in a matrix-like data structure. Our studies indicate that the optimization potential is substantial, because the existing test plans score only 30% APFD. The predictive power of past test failures proves to be outstanding: simple heuristics, such as repeating tests with failures in recent sessions, result in efficiency scores of 95% APFD. The best-performing matrix-based heuristic achieves a similar score of 92.5% APFD. In contrast to prior approaches, we argue that matrix-based techniques are useful beyond the scope of effective prioritization, and enable a number of use cases involving software maintenance. We validate our findings from continuous integration processes by extending a continuous testing tool within development environments with means of test prioritization, and pose further research questions. We think that our findings are suited to propel adoption of (continuous) testing practices, and that programmers' toolboxes should contain test prioritization as an existential productivity tool. N2 - Regressionstests sind in der heutigen Softwareindustrie weit verbreitete Praxis um die Qualität eines Softwareprodukts abzusichern. Dabei leiten Entwickler von den gestellten Anforderungen Testfälle ab und führen diese wiederholt aus, um sicherzustellen, dass ihre Änderungen die bereits existierende Funktionalität nicht negativ beeinträchtigen. Steigt die Größe und Komplexität der Software und ihrer Testsuite, so wird die Feedbackschleife der Testausführungen länger, und mindert die Produktivität der Entwickler: Sie warten länger auf das Testergebnis, und die Fehlerbehebung gestaltet sich umso schwieriger, je länger die Ursache zurückliegt. Um die Feedbackschleife zu verkürzen, ändern Testpriorisierungs-Algorithmen die Reihenfolge der Testfälle, sodass Testfälle, die mit hoher Wahrscheinlichkeit fehlschlagen, zuerst ausgeführt werden. Der vorliegende Bericht beschäftigt sich mit der Frage nach der Effizienz von Testplänen, welche aus öffentlich einsehbaren Daten rekonstruierbar sind, und welche anwendbaren Priorisierungs-Techniken die effizienteste Testreihenfolge in Bezug auf APFD hervorbringen. Zu diesem Zweck werden 6200 Testsitzungen aus den Logdateien von Travis CI, einem oft verwendeten Dienst für Continuous Integration, und über 62000 Änderungslisten rekonstruiert. Auf dieser Grundlage wird die Effizienz der derzeitigen Testpläne bewertet, als auch solcher, die aus der Neupriorisierung durch leichtgewichtige, verlaufsbasierte Algorithmen hervorgehen. Zudem schlägt der vorliegende Bericht eine neue Gruppe von Ansätzen vor, die Testfehlschläge und Softwareänderungen mit Hilfe einer Matrix in Bezug setzt. Da die beobachteten Testreihenfolgen nur 30% APFD erzielen, liegt wesentliches Potential für Optimierung vor. Dabei besticht die Vorhersagekraft der unmittelbar vorangegangen Testfehlschläge: einfache Heuristiken, wie das Wiederholen von Tests, welche kürzlich fehlgeschlagen sind, führen zu Testplänen mit einer Effizienz von 95% APFD. Matrix-basierte Ansätze erreichen eine Fehlererkennungsrate von bis zu 92.5% APFD. Im Gegensatz zu den bisher bekannten Ansätzen sind die matrix-basierten Techniken auch über den Zweck der Testpriorisierung hinaus nützlich, und sind in der Softwarewartung anwendbar. Zusätzlich werden die Ergebnisse der vorliegenden Studie für Continuous Integration Systeme im Kontext integrierter Entwicklungsumgebungen validiert, indem ein Tool für Continuous Testing um Testpriorisierung erweitert wird. Dies führt zu neuen Forschungsfragen. Die Untersuchungsergebnisse sind geeignet die Einführung von Continuous Testing zu befördern, und untermauern, dass Werkzeuge der Testpriorisierung für produktive Softwareentwicklung essenziell sind. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 145 KW - test case prioritization KW - continuous integration KW - regression testing KW - version control KW - live programming KW - heuristics KW - data set KW - test results KW - GitHub KW - Java KW - Testpriorisierungs KW - kontinuierliche Integration KW - Regressionstests KW - Versionsverwaltung KW - Live-Programmierung KW - Heuristiken KW - Datensatz KW - Testergebnisse KW - GitHub KW - Java Y1 - 2022 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-537554 SN - 978-3-86956-528-6 SN - 1613-5652 SN - 2191-1665 IS - 145 PB - Universitätsverlag Potsdam CY - Potsdam ER - TY - BOOK A1 - Eichenroth, Friedrich A1 - Rein, Patrick A1 - Hirschfeld, Robert T1 - Fast packrat parsing in a live programming environment BT - improving left-recursion in parsing expression grammars T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam N2 - Language developers who design domain-specific languages or new language features need a way to make fast changes to language definitions. Those fast changes require immediate feedback. Also, it should be possible to parse the developed languages quickly to handle extensive sets of code. Parsing expression grammars provides an easy to understand method for language definitions. Packrat parsing is a method to parse grammars of this kind, but this method is unable to handle left-recursion properly. Existing solutions either partially rewrite left-recursive rules and partly forbid them, or use complex extensions to packrat parsing that are hard to understand and cost-intensive. We investigated methods to make parsing as fast as possible, using easy to follow algorithms while not losing the ability to make fast changes to grammars. We focused our efforts on two approaches. One is to start from an existing technique for limited left-recursion rewriting and enhance it to work for general left-recursive grammars. The second approach is to design a grammar compilation process to find left-recursion before parsing, and in this way, reduce computational costs wherever possible and generate ready to use parser classes. Rewriting parsing expression grammars is a task that, if done in a general way, unveils a large number of cases such that any rewriting algorithm surpasses the complexity of other left-recursive parsing algorithms. Lookahead operators introduce this complexity. However, most languages have only little portions that are left-recursive and in virtually all cases, have no indirect or hidden left-recursion. This means that the distinction of left-recursive parts of grammars from components that are non-left-recursive holds great improvement potential for existing parsers. In this report, we list all the required steps for grammar rewriting to handle left-recursion, including grammar analysis, grammar rewriting itself, and syntax tree restructuring. Also, we describe the implementation of a parsing expression grammar framework in Squeak/Smalltalk and the possible interactions with the already existing parser Ohm/S. We quantitatively benchmarked this framework directing our focus on parsing time and the ability to use it in a live programming context. Compared with Ohm, we achieved massive parsing time improvements while preserving the ability to use our parser it as a live programming tool. The work is essential because, for one, we outlined the difficulties and complexity that come with grammar rewriting. Also, we removed the existing limitations that came with left-recursion by eliminating them before parsing. T3 - Technische Berichte des Hasso-Plattner-Instituts für Digital Engineering an der Universität Potsdam - 135 KW - packrat parsing KW - parsing expression grammars KW - left recursion Y1 - 2022 U6 - http://nbn-resolving.de/urn/resolver.pl?urn:nbn:de:kobv:517-opus4-491242 SN - 978-3-86956-503-3 SN - 1613-5652 SN - 2191-1665 IS - 135 PB - Universitätsverlag Potsdam CY - Potsdam ER -