class IpogAlgorithm {

    public List<int[]> generate() {
        final Int2IntMap parameters = convertToFactors(configuration.getTestModel());
        final int[] initialParameters = configuration.getOrder()
                .getInitialParameters(parameters, configuration.getTestModel().getStrength());

        final List<int[]> testSuite = buildInitialTestSuite(parameters, initialParameters);

        final int[] remainingParameters = configuration.getOrder()
                .getRemainingParameters(parameters, configuration.getTestModel().getStrength());

        if(configuration.getTestModel().getStrength() > 0) {
            extendInitialTestSuite(parameters, initialParameters, testSuite, remainingParameters);
        }

        fillEmptyValues(testSuite, parameters);

        return testSuite;
    }

    public  IpogAlgorithm(IpogConfiguration configuration);

}