面向软件安全性bug修复的软件开发者个性化推荐方法与流程

文档序号:11864892阅读:214来源:国知局
面向软件安全性bug修复的软件开发者个性化推荐方法与流程

本发明属于软件安全推荐领域,特别涉及面向软件安全性bug修复的软件开发者个性化推荐方法。



背景技术:

软件安全问题是指软件本身带有一些缺陷,这些缺陷会被恶意攻击者利用从而达到损坏软件信息、非法访问用户隐私、破坏用户数据等等。因此,软件安全性bug更是成为恶意攻击者的利用对象,给软件安全带来威胁,从而给商业带来经济损失,丧失用户对产品的信任等等。如何及时有效地修复软件中的安全性bug,成为保证软件安全的重要手段。随着软件的更新与维护,软件的复杂度不断增加,软件bug常常出现,软件安全性bug更是无法避免。如果不能及时修复这些安全性bug,软件安全便会受到威胁。

在本发明作出之前,目前,已有一些软件推荐技术推荐软件开发者解决软件bug,如:Hossen等人利用信息检索技术中的LSI(Latent Semantic Indexing)文本检索技术寻找一些相关的软件源文件,再根据这些文件推荐最合适的软件开发者。然而,这些技术主要针对一般性软件bug推荐相关开发者。这些技术在推荐软件开发者时没有考虑到开发者对软件安全知识的理解与经验,更没有考虑到开发者修改软件bug的质量因素。由于软件安全性bug的特殊性,修改较为复杂、及时性要求更强,且bug修复的准确性要求也更高,所以这些技术无法为解决软件安全性bug提供作者推荐。此外,如果只推荐合适的软件开发者修复安全性bug并不能确保软件安全的高需求。



技术实现要素:

本发明的目的就在于克服上述缺陷,研制面向软件安全性bug修复的软件开发者个性化推荐方法。

本发明的技术方案是:

面向软件安全性bug修复的软件开发者个性化推荐方法,其主要技术特征在于如下步骤:

步骤1).分析已有的安全性bug库和非安全性bug库中的文本信息进行预处理提取关键词信息,确定与安全性相关的关键词词库;

步骤2).将需要分析的软件bug库与安全性词库进行文本匹配提取软件系统的安全性bug库和相应的软件历史提交信息,并且提取软件安全性bug库和相应的软件历史提交信息中的所有与安全性相关的软件开发者和他们对应的关键词;同时,将新的软件bug与安全性词库进行文本匹配,确认新的bug是否为软件安全性bug,如果是,执行第三步骤;

步骤3).计算新的安全性bug和软件安全性bug库中所有bug的文本相似度,找出所有相关的安全性bug;

步骤4).根据每位软件开发者对应的关键词,与所有相关的安全性bug计算文本相似度,找出与新的安全性bug相关的软件开发者作为合适的开发者候选人,并且根据文本相似度找出每位合适的开发者对应的相关安全性bug;

步骤5).根据每位开发者对应的相关安全性bug推荐个性化参考信息,如:修改模式、软件开发者网络关系、相关源码文件、相关安全性bug、相关历史提交信息、其他被reopen的相关bug、被block的相关bug,给每一位合适的软件开发者,由于每位软件开发者对应的相关安全性bug不同,所以这些个性化信息对每位开发者都是不一样的;

步骤6).对于每一位合适的软件开发者,结合步骤4)中的文本相似度值和个性化信息中的相关reopen的bug数量和被block的相关bug数量对合适的软件开发者进行排序,得到一个软件开发者列表,列表最前面的软件开发者即为最合适的软件开发者。

本发明在推荐合适的软件开发者的同时,还为每位软件开发者提供了一系列个性化辅助信息供他们参考。在推荐软件开发者时不仅考虑了开发者对软件安全知识的理解与经验,还考虑了他们修复软件bug的质量。本方法尽量推荐一些修改质量高的软件开发者修复安全性bug,这样可以提高软件安全性bug修复的准确性,例如,在给开发者排序时,本方法会将以前修改过需要reopen bug的开发者排在列表末尾,因为他们这些reopen bug修复地不够彻底。在为每位软件开发者推荐辅助信息时,本方法不仅考虑了要解决的bug的相关特性,推荐一些与要解决的bug相关的一些辅助信息,而且考虑了软件开发者的历史工作经验,所有的辅助信息都是开发者较为熟悉的信息,这样可以帮助他们快速地理解要解决的软件安全性bug,提高软件维护的速率和质量,例如,在给每位软件开发者推荐相应的修改模式时,本方法会尽快推荐一些开发者以前使用过的修改模式,这样可以帮助他们提高bug修复的质量和效率。因此,本方法主要结合了软件开发者的软件安全知识与经验,以及他们修复软件bug的质量的因素和软件安全性bug的特征,推荐了合适的软件开发者以及他们需要参考的个性化参考信息去解决软件安全性bug,提高了安全性bug修复的及时性和准确性,从而保证软件的安全性。

由于很多软件系统没有安全性bug库,本发明首先分析Mozilla项目中的安全性bug库,以辅助寻找需要分析的系统中的安全性bug。在推荐软件开发者时,先分析开发者的安全知识和经验,找出与要解决的安全性bug相关的软件开发者。再根据开发者的知识和经验找出安全性bug库中他们熟悉的其他相关安全性bug,然后根据被找出来的安全性bug为每位软件开发者推荐个性化辅助信息,最后根据他们的个性化信息给所有相关的软件开发者排序。

本发明主要针对软件安全性bug,从分析软件开发者的安全性bug修复经验以及修复质量的因素,结合安全性bug特征推荐出合适的软件开发者解决软件安全性bug。此方法不仅有效地推荐出了合适的软件开发者,而且根据每位开发者的经验找出了与要解决的安全性bug相关的个性化辅助信息供开发人员参考,从而帮助软件开发者及时准确地解决安全性bug。本方法主要有如下一些优点:

(1)目前的软件开发者推荐方法主要是针对一般性软件bug推荐软件开发者。而本方法主要针对安全性bug推荐合适的软件开发者。

(2)本方法在推荐软件开发者时不仅考虑了开发者对软件安全知识的理解与经验,还考虑了他们修复软件bug的质量。

(3)本方法推荐软件开发者的同时,还为每位开发者推荐出相关的个性化辅助信息供开发者参考,这些个性化辅助信息不仅与要解决的软件bug相关,而且是软件开发者熟悉的信息,实现了信息的个性化推荐。

附图说明

图1——本发明流程示意图。

图2——本发明Mozilla项目中安全性bug相关的关键词词云示意图。

图3——本发明Spark项目中软件bug文本示意图。

图4——本发明jEdit项目中与bug23725相关的历史提交信息示意图。

图5——本发明Mozilla项目的部分软件开发者及其拥有的主题词语示意图。

具体实施方式

本发明的技术思路是:

本发明针对软件安全性bug推荐合适的软件开发者修复软件安全问题,在推荐软件开发者时不仅考虑了开发者对软件安全知识的理解与经验,还考虑了他们修复软件bug的质量。同时,本发明还为每位软件开发者提供个性化辅助信息供被推荐出的开发者参考,从而帮助他们快速有效地解决软件安全性bug。

如图1所示:

步骤1).分析已有的安全性bug库和非安全性bug库中的文本信息进行预处理提取关键词信息,确定与安全性相关的关键词词库;

此步骤主要提取一个安全性相关的关键词词库,方便后续步骤提取系统中的软件安全性bug。例如:Mozilla项目中有一个人工分类的安全性bug库,从Mozilla项目的安全性bug库和非安全性bug库中随机提取等量的bug,分组为安全性bug和非安全性bug两组,并分别对这两组中的bug文本信息(图3中的红色框中即是bug的文本信息)进行关键词托肯化,分词,词根还原等关键词预处理。分别确立一个安全性关键词库和非安全性关键词库。但是,此步骤中的安全性关键词词库中有很多与安全性不相关的冗余关键词,如图2中关键词词库词云统计图,图中可以看到很多,例如:script,test等,与安全性不相关的关键词。所以,再拿本步骤中的安全性关键词库与非安全性关键词库求差集去除冗余关键词,从而进一步得到与安全性相关的关键词词库。

步骤2).将需要分析的软件bug库与安全性词库进行文本匹配提取软件系统的安全性bug库和相应的软件历史提交信息,并且提取软件安全性bug库和相应的软件历史提交信息中的所有与安全性相关的软件开发者和他们对应的关键词;同时,将新的软件bug与安全性关键词词库进行文本匹配,确认新的bug是否为安全性相关的软件bug,如果是,执行第三步骤;

对要处理的系统bug库与第一步骤中的安全性相关的关键词词库进行文本匹配确定一个安全性bug库,文本匹配的计算方法如下:

<mrow> <msub> <mi>Similarity</mi> <mn>1</mn> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <mi>K</mi> <mi>e</mi> <mi>y</mi> <mi>s</mi> <mi> </mi> <mi>o</mi> <mi>f</mi> <mi> </mi> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mo>&cap;</mo> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> <mrow> <mo>|</mo> <mrow> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>1</mn> <mo>)</mo> </mrow> </mrow>

Similarity1代表文本计算的匹配值,Keys of Sec代表安全性相关关键词,Bug in Repository代表软件bug库中的关键词信息。当Similarity1大于某一个值(θ)时,即认为该bug为软件安全性bug。这样系统的安全性bug库即可建立。

从软件安全性bug库和相应的软件历史提交信息(图4即为jEdit项目中与bug23725相关的历史提交信息)中提取所有安全性相关的软件开发者,以及与每位软件开发者历史经验相关的主题词语,这些主题词语主要来自于他们已经解决过的安全性bug和历史提交信息的文本描述(预处理过的)。例如,图5展示了Mozilla项目中的部分软件开发者及其对应的部分预处理后关键词。其中,authorName列是开发者的名字,experWords列是开发者对应的关键词。

将新的软件bug与安全性关键词词库进行文本匹配计算,计算方法如公式(1),当新的软件bug为安全性bug时,执行步骤(3)。

步骤3).计算新的安全性bug和软件安全性bug库中所有bug的文本相似度,

找出所有相关的安全性bug;

此步骤主要根据要解决的安全性bug在软件安全性bug库中找出其他相关的安全性bug,主要根据安全性bug的描述信息以关键词的形式进行匹配从而计算bug之间的相似度值,计算公式如下:

<mrow> <msub> <mi>Similarity</mi> <mn>2</mn> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <mi>N</mi> <mi>e</mi> <mi>w</mi> <mi> </mi> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mo>&cap;</mo> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> <mrow> <mo>|</mo> <mrow> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>2</mn> <mo>)</mo> </mrow> </mrow>

公式(2)中,Similarity2代表要解决的安全性bug在软件安全性bug库中bug的相似度值,|New SecBug∩SecBug in Repository|代表bug之间共同关键词的数量,|SecBug in Repository|代表软件安全性bug库中bug拥有的关键词数量。

Bug的相似度值越大,说明这两个bug的相关性就越强。下面是分析Mozilla项目中bugID代号为bug1086999的安全性bug相关的其他软件bug,其相关bug的bugID为:bug1086145,bug945192,bug1120216,…,bug418128,bug322045。步骤4).根据每位软件开发者对应的关键词,与所有相关的安全性bug计算文本相似度,找出与新的安全性bug相关的软件开发者作为合适的开发者候选人,并且根据文本相似度找出每位合适的开发者对应的相关安全性bug;

此步骤主要根据开发者对应的关键词和所有相关安全性bug中的关键词计算文本相似度值,再根据相似度值的大小确定软件开发者及其对应的安全相关性bug。文本相似度值计算方法如下:

<mrow> <msub> <mi>Similarity</mi> <mn>3</mn> </msub> <mo>=</mo> <mfrac> <mrow> <mo>|</mo> <mrow> <mi>D</mi> <mi>e</mi> <mi>v</mi> <mi>exp</mi> <mi>e</mi> <mi>r</mi> <mo>&cap;</mo> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> <mrow> <mo>|</mo> <mrow> <mi>D</mi> <mi>e</mi> <mi>v</mi> <mi>exp</mi> <mi>e</mi> <mi>r</mi> <mo>&cup;</mo> <mi>S</mi> <mi>e</mi> <mi>c</mi> <mi>B</mi> <mi>u</mi> <mi>g</mi> <mi> </mi> <mi>i</mi> <mi>n</mi> <mi> </mi> <mi>Re</mi> <mi>p</mi> <mi>o</mi> <mi>s</mi> <mi>i</mi> <mi>t</mi> <mi>o</mi> <mi>r</mi> <mi>y</mi> </mrow> <mo>|</mo> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>3</mn> <mo>)</mo> </mrow> </mrow>

公式(3)中,Similarity3代表文本相似度值,|Devexper∩SecBug in Repository|代表开发者对应的关键词与相关安全性bug中的关键词交集的数量,|Devexper∪SecBug in Bepository|代表开发者对应的关键词与相关安全性bug中的关键词并集的数量。

当文本相似度值大于θ时,即认为该安全性bug为该软件开发者对应的相关bug。例如,对于bug1086145本方法主要计算出了以下相关的软件开发者:olli,christoph,jason,…,steve等十余位合适的软件开发者。对于开发者christoph,本方法主要计算出了以下相关的安全性bug:bug1086145,bug945085,bug1032216,…,bug418128,bug345375。

步骤5).根据每位开发者对应的相关安全性bug推荐个性化参考信息(修改模式、软件开发者网络关系、相关源码文件、相关安全性bug、相关历史提交信息、其他被reopen的相关bug、被block的相关bug)给每一位合适的软件开发者,由于每位软件开发者对应的相关安全性bug不同,所以这些个性化信息对每位开发者都是不一样的;

此步骤主要根据每位软件开发者的相关安全性bug给该开发者推荐一系列个性化参考信息。这些参考信息主要有:修改模式、软件开发者网络关系、相关源码文件、相关安全性bug、相关历史提交信息、其他被reopen的相关bug、被block的相关bug。这些个性化信息推荐方法分别如下:

●相关安全性bug:相关安全性bug信息可以由步骤3)得到,此处不再赘述;

●相关历史提交信息:每一个安全性bug都有相关历史提交信息修复该软件bug,该信息可以根据相关安全性bug的id号在历史提交信息库中获得;

●其他被reopen的相关bug:每条软件bug数据项中有一个reopen属性,如果此bug之前修复地不够彻底,需要被reopen重新修复,因此,可以根据reopen属性获取其他被reopen的相关bug;

●被block的相关bug:在修复软件bug时,往往有一些或某个其他软件bug阻止该软件bug的修复,该信息由bug的block属性获得;

●软件开发者网络关系:步骤4)可以获得很多合适的软件开发者,本方法主要利用开发者的关键词计算文本相似度值组建软件开发者网络关系,将文本相似度值较大的两个软件开发者建立关系边;

●相关源码文件:对于每一位软件开发者,本方法已推荐一些相关历史提交信息,历史提交信息中记录了很多相关源码文件路径,本方法可以利用这些文件路径提高相关源码文件;

●修改模式:历史提交信息中保存了很多代码修改记录信息,可以从这些信息中提取常用的修改模式,例如,添加if分支,将变量父类改变为子类等修改模式。

步骤6).对于每一位合适的软件开发者,结合步骤4)中的文本相似度值和个性化信息中的相关reopen的bug数量和被block的相关bug数量对合适的软件开发者进行排序,得到一个软件开发者列表,列表最前面的软件开发者即为最合适的软件开发者。

此步骤主要利用文本相似度值(计算方法如公式(3))和个性化信息中的相关reopen的bug数量和被block的相关bug数量对合适的软件开发者进行排序。首先,本方法为每一位软件开发者计算一个排序权值,其计算方法如下:

<mrow> <msub> <mi>Rank</mi> <mi>d</mi> </msub> <mo>=</mo> <mfrac> <mrow> <mi>D</mi> <mi>e</mi> <mi>v</mi> <mi>exp</mi> <mi>e</mi> <mi>r</mi> <mo>&times;</mo> <mi>B</mi> <mi>l</mi> <mi>o</mi> <mi>c</mi> <mi>k</mi> <mi>N</mi> <mi>u</mi> <mi>m</mi> </mrow> <mrow> <mi>Re</mi> <mi>o</mi> <mi>p</mi> <mi>e</mi> <mi>n</mi> <mi>N</mi> <mi>u</mi> <mi>m</mi> </mrow> </mfrac> <mo>-</mo> <mo>-</mo> <mo>-</mo> <mrow> <mo>(</mo> <mn>4</mn> <mo>)</mo> </mrow> </mrow>

公式(4)中,Rankd代表每一位软件开发者的排序权值,其中Devexper代表该开发者与软件bug的文本相似度值,其计算方法如公式(3);BlockNum代表该软件开发者个性化辅助信息中被block的bug数量,其数量越多,说明其修改的复杂性bug就越多,就越容易被推荐出来;ReopenNum代表该软件开发者个性化辅助信息中被reopen的bug数量,其数量越多说明其修改的bug需要被重新修改的数量就越多,说明修改的质量越低,越不易被推荐出来。

因此,每位软件开发者根据他/她的排序权值进行排序,权值越大的软件开发者排在列表前面,权值越小的开发者排在列表后面。最后,本方法得到一个经过排序后的软件开发者列表。

当前第1页1 2 3 
网友询问留言 已有0条留言
  • 还没有人留言评论。精彩留言会获得点赞!
1