This course offers an introduction to the theory and practice of
program monitoring, or runtime verification as we shall call it.
Runtime verification is the study of how to design
artifacts for monitoring and analyzing program executions. Such
artifacts can be used for a variety of purposes, including testing/program
understanding and fault protection. Although programmers have written
more or less ad-hoc monitors since the birth of the computer, only recently
(last decade) has this areas achieved a status as a field on its own.
In this course we shall specifically focus on notations for specifying
properties of Java programs, and frameworks
for monitoring such. The course will initially address the issue of program
instrumentation and monitoring using aspect oriented programming and Java.
This will not only provide the student with a new useful technology but will
also motivate tools presented later in the course.
At the end of the course the student will have gained insight into the
important problems in the field and will have encountered
a core selection of solutions for monitoring programs.
The course will enable the student to apply monitoring in software development
as well as initiate research in this field.
Although the course focuses on Java, the ideas extend to other languages.
We will study 3 systems: AspectJ (lectures 2-3), JavaMOP (lectures 4-7,) and RuleR (lecture 8).
IdentityHashSet.java
,
WeakIdentityHashSet.java
and
WeakIdentityHashMap.java
.
These are useful for writing realistic monitors.
Install the Apache package and the three classes.
The java.util
package already offers
a IdentityHashMap
.
==
rather than equals()
. This is important since
monitored objects may get modfied by the monitored program.
Monitor.aj
above, you need to download the classes
IdentityHashSet.java
and WeakIdentityHashSet.java
from lecture 3.