Formal methods and software engineering