发明名称 一种适用于快速软件开发模式的实时软件缺陷检测方法
摘要 本发明公开一种适用于快速软件开发模式的实时软件缺陷检测方法,首先初始化模型使其对任意模块的检测结果置信度为0;等待并接收一个刚完成编码的软件模块;利用当前缺陷检测模型对所接收的软件模块进行实时检测;若缺陷检测模型的缺陷检测置信度低于预设阈值,将所接收的软件模块送交测试人员进行详细测试,输出其缺陷情况,否则直接输出检测结果;利用接收到的软件模块对当前模型进行实时增量式建模;返回等待步骤接收新的软件模块直至所有软件模块开发完毕。该方法能够在编码过程中同步利用不断积累的软件模块进行实时建模,并在每个模块开发完成后及时为开发人员提供该模块的缺陷预警。
申请公布号 CN103092762B 申请公布日期 2016.02.03
申请号 CN201310053478.6 申请日期 2013.02.19
申请人 南京大学 发明人 黎铭;王东;周志华
分类号 G06F11/36(2006.01)I 主分类号 G06F11/36(2006.01)I
代理机构 南京苏高专利商标事务所(普通合伙) 32204 代理人 柏尚春
主权项 一种适用于快速软件开发模式的实时软件缺陷检测方法,其特征在于,包括如下步骤:步骤(1)初始化模型,使其对任意模块的检测结果置信度为0;步骤(2)等待并接收一个刚完成编码的软件模块;步骤(3)利用当前缺陷检测模型对所接收的软件模块进行检测;步骤(4)若缺陷检测模型的缺陷检测置信度低于预设阈值,则转入步骤(5),否则转入步骤(7);步骤(5)将所接收的软件模块送交测试人员进行详细测试,获取其缺陷情况;步骤(6)利用所接收的软件模块及其缺陷情况对当前缺陷检测模型进行增量式建模,并将软件模块有缺陷情况反馈模块开发者,转入步骤(8);步骤(7)利用所接收的缺陷情况未知的软件模块对当前缺陷检测模型进行增量式建模,并将模型的检测结果反馈模块开发者;步骤(8)若还有软件模块尚未开发完毕,转步骤(2),否则结束;下面是增量式建模的子流程,正是该子流程使得建模过程可以在接收到每一个模块后实时地进行:步骤70是建模过程起始动作;步骤71接收软件模块x<sub>t</sub>以及其缺陷情况,在此,缺陷情况表示该软件模块x<sub>t</sub>是否包含软件缺陷;步骤72判断软件模块x<sub>t</sub>的缺陷情况是否通过人工代码检查或测试获得,如果是转入步骤73,否则转入步骤74;步骤73通过式(3)和式(4)利用软件模块x<sub>t</sub>及对应缺陷情况进行增量式的学习建模,获得用于在t+1时刻对软件模块进行缺陷检测的缺陷检测模型F<sub>t+1</sub>;步骤74通过式(3)和式(5)利用软件模块x<sub>t</sub>进行增量式的学习建模,获得用于在t+1时刻对模块进行缺陷检测的缺陷检测模型F<sub>t+1</sub>;步骤75实时增量式建模过程结束;采用多个增量式支持向量机SVM来作为软件缺陷检测的模型,每个SVMf<sub>v,t</sub>使用不同的核函数来进行计算;缺陷检测模型F<sub>t</sub>通过结合V个f<sub>v,t</sub>来产生,其中二元函数k<sub>v</sub>(.,.)为第v个SVM f<sub>v,t</sub>所采用的核函数,1≤v≤V,由于核函数在建模之前需要人工给定,因此,第v个SVM f<sub>v,t</sub>由一组{α<sub>v,i</sub>}唯一确定,1≤i≤t,而α<sub>v,i</sub>的计算则通过学习建模过程来完成;<maths num="0001" id="cmaths0001"><math><![CDATA[<mrow><msub><mi>f</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>=</mo><munderover><mo>&Sigma;</mo><mrow><mi>i</mi><mo>=</mo><mn>1</mn></mrow><mi>t</mi></munderover><msub><mi>&alpha;</mi><mrow><mi>v</mi><mo>,</mo><mi>i</mi></mrow></msub><msub><mi>k</mi><mi>v</mi></msub><mrow><mo>(</mo><msub><mi>x</mi><mi>i</mi></msub><mo>,</mo><mo>&CenterDot;</mo><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>1</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000802931320000021.GIF" wi="1153" he="165" /></maths><maths num="0002" id="cmaths0002"><math><![CDATA[<mrow><msub><mi>F</mi><mi>t</mi></msub><mo>=</mo><mfrac><mn>1</mn><mi>V</mi></mfrac><munderover><mo>&Sigma;</mo><mrow><mi>v</mi><mo>=</mo><mn>1</mn></mrow><mi>V</mi></munderover><msub><mi>f</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>2</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000802931320000022.GIF" wi="1075" he="157" /></maths>增量式SVM通过式(3)~式(5)进行学习建模,以确定第v个模型f<sub>v,t</sub>参数{α<sub>v,i</sub>},其中1≤v≤V,1≤i≤t;具体来说,对所有α<sub>v,i</sub>(i&lt;t),采用式(3)来进行参数增量式更新;对α<sub>v,t</sub>,则根据缺陷情况的获取途径选择更新公式;当软件模块x<sub>t</sub>的缺陷情况y<sub>t</sub>通过人工代码检查或详细测试获取时,采用式(4)计算第v个模型的参数α<sub>v,t</sub>;当软件模块x<sub>t</sub>的缺陷情况通过模型自动检测而得时,采用式(5)计算第v个模型参数α<sub>v,t</sub>;其中,λ<sub>1</sub>,λ<sub>2</sub>,n,T,η<sub>t</sub>为增量式SVM的人工预设参数,t=1,…,T,二元函数l’(.,.)为SVM采用的损失函数Hinge Loss的一阶导函数,y<sub>t</sub>为软件模块x<sub>t</sub>的缺陷情况标注,y<sub>t</sub>=+1表示软件模块x<sub>t</sub>包含缺陷,y<sub>t</sub>=‑1表示软件模块x<sub>t</sub>没有缺陷;α<sub>v,i</sub>←α<sub>v,i</sub>(1‑η<sub>t</sub>λ<sub>1</sub>)           (3)<maths num="0003" id="cmaths0003"><math><![CDATA[<mrow><msub><mi>&alpha;</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>&LeftArrow;</mo><mfrac><mrow><mo>-</mo><msub><mi>&eta;</mi><mi>t</mi></msub><mi>T</mi></mrow><mi>n</mi></mfrac><msup><mi>l</mi><mo>&prime;</mo></msup><mrow><mo>(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>(</mo><msub><mi>x</mi><mi>t</mi></msub><mo>)</mo><mo>,</mo><msub><mi>y</mi><mi>t</mi></msub><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>4</mn><mo>)</mo></mrow></mrow>]]></math><img file="FDA0000802931320000023.GIF" wi="1188" he="118" /></maths><maths num="0004" id="cmaths0004"><math><![CDATA[<mrow><msub><mi>&alpha;</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>&LeftArrow;</mo><mfrac><mrow><mo>-</mo><msub><mi>&eta;</mi><mi>t</mi></msub><msub><mi>&lambda;</mi><mn>2</mn></msub><mi>T</mi></mrow><mi>n</mi></mfrac><munderover><mo>&Sigma;</mo><mrow><mi>u</mi><mo>=</mo><mn>1</mn></mrow><mi>V</mi></munderover><mrow><mo>(</mo><msub><mi>f</mi><mrow><mi>v</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>(</mo><msub><mi>x</mi><mi>t</mi></msub><mo>)</mo><mo>-</mo><msub><mi>f</mi><mrow><mi>u</mi><mo>,</mo><mi>t</mi></mrow></msub><mo>(</mo><msub><mi>x</mi><mi>t</mi></msub><mo>)</mo><mo>)</mo></mrow><mo>-</mo><mo>-</mo><mo>-</mo><mrow><mo>(</mo><mn>5</mn><mo>)</mo></mrow><mo>.</mo></mrow>]]></math><img file="FDA0000802931320000024.GIF" wi="1235" he="147" /></maths>
地址 210093 江苏省南京市鼓楼区汉口路22号