There are many different types of testing and ways to test. Firstly, let me explain Static testing and Dynamic testing:
– During Static testing, the code isn’t executed and it is done using the software documentation. The main objective of Static testing is to improve the quality by finding bugs in the early stages of the development cycle. Examples of Static testing would be reviews, static analysis, etc.
– To perform Dynamic testing, the code needs to be in an executable form and it basically checks the functional behaviour of the software system. The main objective in Dynamic testing is to confirm that the software works in conformance with the business requirements.

Under Dynamic, we would find White Box and Black Box testing.
– White Box testing is a strategy based on internal paths and code structures. It is also known as Structural testing. Some examples are Statement Coverage and Branch Coverage.
– Black box testing is a strategy based on requirements and specification and is usually done to check the functionality of an application.

Black Box testing is classified into two types: Functional testing and Non-Functional testing.
Functional Testing is a type of testing which verifies that each function of the software application conforms with all requirements. It basically describes what the product does. Some examples include Unit testing, Smoke testing, Integration testing, Regression testing, etc. Some techniques that can be used are Equivalence Partitioning, Boundary Value Analysis, etc.
Non-Functional testing is a type of testing done to check aspects like performance, usability, etc. It basically describes how the product works. Some examples of Non-Functional testing are Performance testing, Load testing, Stress testing, Compliance testing, Portability testing, etc.

Here is a diagram I created to get an idea of how they all fit together: