warnings are compiler messages hinting at potentially problematic runtime behavior / subtle pitfalls
static analysis finds potential runtime problems like undefined behavior by analyzing the source code
dynamic analysis finds potential problems like memory leaks by running the actual program
profiling is used to find out how much each function/loop/code block contributes to the total running time, memory consumption, …
debugging is used to step through code at runtime and inspect in-memory values
testing compare actual and expected behavior of parts or entire program
code coverage tells what parts of the code are actually executed / subjected to testing

Related Articles