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)
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()
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()
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")
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()
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)
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")
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()
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)
def get_correlation_file(): return str( get_project_root()) + results_folder + '/correlation_final_lang.txt'
# 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. } }
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()
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()