侯中偉,任洪敏(上海海事大學(xué)信息工程學(xué)院,上?!?01306)
基于社會(huì)網(wǎng)絡(luò)的軟件缺陷預(yù)防的研究
侯中偉,任洪敏
(上海海事大學(xué)信息工程學(xué)院,上海201306)
在軟件開發(fā)的過程中,難免會(huì)遇到各種各樣的缺陷問題,而這些缺陷的產(chǎn)生,在不同程度上給軟件企業(yè)帶來了極大的困擾。為了使軟件企業(yè)部門能夠生產(chǎn)出高質(zhì)量的產(chǎn)品,在缺陷方面,各領(lǐng)域也做了大量的研究,包括各種軟件缺陷管理工具的開發(fā)以及應(yīng)用,有效地管理缺陷,這在很大程度上幫助開發(fā)者或許測(cè)試者盡量避免缺陷問題的產(chǎn)生。然而,軟件缺陷很難一次性解決,更不可能全部解決,需要開發(fā)者或測(cè)試者從軟件開發(fā)的初始階段就要盡量預(yù)防,了解清楚缺陷問題的產(chǎn)生,包括缺陷產(chǎn)生的根本原因、分布密度,以及缺陷在整個(gè)軟件開發(fā)過程中的嚴(yán)重性等級(jí)、優(yōu)先級(jí)等。只有這樣,才能生產(chǎn)出更高效的產(chǎn)品,減少不必要的人力、財(cái)力的浪費(fèi)。
軟件缺陷數(shù)據(jù)的存儲(chǔ)可以說在整個(gè)軟件開發(fā)過程中起著關(guān)鍵作用,它不僅能夠有效地實(shí)現(xiàn)數(shù)據(jù)的存儲(chǔ),而且好的數(shù)據(jù)存儲(chǔ)方式有助于開發(fā)者或測(cè)試者快速地提取、操作數(shù)據(jù),從根本上提高軟件缺陷分析與預(yù)防的效率。
首先,我們給缺陷數(shù)據(jù)定義幾個(gè)比較重要的屬性,如表1。
表1 缺陷數(shù)據(jù)定義表
從表中我們可以直觀地看出缺陷數(shù)據(jù)定義過程中用到的一些重要屬性,例如,通過Title屬性我們可以直接找到某缺陷,Type屬性可以很明確地告知我們哪些缺陷為同一類型缺陷,從而找到缺陷的歸屬,Cause屬性、Severity屬性、Priority屬性指出缺陷產(chǎn)生原因以及不同程度的等級(jí),這從一定程度上可以讓開發(fā)者或測(cè)試者了解缺陷內(nèi)容。
根據(jù)列出的缺陷數(shù)據(jù)屬性,我們運(yùn)用兩種方法存儲(chǔ)數(shù)據(jù),一種方法利用關(guān)系數(shù)據(jù)庫(kù)MySQL,另一種方法利用圖形數(shù)據(jù)庫(kù)Neo4j,比較兩者在存儲(chǔ)數(shù)據(jù)過程中的區(qū)別。
關(guān)系數(shù)據(jù)庫(kù)中,根據(jù)需求,我們可以給出E-R圖,實(shí)體Person與Defect的關(guān)系如圖1。
圖1 E-R圖
用戶與缺陷之間是多對(duì)多的關(guān)系,一個(gè)用戶可以管理多個(gè)缺陷,而每個(gè)缺陷的管理者可能由多個(gè)用戶共同來管理;用戶與用戶、缺陷與缺陷之間利用本身?yè)碛械膶傩躁P(guān)聯(lián),這里由于屬性過多就不一一列出,只是簡(jiǎn)單列出用戶與缺陷之間的關(guān)系。
圖形數(shù)據(jù)庫(kù)中,根據(jù)需求,我們也可以給出數(shù)據(jù)庫(kù)的圖形表現(xiàn)形式,即將點(diǎn)、邊、屬性聯(lián)系在一起,構(gòu)成一個(gè)基于社會(huì)網(wǎng)絡(luò)的缺陷數(shù)據(jù)模型,如圖2。
圖2 基于社會(huì)網(wǎng)絡(luò)的缺陷數(shù)據(jù)模型
該缺陷數(shù)據(jù)模型比較容易理解:由用戶和缺陷兩個(gè)實(shí)體組成,然后用戶實(shí)體通過特殊的關(guān)系與缺陷實(shí)體連接。Person實(shí)體包含兩個(gè)關(guān)系:多個(gè)Person實(shí)例之間通過Colleague關(guān)系連接,但不能連接自己,Management連接到最近的Defect實(shí)體;Defect實(shí)體也包含兩個(gè)關(guān)系:多個(gè)Defect實(shí)體之間通過next關(guān)系連接,可以表示主線上的下一個(gè)Defect實(shí)體,Management連接到最近的Person實(shí)體。
通過對(duì)數(shù)據(jù)的存儲(chǔ)結(jié)構(gòu)圖,可以看出:若缺陷數(shù)據(jù)之間有一定的關(guān)系網(wǎng),那么利用關(guān)系數(shù)據(jù)庫(kù)描述這一過程會(huì)很復(fù)雜,不僅占用存儲(chǔ)空間,而且查找效率也不是很高,所以利用圖形數(shù)據(jù)庫(kù),可以通過邊的關(guān)系很容易找到缺陷數(shù)據(jù);若給數(shù)據(jù)庫(kù)表添加一些額外的數(shù)據(jù),我們很可能需要重構(gòu)關(guān)系數(shù)據(jù)庫(kù),帶來不必要的麻煩,而使用圖形數(shù)據(jù)庫(kù)的話,我們只需要?jiǎng)討B(tài)地添加幾個(gè)節(jié)點(diǎn)或邊。
從傳統(tǒng)意義上講,社交網(wǎng)絡(luò)指的是由一些個(gè)人或組織通過他們之間的關(guān)系所構(gòu)成的一個(gè)復(fù)雜的網(wǎng)絡(luò)結(jié)構(gòu),而這種關(guān)系可以是同學(xué)、朋友、同事或親戚。本文則依靠這種特殊的網(wǎng)絡(luò)結(jié)構(gòu),利用社交網(wǎng)絡(luò)的劃分算法對(duì)網(wǎng)絡(luò)結(jié)構(gòu)中的軟件缺陷與缺陷之間的關(guān)系進(jìn)行分析,從而得到一定的缺陷社團(tuán)劃分。
本文主要利用Newman等人的優(yōu)化模塊度的快速算法,即FN算法,它是一個(gè)啟發(fā)式算法,主要引入了一個(gè)模塊性函數(shù)Q,通過最大化Q函數(shù),來實(shí)現(xiàn)缺陷社團(tuán)的發(fā)現(xiàn)。
FN算法的具體步驟如下:
(1)網(wǎng)絡(luò)中的每個(gè)缺陷節(jié)點(diǎn)作為一個(gè)小網(wǎng)絡(luò),這樣n個(gè)缺陷節(jié)點(diǎn)的網(wǎng)絡(luò)就有n個(gè)小網(wǎng)絡(luò),初始化后,eij=缺陷節(jié)點(diǎn)i與j相連,表示缺陷節(jié)點(diǎn)i 0其他的度,2m表示網(wǎng)絡(luò)結(jié)構(gòu)中邊的總數(shù));
(2)當(dāng)兩個(gè)節(jié)點(diǎn)之間有邊時(shí),對(duì)節(jié)點(diǎn)進(jìn)行合并,然后計(jì)算模塊度增量ΔQ,其中ΔQ=eij+eji-2aiaj=2(eij-aiaj);
(3)選擇ΔQ變化最大的缺陷節(jié)點(diǎn)進(jìn)行合并,更新矩陣eij;
(4)重復(fù)執(zhí)行第(2)步與第(3)步,直到整個(gè)原網(wǎng)絡(luò)構(gòu)成為一個(gè)大的社團(tuán)。
從一定程度上講,軟件缺陷的有效劃分一部分取決于軟件缺陷數(shù)據(jù)的存儲(chǔ),另一部分則取決于社會(huì)網(wǎng)絡(luò)的社團(tuán)劃分算法。在算法優(yōu)化改進(jìn)方面,我們?cè)贔N算法的步驟(2)中,主要是將圖形數(shù)據(jù)庫(kù)Neo4j自帶的一些求最短路徑的方法運(yùn)用到社會(huì)網(wǎng)絡(luò)中節(jié)點(diǎn)合并的過程,這樣不僅可以減少我們的工作量,而且還可以在很大程度提高算法的效率,從而對(duì)缺陷數(shù)據(jù)進(jìn)行有效的社團(tuán)劃分。那么根據(jù)上面論述的FN算法步驟和存儲(chǔ)的缺陷數(shù)據(jù),我們可以初步得到FN算法的層次聚類樹,如圖3。
本文區(qū)別于傳統(tǒng)的軟件缺陷的分析與預(yù)防方法,引入社會(huì)網(wǎng)絡(luò)的相關(guān)概念,即利用社會(huì)網(wǎng)絡(luò)的社團(tuán)劃分算法對(duì)軟件缺陷進(jìn)行劃分。一方面借助圖形數(shù)據(jù)庫(kù)Neo4j實(shí)現(xiàn)軟件缺陷的存儲(chǔ),減少內(nèi)存的占有率,提高軟件缺陷數(shù)據(jù)的存儲(chǔ)效率;另一方面利用社團(tuán)網(wǎng)絡(luò)的聚類算法FN算法,劃分軟件缺陷的社團(tuán),進(jìn)而有助于開發(fā)者或測(cè)試者提前預(yù)知缺陷存在的模塊,提高軟件開發(fā)的效率。
圖3 FN算法的層次聚類樹
[1]劉海,郝克剛.軟件缺陷數(shù)據(jù)的定義[J].計(jì)算機(jī)應(yīng)用,2008(1).
[2]閏振興,鄭駿.軟件缺陷屬性度量與軟件過程管理方法研究[J].計(jì)算機(jī)與數(shù)字工程,2010.
[3](美)Houman Younessi.面向?qū)ο蟮能浖毕莨芾恚跰].趙文耘.機(jī)械工業(yè)出版,2004.
[4]尹相樂,馬力,關(guān)昕.軟件缺陷分類的研究[J].計(jì)算機(jī)工程與設(shè)計(jì),2008,29(7):4910-4912.
[5]鄒琴.動(dòng)態(tài)社交網(wǎng)絡(luò)中社區(qū)劃分算法研究[D].碩士學(xué)位論文,2012(1):23~24
[6]王偉欣.復(fù)雜網(wǎng)絡(luò)社團(tuán)結(jié)構(gòu)挖掘算法的研究[D].碩士學(xué)位論文,2013(6):28
[7]Newman M E J.Fast algorithm for detecting community structure in networks[J].Physical Review E,2004,69(6):066-133.
[8]Clauset A.Finding local community structure in networks[J].Physical Review E,2005,72(2):026-132
[9]Girvan M,Newman M E J.Community structure in social and biological networks[J].Proceedings of the National Academy of Sciences,2002,99(12):7821-7826
[10]Neo4j.org官方網(wǎng)站.Neo4j中文[S/OL].[2014-6-10].http://www.neo4j.org.cn/.
Software Defects;Data Storage;Social Network;Partitioning Algorithm;Defects Prevention
Research on the Software Defects Prevention Based on Social Network
HOU Zhong-wei,Ren Hong-min
(College of Information Engineering,Shanghai Maritime University,Shanghai 201306)
1007-1423(2015)21-0011-03
10.3969/j.issn.1007-1423.2015.21.003
侯中偉(1988-),女,山東鄒城人,碩士研究生,研究方向?yàn)檐浖_發(fā)方法與軟件項(xiàng)目管理
2015-05-05
2015-07-01
隨著軟件需求的不斷增加,軟件規(guī)模也不斷地?cái)U(kuò)大,軟件缺陷問題接踵而來。如何有效地預(yù)防軟件缺陷,成為軟件開發(fā)過程中重要的一部分。從兩方面論述軟件缺陷處理問題,一方面是軟件缺陷數(shù)據(jù)的存儲(chǔ)問題,另一方面是利用社會(huì)網(wǎng)絡(luò)的社團(tuán)劃分算法劃分歷史軟件缺陷,找到缺陷的隸屬社團(tuán),根據(jù)缺陷的隸屬社團(tuán),開發(fā)者或測(cè)試者可以得到缺陷與缺陷之間的隸屬關(guān)系以及缺陷產(chǎn)生的根源,從而更好地預(yù)防缺陷,大大提高軟件產(chǎn)品質(zhì)量。
軟件缺陷;數(shù)據(jù)存儲(chǔ);社會(huì)網(wǎng)絡(luò);社團(tuán)劃分算法;缺陷預(yù)防
任洪敏(1969-),男,上海浦東人,博士,副教授,研究方向?yàn)檐浖w系結(jié)構(gòu)、構(gòu)件技術(shù)、軟件復(fù)用、過程工程等
With the increasing demand of software,software size has continued to expand,software defects follow.How to effectively prevent software defects has become an import part of the software development process.Discusses two ways to deal with the problem of software defects,one is the storage problem of the data in the software defects,the other is using the partitioning algorithm of social network to divide the history of software defects and finding their membership associations,according to their membership associations,developer or tester can get the affiliation between defects and defects and the root of defects,so as to better prevent defects,greatly improve the quality of software products.