The discipline of software engineering provides a number of techniques that aid the software developer (or development team) to construct reliable software. Testing, for example, is a technique to establish in an experimental way the reliability and robustness of software. Another way of validating a system is by means of correctness proofs, checking whether the program (design) meets its (formal) specification.
4