BSL is the latest in a series of languages and systems that we have created to support specification of temporal properties of software systems. Experience with an earlier simple property language for Ada software [5] and with a system of temporal specification patterns [7] has yielded the following design criteria that we have tried to follow as we address the challenging issues surrounding specifying properties of Java source code.
Criterion (1) derives from experience with the Specification Patterns Project. BSL provides a macro facility that implements all the patterns from [7]. Conforming to criterion (2), it also allows expert users to write their own patterns or code their temporal logic specifications directly.
Following criterion (3), the design and presentation of BSL has been influenced by various Java assertion languages such as iContract [12]. In each of these languages above, developers write their specifications in Java comments using the Javadoc facility. We have also followed this approach because it is an effective way to address criterion (4): browse-able HTML documentation for BSL specifications can be created, and the close physical proximity of comments and code encourages regular maintenance.
BSL currently does not address all the program features mentioned in criterion (5) (e.g., we don't discuss specifying properties of exceptions in this work), but it does make significant steps in handling heap-allocated data/threads.