Tutorials
List of Tutorials
Specification and Formal Analysis of Java Programs
Lecturer: Bernhard Beckert (Karlsruhe Institute of Technology, Germany)
Much effort in computer science is readily focused on software adaptation, but it remains an open challenge to adequately predict the behavior of systems subject to adaptation. One approach to solving this problem is the use of formal methods. In this tutorial we show how Java programs can be formally specified using the Java Modeling Language (JML), and how they can be analysed using techniques such as deductive verification and symbolic execution. Read more.
Towards Software Visual Analytics
Lecturer: Paul Klint (Centrum voor Wiskunde en Informatica, Amsterdam, Netherlands)
Rascal is a recently designed language for software analysis and transformation that seamlessly merges syntax analysis, pattern matching, term traversal/rewriting and relational calculus. It provides these concepts in a Java-like style thus reducing the learning curve for ordinary programmers. This tutorial illustrates Rascal with numerous examples and discusses some tradeoffs we have made during design and implementation of the language. Currently we are creating a visualization framework for Rascal and are exploring how the extended language can be used for the visual exploration of software facts. Read more.
Rule-based Dynamic Adaptation
Lecturer: Ivan Lanese (University of Bologna, Italy)
Dynamic adaptation aims at adapting systems to changes in their operating conditions that were unexpected at software-development time. We illustrate the main ideas underlying dynamic adaptation, then we present JoRBA, a rule based-approach to dynamic adaptation for service oriented systems, and its underlying theory. Read more.
Adaptive Software Libraries
Lecturer: Klaus Ostermann (University of Marburg, Germany)
We will review design techniques to make software libraries adaptive. These design principles range from basic modularity principles to elaborate design patterns and architectural styles. We will also analyze the influence of the programming language on software adaptability and discuss how language constructs from object-oriented, functional, and aspect-oriented programming can help in making a library more adaptive. Read more.
How to Write Fast Numerical Code?
Lecturer: Markus Püschel (Carnegie Mellon University, Pittsburgh, Pennsylvania, USA)
The complexity of modern microarchitectures poses a major challenge for developers of high performance numerical software. To run fast, it is not sufficient that a program is based on an algorithm with minimal operations count. Various other optimizations need to be performed including loop unrolling, adaptation to the memory hierarchy, and the use of special instruction sets. We introduce these and other techniques using the discrete Fourier transform and matrix-matrix multiplication as examples. Further, we overview Spiral, a program generation system for transforms, which performs these optimizations automatically to produce code that rivals the best human-tuned code in performance. Read more.
Abstract Interpretation
Lecturer: Helmut Seidl (Technical University of München, Germany)
Abstract interpretation is a technique for statically inferring invariants of the run-time behavior of systems. This tutorial offers the basic ideas of the approach and then illustrates the application by examples taken from the analysis of C programs and of multi-threaded open code. Read more.