  We present a novel methodology for deriving fine-grained patches of Java
software. We consider an abstract-syntax tree (AST) representation of Java
classes compiled to the Java Virtual Machine (JVM) format, and a difference
analysis over the AST representation to derive patches. The AST representation
defines an appropriate abstraction level for analyzing differences, yielding
compact patches that correlate modularly to actual source code changes. The
approach contrasts to other common, coarse-grained approaches, like plain
binary differences, which may easily lead to disproportionately large patches.
We present the main traits of the methodology, a prototype tool called aspa
that implements it, and a case-study analysis on the use of aspa to derive
patches for the Java 2 SE API. The case-study results illustrate that aspa
patches have a significantly smaller size than patches derived by binary
differencing tools.
