def visualize_as_box_plot():
    font = {'size': 20}

    plt.rc('font', **font)
    project_list = project_config.get('projects', 'project_list').split(",")

    # if len(project_list) > 1:
    #     print("reduce number of projects to 1")
    #     exit(0)
    project_list = project_list[0]

    statement_coverage_r = []
    checked_coverage_r = []

    file_name = "/point_biserial_correlation__full" + ".csv"
    path = str(get_project_root()) + results_folder + file_name

    try:
        with open(path) as csv_file:
            reader = csv.DictReader(csv_file, delimiter=',')
            for row in reader:
                statement_coverage_r.append(
                    float(row['adequacy_based_tests_statement']))
                checked_coverage_r.append(
                    float(row['adequacy_based_tests_checked']))
    except FileNotFoundError:
        pass

    data_to_plot = [statement_coverage_r, checked_coverage_r]
    fig = plt.figure(1, figsize=(9, 6))

    ax = fig.add_subplot()

    ax.set_ylabel('Probabilistic coupling')
    # ax.set_xlabel('Indicates whether or not, a bug detecting test is included in generated test suite')
    # ax.set_title(project_list)
    ax.set_xticks([1, 2])
    ax.set_xticklabels(tuple(['Statement coverage', 'Checked coverage']))

    bp = ax.violinplot(data_to_plot, showmeans=True, showmedians=True)

    # loop over the paths of the mean lines
    xy = [[l.vertices[:, 0].mean(), l.vertices[0, 1]]
          for l in bp['cmeans'].get_paths()]
    xy = np.array(xy)

    ax.scatter(xy[:, 0], xy[:, 1], s=121, c="crimson", marker="x", zorder=3)

    # make lines invisible
    bp['cmeans'].set_visible(False)

    bp['bodies'][0].set(color='#e69138', linewidth=2)
    bp['bodies'][1].set(color='#3d85c6', linewidth=2)

    ax.legend().remove()
    plt.show()
    save_path = str(get_project_root()) + results_folder + '/' + str(
        project_list) + '_violin-plot'
    fig.savefig(save_path, dpi=100)
def visualize_as_violin_plot():
    font = {'size': 20}

    plt.rc('font', **font)
    project_list = project_config.get('projects', 'project_list').split(",")

    if len(project_list) > 1:
        print("reduce number of projects to 1")
        exit(0)
    project_list = project_list[0]

    statement_increase = []
    checked_increase = []
    mutation_increase = []

    file_name = "/" + project_list + ".csv"
    path = str(get_project_root()) + results_folder + file_name

    with open(path) as csv_file:
        reader = csv.DictReader(csv_file, delimiter=',')

        for row in reader:
            statement_increase.append(float(row['statement_coverage_increase']))
            checked_increase.append(float(row['checked_coverage_increase'])
                                    if float(row['checked_coverage_increase']) > 0 else 0)
            mutation_increase.append(float(row['mutation_coverage_increase'])
                                     if float(row['mutation_coverage_increase']) > 0 else 0)

    data_to_plot = [statement_increase, checked_increase, mutation_increase]
    fig = plt.figure(1, figsize=(9, 6))

    ax = fig.add_subplot()

    ax.set_ylabel('% coverage score increase')
    # ax.set_xlabel('Indicates whether or not, a bug detecting test is included in generated test suite')
    ax.set_title(project_list)
    ax.set_xticks([1,2,3])
    ax.set_xticklabels(tuple(['Statement coverage', 'Checked coverage', 'Mutation score']))

    bp = ax.violinplot(data_to_plot, showmeans=True, showmedians=True)

    # loop over the paths of the mean lines
    xy = [[l.vertices[:, 0].mean(), l.vertices[0, 1]] for l in bp['cmeans'].get_paths()]
    xy = np.array(xy)

    ax.scatter(xy[:, 0], xy[:, 1], s=121, c="crimson", marker="x", zorder=3)

    # make lines invisible
    bp['cmeans'].set_visible(False)

    bp['bodies'][0].set(color='#e69138', linewidth=2)
    bp['bodies'][1].set(color='#3d85c6', linewidth=2)
    bp['bodies'][2].set(color='#6aa84f', linewidth=2)

    ax.legend().remove()
    plt.show()
    save_path = str(get_project_root()) + results_folder + '/' + str(project_list) + '_violin-plot'
    fig.savefig(save_path, dpi=100)
def visualize_as_violin_plot():
    font = {'size': 20}
    plt.rc('font', **font)

    statement_increase = []
    checked_increase = []
    mutation_increase = []

    file_name = "/max_pc" + ".csv"
    path = str(get_project_root()) + results_folder + file_name

    with open(path) as csv_file:
        reader = csv.DictReader(csv_file, delimiter=',')

        for row in reader:
            statement_increase.append(float(row['statement_pc_max']))
            checked_increase.append(float(row['checked_pc_max']))
            # mutation_increase.append(float(row['mutation_coverage_increase'])
            #                          if float(row['mutation_coverage_increase']) > 0 else 0)
    # statement_increase = list(filter(lambda num: num != 0, statement_increase))
    # checked_increase = list(filter(lambda num: num != 0, checked_increase))
    data_to_plot = [statement_increase, checked_increase]
    fig = plt.figure(1, figsize=(9, 6))

    ax = fig.add_subplot()

    ax.set_ylabel('Max PC')
    # ax.set_xlabel('Indicates whether or not, a bug detecting test is included in generated test suite')
    ax.set_title("Probabilistic Coupling")
    ax.set_xticks([1, 2, 3])
    if len(mutation_increase) > 0:
        ax.set_xticklabels(
            tuple(['Statement cov.', 'Checked cov.', 'Mutation score']))
    else:
        ax.set_xticklabels(tuple(['Statement coverage', 'Checked coverage']))

    bp = ax.violinplot(data_to_plot, showmeans=True, showmedians=True)

    # loop over the paths of the mean lines
    xy = [[l.vertices[:, 0].mean(), l.vertices[0, 1]]
          for l in bp['cmeans'].get_paths()]

    xy = np.array(xy)
    ax.scatter(xy[:, 0], xy[:, 1], s=121, c="crimson", marker="x", zorder=3)

    # make lines invisible
    bp['cmeans'].set_visible(False)

    bp['bodies'][0].set(color='#e69138', linewidth=2)
    bp['bodies'][1].set(color='#3d85c6', linewidth=2)

    ax.legend().remove()
    plt.show()
    save_path = str(
        get_project_root()) + results_folder + '/max_pc_violin-plot'
    fig.savefig(save_path, dpi=100)
def read_file_and_visualise_pc():
    project_list = project_config.get('projects', 'project_list').split(",")

    for project in project_list:
        project_range = project_config.get('projects', project).split(",")

        project_count = 0
        statement_increase = []
        checked_increase = []
        mutation_coverage = []
        coverage_scores = []
        for project_id in range(int(project_range[0]),
                                int(project_range[1]) + 1):

            file_name = "/prob_coupling_" + project + "_" + str(
                project_id) + ".csv"
            file_path = str(get_project_root()) + results_folder + file_name
            mutation_file_name = "/mutant_pc_" + project + "_" + str(
                project_id) + ".csv"
            mutation_file_path = str(
                get_project_root()) + results_folder + mutation_file_name
            if path.isfile(file_path):
                project_count = project_count + 1
                with open(file_path) as csv_file:
                    reader = csv.DictReader(csv_file, delimiter=',')
                    for row in reader:
                        statement_increase.append(float(row['statement_pc']))
                        checked_increase.append(float(row['checked_pc']))

                        coverage_scores.append(
                            (float(row['checked_pc']),
                             float(row['statement_pc']), 0,
                             row['checked_nature'], row['statement_nature'],
                             row['checked_modified'],
                             row['statement_modified']))

            if path.isfile(mutation_file_path):
                with open(mutation_file_path) as csv_file:
                    reader = csv.DictReader(csv_file, delimiter=',')
                    for row in reader:
                        #mutation_coverage.append(float(row['pc_score']))
                        if float(row['pc_score']) > 0:
                            mutation_coverage.append(float(row['pc_score']))

            save_path = str(
                get_project_root()) + results_folder + '/' + project
            # visualize_as_scatterplot_skew(coverage_scores, save_path,
            #                               "Probabilistic Coupling: " + project + "-" + str(project_id) +
            #                               "\n Bug count: " + str(project_count), "Count of statements")

        visualize_as_violin_plot_jitter(checked_increase, statement_increase,
                                        mutation_coverage, save_path,
                                        "Probabilistic Coupling: " + project,
                                        "PC score")
def visualize_correlation_as_bar():
    names = []
    checked_cor_score = []
    statement_cor_score = []
    with open(get_correlation_file()) as csv_file:
        reader = csv.DictReader(csv_file, delimiter=',')
        for row in reader:
            checked_cor_score.append(float(row['checked']))
            statement_cor_score.append(float(row['statement']))
            names.append(row['name'])

    df = pandas.DataFrame(
        dict(graph=names[::-1],
             n=checked_cor_score[::-1],
             m=statement_cor_score[::-1]))

    ind = np.arange(len(df))
    width = 0.2

    fig, ax = plt.subplots()
    ax.barh(ind, df.n, width, label='Checked Coverage')
    ax.barh(ind + width, df.m, width, label='Statement Coverage')

    ax.set(yticks=ind + width, yticklabels=df.graph, ylim=[width - 4, len(df)])
    ax.legend()

    fig.set_size_inches(7, 15, forward=True)

    plt.show()
    file_name_to_save = "Cli"
    save_path = str(
        get_project_root()) + results_folder + '/' + str(file_name_to_save)
    fig.savefig(save_path, dpi=100)
def visualize_as_box_plot():
    font = {'size': 20}

    plt.rc('font', **font)
    project_list = project_config.get('projects', 'project_list').split(",")

    if len(project_list) > 1:
        print("reduce number of projects to 1")
        exit(0)
    project_list = project_list[0]

    statement_increase = []
    checked_increase = []
    mutation_increase = []

    file_name = "/" + project_list + ".csv"
    path = str(get_project_root()) + results_folder + file_name

    with open(path) as csv_file:
        reader = csv.DictReader(csv_file, delimiter=',')

        for row in reader:
            statement_increase.append(float(row['statement_coverage_increase']))
            checked_increase.append(float(row['checked_coverage_increase'])
                                    if float(row['checked_coverage_increase']) > 0 else 0)
            mutation_increase.append(float(row['mutation_coverage_increase'])
                                     if float(row['mutation_coverage_increase']) > 0 else 0)

    data_to_plot = [statement_increase, checked_increase, mutation_increase]
    fig = plt.figure(1, figsize=(9, 6))

    ax = fig.add_subplot(111)

    ax.set_ylabel('% coverage score increase')
    # ax.set_xlabel('Indicates whether or not, a bug detecting test is included in generated test suite')
    ax.set_title(project_list)
    # ax.set_xticks(ind + width / 2)
    ax.set_xticklabels(tuple(['Statement coverage', 'Checked coverage', 'Mutation score']))

    bp = ax.boxplot(data_to_plot)
    bp['medians'][0].set(color='#3d85c6', linewidth=2)
    bp['medians'][1].set(color='#e69138', linewidth=2)
    bp['medians'][2].set(color='#6aa84f', linewidth=2)

    ax.legend().remove()
    plt.show()
    save_path = str(get_project_root()) + results_folder + '/' + str(project_list) + '_box-plot'
def get_configured_csv_path():
    project_list = project_config.get('projects', 'project_list').split(",")

    if len(project_list) > 1:
        print("reduce number of projects to 1")
        exit(0)
    project_list = project_list[0]
    return str(get_project_root()) + results_folder + '/' + project_list + '.csv'
def get_latest_csv_path():
    path = str(get_project_root()) + results_folder + '/*.csv'
    list_of_files = glob.glob(path)
    if len(list_of_files) <= 0:
        print("compute the solution first")
        exit(0)
    latest_file = max(list_of_files, key=os.path.getctime)
    return latest_file
def clean_source_dir():
    for root, dirs, files in os.walk(defects4j_project_path):
        folder_path = os.path.join(str(get_project_root()), root)
        if is_deletable(folder_path):
            shutil.rmtree(folder_path, ignore_errors=False, onerror=None)
            print("deleted " + folder_path)
        for file in files:
            if is_deletable(str(file)):
                file_path = folder_path + '/' + str(file)
                os.remove(file_path)
                print("deleted " + file_path)
Esempio n. 10
0
def visualize_by_project_id(start, end):
    with open(get_latest_csv_path()) as csv_file:
        n = [int(start), int(end)]
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        sorted_list = sorted(reader, key=lambda c_row: int(c_row['project_id']), reverse=False)
        ratio_statement_coverage = []
        ratio_checked_coverage = []
        project_ids = []
        checked_coverage_label = []
        statement_coverage_label = []
        project_name = ','.join(set([s['project'] for s in sorted_list]))

        for row in islice(sorted_list, n[0], n[1]):
            ratio_checked_coverage.append(float(row['ratio_checked_coverage']))
            ratio_statement_coverage.append(float(row['ratio_statement_coverage']))
            project_ids.append(project_name + '-' + row['project_id'])
            statement_coverage_label.append(row['len_of_bug_detecting_tests'] + '/' +
                                            row['len_of_statement_covering_tests'])
            checked_coverage_label.append(row['len_of_bug_detecting_tests'] + '/' +
                                          row['len_of_checked_covering_tests'])

        ind = np.arange(len(range(n[0], n[1])))
        width = 0.40
        fig, ax = plt.subplots()

        # rects1 = ax.bar(ind, ratio_checked_coverage, width, color='r')
        # rects2 = ax.bar(ind + width, ratio_statement_coverage, width, color='y')

        checked_coverage_bars = ax.barh(ind, ratio_checked_coverage, width)
        statement_coverage_bars = ax.barh(ind + width, ratio_statement_coverage, width)

        # add some text for labels, title and axes ticks
        ax.set_ylabel('Project bug Id')
        ax.set_xlabel('Ratio')
        ax.set_yticks(ind + width/2)
        ax.set_yticklabels(tuple(project_ids))
        formula_legend = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)

        ax.legend((formula_legend, checked_coverage_bars[0], statement_coverage_bars[0]),
                  ('Ratio = No. of bug detecting tests / No. of Covering tests',
                   'Checked Coverage',
                   'Statement Coverage'))

        autolabel(checked_coverage_bars, checked_coverage_label)
        autolabel(statement_coverage_bars, statement_coverage_label)

        fig.set_size_inches(7, 15)
        # save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_' +
        # str(max(project_ids))
        save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save)
        fig.savefig(save_path, dpi=200)
        plt.show()
Esempio n. 11
0
def visualize_by_project_id(start, end):
    with open(get_latest_csv_path()) as csv_file:
        n = [int(start), int(end)]
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        sorted_list = sorted(reader, key=lambda c_row: int(c_row['project_id']), reverse=False)
        statement_coverage_increase = []
        checked_coverage_increase = []
        mutation_coverage_increase = []
        project_ids = []

        project_name = ','.join(set([s['project'] for s in sorted_list]))

        for row in islice(sorted_list, n[0], n[1]):
            checked_coverage_increase.append(float(row['checked_coverage_increase']))
            statement_coverage_increase.append(float(row['statement_coverage_increase']))
            mutation_coverage_increase.append(float(row['mutation_coverage_increase']))

            project_ids.append(int(row['project_id']))

        ind = np.arange(len(range(n[0], n[1])))
        width = 0.35
        fig, ax = plt.subplots()

        # rects1 = ax.bar(ind, ratio_checked_coverage, width, color='r')
        # rects2 = ax.bar(ind + width, ratio_statement_coverage, width, color='y')

        checked_coverage_bars = ax.bar(ind - width / 2, checked_coverage_increase, width)
        statement_coverage_bars = ax.bar(ind + width / 2, statement_coverage_increase, width)
        mutation_coverage_bars = ax.bar(ind + width * 3 / 2, mutation_coverage_increase, width)

        # add some text for labels, title and axes ticks
        ax.set_ylabel('% increase in coverage score')
        ax.set_xlabel('Project bug Id')
        ax.set_title('% of coverage increase for statement and checked coverage for project : ' + project_name)
        ax.set_xticks(ind + width / 2)
        ax.set_xticklabels(tuple(project_ids))
        # formula_legend = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)

        ax.legend((checked_coverage_bars[0], statement_coverage_bars[0], mutation_coverage_bars[0]),
                  ('Checked Coverage', 'Statement Coverage', 'Mutation Coverage'))

        # autolabel(ax, checked_coverage_bars)
        # autolabel(ax, statement_coverage_bars)

        fig.set_size_inches(15, 5)
        # save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_' +
        # str(max(project_ids))
        save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save)
        fig.savefig(save_path, dpi=100)
        plt.show()
Esempio n. 12
0
def read_big_file_and_visualise():
    file_name = "/max_pc" + ".csv"
    path = str(get_project_root()) + results_folder + file_name
    statement_increase = []
    checked_increase = []
    mutation_coverage = []

    with open(path) as csv_file:
        reader = csv.DictReader(csv_file, delimiter=',')

        for row in reader:
            statement_increase.append(float(row['statement_pc_max']))
            checked_increase.append(float(row['checked_pc_max']))
            mutation_coverage.append(float(row['mutation_pc_max']))

            # mutation_increase.append(float(row['mutation_coverage_increase'])
            #                          if float(row['mutation_coverage_increase']) > 0 else 0)

    save_path = str(
        get_project_root()) + results_folder + '/max_pc_violin-plot'
    visualize_as_boxplot_plot_jitter(checked_increase, statement_increase,
                                     mutation_coverage, save_path,
                                     "Probabilistic Coupling: All Projects",
                                     "Max PC")
Esempio n. 13
0
def visualize_whole_project():
    with open(get_configured_csv_path()) as csv_file:
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        sum_len_of_bug_detecting_tests = 0
        sum_len_of_statement_covering_tests = 0
        sum_len_of_checked_covering_tests = 0
        project_name = set()
        for row in reader:
            sum_len_of_bug_detecting_tests = sum_len_of_bug_detecting_tests + \
                int(row['len_of_bug_detecting_tests'])
            sum_len_of_statement_covering_tests = sum_len_of_statement_covering_tests + \
                int(row['len_of_statement_covering_tests'])
            sum_len_of_checked_covering_tests = sum_len_of_checked_covering_tests + \
                int(row['len_of_checked_covering_tests'])

            project_name.add(row['project'])

        sum_checked_coverage = sum_len_of_bug_detecting_tests / sum_len_of_checked_covering_tests
        checked_coverage_label = [str(sum_len_of_bug_detecting_tests) + '/' + str(sum_len_of_checked_covering_tests)]
        sum_statement_coverage = sum_len_of_bug_detecting_tests / sum_len_of_statement_covering_tests
        statement_coverage_label = [str(sum_len_of_bug_detecting_tests) + '/' + str(sum_len_of_statement_covering_tests)]

        project_name = ','.join([s for s in project_name])
        ind = np.arange(1)
        width = 0.35
        fig, ax = plt.subplots()

        checked_coverage_bars = ax.bar(ind - width / 2, sum_checked_coverage, width, color='#3d85c6')
        statement_coverage_bars = ax.bar(ind + width / 2, sum_statement_coverage, width, color='#e69138')

        # add some text for labels, title and axes ticks
        ax.set_ylabel('Ratio')
        ax.set_xlabel(project_name)
        # ax.set_title('Overall result: \n Ratio between bug detecting and covering tests for project: ' + project_name)
        ax.set_xticks(tuple())
        ax.set_xticklabels(tuple(''))
        ax.legend().remove()

        autolabel1(ax, checked_coverage_bars, checked_coverage_label)
        autolabel1(ax, statement_coverage_bars, statement_coverage_label)

        # save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_' +
        # str(max(project_ids))
        save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_whole_result'
        fig.savefig(save_path, dpi=100, width=4)
        plt.show()
Esempio n. 14
0
def visualize_whole_project():
    with open(get_latest_csv_path()) as csv_file:
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        statement_coverage = []
        checked_coverage = []
        percent_coverage = []
        project_name = set()
        for row in reader:
            statement_coverage.append(float(row['statement_coverage']))
            checked_coverage.append(float(row['checked_coverage']))
            percent_coverage.append(int(row['percent_coverage']))
            project_name.add(row['project'])

    percent_coverage = np.array(percent_coverage)
    checked_coverage = np.array(checked_coverage)

    percent_coverage_smooth = np.linspace(min(percent_coverage),
                                          max(percent_coverage), 500)
    f = interp1d(percent_coverage, checked_coverage, kind='quadratic')
    checked_coverage_smooth = f(percent_coverage_smooth)

    f1 = interp1d(percent_coverage, statement_coverage, kind='quadratic')
    statement_coverage_smooth = f1(percent_coverage_smooth)

    project_name = ','.join([s for s in project_name])
    save_path = str(get_project_root()) + results_folder + '/' + str(
        file_name_to_save) + '_whole_result'
    fig = plt.gcf()
    fig.set_size_inches(15, 5)

    plt.plot(percent_coverage_smooth,
             checked_coverage_smooth,
             label="checked coverage")
    plt.plot(percent_coverage_smooth,
             statement_coverage_smooth,
             label="statement coverage")
    plt.xlabel('coverage score in percentage for project: ' + project_name)
    plt.ylabel('correlation (rpb) value')
    plt.title('Point Biserial correlation for statement and checked coverage')
    plt.legend()
    plt.show()
    fig.savefig(save_path, dpi=100)
Esempio n. 15
0
def read_file_and_visualise():
    project_list = project_config.get('projects', 'project_list').split(",")
    results_folder = str(get_project_root()) + results_folder_max_pc_per_proj
    for project in project_list:
        file_name = "/" + project + ".csv"
        csv_file_path = results_folder + file_name
        statement_increase = []
        checked_increase = []
        mutation_coverage = []

        with open(csv_file_path) as csv_file:
            reader = csv.DictReader(csv_file, delimiter=',')

            for row in reader:
                statement_increase.append(float(row['statement_pc_max']))
                checked_increase.append(float(row['checked_pc_max']))

                # mutation_increase.append(float(row['mutation_coverage_increase'])
                #                          if float(row['mutation_coverage_increase']) > 0 else 0)

        save_path = results_folder + '/' + project
        visualize_as_stackedbar(checked_increase, statement_increase,
                                mutation_coverage, save_path,
                                "Probabilistic Coupling: " + project, "Max PC")
Esempio n. 16
0
def visualize_as_bar_plot():
    with open(get_latest_csv_path()) as csv_file:
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        statement_coverage = []
        checked_coverage = []
        percent_coverage = []
        counts_statement = {}
        counts_checked = {}
        counts_statement_f = {}
        counts_checked_f = {}
        project_name = set()
        for row in reader:
            statement_coverage.append(
                int(1 if row['statement_coverage'] == "True" else 0))
            checked_coverage.append(
                int(1 if row['checked_coverage'] == "True" else 0))
            percent_coverage.append(int(row['percent_coverage_s']))
            project_name.add(row['project'])

            try:
                counts_statement[int(row['percent_coverage_s'])] = counts_statement[int(row['percent_coverage_s'])] + \
                    int(1 if row['statement_coverage'] == "True" else 0)
            except KeyError:
                counts_statement[int(row['percent_coverage_s'])] = int(
                    1 if row['statement_coverage'] == "True" else 0)

            try:
                counts_checked[int(row['percent_coverage_c'])] = counts_checked[int(row['percent_coverage_c'])] + \
                    int(1 if row['checked_coverage'] == "True" else 0)
            except KeyError:
                counts_checked[int(row['percent_coverage_c'])] = int(
                    1 if row['checked_coverage'] == "True" else 0)
            except ValueError:
                pass

            try:
                counts_statement_f[int(row['percent_coverage_s'])] = counts_statement_f[int(row['percent_coverage_s'])]\
                                                                     + int(1)
            except KeyError:
                counts_statement_f[int(row['percent_coverage_s'])] = int(1)

            try:
                counts_checked_f[int(row['percent_coverage_c'])] = counts_checked_f[int(row['percent_coverage_c'])] \
                                                                   + int(1)
            except KeyError:
                counts_checked_f[int(row['percent_coverage_c'])] = int(1)
            except ValueError:
                pass

    label = [item for item, _ in sorted(counts_statement.items())]
    statement_bar_heights = [
        item / counts_statement_f[_]
        for _, item in sorted(counts_statement.items())
    ]
    checked_bar_heights = [
        item / counts_checked_f[_]
        for _, item in sorted(counts_checked.items())
    ]

    statement_bar_heights_label = [
        str(item) + '/' + str(counts_statement_f[_])
        for _, item in sorted(counts_statement.items())
    ]
    checked_bar_heights_label = [
        str(item) + '/' + str(counts_checked_f[_])
        for _, item in sorted(counts_checked.items())
    ]

    project_name = ','.join([s for s in project_name])
    ind = np.arange(len(label))
    width = 0.35
    fig, ax = plt.subplots()

    checked_coverage_bars = ax.bar(ind - width / 2, checked_bar_heights, width)
    statement_coverage_bars = ax.bar(ind + width / 2, statement_bar_heights,
                                     width)

    ax.set_ylabel('Ratio')
    ax.set_xlabel('% coverage score')
    ax.set_title(
        'Ratio of Total No. of test suites to test suite includes bug detecting tests: Lang'
    )
    ax.set_xticks(ind - width / 2)
    ax.set_xticklabels(tuple(label))

    ax.legend((checked_coverage_bars[0], statement_coverage_bars[0]),
              ('Checked Coverage', 'Statement Coverage'))

    #    ax.legend((checked_coverage_bars[0]), ('Checked Coverage'))

    autolabel(ax, checked_coverage_bars, checked_bar_heights_label)
    autolabel(ax, statement_coverage_bars, statement_bar_heights_label)

    fig.set_size_inches(15, 5)
    # save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_' +
    # str(max(project_ids))
    save_path = str(
        get_project_root()) + results_folder + '/' + str(file_name_to_save)
    fig.savefig(save_path, dpi=100)
    plt.show()
Esempio n. 17
0
def visualize_as_box_plot():
    font = {'size': 20}

    plt.rc('font', **font)
    project_list = project_config.get('projects', 'project_list').split(",")

    if len(project_list) > 1:
        print("reduce number of projects to 1")
        exit(0)
    project_list = project_list[0]

    statement_coverage_t = []
    statement_coverage_f = []
    checked_coverage_t = []
    checked_coverage_f = []

    project_range = project_config.get('projects', project_list).split(",")

    for project_id in range(int(project_range[0]), int(project_range[1]) + 1):
        file_name = "/point_biserial_correlation__" + project_list + "_" + str(
            project_id) + ".csv"
        path = str(get_project_root()) + results_folder + file_name

        try:
            with open(path) as csv_file:
                reader = csv.DictReader(csv_file, delimiter=',')
                for row in reader:
                    if row['statement_coverage'] == "True":
                        statement_coverage_t.append(
                            int(row['percent_coverage_s']))
                    if row['checked_coverage'] == "True":
                        checked_coverage_t.append(
                            int(row['percent_coverage_c']))

                    if row['statement_coverage'] == "False":
                        statement_coverage_f.append(
                            int(row['percent_coverage_s']))
                    if row['checked_coverage'] == "False":
                        checked_coverage_f.append(
                            int(row['percent_coverage_c']))
        except FileNotFoundError:
            pass

    data_to_plot = [
        checked_coverage_f, checked_coverage_t, statement_coverage_f,
        statement_coverage_t
    ]
    print(len(checked_coverage_f), len(checked_coverage_t),
          len(statement_coverage_f), len(statement_coverage_t))
    fig = plt.figure(1, figsize=(9, 6))

    # Create an axes instance
    ax = fig.add_subplot(111)

    ax.set_ylabel('No. of tests suites with % cov. score')
    ax.set_xlabel(
        'Indicates whether or not, a bug detecting test is included in \n generated test suite'
    )
    ax.set_title(project_list)
    # ax.set_xticks(ind + width / 2)
    ax.set_xticklabels(tuple(['False', 'True', 'False', 'True']))

    # Create the boxplot
    bp = ax.boxplot(data_to_plot)
    bp['medians'][0].set(color='#3d85c6', linewidth=4)
    bp['medians'][1].set(color='#3d85c6', linewidth=4)

    bp['medians'][2].set(color='#e69138', linewidth=4)
    bp['medians'][3].set(color='#e69138', linewidth=4)

    # ax.legend((bp['medians'][0], bp['medians'][2]), ('Checked Coverage', 'Statement Coverage'))
    ax.legend((bp['medians'][0], bp['medians'][2]),
              ('Checked Coverage', 'Statement Coverage')).remove()

    plt.show()
    save_path = str(get_project_root()) + results_folder + '/' + str(
        project_list) + '_box-plot'
    fig.savefig(save_path, dpi=100)
Esempio n. 18
0
def get_correlation_file():
    return str(
        get_project_root()) + results_folder + '/correlation_final_lang.txt'
Esempio n. 19
0
# Django settings for yyblog project.
import os
import os.path

import util

PROJECT_ROOT = util.get_project_root()
SITE_TITLE = "Yu Yang's Blog"

DEBUG = True
TEMPLATE_DEBUG = DEBUG

ADMINS = (
    #('Your Name', '*****@*****.**'),
    ('yangyu', '*****@*****.**'),
)

MANAGERS = ADMINS

DATABASES = {
    'default': {
        'ENGINE': 'django.db.backends.sqlite3', # Add 'postgresql_psycopg2', 'mysql', 'sqlite3' or 'oracle'.
        'NAME': os.path.join(PROJECT_ROOT, 'data.db'),                      # Or path to database file if using sqlite3.
        # The following settings are not used with sqlite3:
        'USER': '',
        'PASSWORD': '',
        'HOST': '',                      # Empty for localhost through domain sockets or '127.0.0.1' for localhost through TCP.
        'PORT': '',                      # Set to empty string for default.
    }
}
Esempio n. 20
0
def visualize_statement_percent_wise():
    path = str(get_project_root()) + results_folder
    directory = os.path.join(path)
    for root, dirs, files in os.walk(directory):
        for file in files:
            if file.endswith(".json"):
                print(file)
                contents = read_json_file(path + '/' + file)
                for stmt_tests in contents[0]['tests']:
                    for test_suites in stmt_tests['test_suites']:
                        try:
                            if 0 <= test_suites['statement_coverage'][
                                    'score'] <= 10:
                                statement_0_10.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 11 <= test_suites['statement_coverage'][
                                    'score'] <= 20:
                                statement_10_20.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 21 <= test_suites['statement_coverage'][
                                    'score'] <= 30:
                                statement_20_30.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))

                            if 31 <= test_suites['statement_coverage'][
                                    'score'] <= 40:
                                statement_30_40.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 41 <= test_suites['statement_coverage'][
                                    'score'] <= 50:
                                statement_40_50.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 51 <= test_suites['statement_coverage'][
                                    'score'] <= 60:
                                statement_50_60.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))

                            if 61 <= test_suites['statement_coverage'][
                                    'score'] <= 70:
                                statement_60_70.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 71 <= test_suites['statement_coverage'][
                                    'score'] <= 80:
                                statement_70_80.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 81 <= test_suites['statement_coverage'][
                                    'score'] <= 90:
                                statement_80_90.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))
                            if 91 <= test_suites['statement_coverage'][
                                    'score'] <= 100:
                                statement_90_100.append(
                                    len(test_suites['statement_coverage']
                                        ['tests']))

                            if 0 <= test_suites['checked_coverage'][
                                    'score'] <= 10:
                                checked_0_10.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 11 <= test_suites['checked_coverage'][
                                    'score'] <= 20:
                                checked_10_20.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 21 <= test_suites['checked_coverage'][
                                    'score'] <= 30:
                                checked_20_30.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))

                            if 31 <= test_suites['checked_coverage'][
                                    'score'] <= 40:
                                checked_30_40.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 41 <= test_suites['checked_coverage'][
                                    'score'] <= 50:
                                checked_40_50.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 51 <= test_suites['checked_coverage'][
                                    'score'] <= 60:
                                checked_50_60.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))

                            if 61 <= test_suites['checked_coverage'][
                                    'score'] <= 70:
                                checked_60_70.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 71 <= test_suites['checked_coverage'][
                                    'score'] <= 80:
                                checked_70_80.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 81 <= test_suites['checked_coverage'][
                                    'score'] <= 90:
                                checked_80_90.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))
                            if 91 <= test_suites['checked_coverage'][
                                    'score'] <= 100:
                                checked_90_100.append(
                                    len(test_suites['checked_coverage']
                                        ['tests']))

                        except KeyError:
                            pass

    data_to_plot = [
        statement_0_10, statement_10_20, statement_20_30, statement_30_40,
        statement_40_50, statement_50_60, statement_60_70, statement_70_80,
        statement_80_90, statement_90_100
    ]
    fig = plt.figure(1, figsize=(9, 6))
    # Create an axes instance
    ax = fig.add_subplot(111)

    ax.set_ylabel('No. of tests with % coverage score')
    ax.set_xlabel(
        'Indicates whether or not, a bug detecting test is included in \n generated test suite'
    )

    # ax.set_xticks(ind + width / 2)
    # ax.set_xticklabels(tuple(['False', 'True', 'False', 'True']))

    # Create the boxplot
    bp = ax.boxplot(data_to_plot)
    # bp['medians'][0].set(color='#3d85c6', linewidth=4)
    # bp['medians'][1].set(color='#3d85c6', linewidth=4)
    #
    # bp['medians'][2].set(color='#e69138', linewidth=4)
    # bp['medians'][3].set(color='#e69138', linewidth=4)

    ax.legend().remove()

    plt.show()
    # save_path = str(get_project_root()) + results_folder + '/' + str(project_list) + '_box-plot'
    # fig.savefig(save_path, dpi=100)

    data_to_plot = [
        checked_0_10, checked_10_20, checked_20_30, checked_30_40,
        checked_40_50, checked_50_60, checked_60_70, checked_70_80,
        checked_80_90, checked_90_100
    ]
    fig = plt.figure(1, figsize=(9, 6))
    # Create an axes instance
    ax = fig.add_subplot(111)

    ax.set_ylabel('No. of tests with % coverage score')
    ax.set_xlabel(
        'Indicates whether or not, a bug detecting test is included in \n generated test suite'
    )

    # ax.set_xticks(ind + width / 2)
    # ax.set_xticklabels(tuple(['False', 'True', 'False', 'True']))

    # Create the boxplot
    bp = ax.boxplot(data_to_plot)
    # bp['medians'][0].set(color='#3d85c6', linewidth=4)
    # bp['medians'][1].set(color='#3d85c6', linewidth=4)
    #
    # bp['medians'][2].set(color='#e69138', linewidth=4)
    # bp['medians'][3].set(color='#e69138', linewidth=4)

    ax.legend().remove()

    plt.show()
Esempio n. 21
0
def visualize_whole_project():
    with open(get_configured_csv_path()) as csv_file:
        file_name_to_save = os.path.basename(csv_file.name).split(".")[0]
        reader = csv.DictReader(csv_file, delimiter=',')
        sum_checked_buggy = 0
        sum_checked_fixed = 0
        sum_coverage_buggy = 0
        sum_coverage_fixed = 0
        sum_mutation_buggy = 0
        sum_mutation_fixed = 0
        project_name = set()
        for row in reader:
            sum_checked_buggy = sum_checked_buggy + float(row['checked_buggy'])
            sum_checked_fixed = sum_checked_fixed + float(row['checked_fixed'])

            sum_coverage_buggy = sum_coverage_buggy + float(row['statement_buggy'])
            sum_coverage_fixed = sum_coverage_fixed + float(row['statement_fixed'])

            sum_mutation_buggy = sum_mutation_buggy + float(row['mutation_buggy'])
            sum_mutation_fixed = sum_mutation_fixed + float(row['mutation_fixed'])

            project_name.add(row['project'])

        checked_coverage_increase_per = compute_percent_increase(sum_checked_buggy, sum_checked_fixed)
        statement_coverage_increase_per = compute_percent_increase(sum_coverage_buggy, sum_coverage_fixed)
        mutation_coverage_increase_per = compute_percent_increase(sum_mutation_buggy, sum_mutation_fixed)

        checked_coverage_increase = [sum_checked_buggy, sum_checked_fixed]
        statement_coverage_increase = [sum_coverage_buggy, sum_coverage_fixed]
        mutation_coverage_increase = [sum_mutation_buggy, sum_mutation_fixed]

        checked_coverage_label = ['', 'inc:' + str(round(checked_coverage_increase_per, 3))]
        statement_coverage_label = ['', 'inc: ' + str(round(statement_coverage_increase_per, 3))]
        mutation_coverage_label = ['', 'inc: ' + str(round(mutation_coverage_increase_per, 3))]

        project_name = ','.join([s for s in project_name])
        ind = np.arange(2)
        width = 0.3
        fig, ax = plt.subplots()

        checked_coverage_bars = ax.bar(ind - width / 2, checked_coverage_increase, width)
        statement_coverage_bars = ax.bar(ind + width / 2, statement_coverage_increase, width)
        mutation_coverage_bars = ax.bar(ind + width * 3 / 2, mutation_coverage_increase, width)

        # ax.set_ylabel('sum of coverage score of all projects')
        ax.set_xlabel(project_name)
        # ax.set_title('Overall result: coverage increase of bug detecting tests')
        ax.set_xticks(tuple(ind + width / 120))
        ax.set_xticklabels(tuple(['buggy version', 'fixed version']))

        # formula_legend = Rectangle((0, 0), 1, 1, fc="w", fill=False, edgecolor='none', linewidth=0)

        # ax.legend((checked_coverage_bars[0], statement_coverage_bars[0], mutation_coverage_bars[0]),
        #           ('Checked Coverage', 'Statement Coverage', 'Mutation Coverage'), loc='lower left')

        ax.legend().remove()
        autolabel(ax, checked_coverage_bars, checked_coverage_label)
        autolabel(ax, statement_coverage_bars, statement_coverage_label)
        autolabel(ax, mutation_coverage_bars, mutation_coverage_label)


        # save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_' +
        # str(max(project_ids))
        save_path = str(get_project_root()) + results_folder + '/' + str(file_name_to_save) + '_whole_result'
        fig.savefig(save_path, dpi=100)
        plt.show()