A Guide to Formal Verification and Practical Tools