Ejemplo n.º 1
0
    def evaluate(
            self, device: Device,
            individual: IndividualMultiObjective) -> IndividualMultiObjective:
        assert not individual.fitness.valid

        coverage_fetcher = RequiredFeature('coverage_fetcher').request()

        start_time = time.time()
        device.mark_work_start()
        script_path, suite_lengths = self.dump_individual_to_files(individual)

        coverage, unique_crashes, scripts_crash_status = coverage_fetcher.get_suite_coverage(
            script_path, device, individual.generation,
            individual.index_in_generation)

        # remove from suite lengths the scripts that did NOT cause a crash
        for script, had_crash in scripts_crash_status.items():
            if not had_crash:
                suite_lengths.pop(script, None)

        # 1st obj: coverage, 2nd: average seq length of the suite, 3rd: #crashes
        if suite_lengths:
            length = numpy.mean(list(suite_lengths.values()))
        else:
            length = sys.maxsize

        crashes = len(unique_crashes)

        individual.fitness.values = (coverage, length, crashes)

        finish_time = time.time()
        individual.evaluation_finish_timestamp = finish_time
        individual.evaluation_elapsed_time = finish_time - start_time

        individual.length = length
        individual.crashes = crashes

        hall_of_fame = RequiredFeature('hall_of_fame').request()
        hall_of_fame.update([individual])

        budget_manager = RequiredFeature('budget_manager').request()
        budget_manager.increase_evaluations_used()

        device.mark_work_stop()

        return individual
    def gen_individual(self, device: Device, individual_index: int,
                       generation: int) -> Individual:
        start_time = time.time()
        device.mark_work_start()
        suite = self.get_suite(device, generation, individual_index)
        device.mark_work_stop()

        individual: Individual = getattr(creator, Individual.get_name())(suite)

        finish_time = time.time()
        elapsed_time = finish_time - start_time
        individual.creation_finish_timestamp = finish_time
        individual.creation_elapsed_time = elapsed_time

        individual.index_in_generation = individual_index
        individual.generation = generation

        return individual
Ejemplo n.º 3
0
    def evaluate(
            self, device: Device, individual: IndividualSingleObjective
    ) -> IndividualSingleObjective:
        assert not individual.fitness.valid

        coverage_fetcher = RequiredFeature('coverage_fetcher').request()

        start_time = time.time()
        device.mark_work_start()
        script_path, suite_lengths = self.dump_individual_to_files(individual)
        coverage, unique_crashes, scripts_crash_status = coverage_fetcher.get_suite_coverage(
            script_path, device, individual.generation,
            individual.index_in_generation)

        # remove from suite lengths the scripts that did NOT cause a crash
        for script, had_crash in scripts_crash_status.items():
            if not had_crash:
                suite_lengths.pop(script, None)

        individual.fitness.values = (coverage, )

        finish_time = time.time()
        individual.evaluation_finish_timestamp = finish_time
        individual.evaluation_elapsed_time = finish_time - start_time

        # Save crashes and length info outside fitness, to avoid messing up with the "wvalues" and "dominates" function
        # inside Deap's Fitness base class.
        if suite_lengths:
            individual.length = numpy.mean(list(suite_lengths.values()))
        else:
            individual.length = sys.maxsize

        individual.crashes = len(unique_crashes)

        hall_of_fame = RequiredFeature('hall_of_fame').request()
        hall_of_fame.update([individual])

        budget_manager = RequiredFeature('budget_manager').request()
        budget_manager.increase_evaluations_used()

        device.mark_work_stop()

        return individual
Ejemplo n.º 4
0
 def register_device_failure(self, device: Device) -> None:
     # set state ready_idle in device that might be still in state ready_working
     device.mark_work_stop()
     device.register_failure()