Formal methods in software development