def mainbug_ids output_folder skip_validation uniapr beam_width re_rank perfect top_n_patches if bug_ids0 == none bug_ids = build_d4j1_2 model = RobertaForMaskedLMfrom_pretrainedmicro
这段代码是一个Python函数,它的主要功能是为给定的缺陷ID生成补丁并进行验证。函数接受以下参数:
- bug_ids:一个包含要处理的缺陷ID的列表。
- output_folder:生成结果的输出文件夹路径。
- skip_validation:一个布尔值,表示是否跳过验证步骤。
- uniapr:一个布尔值,表示是否使用UNIAPR算法进行补丁生成。
- beam_width:一个整数,表示beam search算法中的beam宽度。
- re_rank:一个布尔值,表示是否使用reranking算法对生成的补丁进行排序。
- perfect:一个布尔值,表示是否使用完美修复位置算法。
- top_n_patches:一个整数,表示生成的补丁数目。
函数主要流程如下:
- 如果bug_ids列表为空,则调用build_d4j1_2函数生成缺陷ID列表。
- 加载预训练好的RoBERTa模型和tokenizer。
- 对于每个缺陷ID,首先删除在/tmp/下的该缺陷ID的文件夹。
- 使用defects4j checkout命令从Defects4J仓库中检出该缺陷ID对应的代码版本到/tmp/下的该缺陷ID的文件夹。
- 调用get_location函数获取缺陷ID的代码位置。
- 根据perfect参数选择使用哪种补丁池(patch_pool_folder)。
- 使用defects4j export命令获取该缺陷ID对应的测试方法列表。
- 根据uniapr参数选择使用UNIAPRpatches或GVpatches类进行补丁生成。
- 对于每个代码位置,调用process_file函数生成补丁。
- 将生成的补丁添加到补丁池中,并记录生成补丁所用的时间。
- 在所有代码位置的补丁都生成后,调用Validator类进行验证。
- 最后,删除在/tmp/下的该缺陷ID的文件夹。
原文地址: https://www.cveoy.top/t/topic/bsnd 著作权归作者所有。请勿转载和采集!