The focus in development methodologies of large and complex software systems has switched in the last two decades from functional issues to structural issues; this holds for both the object-oriented and the more recent component-based software engineering paradigms. Formal methods have been applied successfully to the verification of medium-sized programs in protocol and hardware design for quite a long time. However, their application to the development of large systems requires more emphasis on specification, modeling and validation techniques supporting the concepts of reusability and modifiability, and their implementation in new extensions of existing programming languages like Java. This state-of-the-art survey presents the outcome of the 9th S...