•Context:
–Modern programming protect against some frequent bugs,
using type checking.
–For example, Tree* cannot be assigned a float* value.
•Problem:
–Can we extend compilers (or other static tools) to check
other useful properties,
specified by the user, for example
•“After a lock is acquired, it is eventually
released.”
•“Each lock that is released was previously
acquired.”
•“Before you call listen() on a socket, the socket must
be open-ed and
bind-ed.”
•Solution:
–User expresses the “useful” property as a state
machine,
–the checker “plays” the state machine along all possible
execution paths of the
tested program.
–if the state machine gets to an illegal state, a “bug”
is reported, together
with the path that caused the “bug.”
•Papers: