Software Verification and Validation: An Engineering and Scientific Approach