Static testing generally comprises a review of the code without trying to run it. This includes actually looking through the code, an action similar to proofreading, as well as using tools such as text editors or compilers to check syntax and logic flow.
Dynamic tests run the program, or portions of it, to look at the inner workings (as is the case when using a debugger) or just to validate the expected output.