A test case generation apparatus which generates a test case, the test case being input to a program which executes a process for one step each time a value is input and being composed of a test case input number of values which are input to respective processes for i (i is an integer equal to or more than 2) steps to be sequentially executed, the test case generation apparatus comprising: a memory to store data; a generation control unit to, if an (i-1)-th test case which is a test case for step 1 to step (i-1) is stored in the memory, select a first generation scheme which uses the (i-1)-th test case to generate an i-th test case which is a test case for step 1 to step i; a test generation unit to generate a test case for executing an i-th step in a state where an internal state at an end of the (i-1) steps caused by execution for the (i-1)-th test case is retained, to generate the i-th test case by joining the (i-1)-th test case and the test case for the i-th step, and to store the i-th test case in the memory, in accordance with the first generation scheme a coverable point extraction unit to extract a coverable point which is to be covered by a test from source code of the program; and a function generation unit to generate a test case generation function which includes a test case generation condition and a call to the program such that the i-th test case covers an uncovered point which is a coverable point not covered by the (i-1)-th test case, wherein the test generation unit uses the test case generation function to generate the i-th test case, the generation control unit selects a second generation scheme which generates respective test cases for step 1 to step i if the (i-1)-th test case is not stored in the memory, the function generation unit generates a test case generation function which generates respective test cases for a first step to the i-th step in the state where the internal state at the end of the (i-1) steps caused by execution for the (i-1)-th test case is retained, in accordance with the second generation scheme, the test generation unit uses the test case generation function to generate the respective test cases for the first step to the i-th step, generates the i-th test case by joining the test cases for the first step to the i-th step, and stores the i-th test case in the memory, and the test generation unit includes a non-symbol generation unit to generate a test case by non-symbolic execution and a symbol generation unit to generate a test case by symbolic execution, generates the i-th test case with the non-symbolic generation unit if the first generation scheme is selected, judges, through execution of a test using the i-th test case generated by the non-symbol generation unit, whether the uncovered point is present, and generates the i-th test case with the symbol generation unit such that at least a part of the uncovered point is covered and stores the i-th test case generated by the symbol generation unit in the memory if the uncovered point is present. a memory to store data; a generation control unit to, if an (i-1)-th test case which is a test case for step 1 to step (i-1) is stored in the memory, select a first generation scheme which uses the (i-1)-th test case to generate an i-th test case which is a test case for step 1 to step i; a test generation unit to generate a test case for executing an i-th step in a state where an internal state at an end of the (i-1) steps caused by execution for the (i-1)-th test case is retained, to generate the i-th test case by joining the (i-1)-th test case and the test case for the i-th step, and to store the i-th test case in the memory, in accordance with the first generation scheme a coverable point extraction unit to extract a coverable point which is to be covered by a test from source code of the program; and a function generation unit to generate a test case generation function which includes a test case generation condition and a call to the program such that the i-th test case covers an uncovered point which is a coverable point not covered by the (i-1)-th test case, wherein the test generation unit uses the test case generation function to generate the i-th test case, the generation control unit selects a second generation scheme which generates respective test cases for step 1 to step i if the (i-1)-th test case is not stored in the memory, the function generation unit generates a test case generation function which generates respective test cases for a first step to the i-th step in the state where the internal state at the end of the (i-1) steps caused by execution for the (i-1)-th test case is retained, in accordance with the second generation scheme, the test generation unit uses the test case generation function to generate the respective test cases for the first step to the i-th step, generates the i-th test case by joining the test cases for the first step to the i-th step, and stores the i-th test case in the memory, and the test generation unit includes a non-symbol generation unit to generate a test case by non-symbolic execution and a symbol generation unit to generate a test case by symbolic execution, generates the i-th test case with the non-symbolic generation unit if the first generation scheme is selected, judges, through execution of a test using the i-th test case generated by the non-symbol generation unit, whether the uncovered point is present, and generates the i-th test case with the symbol generation unit such that at least a part of the uncovered point is covered and stores the i-th test case generated by the symbol generation unit in the memory if the uncovered point is present.