18 | 16 | Each test case path includes numerous method calls and state changes which are a valuable but hidden source of information for several software engineering activities. During their execution, test cases check not only the explicit assertions in their definitions but also establish implicit assertions in all other used program entities. As long as test cases finish with correct results, we assume that everything on their execution paths is also valid1. Thus, we can inductively derive from the specific and correct run-time values more generalized properties that reveal these implicit assertions. With this hidden test knowledge, developers have additional information for understanding their programs. For example, our type harvesting exploits test cases to obtain type information for a code base automatically [103]. We derive type data from the concrete objects used during test case executions and provide developers this hidden information to assist in navigating source code and using application programming interfaces (APIs) correctly. |