Reformulating Branch Coverage as a Many-Objective Optimization Problem