Perf4JS: Automatisches Beheben von Effizienzproblemen in realer JavaScript-Software
Zusammenfassung der Projektergebnisse
Da sich dynamische Programmiersprachen, z. B. JavaScript, immer mehr durchsetzen, ist die Effizienz von Anwendungen, die in diesen Sprachen geschrieben sind, entscheidend, um Reaktionsfähigkeit, hohen Durchsatz und Energieeffizienz sicherzustellen. Leider ist das Auffinden und Optimieren von Effizienzengpässen derzeit ein meist manueller und zeitaufwändiger Prozess, der nur von einigen wenigen, erfahrenen Entwicklern durchgeführt werden kann. Der Grund dafür ist, dass bestehende Programmanalysetechniken für dynamische Sprachen grundlegende Beschränkungen haben, die Werkzeuge daran hindern, effektive Codeoptimierungen zu automatisieren. Das Perf4JS-Projekt hat neuartige Programmanalysetechniken erforscht, die die spezifischen Anforderungen hochdynamischer Sprachen angehen. Ein Schwerpunkt hierbei war die Verbesserung der Effizienz von realen JavaScript-Anwendungen. Insbesondere haben wir Ansätze entwickelt, die Entwicklern helfen, Optimierungsmöglichkeiten zu erkennen und auszunutzen, indem sie ineffizienten durch effizienten Code ersetzen. Darüber hinaus haben wir den ursprünglichen Umfang des Projekts auf verwandte Probleme im Bereich der Analyse von JavaScript-Code und auf die neu entstandende WebAssembly-Sprache erweitert. Insbesondere führte das Projekt zu mehreren Innovationen bei der Analyse von JavaScript-Code, z. B. durch automatisierte Testgenerierung, bei der Erhöhung der Zuverlässigkeit von Entwicklerwerkzeugen für JavaScript, z. B. interaktiven Debuggern, und bei der Analyse und Untersuchung von WebAssembly Programmen.
Projektbezogene Publikationen (Auswahl)
- (2018, February). Synthesizing programs that expose performance bottlenecks. In Proceedings of the 2018 International Symposium on Code Generation and Optimization (pp. 314-326)
Luca Della Toffola, Michael Pradel, Thomas R. Gross
(Siehe online unter https://doi.org/10.1145/3179541.3168830) - (2018, October). Feedback-directed differential testing of interactive debuggers. In Proceedings of the 2018 26th ACM Joint Meeting on European Software Engineering Conference and Symposium on the Foundations of Software Engineering (pp. 610-620)
Daniel Lehmann, Michael Pradel
(Siehe online unter https://doi.org/10.1145/3236024.3236037) - (2019, April). Wasabi: A framework for dynamically analyzing webassembly. In Proceedings of the Twenty-Fourth International Conference on Architectural Support for Programming Languages and Operating Systems (pp. 1045-1058)
Daniel Lehmann, Michael Pradel
(Siehe online unter https://doi.org/10.1145/3297858.3304068) - (2019, July). Interactive metamorphic testing of debuggers. In Proceedings of the 28th ACM SIGSOFT International Symposium on Software Testing and Analysis (pp. 273-283)
Sandro Tolksdorf, Daniel Lehmann, Michael Pradel
(Siehe online unter https://doi.org/10.1145/3293882.3330567) - (2021, April). An empirical study of real-world webassembly binaries: Security, languages, use cases. In Proceedings of the Web Conference 2021 (pp. 2696-2708)
Aaron Hilbig, Daniel Lehmann, Michael Pradel
(Siehe online unter https://doi.org/10.1145/3442381.3450138) - (2021, April). Confprof: White-box performance profiling of configuration options. In Proceedings of the ACM/SPEC International Conference on Performance Engineering (pp. 1-8)
Xue Han, Tingting Yu, Michael Pradel
(Siehe online unter https://doi.org/10.1145/3427921.3450255) - Satisfying Increasing Performance Requirements With Caching at the Application Level. In: IEEE Softw. 38 (3), S. 87–95
Jhonny Mertz, Ingrid Nunes, Luca Della Toffola, Marija Selakovic, Michael Pradel
(Siehe online unter https://doi.org/10.1109/ms.2020.3033508) - (2022). Nessie: Automatically Testing JavaScript APIs with Asynchronous Callbacks. ICSE
Ellen Arteca, Sebastian Harner, Michael Pradel, Frank Tip