verification and validation techniques in software engineering