This project addresses software development and analysis techniques that take runtime monitoring as a foundational principle. The proposed research is based on the idea that effective monitoring code is automatically generated from high-level, human-readable system requirements specifications, and then used to either detect or predict violations of requirements in software systems at runtime. The proposed techniques aim at detecting errors in complex software systems and at narrowing the gap between specification and implementation by allowing the former to play an active role in the execution of programs via monitoring and guiding.
Many aspects of the proposed research focus on designing and implementing monitor synthesis and integration algorithms. A generic method to add new requirements specification formalisms modularly and compactly to a runtime environment is designed. Techniques to detect not only errors that happened, but especially errors which were close to happen are developed, together with techniques to monitor complex concurrent systems in a decentralized manner. The proposed research is expected to lead to novel scalable techniques to detect errors in software systems, as well as to programming methodologies for robust and dependable software, thus having a direct impact on how high-quality software is being tested and developed.