Real-world programs are neither monolithic nor static – they are constructed using platform and third party libraries, and both programs and libraries continuously evolve in response to change pressure. In case of the Java language, the rules defined in the Java Language and JVM Specs define when library evolution is safe. These rules distinguish between three types of compatibility - binary, source and behavioural.
In the first part of this talk I will present some puzzlers (in the style of Joshua Bloch’s famous book) showing the inconsistencies between the different types of compatibilities. In the second part, I will talk about some of the research we did in order to figure out what problems this causes in practise: (1) a developer survey showing that the rules of binary compatibility are not well understood by developers, (2) a repository study showing that this causes real problems in projects, and (3) a study on a set of 100+ popular Java programs that shows that incompatible API evolution is common. At the end, I will talk a little bit about tools and methods that can be used to mitigate some of these problems.
Jens has a MSc and a PhD in Mathematics from the University of Leipzig and has worked with object-oriented technologies (mainly Smalltalk and Java) since 1996. He helped to design and implement some of the first large-scale OO enterprise applications for clients like Mercedes Benz and several large banks in Germany, Switzerland, the UK , the US and Namibia. Jens is now Associate Professor in Software Engineering at Massey University New Zealand. He is interested in design analysis and refactoring (see for instance xplrarc.massey.ac.nz), contracts for dynamic component models (such as OSGi) and testing. Jens is currently visiting Australia to work with Oracle Labs in Brisbane on new algorithms to be used for the static analysis of the Java platform.