Towards Client-Aware Interface Specifications
Run-time Assertion Checking (RAC) is a well-established technique for run-time verification of Object-Oriented (OO) programs. Contemporary RACs use specifications from the receiver's dynamic type when checking method calls. This implies that in presence of subtyping and dynamic dispatch features of object-oriented programming, these specifications differ from the ones used by static verification tools, which rely on the specifications associated with the static type of the receiver. Besides the heterogeneity problem, this also hinders the benefits of modular reasoning achieved by the notion of supertype abstraction.