The performance advantage of Reviser in comparison to
full recomputations is visible best when applied repeatedly.
When we assume that the static analysis is performed on a
continuous-integration server for every check-in into a version
control system, savings are accumulated over time as depicted
on the right sides of Figures 5{11. For instance, over the 25
most recent Soot revisions, the 75% savings introduced by
Reviser accumulate to over 11,000 seconds (3 hours).
In general, the performance of Reviser depends on the
number of jump functions that need to be recomputed. The
larger the impact of the code change is, the more edges are
aected. Clearing and repropagating over an edge takes
generally longer than the initial computation for that edge.
Performance gains are thus achieved by recomputing only (a
suciently precise overapproximation of) the aected nodes
which is usually a small subset of all nodes in the program
graph. In the worst case, all edges must be recomputed and
the algorithm degenerates to a recomputation with some
overhead, caused by changeset computation and wrapper
lookups as described in Section 4. This, for instance, happens
for the JUnit update from version 4.10 to version 4.11.