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