what is dynamic testing in software testing