Understand some basic principles of testing and whyit requires creativity.
Get familiar withsome testing vocabulary, which improves our communication.
Devise our first set of tests for a Java program and automatethese testsusing JUnit.
Understand the differences between unit, integration, and system testing, as well as the testing pyramid.
Learn how to read a requirement and derive the partitions, which are the actual concrete tests we will perform to make sure our system works (we call it "partitioning" and "equivalent partitioning").
Learn how to think about and test possible corner cases, as developersoften forget to deal with such cases (we call itboundary testing).
Get a few tips, based on experience, on common corner cases.
Learn how to analyze the structure of your source code and derive meaningful tests.
Be able to use the most popular structural testing adequacy criteria, such as line coverage, branch coverage, and path coverage as well as to understand their differences.
Derive a minimal set of tests when your branches (e.g., ifs) are too complex.
Use a standard industry code coverage tool and interpret its results.
Understand the differences between different test levels (e.g., unit, integration, and system tests)
Understand what makes a system more or less testable.
Propose refactoring opportunities for increasing testability.
Be able to apply mock objects in order to unit test a class.
Understand when not to apply mock objects and go for integration tests.
Judge the internal code quality of your test suite and advice possible improvements.