what is non functional testing in software testing with examples