Topic 6: checking properties of sw
•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:
–SLAM, Ball and Rajamani
–Metal, Engler et al