system testing explained