一種用于軟件開發(fā)的缺陷預(yù)測方法
【技術(shù)領(lǐng)域】
[0001]本發(fā)明屬于計算機技術(shù)領(lǐng)域,涉及IT技術(shù)中的軟件工程領(lǐng)域,用于改善軟件開發(fā)團隊內(nèi)部交流溝通網(wǎng)絡(luò)的環(huán)節(jié)缺失,為一種用于軟件開發(fā)的缺陷預(yù)測方法。
【背景技術(shù)】
[0002]軟件開發(fā)是一項極為依賴開發(fā)者人工工作的智力活動,其中開發(fā)者之間的交流和協(xié)作對軟件質(zhì)量有著極大影響。很多嚴重的軟件質(zhì)量問題根源上都是由于缺乏充分的交流和溝通導致的,從而造成軟件成本的昂貴。
[0003]缺陷預(yù)測是近些年學術(shù)界眾多研宄人員關(guān)注的領(lǐng)域,目的是提前預(yù)測項目代碼中哪些模塊或文件最有可能出現(xiàn)缺陷,從而提前分配資源對最有威脅的部分采用靜態(tài)審查及動態(tài)測試等質(zhì)量保障手段發(fā)現(xiàn)潛在的缺陷。目前主要的技術(shù)是采用各種機器學習算法,通過采用源代碼和修改日志等數(shù)據(jù)中計算得到的各種度量值組合成輸入?yún)?shù),建立回歸模型進行預(yù)測,計算出各個模塊或文件的缺陷可能性指標。
[0004]然而這樣的技術(shù)在工業(yè)中卻難以得到有效應(yīng)用。原因是研宄中隱含設(shè)定了 “完美開發(fā)者”的不合理假設(shè),認為把未來會發(fā)生缺陷的文件呈現(xiàn)給開發(fā)者,開發(fā)者就能立即發(fā)現(xiàn)其中的缺陷。事實上,當開發(fā)者看到缺陷預(yù)測給出的文件列表時,常常會感到困惑,不知道從何入手,因此會直接忽視預(yù)測結(jié)果。因為當前基于機器學習算法和統(tǒng)計分析模型的缺陷預(yù)測技術(shù)無法給出有效的指導,不能告訴開發(fā)者代碼具體有怎樣的問題和解決建議。
[0005]在現(xiàn)有的缺陷預(yù)測領(lǐng)域,目前的技術(shù)只考慮表征,而不考慮引發(fā)缺陷的根源,因此預(yù)測得到的結(jié)果難以給開發(fā)者有效幫助。
【發(fā)明內(nèi)容】
[0006]本發(fā)明要解決的問題是:在軟件開發(fā)過程中需要能夠自動發(fā)現(xiàn)必要卻缺乏的開發(fā)者間的交流,即發(fā)現(xiàn)軟件開發(fā)流程中的缺失環(huán)節(jié),同時給出受到交流缺乏的影響而可能存在缺陷的相應(yīng)源代碼文件。
[0007]本發(fā)明的技術(shù)方案為:一種用于軟件開發(fā)的缺陷預(yù)測方法,包括以下步驟:
[0008]I)構(gòu)建源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò),源代碼依賴網(wǎng)絡(luò)根據(jù)源代碼的依賴關(guān)系建立,用于記錄源代碼文件之間的依賴關(guān)系,開發(fā)者社交網(wǎng)絡(luò)根據(jù)軟件開發(fā)者的是否參與過同一個開發(fā)任務(wù)來建立,用于記錄開發(fā)者間的交流協(xié)作關(guān)系;
[0009]2)基于“源代碼存在依賴關(guān)系,則相應(yīng)開發(fā)者間需要有社交關(guān)系”的原則,尋找源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò)間的不一致,所述不一致即缺乏的開發(fā)者關(guān)系;
[0010]3)將每個源代碼文件所關(guān)聯(lián)的缺乏的開發(fā)者關(guān)系作為源代碼文件不一致性的度量值,用于源代碼文件的缺陷預(yù)測,缺乏的開發(fā)者關(guān)系越多,源代碼文件存在潛在缺陷以及未來需要修復(fù)的可能性越高。
[0011]進一步的,還包括步驟4):
[0012]4)在步驟3)進行缺陷預(yù)測的同時,根據(jù)缺乏的開發(fā)者關(guān)系提取對應(yīng)的源代碼,所提取的源代碼即為可能存在缺陷的部分。
[0013]步驟I)中,源代碼依賴網(wǎng)絡(luò)包含多種代碼關(guān)系,開發(fā)者社交網(wǎng)絡(luò)包括多種開發(fā)者關(guān)系:
[0014]源代碼依賴網(wǎng)絡(luò)包括:
[0015]代碼語法依賴:靜態(tài)分析各個源代碼文件間的數(shù)據(jù)依賴和控制依賴關(guān)系,建立文件間的語法依賴網(wǎng)絡(luò);
[0016]代碼邏輯依賴:分析過程數(shù)據(jù),找出同時被提交,即一起被修改的文件,開源項目的版本控制工具中記錄了每一次修改所提交的文件,通過分析每一次修改所提交的文件得到文件間的邏輯依賴網(wǎng)絡(luò);
[0017]代碼任務(wù)依賴:找出為了完成同一個任務(wù)而同時修改的文件,建立這些文件間的任務(wù)依賴關(guān)系;
[0018]開發(fā)者社交網(wǎng)絡(luò)包括:
[0019]開發(fā)者任務(wù)依賴:兩個開發(fā)者同時參與了一個任務(wù),則存在任務(wù)依賴關(guān)系;
[0020]開發(fā)者提交重疊:兩個開發(fā)者提交過同一個文件,則建立該關(guān)系。
[0021]上述步驟2)具體包括如下步驟:
[0022]21)根據(jù)源代碼網(wǎng)絡(luò)中的依賴關(guān)系,以及源代碼文件和開發(fā)者的提交關(guān)系,認定存在依賴關(guān)系的源代碼文件的開發(fā)者間應(yīng)具有必要的社交關(guān)系;
[0023]22)檢查步驟21)判定的開發(fā)者間的必要社交關(guān)系是否在開發(fā)者社交網(wǎng)絡(luò)中存在;
[0024]23)步驟22)檢查中不存在的社交關(guān)系被認定為缺乏的開發(fā)者社交關(guān)系鏈接,即缺乏的開發(fā)者關(guān)系。
[0025]現(xiàn)有技術(shù)中,在研宄和工業(yè)中都忽視了開發(fā)者間缺乏交流會引發(fā)缺陷這一點問題,而且因為交流缺乏這一問題難以采用自動化的方式被高效地發(fā)現(xiàn),因此也沒有人基于這一點來進行缺陷預(yù)測。
[0026]根據(jù)本發(fā)明的技術(shù)方案,預(yù)測了軟件的缺陷風險,給出源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò)不一致性的同時,還可以給出文件缺乏的開發(fā)者鏈接,并同時可以由源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò)的內(nèi)容明確每一條鏈接缺乏的原因,即哪兩個源文件之間存在依賴,而其開發(fā)者間沒有交流協(xié)作。開發(fā)者可以根據(jù)方法的指導,組織彌補相應(yīng)的交流,有針對性地發(fā)現(xiàn)和修復(fù)缺陷。
【附圖說明】
[0027]圖1為本發(fā)明一個示例,顯示了本發(fā)明的實施方式,左半邊給出了一個源代碼網(wǎng)絡(luò)的一部分,包含4個文件及其依賴關(guān)系,文件中陰影區(qū)域表示該文件的開發(fā)者;右半邊給出了這些開發(fā)者在開發(fā)者網(wǎng)絡(luò)間的社交關(guān)系。
[0028]圖2為根據(jù)圖1給出的關(guān)系計算File O的網(wǎng)絡(luò)不一致性度量值的過程。
【具體實施方式】
[0029]本發(fā)明是一種為改善軟件開發(fā)團隊內(nèi)部交流溝通提供自動化推薦的方法,從而輔助軟件團隊更好地完成軟件開發(fā),大大減少因為成員間不充分的交流造成的軟件質(zhì)量問題。本發(fā)明可以實現(xiàn)為自動化工具,部署在軟件項目,尤其是開源項目或者地理分散的團隊的開發(fā)平臺中,幫助技術(shù)負責人了解軟件團隊的交流情況,并及時修復(fù)因交流不充足導致的軟件缺陷。
[0030]本發(fā)明的核心技術(shù)是比較源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò),將兩者的不一致作為缺乏交流的指示。
[0031]首先構(gòu)建源代碼依賴網(wǎng)絡(luò)和開發(fā)者社交網(wǎng)絡(luò)。目前有各種方式構(gòu)建這兩種網(wǎng)絡(luò),本發(fā)明中將這些方法組合起來,最終得到一個合成的源代碼依賴網(wǎng)絡(luò)和一個合成的開發(fā)者社交網(wǎng)絡(luò),分別記錄了源代碼文件間的依賴關(guān)系,以及開發(fā)者間的交流協(xié)作關(guān)系。
[0032]接下來尋找代碼網(wǎng)絡(luò)和開發(fā)者網(wǎng)絡(luò)間的不一致。我們認為,如果兩個源文件間存在依賴,那么其各自的開發(fā)者之間在很大程度上應(yīng)該有交流和協(xié)作,否則就是出現(xiàn)了不一致,交流鏈缺乏。按照這一設(shè)定,本發(fā)明可以找到很可能缺乏而又必要的開發(fā)者鏈接。
[0033]最終本發(fā)明可以檢測出每個文件關(guān)聯(lián)的開發(fā)者交流鏈接缺乏的數(shù)量,作為衡量文件網(wǎng)絡(luò)不一致性的指標。
[0034]下面給出以真實的開源項目作為實驗主體驗證本發(fā)明效果所進行的實驗步驟,供實踐者在進行具體實施時加以參考,也可根據(jù)具體項目環(huán)境和特點靈活調(diào)整。
[0035]I)構(gòu)建網(wǎng)絡(luò)
[0036]兩大類網(wǎng)絡(luò)的構(gòu)建方式目前有很多,實驗中我們在構(gòu)建它們時分別采用了三種方法。
[0037]源代碼依賴網(wǎng)絡(luò):
[0038]籲代碼語法依賴:靜態(tài)分析各個源代碼文件間的數(shù)據(jù)依賴和控制依賴關(guān)系。實驗中使用了 Understand工具完成這一工作,建立文件間的語法依賴網(wǎng)絡(luò)。
[0039]籲代碼邏輯依賴:分析過程數(shù)據(jù),找出同時被提交,即一起被修改的文件。開源項目的版本控制工具如SVN、Gith