Static testing examines and reviews software without executing it, while dynamic testing executes the software. There are different types of testing like unit, integration, system, and acceptance testing. Testing techniques include white box, black box, incremental, and thread testing. White box testing examines internal program structure and logic, while black box testing verifies requirements without considering internal structure.