コード例 #1
0
 def get_bads(mode):
     if mode == "exp":
         return ExpBADS(ConfigsManager.get_instance().get_exp_a(),
                        ConfigsManager.get_instance().get_exp_b(),
                        ConfigsManager.get_instance().get_exp_c())
     else:
         LoggingUtils.get_instance().error('Unsupported BADS type - %s' %
                                           mode)
コード例 #2
0
 def run(self):
     self.logger.info('Starting SBST-DPG. Project path - %s' %
                      self.project_path)
     self.load_configs()
     self.defect_predictor = DefectPredictorFactory.get_defect_predictor(
         ConfigsManager.get_instance().get_defect_predictor())
     self.run_defect_predictor()
     self.collect_classes_in_project(
         ConfigsManager.get_instance().get_src_path())
     self.collect_defect_prediction_results()
     self.bads = BADSFactory.get_bads(
         ConfigsManager.get_instance().get_bads_mode())
     self.run_bads()
     self.sbst = SbstFactory.get_sbst(
         ConfigsManager.get_instance().get_sbst())
     self.run_sbst()
コード例 #3
0
 def get_group_size(self, num_classes):
     grouping = ConfigsManager.get_instance().get_grouping()
     if 'p' in grouping:
         loc_p = grouping.find('p')
         grouping = grouping[0:loc_p]
         return math.ceil((int(grouping) * num_classes) / 100)
     else:
         return 1
コード例 #4
0
 def assign_tiers(self, project):
     tier_threshold = ConfigsManager.get_instance().get_tier_threshold()
     self.logger.debug('Assigning tiers. Tier threshold - %f' %
                       tier_threshold)
     classes = project.get_classes()
     num_classes = len(classes)
     num_classes_first_tier = math.ceil(num_classes * tier_threshold)
     for clazz in classes.values():
         if clazz.get_rank() <= num_classes_first_tier:
             clazz.set_tier(1)
             self.logger.debug('%s - %d' % (clazz.get_fq_class_name(), 1))
         else:
             clazz.set_tier(2)
             self.logger.debug('%s - %d' % (clazz.get_fq_class_name(), 2))
コード例 #5
0
    def assign_time_budgets(self, project, time_spent_dp):
        self.logger.debug('Assigning time budgets to classes.')
        t_min_of_tiers = dict()
        t_min_of_tiers[1] = ConfigsManager.get_instance().get_t_min_first_tier(
        )
        t_min_of_tiers[2] = ConfigsManager.get_instance(
        ).get_t_min_second_tier()
        self.logger.debug('t_min of tier 1 - %d seconds' % t_min_of_tiers[1])
        self.logger.debug('t_min of tier 2 - %d seconds' % t_min_of_tiers[2])

        num_classes = len(project.get_classes())
        num_classes_of_tiers = dict()
        num_classes_of_tiers[1] = sum(
            map(lambda x: x.get_tier() == 1, project.get_clazzes()))
        num_classes_of_tiers[2] = sum(
            map(lambda x: x.get_tier() == 2, project.get_clazzes()))

        t_total = ConfigsManager.get_instance().get_t_total() * num_classes
        t_total_of_tiers = dict()
        t_total_of_tiers[1] = ConfigsManager.get_instance(
        ).get_t_total_first_tier() * num_classes_of_tiers[1]
        t_total_of_tiers[2] = ConfigsManager.get_instance(
        ).get_t_total_second_tier() * num_classes_of_tiers[2]
        self.logger.debug(
            't_total per class of tier 1 - %d seconds' %
            ConfigsManager.get_instance().get_t_total_first_tier())
        self.logger.debug(
            't_total per class of tier 2 - %d seconds' %
            ConfigsManager.get_instance().get_t_total_second_tier())
        self.logger.debug('t_total of tier 1 - %d seconds' %
                          t_total_of_tiers[1])
        self.logger.debug('t_total of tier 2 - %d seconds' %
                          t_total_of_tiers[2])

        time_spent_dp_of_tiers = dict()
        time_spent_dp_of_tiers[1] = (time_spent_dp /
                                     num_classes) * num_classes_of_tiers[1]
        time_spent_dp_of_tiers[2] = (time_spent_dp /
                                     num_classes) * num_classes_of_tiers[2]
        self.logger.debug('Time spent by DP for tier 1 - %f seconds' %
                          time_spent_dp_of_tiers[1])
        self.logger.debug('Time spent by DP for tier 2 - %f seconds' %
                          time_spent_dp_of_tiers[2])

        self.assign_time_budgets_in_tier(1, project, t_total_of_tiers[1],
                                         num_classes_of_tiers[1],
                                         t_min_of_tiers[1],
                                         time_spent_dp_of_tiers[1])
        self.assign_time_budgets_in_tier(2, project, t_total_of_tiers[2],
                                         num_classes_of_tiers[2],
                                         t_min_of_tiers[2],
                                         time_spent_dp_of_tiers[2])
コード例 #6
0
    def load_defect_scores(self, project, workspace):
        self.logger.debug('Loading defect scores...')
        schwa_output_file = ConfigsManager.get_instance(
        ).get_defect_predictor_out()
        with open(os.path.join(workspace,
                               schwa_output_file)) as schwa_output_csv:
            schwa_output_reader = csv.reader(schwa_output_csv, delimiter=",")

            for schwa_result_row in schwa_output_reader:
                fq_class_name = schwa_result_row[0]
                defect_score = schwa_result_row[1]
                if project.class_exists(fq_class_name):
                    project.set_defect_score(fq_class_name, defect_score)
                    self.logger.debug('%s - %s' %
                                      (fq_class_name, defect_score))
                else:
                    self.logger.debug(
                        'Ignoring %s since it is not a Java class (source file)'
                        % fq_class_name)
コード例 #7
0
 def run(self, project, project_path, current_path, sbst_dpg_workspace):
     self.logger.info('Running EvoSuite...')
     project_cp = os.path.join(
         project_path,
         ConfigsManager.get_instance().get_project_cp())
     for fq_class_name in project.get_classes():
         clazz = project.get_classes()[fq_class_name]
         time_budget = clazz.get_time_budget()
         tests_dir = sbst_dpg_workspace + '/evosuite-tests'
         report_dir = sbst_dpg_workspace + '/evosuite-report'
         covered_goals_fp = report_dir + '/covered.goals'
         evosuite_logs_out = sbst_dpg_workspace + '/evosuite_logs_out.log'
         run_evosuite_command = current_path + "/evosuite_utils/run-evosuite.sh"
         self.logger.info(
             'Generating tests for %s, time budget - %d seconds' %
             (fq_class_name, time_budget))
         subprocess.check_call([
             run_evosuite_command, fq_class_name, project_cp,
             str(time_budget), covered_goals_fp, tests_dir, report_dir,
             '120', '120', '120', '4000', evosuite_logs_out,
             current_path + '/evosuite_utils'
         ])
コード例 #8
0
 def load_configs(self):
     self.logger.info('Loading configurations to ConfigsManager.')
     ConfigsManager.get_instance().load_configs()
コード例 #9
0
 def __init__(self, project_path):
     self.project_path = project_path
     self.sbst_dpg_workspace = os.path.join(self.project_path, "sbst_dpg")
     self.configs_manager = ConfigsManager.create_instance(
         self.sbst_dpg_workspace)
     self.logger = LoggerFactory.get_logger(__class__.__name__)
コード例 #10
0
ファイル: logging_utils.py プロジェクト: SBST-DPG/sbst-dpg
 def __init__(self):
     self.primary_logger_type = ConfigsManager.get_instance(
     ).primary_logger_type
     self.log_level = ConfigsManager.get_instance().log_level