项目简介

前人研究

复旦博士生提出了这个问题,并提取特征使用 RankNet——一种 Pair-to-Pair 的排序框架获得结果。

项目目标

根据 vulnerability 以及 commit 的数据,找到修复 vulnerability 的 code commit 数据。

评价指标

通过 Top K 的 Recall 和 Manual Effort 来进行评价效果。

项目经过

3 月初,跟随鲍老师开始着手项目。

鲍老师发了几篇漏洞相关的文章让我快速了解情况。我将文章都看了一下,简单了解。

谷歌学术上搜索数据集出现失误,未能搜索到数据集。

3-4 月,由于某篇论文中采用 Snyk 漏洞数据库,因此对该数据库进行爬虫,收集数据。

期间学习 gitPython 库的使用,操作 git 仓库。

数据收集后,通过正则表达式进行 commit 链接提取。

4-5 月,收集 vulnerability 和 commit 之间的特征。此时,复旦论文出现,打击了自己的自信心。

中间尝试提取版本号的特征,检查每个仓库的版本信息&手动标注漏洞补丁的版本号,对比漏洞描述中版本号,未能发现有关联性。

5 月,小导师表示 5 月末不再进行项目,未能兑现。

6-7 月,使用 pandas 库提取特征。由于服务器内存小+未能想到批处理的方法,因此导致服务器经常崩掉。时间长,导致自己对项目内容感到焦虑,对完成项目&导师产生感到抑郁。

7 月,小导师表示暑假结束不再进行项目,未能兑现。研二时允许日常实习,未能兑现。

7 月,根据鲍老师建议,采取通过文本处理的方法提取文本信息。采用 Bert 模型提取语义,最初为输出是否匹配的方法,后来改成直接输出语义向量的方式。

但是这里实现时存在一定的问题,因为我是用全部的数据进行训练并生成语义向量,导致这里存在着数据泄露的问题。

7 月中下旬,鲍老师通知我将论文投递到 saner 期刊上。后续写论文+跑实验。

写论文写了大约一个月,谷歌翻译+deepl 翻译+grammarly 修正。最后还是被小导师说,太像机翻了。

10 月开始,鲍老师改论文,提出多个当初实验时没有思考过的问题。例如,为什么选择 snyk 数据库,为什么使用这几种模型等等。并且最好有研究依据。并要求补充多次实验。

10 月 21 日,实在不想做实验了,给小导师&鲍老师表示抱歉,结束项目和论文。

项目反思

结果如何?

模型最后数据泄露,导致最终结果非常高。

PatchSout 模型无法复现。

导致结果不好的原因?

客观原因:

主观原因:

做的好的地方?

虽然非常不想做,但还是坚持了半年。

做的不好的地方 or 以后改进的地方?

接触一个新领域,未能提前询问前辈&老师们该如何在新的领域学习,最好问的比较具体些。

在新领域,每一个步骤结束时,向导师告知如何进行的,询问是否达到预期目标,有无不当之处,该怎么进行改进。

多写日志,具体些,并给导师查看。自己表达不好时,导师通过日志也可以了解情况。

平时注意学习与娱乐放松结合,不可过度放松,也不可以过度专注,保持身心健康。

当心态出现问题时,更多的与前辈&同级&导师进行有效的沟通。

如果存在很难的情况,如果 mentor 比较和蔼,能拖就拖,让 mentor 感觉当前真的不适合研究下去。(胡文康方法)

项目中代码方面出现了哪些失误?

模型最后数据泄露,导致最终结果非常高。

PatchSout 模型无法复现。

作为一名项目创新和实现者,我应该怎么做?

了解项目情况,询问正常的开展项目的过程,步骤具体化。

作为一名项目导师,我应该怎么做?

多和学生进行沟通,询问学生进展,询问学生当前是否出现困难。