錯誤修正模式挖掘方法研究_第1頁
錯誤修正模式挖掘方法研究_第2頁
錯誤修正模式挖掘方法研究_第3頁
錯誤修正模式挖掘方法研究_第4頁
錯誤修正模式挖掘方法研究_第5頁
已閱讀5頁,還剩31頁未讀, 繼續(xù)免費閱讀

下載本文檔

版權說明:本文檔由用戶提供并上傳,收益歸屬內容提供方,若內容存在侵權,請進行舉報或認領

文檔簡介

PAGEPAGE33哈爾濱工業(yè)大學畢業(yè)設計(論文)I-摘要根據研究,全球經濟的出現(xiàn)使得開源軟件進一步的普及。如果使用的是開源軟件,那么文件的老格式就會在軟件的不同版本保留,或者是新版軟件更容易獲得兼容性好的補丁。然而,有很多開源軟件的安全風險,開源軟件公司在享受帶來的便利的同時也帶來了一個巨大的安全風險。軟件開發(fā)過程越來越多的使用開源軟件,開源軟件已經成為軟件開發(fā)的核心基礎設施,開源軟件的安全應該上升到高度安全的基礎設施來解決,應該得到更廣泛的關注。本文介紹了課題研究背景和相關工作研究現(xiàn)狀,將研究目標確定為基于軟件歷史數(shù)據挖掘,探索開源軟件的質量和缺陷修復模式。對開源項目提交歷史進行分析,采集和分析其中有關軟件缺陷及其修復操作的歷史信息,進一步利用錯誤修正操作分析代碼質量。統(tǒng)計分析了相應的軟件開發(fā)人員所有貢獻的代碼質量情況,可以更好地為未來開源軟件缺陷發(fā)現(xiàn)和修復提供參考,提高軟件維護的效率,進而提升開源軟件的質量和可靠性。關鍵詞:開源軟件;代碼質量;缺陷管理;軟件倉庫挖掘AbstractAccordingtotheresearch,theemergenceoftheglobaleconomymakesthepopularityofopensourcesoftwarefurtherifyouareusingopensourcesoftware,thenoldformatfilewillbeindifferentversionsofthesoftware,oranewversionofsoftwarecompatibilityiseasiertogetagoodpatch,however,therearealotofsecurityrisksofopensourcesoftware,opensourcesoftwarecompanyatthesametimeenjoytheconveniencebroughtahugesecurityriskofthesoftwaredevelopmentprocess,moreandmoreuseofopensourcesoftware,opensourcesoftwarehasbecomeacoreinfrastructureofsoftwaredevelopment,opensourcesoftwaresecurityshouldrisetohighsecurityinfrastructuretosolve,deserveswiderattention.Thispaperintroducesthebackgroundoftheresearchandthestatusquoofrelevantwork,anddeterminestheresearchobjectiveastoexplorethequalityanddefectrepairmodeofopensourcesoftwarebasedonsoftwarehistoricaldatamining.Analyzethesubmissionhistoryofopensourceprojects,collectandanalyzehistoricalinformationaboutsoftwaredefectsandtheirrepairoperations,andfurtheranalyzecodequalitywitherror-correctionoperations.Thestatisticalanalysisofallcodequalitycontributedbysoftwaredeveloperscanbetterprovidereferenceforthefuturediscoveryandrepairofdefectsinopensourcesoftware,improvetheefficiencyofsoftwaremaintenance,andtherebyimprovethequalityandreliabilityofopensourcesoftware.Keywords:OpensourcesoftwareCodequalityDefectmanagementSoftwarewarehousemining目錄TOC\o"1-3"\u摘要 IAbstract II第1章緒論 11.1研究背景 11.2開源運動現(xiàn)狀 21.3開源軟件安全問題現(xiàn)狀 51.4錯誤修正模式研究現(xiàn)狀 71.5本文組織結構 8第2章軟件歷史數(shù)據挖掘的研究現(xiàn)狀分析 102.1應用于編碼的數(shù)據挖掘技術 102.2應用調試的數(shù)據挖掘技術 102.3應用于測試的數(shù)據挖掘技術 112.4版本控制信息的挖掘 122.5軟件歷史數(shù)據挖掘的價值 12第3章錯誤修正模式挖掘方法研究 143.1方法的總體框架 143.2決策樹分類算法 153.3代碼質量靜態(tài)分析 163.3.1代碼質量相關工作 173.3.2工具SonarQube 17第4章實驗結果與分析 204.1實驗數(shù)據 204.2實驗設計 214.3實驗結果及分析 22第5章研究方法對比與評價 275.1FP-Tree挖掘算法建簡介 275.2實驗環(huán)境及數(shù)據 285.3算法評價指標查準率和查全率 285.4實驗結果 32結論 33致謝 錯誤!未定義書簽。參考文獻 錯誤!未定義書簽。附錄1譯文 錯誤!未定義書簽。附錄2英文參考資料 錯誤!未定義書簽。第1章緒論1.1研究背景自上世界80年代以來,開源應用軟件一直在中國和全世界得到很大范圍內的應用和推廣,經過20多年的快速發(fā)展,現(xiàn)如今的開源應用軟件產業(yè)中,開源應用軟件已經在各個環(huán)節(jié)的應用中都充分發(fā)揮了其不可替代的重要作用。然而,在其發(fā)展的與此同時,開源應用軟件也一直在行業(yè)中承受著眾多的消費者和誤解,特別是在其應用軟件安全性的問題上更是一直頗受消費者的懷疑。本章在深入探討開源軟件的安全性存在問題的大背景之下,首先詳細的介紹了目前開源應用軟件的技術應用發(fā)展基本現(xiàn)狀和目前開源社區(qū)已經形成的基本現(xiàn)狀,并對存在的開源應用軟件的安全性存在問題分析進行了較為詳細的分析和介紹。與此同時本章會詳細的介紹目前最比較流行的幾種靜態(tài)開源軟件代碼質摘問題分析的方法和工具,據此重點闡明了開源應用軟件的代碼質量安全性問題與軟件缺陷的關系分析研究的意義及當前開源軟件面臨的困難,同時還對開源軟件相關的技術應用發(fā)展中的現(xiàn)狀問題進行了詳細的介紹。開源軟件運動中所提倡的大規(guī)模協(xié)同軟件開發(fā)模式也在不斷的改變著全世界軟件開發(fā)者和技術人員的價值觀和軟件開發(fā)的模式,開源商用軟件運動在給當今的人生活帶來了機遇的同時,也給人帶來了很多挑戰(zhàn),開源商用軟件的絕對安全性等等問題一直被很多人所質疑。其實對于軟件從業(yè)者與用戶來講不管使用的是任何一個開源的商用軟件系統(tǒng)還是其他沒有商用的開放軟件源代碼的商用的開源軟件,絕對安全的開源商用軟件系統(tǒng)是不一定有可能真實存在的,同時很多相關從事軟件開發(fā)的人員也都會在網站上發(fā)布很多相關的開發(fā)缺陷,這些缺陷出現(xiàn)和產生的可能性和原因也有很多,而這些開發(fā)缺陷往往會直接導致一個個軟件安全隱患的出現(xiàn)和產生。通過軟件工程中對數(shù)據挖掘的使用就能夠可以增強軟件系統(tǒng)中的的維護效率同時也可以增加系統(tǒng)的穩(wěn)定以及安全性。那么如何在這個大的背景下有效的提高一個商用開源軟件的開發(fā)質量無疑是一個很大的挑戰(zhàn)。從程序的本身而言,到現(xiàn)在還沒有一套完整的理論和工具能證明程序本身的正確性,這是軟件可靠性本質上的硬傷,排除這個因素,那么軟件的質量就要通過測試來保證。但是,發(fā)現(xiàn)和修復軟件缺陷仍然是一種高成本的工作。本論文的章節(jié)主要內容就是在探討開源軟件有關安全性的問題這個大的背景下,從當前國際開源運動的早期發(fā)展以及現(xiàn)狀,開源社區(qū)的發(fā)展現(xiàn)狀和與開源應用軟件相關安全性的問題等幾個角度來詳細的介紹所研究的背景。1.2開源運動現(xiàn)狀從1980年代以來,計算機軟件技術已經得到了質的發(fā)展和飛躍,開源軟件運動也隨之日益興起,隨著移動互聯(lián)網信息技術的普及和發(fā)展,那些完全向社會公眾提供免費開放軟件和源代碼的計算機軟件也越來越被大家所廣泛接受。開源代碼運動的歷史序幕最初是由Richardstallman啟動了一個GNU的項目而一步步拉開的。1989年,Richardstallman主持了一個GNU其他各個項目的工作,在隨后一年中,越來越多的人開始加入到了GNU的項目中去,到了整個本世紀初中國的開源軟件運動已經進入了全面形成和發(fā)展的第一個階段,目前在軟件數(shù)據庫、編譯工具、操作系統(tǒng)、移動應用終端等等都已經有了很成熟的開發(fā)成果,甚至在一些開發(fā)的語言上也都已經有了開源的產品蹤跡,比如像操作系統(tǒng)開發(fā)軟件(cms)已經逐漸的被其他開源軟件產品所取代和占據,在目前是軟件開發(fā)技術人員最為比較熟悉的基礎開源軟件的領域,大體的模式是類似于spring、Hibernate、Struts這樣的開源運動自由軟件的框架也不斷的對之前的傳統(tǒng)閉源軟件框架模式進行了革命性的沖擊。并且軟件的質量就要通過測試來保證,開源軟件的安全問題應該上升到基礎設施安全的高度來對待,應該得到更多的,更廣泛的重視。反觀國內的新一輪開源軟件運動來講,國內的新一輪開源軟件運動的開始和起步時間相對于國外的新一輪開源軟件運動來說要晚的多,最早在一開始也可以說是主要對一些Linux的軟件進行漢化,但是隨著國內的新一輪開源軟件運動的不斷發(fā)展,國內的早期的互聯(lián)網軟件開發(fā)技術人員已經開始深刻的意識到了開源應用軟件的重要性和優(yōu)勢,不斷的將一些知名的國外開源應用軟件產品引入國內的開發(fā)回,大大程度的促進了國內的開源應用軟件的普及和發(fā)展。從2005年開始,互聯(lián)網的技術已經得到了迅速的進步和發(fā)展,新一輪的國際開源軟件運動也在不斷的發(fā)展,出現(xiàn)了很多重要的開源運動成果,全世界開源軟件運動的發(fā)展歷程,就是可以很清楚地發(fā)現(xiàn),開源應用軟件的技術發(fā)展水平已經呈現(xiàn)了螺旋式的上升,開源應用軟件的技術發(fā)展從括了開源軟件在應用系統(tǒng)開發(fā)平臺、基礎設施協(xié)議以及軟件開發(fā)編程語言等相關技術方面已經取得的重要技術成果,還包括了各種新型開源社區(qū)的誕生和興起,甚至有更多的理由向他建信,開源應用軟件在未來必然還在技術上有著長足的進步和發(fā)展,將會進一步展現(xiàn)出強大的技術生命力。全世界各地的項目和軟件開發(fā)技術人員以及其他軟件開發(fā)技術愛好者都希望可以通過使用這些社交平臺開始頻繁的相互協(xié)同進行軟件開發(fā)與項目的技術交流。所以在接下來的工作中進行了相關研究調查。Github社區(qū)每年新增用戶趨勢圖,如圖1-1所示。圖1-1Github社區(qū)每年新增用戶趨勢圖前期由于開源社區(qū)只有少數(shù)核心的軟件項目并且開發(fā)人員能夠利用自己的項目和軟件來進行協(xié)同開發(fā),基本上沒有其他軟件開發(fā)人員控制的工具可以來指導和控制整個軟件項目的協(xié)同開發(fā)和技術活動。其中例如Github、SourceForgc、OpenHub等。這些不同發(fā)展形態(tài)的開源社區(qū)項目總體呈現(xiàn)出:1)項目規(guī)模大,2)用戶增長快,3)注冊用戶量多等的特點。研究人員發(fā)現(xiàn),截止到2016年,Github累計托管開源社區(qū)的軟件開源人員以及軟件愛好者項目已超過了500萬,常見開源社區(qū)的開源軟件項目數(shù)量統(tǒng)計,如表1-1所示。表1-1常見開源社區(qū)的開源軟件項目數(shù)量統(tǒng)計開源軟件社區(qū)開源軟件項目總量Github4,699,455SourceForge363,700OpenHub672,372OSChina42,238總計5,777,765與此同時,作為開源社區(qū)承載全世界開源軟件的重要載體,開源社區(qū)的內容和形式也是隨著開源軟件時代而在不斷的發(fā)生改變,隨著國際開源軟件運動在中國乃至全世界的深入和蓬勃發(fā)展。軟件都已經是大型的公司內部進行研發(fā),每個做開源項目的軟件開發(fā)人員也沒有現(xiàn)在那么多,所以沒有真正產生開源社區(qū)的軟件開發(fā)概念,項目開發(fā)當中的一些人為核心的開發(fā)人員最主要的特點就是溝通渠道和方式都是通過email來進行交流的,每次交流都是需要將自己的項目和代碼放到一封郵件中,通過這樣的郵件方式來向其他的專業(yè)軟件開發(fā)的人員和愛好者傳達自己的軟件開發(fā)的理念和現(xiàn)狀。但是隨著國際開源軟件運動的發(fā)展和興起,軟件開發(fā)的難度和門檻也沒有以前那么高,大量的專業(yè)軟件開發(fā)的人員和愛好者參與到了軟件的研發(fā)當中。近年來,同時大量的專業(yè)軟件開發(fā)人員和愛好者對軟件開發(fā)的熱愛被開源社區(qū)所點燃,比如Eclipse社區(qū)、Apache社區(qū)、Linux社區(qū)等,這些社區(qū)主要都是由一些規(guī)模停大的科技公司和互聯(lián)網信息服務公司提供支持,為一些優(yōu)質開源軟件的作者和開發(fā)人員提供了各種以軟件為基礎的服務設施。隨后逐漸出現(xiàn)的開源項目將代碼托管,郵件列表和缺陷管理庫等的功能突岀,展示了開源社區(qū)主頁。SourceForge中開源軟件Ubuntu的顯示主頁截圖,如圖1-2所示。圖1-2SourceForge中開源軟件Ubuntu的顯示主頁與此同時不同的開源社區(qū)也開始根據其用戶的特定開發(fā)需求和活動來為開發(fā)者提供特定的產品和服務,比如軟件編程問答社區(qū)StackOverflow的社區(qū)開始出現(xiàn)就是為了能夠解決更多的軟件開發(fā)者以及他在進行軟件開發(fā)的過程中可能遇到的困難和問題而設計產生的。顯示了開源社區(qū)及其應用數(shù)據的形成和演化過程。開源社區(qū)及其數(shù)據的演化截圖,如圖1-3所示。圖1-3開源社區(qū)及其數(shù)據的演化1.3開源軟件安全問題現(xiàn)狀隨著開源運動的發(fā)展,開源軟件的優(yōu)勢越來越受廣大軟件從業(yè)者的喜歡,這些閉源開發(fā)項目的錯誤或者代碼始終都是絕對保密的不可能將其公布出來,其中的一些軟件的安全錯誤或者一些代碼的安全問題很有可能會被其他的開發(fā)者有意無意的進行忽略或者有意悄悄的進行掩蓋。然后,開源軟件運動非常的有助于安全技術的廣泛應用與其發(fā)展,喜歡參與開源軟件運動的安全軟件開發(fā)的人員一般都實際上是非常的樂于學習與探索各種現(xiàn)有的安全技術,并非常的喜歡追求新的安全技術,如此軟件開發(fā)的風格往往這樣就可以使得軟件源代碼的質量與安全性逐漸的得到了改善。但是長期以來一些沒有參與到開源運動的人士對開源軟件的安全性和維護問題的理解是經常會有很多誤解的,其中的一個原因主要可能就是在其中的代碼公開、免費的使用以及難升級的維護等因素造成的。所以可以直接得出的一個結果是開源軟件和安全漏洞是沒有直接的聯(lián)系的,代碼是否公開并不代表軟件的安全性是否高低,其實開源軟件的安全高低等問題更多的還是在于開源軟件的系統(tǒng)架構,代碼的質量和軟件后續(xù)的升級維護等一些問題。展示獨特的開放源代碼的軟件開發(fā)和管理模式。社會開發(fā)模式截圖,如圖1-4所示。圖1-4社會化開發(fā)模式然后一個開源運動軟件的安全等級其實應該是比較好的,因為這一款開源運動軟件的所有源代碼全部公開的的提供給了市場上的用戶,所有的源代碼和技術細節(jié)對于所有的用戶來講都實際上是完全透明的,能夠為用戶做的測試只能是簡單的一個黑箱測試,而且這種沙箱測試往往是真的無法完全覆蓋到所有的源代碼情況,所以只有真正的開發(fā)源代碼,用戶往往才能徹底的去了解和檢測到源代碼的安全性,能夠徹底排除病毒木馬等的危害。最后在這里需要特別說明的是,一個成熟的商業(yè)開源軟件組織機構是至少擁有成千上萬的組織機構用戶在使用的,在這其中也不乏一些大型的政府事業(yè)組織和一些耳熟能詳?shù)纳虡I(yè)大公司,對于這些大型的組織和機構來講軟件的使用安全性這個問題尤其的重要,隨意任何當他在使用時發(fā)現(xiàn)的安全性問題都會在其第一時間就直接發(fā)布和處理出來,有了這些大型的組織和機構的大力支持,對于軟件的開發(fā)以及維護過程跟蹤、信息的發(fā)布和對缺陷的管理都無疑是十分有力的。相對而言,那些商用的組織機構閉源開發(fā)軟件因為其強大的商業(yè)性,當外部的研發(fā)管理人員在使用時發(fā)現(xiàn)了自己的軟件在使用中的一些缺陷和安全性問題但是還沒有得到解決時,為了更好的保證不可能地流失新的客戶量,一般的情況下都組織機構是不會將具體的安全性問題直接發(fā)布岀處理出來的,同時當外部的研發(fā)人員在使用時發(fā)現(xiàn)了這些缺陷問題由于組織機構沒有足夠的能力與客戶接觸得到非常好的源代碼,所以外部的人員根本無法沒有能力去發(fā)現(xiàn)和解決這些缺陷問題。1.4錯誤修正模式研究現(xiàn)狀當前的科技在不斷的進步,數(shù)據挖掘技術越來越廣泛的應用在生活中,比如銀行、保險、運輸和零售行業(yè)在數(shù)據挖掘技術的應用,發(fā)現(xiàn)問題,為決策提供了重要的支持。在軟件工程中數(shù)據挖掘技術已經存在了超過20年,有著悠久的歷史。軟件開發(fā)人員在軟件工程中使用數(shù)據挖掘技術可以改善軟件系統(tǒng)的維護效率,增加系統(tǒng)的穩(wěn)定性在所有方面。在軟件工程程序代碼分析、軟件項目管理、開發(fā)軟件和開源軟件的故障檢測是數(shù)據挖掘技術的應用。A.T.T.Ying用基于FP樹的關聯(lián)規(guī)則分析方法挖掘CVS代碼庫尋找那些經常一起發(fā)生變化的軟件實體。該作者選用深度優(yōu)先的FP樹方法挖掘頻繁項集,并進行了相關性規(guī)則挖掘用以提高準確率和算法效率。作者用兩種度量評價算法的價值,分別是有趣度和預測,其中興趣度又分三個等級,意外的、明顯的和無意義的。并在兩個開源的大型軟件Eclipse,Mozilla上做了實驗。該算法的兩個缺點是:僅處理布爾值(即只考慮文件是否被修改);只能處理文件粒度,不能處理更細的粒度,如變量、函數(shù)等。T.Zimmermann等是較早做關于挖掘軟件修改歷史模式研究的人,他們提出ROSETool。該工具也是用關聯(lián)規(guī)則Aprior算法挖掘CVS代碼庫,其優(yōu)點是可以處理變量和函數(shù)級別的粒度。由于Aprior算法候選項集特性的緣故,故它可能需要產生大量候選項集和掃描n次數(shù)據庫才能完成,所以在時間復雜度上比基于FP樹的關聯(lián)規(guī)則分析算法要局。鄭美玲認為,學習誤差有其必然性,在學習的過程中是不能夠逃避的。不同學習水平的學生的學習錯誤有特殊性和差異,需要有針對性的、個性化的教學,目前常見的背景下大量的教學、分層糾正錯誤有它們存在的意義和緊迫性。對不同水平學生的錯誤,宜采用不同的修正模型,如優(yōu)生自助誤差修正模型,中等共同誤差修正模型,修正的后進生。提出了一種簡單的方法通過提交軟件硏發(fā)時相關的軟件開發(fā)技術人員根據所提交的軟件源代碼運行日志數(shù)據來分析并追蹤相關軟件的缺陷產生與錯誤的消失。許家歡研究了程序自動修正方法,并設計了一個學生程序自動修正系統(tǒng),針對高校Java語言課程的編程練習,為學生提交的有缺陷的程序代碼提供修正方案。由于學生程序具有程序規(guī)模小、含有豐富的模板程序、程序中包含多個缺陷等特征,教師人工檢查大量學生程序的錯誤會耗費大量的時間和精力。目前現(xiàn)有的程序自動修正方法多為針對工業(yè)程序,且能夠修正的錯誤具有局限性,取決于變異算子的設計,以及現(xiàn)有修正方法大多只能修正程序中的單個錯誤,對于包含多個缺陷的程序則無法解決,且程序修正的準確性一般依賴于錯誤定位的準確性,故修正的時間效率較低,占用空間較大。王雪華等人,側重于自動糾錯技術,在糾錯系統(tǒng)需求分析的基礎上,主要完成了以下工作:剛開始通過正確的原始程序分析詞法語法和錯誤版本生成相應的抽象語法樹,利用相關技術獲得被測應用程序的執(zhí)行路徑,并隨機抽取其中失敗與成功的測試用例和執(zhí)行結果,測試用例,以減少變異測試成本的影響。然后通過使用Tarantula和Ochiai兩個錯誤定位技術,定位誤差,統(tǒng)計分析軟件,信息生成的執(zhí)行語句按可疑度排名,錯誤定位技術對整個糾錯效率的影響。然其次,為了定位誤差修正,本文把八個預設變異算子,根據一定比例變化程度的可疑的優(yōu)先級排名榜首的語句并生成變種。此外,通過利用TCC編譯器從測試用例執(zhí)行隨機變異,所有變量在測試用例執(zhí)行成功的驗證變異是潛在的修復。最后,設計實現(xiàn)了基于突變的糾錯系統(tǒng)測試,和SiemensSuite在標準測試套件設置到系統(tǒng)中行了測試,測試結果表明基于變異測試的方法對錯誤進行修正是有效的。1.5本文組織結構本文一共大概分為五章,每個主要操作章節(jié)的主要操作內容以及每一的章具體安排和操作方法概括如下。第一章主要重點關注了開源軟件的當前現(xiàn)狀以及在網絡中出現(xiàn)的安全現(xiàn)狀問題的重要理論研究。通過對各個因素的調研例如從當前國內開源企業(yè)社區(qū)應用軟件的代碼安全性研究發(fā)展史、開源社區(qū)的代碼安全性概念形成及其技術發(fā)展演化過程、代碼軟件安全性問題分析的研究工具和應用技術以及國相應領域開源社區(qū)軟件的代碼安全性分析研究熱點問題以及相關對策問題進行了深入闡述與針對案例進行分析。第二章的內容就是基于基于第一章的研究進而更深一層次的了解軟件歷史數(shù)據挖掘的現(xiàn)狀。通過幾個方面來進行分析和研究,例如從編碼,調試,測試等諸多方面來清晰的表明軟件歷史數(shù)據挖掘的現(xiàn)狀分析和研究。同時介紹了各個算法以及他所運用到的領域和限制性。第三章主要是對挖掘方法的研究。通過方法的總體框架進一步對算法有個更明確的研究。通過對開源軟件代碼質量問題的分析,同時分析了靜態(tài)代碼質量檢測,進而引出靜態(tài)軟件質量設計和分析的工具,能夠直接的對下一次所產生的軟件代碼設計和質量的分析。第四章是對是實驗結果進行分析,找出實驗數(shù)據,進行設計和分析,從不同的角度分析代碼質量問題,進而得出結論。對已經設計好的文本以及下一步的研究工作打好了基礎。第五章是對FP-Tree算法的介紹并且結合第三章的算法內容通過各方面的因素進行對比和分析。同時介紹實驗環(huán)境和數(shù)據以及算法的評價指標得出本次研究內容的結論。第2章軟件歷史數(shù)據挖掘的研究現(xiàn)狀分析在軟件工程生命周期將會產生大量的數(shù)據,數(shù)據通常存儲在代碼庫中。使用數(shù)據挖掘技術研究了軟件數(shù)據,發(fā)現(xiàn)數(shù)據中潛在的模型和預測的軟件開發(fā)的軟件,可以幫助軟件開發(fā)人員更好的理解系統(tǒng),為了提高系統(tǒng)的穩(wěn)定性,降低維修成本,縮短開發(fā)時間,通過各個方面進行研究。2.1應用于編碼的數(shù)據挖掘技術數(shù)據挖掘技術可以幫助編碼中的:API使用方法、軟件框架重用、源文件查找和程序規(guī)范等。AmirMichail提出用泛關聯(lián)規(guī)則挖掘技術發(fā)現(xiàn)軟件庫的復用模式的算法,例如大部分繼承了類Widget的類,都會覆寫Widget的成員函數(shù)Paint(),即是一種簡單的復用模式。該算法與“購物籃”關聯(lián)規(guī)則挖掘算法相似,只是表示方法不同,把與類或成員函數(shù)有關的行為稱為復用關系,這些復用關系即是項集,如上面的例子可以表示成:class_inherits:Widgetclass_overrides:Widget::paint()class_inherits:Widget表T的是被繼承的類,而class_overrides:Widget::paint()表T的是一種覆寫關系,Widget的成員函數(shù)paint()被覆寫。由于該算法會產生大量的規(guī)則,因此本文分別提出用全局剪枝和局部剪枝技術來處理候選項集。在全局剪枝中,提出三個剪枝度量:無意義的規(guī)則、錯誤的規(guī)則和統(tǒng)計上無意的規(guī)則。這種算法雖然可以發(fā)現(xiàn)五種復用關系:類的繼承,類的實例化,成員函數(shù)的調用,成員函數(shù)的覆寫和隱式調用關系的復用模式,但是它只能應用在面向對象語言上。所研究的這個內容可以理解成分類問題。并且數(shù)據挖掘技術在這個研究的內容上有著很多的解決方法。有的編碼問題可以根據文本的特點以及它所包含的內容信息進行相關的信息轉換,并且這個問題可以在很大的程度上實現(xiàn)相關的功能,為今后的編碼提供很大的幫助。2.2應用調試的數(shù)據挖掘技術軟件系統(tǒng)的調整主要是由開發(fā)人員手動完成,并一步一步的程序調試,是一個非常耗時的工作,特別是在軟件系統(tǒng)非常復雜。其主要任務是調試、分析和錯誤報告,定位軟件錯誤,修復bug可以使程序正確運行。數(shù)據挖掘的分類分析、貝葉斯統(tǒng)計理論和分層的應用程序更多的技術在這一領域的概念,如自動文本分類方法分類錯誤報告的應用這些技術可以減少程序員的工作。AndyPodgurski等人提出用分類技術對軟件錯誤進行自動分類的方法,把由同一種原因因此的錯誤歸為一類。本文的主要工作是對軟件系統(tǒng)中錯誤代碼進行優(yōu)先級劃分和檢測這些錯誤產生的原因,該方法是基于一種監(jiān)督學習的分類方法,把由同一種或相似的原因引起的錯誤歸為一類。假設一個軟件系統(tǒng)在某個時間段運行了n次,出現(xiàn)了m個錯誤,引起這m個錯誤產生的原因個數(shù)為k(通常遠遠小于m),把出現(xiàn)的錯誤記為F={f1,f2,那么存在以下對F劃分,F(xiàn)1,F(xiàn)2..使得對與1<i都有是由同一錯誤引起的,這樣的劃分稱為真實分類。算法分三個階段進行。首先收集軟件出現(xiàn)錯誤時的軌跡信息。其次把這些錯誤的軌跡信息和經過隨機取樣的正常運行時軌跡信息放在一起作為訓練集,對這些訓練集進行特征提取,利用這些特征構建能區(qū)分正常運行軌跡和錯誤運行軌跡的分類器,并選取全局最優(yōu)的特征。用聚類的方法對那些錯誤運行軌跡信息進行聚類,把具有與相關特征相似的歸為一類。2.3應用于測試的數(shù)據挖掘技術W.Dickinson等,提出一種有效的方法檢測錯誤的集群測試跟蹤操作。在該算法中,,作者使用了測試方法是基于觀察,選擇標準是跑道中的異常行為。他們聚集在其運行軌跡的自底向上的方法,首先每個最低運行的軌跡長度作為一個單元集群、原子簇會結合成更大的簇,直到滿足終止條件。在作為一個整體類簡單隨機抽樣;其次每次隨機選擇一個類的所有類內容;最后,所有類型的自適應抽樣集群。其他數(shù)據挖掘技術進行測試以及美國Hangal和M.S.Lam出了異常值檢測算法基于發(fā)現(xiàn)的bug。該算法可以幫助程序員跟蹤其原因產生的缺陷和錯誤。VDallmeier對象行為與其他挖掘方法ADABU;摩根富林明包榮基于控制流和數(shù)據流分類器改進分類算法軟件的行為;和H.Yuan和T.Xie的自動提取分支覆蓋算法狀態(tài)機等等。2.4版本控制信息的挖掘CVS,SVN等都是相關的版本控制系統(tǒng),他可以幫助修改程序的有序性,全局統(tǒng)一性等等。到目前有一些關于軟件開發(fā)相關的企業(yè)或者是它使用了大量的開源組織合并或組織軟件開發(fā)相關的活動?,F(xiàn)如今在版本控制信息上挖掘軟件的歷史變更大部分都是挖掘應用。同時還發(fā)現(xiàn)可以利用用不同程序之間模塊的邏輯依賴,去測試程序故障的相關引入方法,或者是找出能夠在以后出現(xiàn)的結果。通過重要的挖掘技術,能夠有效并且降低在以后系統(tǒng)維護的效率,有利于系統(tǒng)的逆向分析以及它的前瞻性,并且預防可能因為變更而導致的故障問題。在今后變更的預測中,它可以為項目的相關管理以及重要的決策提供參考數(shù)據。比較典型的做法就是在CVS這個版本控制上運用相關的挖掘算法來找到當前程序變化引起的變更,根據前面研究者的研究發(fā)現(xiàn),他們在這個基礎上面研究出了應用于版本控制信息挖掘Eclipse的插件系統(tǒng)Rose,這個系統(tǒng)擁有很強的挖掘能力,在粒度上除了文件的級別以外還很支持類和函數(shù)等相關級別之間的關聯(lián)分析的能力。故障所引起的挖掘情況可以為后期維護的軟件系統(tǒng)提供一個重要的警惕作用。通過相關的驗證,對歷史變化的故障率預測和常規(guī)代碼度量比較,前面的方法更加有效果,與此同時這個研究表明軟件在增長之后的故障數(shù)量將比原來的數(shù)量少三分之一。有一些挖掘工具可以在軟件修復歷史記錄里面可以挖掘出經常出現(xiàn)的錯誤模式,并且挖掘出來的結果可以幫助軟件開發(fā)者盡可能的躲避這些經常出現(xiàn)的錯誤的又一次的導入。除此之外,挖掘版本庫它所形成的相關知識可以幫助不同版本之間的程序的對比,然后找出互相匹配或者是近似代碼。2.5軟件歷史數(shù)據挖掘的價值在軟件過程中,由于它的數(shù)據具有特殊性,從而導致軟件工程中的數(shù)據挖掘技術將要面臨以下的幾個方面:數(shù)據復雜,非傳統(tǒng)分析以及挖掘結果評價標準。在數(shù)據挖掘的結果之上主要的目標就是為了能夠獲得重要的信息知識,研究的難點就表現(xiàn)在了數(shù)據的預處理以及如何去說明信息知識。有的主要工作僅僅限制為幾種關系,同時大量的數(shù)據源以及數(shù)據關系是沒有開發(fā)者研究的。可以將多個方面的數(shù)據源進行數(shù)據挖掘。每一個軟件根據不同的變化去發(fā)展,而且這種變化在外部功能中能夠體現(xiàn)同事還能夠在內部結構中體現(xiàn)。因為增加了軟件需求,擴展了軟件的開發(fā)工具以及細致化分,擴大了軟件開發(fā)團隊,軟件的開發(fā)周期也延長了。但是目前在軟件工程中挖掘出里的數(shù)據量并不是很多,通常都可以從一個大規(guī)模的軟件數(shù)據庫里面提取出部分數(shù)據。比如說利用Eclipse開源軟件里面的缺陷報告庫里面只能提取并且檢測一些缺陷研究報告。這就是因為目前算法的效率以及適用性問題。為了能夠解決這一系列的問題就需要使用數(shù)據預處理方法,主通過利用這個方法能夠將特征提取出來,在另一個當面可以開發(fā)更快速并且有意義的挖掘算法。一般性挖掘流程圖,如圖2-1所示。本章小結本章通過在軟件開發(fā)過程中一個重要的基礎理論,在各個方面進行了介紹,同時介紹了一個重要的理論基礎那就是數(shù)據挖掘。然后對代碼質量和性能進行迭代的研究,來設計和分析各個軟件開發(fā)者在軟件開發(fā)的過程中相應的專業(yè)設計和貢獻的專業(yè)代碼技術債務質量的水平和高低。在這個研究中,可以更好的了解重要知識內容,在結合之前所研究過的知識內容為以下的相關研究打好了良好的基礎。第3章錯誤修正模式挖掘方法研究軟件開發(fā)的人員越來越多的喜歡通過使用第三方軟件源代碼質量的靜態(tài)分析和度量的工具功能來提高自己的第三方代碼安全性和質量,所以在第三方開源靜態(tài)度量軟件的安全性和質量問題日益的受到程序員關注的巨大背景下,如何能夠讓更多的程序員在軟件開發(fā)的過程中能夠依靠第三方軟件源代碼質量的靜態(tài)分析和度量的工具功能來有效的提高其軟件安全性和源代碼的質量最終這無疑是一個巨大的機遇和挑戰(zhàn)。3.1方法的總體框架首先需要從數(shù)據倉庫中找出數(shù)據源,然后將數(shù)據源進行數(shù)據預處理。處理完之后就需要分析出代碼質量問題,獲取提交記錄。然后將這些記錄進行過濾,將一些不符合的數(shù)據過濾掉,下一步就需要將錯誤修正模式進行記錄,然后定位到代碼上面,將這些代碼進行靜態(tài)分析,找出軟件缺陷的數(shù)據,基于決策樹的算法將這些數(shù)據進行分類,最終輸出結果。方法的總體框架截圖,如圖3-1所示。圖3-1總體框架圖3.2決策樹分類算法在決策樹基本算法中,它是一種歸納分類算法,是通過學習訓練集,挖掘出有用的規(guī)則,用于預測新集。在決策樹形成的過程中,分區(qū)屬性選擇的指標是關鍵。通過屬性的選擇測量,選擇最佳的樣本分類的屬性。ID3算法,C4.5算法以及CART算法都屬于決策樹的分類算法,自上而下的遞歸方法來構造決策樹。所以在本次實驗設計中用到了ID3算法。由給定的訓練數(shù)據產生一棵判定樹。ID3算法截圖,如圖3-2所示。圖3-2ID3算法3.3代碼質量靜態(tài)分析分析軟件代碼質量的問題日益受到了關注,越來越多的軟件開發(fā)技術人員開始使用第三方的靜態(tài)軟件代碼的質量設計和分析的工具環(huán)境來設計和分析正在進行開發(fā)的靜態(tài)軟件代碼的質量,通過在本地搭建靜態(tài)代碼的質量設計和分析的工具環(huán)境設計人員能夠直接對下一代進行軟件代碼設計和質量的分析。展示了一個設計人員使用SonarQube來設計和分析軟件代碼設計和質量的問題后所需要展示的質量分析結果。SonarQube分析結果截圖,如圖3-3所示。圖3-3SonarQube分析結果從這張圖中可以清楚的看出,在開源代碼軟件中通過對開源代碼進行SonarQube的分析后,SonarQube系統(tǒng)會詳細的展示其需要分析的開源代碼質量問題的結果,更以更好地清楚了解現(xiàn)在所有的代碼質量現(xiàn)狀??梢缘目吹剿械拈_源代碼對于質星問題的分類都會被有相應的標記,與此同時對所有的開源代碼質量問題都會分別有一個相應的質量問題分類和對應的技術債務分級,來用于提示哪些開源代碼的質期債務問題已經變得比較嚴重或者質量問題急需解決。另外還有就是SonarQube還系統(tǒng)會對其需要檢測的開源代碼質量問題進行了技術債務的評級(一種類似于傳統(tǒng)的開源代碼技術債務評估的方法),技術債務越小說明代碼的質量越高,需要檢測和解決的質量問題越小。3.3.1代碼質量相關工作靜態(tài)代碼質量分析工具通過具體的代碼質量度量測試單元規(guī)范來通過掃描和分析相應的動態(tài)軟件測試單元源代碼,最后對每一個軟件的所有源代碼都進行質量的評估而且很多代碼質量相關的軟件動態(tài)代碼質量分析工具已經成為軟件開發(fā)人員在開發(fā)過程中進行評估和提高軟件代碼測試單元質量必不可少的重要工具了.同時由于可以通過使用各種靜態(tài)的代碼質量分析的工具結果來準確判斷新引入的軟件靜態(tài)代碼合格的程度,因此他正在鼓勵更多的軟件開發(fā)技術人員通過使用各種靜態(tài)的代碼質量分析工具的結果來準確區(qū)分和解決軟件中所有可能發(fā)生的質量分析問題。在解決軟件質量分析問題中,人為因素也是扮演著很重要的一個角色,bird等研究人之前在軟件Windowsvista和Windows7上有過大量的研究,研究結果表明專業(yè)軟件開發(fā)技術人員編寫新引入的軟件靜態(tài)代碼出現(xiàn)的質量分析問題的發(fā)生概率與其軟件開發(fā)工作經驗的可靠性有關,具有多年軟件開發(fā)工作經驗的專業(yè)軟件開發(fā)技術人員所編寫的質量分析代碼更加具有其規(guī)范性、安全性。3.3.2工具SonarQube在研究的過程中,軟件開發(fā)者在編寫,組織,搭建,調試以及不停的修改應用程序的時候將會應用到很多的工具,重要技術,框架以及工作流程,然而SonarQube它是一種開源代碼質量的管理工具,在最開始只是為了跟蹤Java的項目質量所編寫的,SonarQube可以使跟蹤,管理以及提升代碼質量形成高效的規(guī)范,同時還能實現(xiàn)最佳實踐以及被廣泛認可,同時為代碼質量,評審以及相關的補救提供了一個完善功能的綜合平臺。SonarQube可以利用插件的模式設計方式更快更方便的集成FindBugs,PMD,checkstyle,Cubertuna,jcoco等重要的工具,可以讓軟件項目代碼的靜態(tài)檢測得以實現(xiàn)。而且還可以通過配置相關的語言插件也就是可以支持對C,C++,C#,Cobol,Java,PHP等多種編程語言來進行相關的質量檢測。在另一個方面,例如對其他工具的支持,使用了統(tǒng)一的接口設計方法可以更好得被其他的平臺引用。使用持續(xù)的集成工具,還能夠利用Jenkins這個持續(xù)集成工具去使用SonarQube。得到了通用規(guī)范設計的思想,同時也獲得了國內外很多軟件開發(fā)者的關注目光,SonarQube同時支持了Eclipse以及IntellijIDEA開發(fā)的環(huán)境的SonarLint插件。SonarQube的代碼質量的管理體系大致上劃分為以下幾個方面:制定代碼質量規(guī)范標準,在企業(yè)內部對質量管理平臺的部署以及代碼質量的管理流程。從代碼的角度來衡量軟件系統(tǒng)的質量被稱作代碼質量。而SonarQube就是利用簡單的便于遵守的七大核心質量來陸續(xù)更改的源代碼的質量,其中包含設計以及架構,重復度,注釋比例單元測試質量,復雜度,潛在的漏洞以及編碼規(guī)范。SonarQube能夠與很好的企業(yè)所擁有的開源持續(xù)集成工具以及版本管理工具結合起來,利用持續(xù)集成工具來輔助,可以連續(xù)創(chuàng)建以及實施軟件測試。平臺是一種靜態(tài)的對軟件項目環(huán)境質量和代碼分析的工具,從本地開始搭建好項目環(huán)境并將所有需要靜態(tài)分析的項目代碼區(qū)域提交到一個SonarQube的平臺文件上去后,SonarQube平臺就開始自動對一個整體的項目環(huán)境和代碼區(qū)域進行了靜態(tài)的分析,當這個SonarQube通過掃描得到的代碼區(qū)域觸犯到了SonarQube自身文件中所定義的項目代碼和軟件質岸的規(guī)范時,SonarQube就一定會自動標記一個行號issue來進行詳細描述這個項目代碼區(qū)域的負責人違反了哪些關于項目代碼的規(guī)范,與此同時SonarQube平臺還會將這些所有關于issue的代碼詳細信息都自動存入文件到MySQL中展示出去,包括了行號,違反的是代碼規(guī)范和該代碼的項目負責人,最重要的是SonarQube還會對這個項目的issue的負責人進行一個代碼等級上的分類和判斷,SonarQube對于issue的代碼進行以下幾個重要的等級分類。1.blocked這個問題是代碼中等級最高的,已經出現(xiàn)了可以將一個issue級別定義為一個bug級別的修復這個問題,一般如果代碼中出現(xiàn)了這種的情況就可能意味著的代碼中已經出現(xiàn)了一些類似于內存連接被泄漏、數(shù)據庫連接未及時關閉等等的問題,同時也非常希望能有相應的工程師和軟件開發(fā)技術人員及時的發(fā)現(xiàn)和修復這個級別的問題。2.critical這個安全級別等級的問題數(shù)據分析表明,該類的issue類別級別問題可能會直接將其導致一些新的安全漏洞,軟件的安全性能不佳,而卻一些很有一定概率的問題可能會間接將其發(fā)展出來成為一個bug級別的安全等級問題。一般來講對于sql的注入,內存處理中的大量垃圾未及時進行回收等安全級別問題一般都會直接及時標記這種問題安全級別,相應的軟件工程師和其他軟件開發(fā)中的技術人員也都是應該及時的進行深入研究去進行了解和及時關注他在一個項目的源代碼執(zhí)行處理過程遭遇中的這個安全級別問題。3.major軟件代碼的生成質量存在漏洞,表明該軟件代碼的質量問題存在可能會極大的嚴重并會影響一個企業(yè)及其軟件開發(fā)者和技術人員的正常工作和技術生產力,一般都被企業(yè)認為可能是一些軟件代碼缺乏重復性和使用率過高的軟件代碼生成片段漏洞導致的。4.minor輕級的問題導致代碼質暈出現(xiàn)漏洞,這個是有問題的也會從一定的程度上直接影響整個軟件開發(fā)的穩(wěn)定性和效率,但是這個問題影響的范圍很大程度有限。5.info既不是錯誤或者缺陷也不是問題或者漏洞,只是簡單的表明一個代碼質量的問題。SonarQube對于一個代碼的準確性分級和結果準確性等級的劃分。SonarQube的分析結果展示截圖,如圖3-4所示。圖3-4SonarQube的分析結果展示本章小結本章第三章主要是錯誤修正模式的挖掘方法研究,這一章主要的內容與工作重點在于提出了一種簡單的方法通過提交軟件硏發(fā)時相關的軟件開發(fā)技術人員根據所提交的軟件源代碼運行日志數(shù)據來分析并追蹤相關軟件的缺陷產生與錯誤的消失。通過本章內容對SonarQube的相關研究,發(fā)現(xiàn)了它主要是通過建立一個標準的代碼來約束軟件開發(fā)者的相關代碼質量,通過對源代碼的靜態(tài)分析之后得出的分析將結果,同時通過介紹相關的理念來幫助軟件開發(fā)者提高代碼的質量。第4章實驗結果與分析該研究全面的分析項目中不同角色的開發(fā)人員所貢獻的代碼質量,并且得出很多有意思的結論,并為接下來的研究做好了鋪墊。對一個開源項目中的所有軟件開發(fā)人員所貢獻的代碼質量進行了代碼質量分析,然后統(tǒng)計分析了相應的軟件開發(fā)人員所有貢獻的代碼質量情況。4.1實驗數(shù)據在本章的第一個實驗中,從目前全球最大的開源代碼托管軟件開發(fā)平臺Github當中篩選了世界上參與實驗人數(shù)最多的開源代碼項目,相應的工程師和軟件開發(fā)技術人員在參與和開發(fā)這些項目時都是直接使用了Github來作為軟件版本的控制器。同時這些使用開源代碼托管軟件的都必須符合如下的條件。1.編程語言Java、JavaScript、Python2.本次項目沒有被fork3.創(chuàng)業(yè)項目必須要都是其所屬公司業(yè)務所屬的行業(yè)類目中銷量排名前十的4.提交次數(shù)提交次數(shù)范圍必須是100-20005.項目分析必須是可以被SonarQube正確的分析通過上述項目和條件然后經過篩選,從所有的GitHub上最終選擇21個優(yōu)質的開源軟件項目,其中6個Python項目,7個Java項目和8個優(yōu)質的JavaScript項目。從所有的Github上抽取并復制了所有經過篩選的開源項目的完整的軟件開源代碼,而且抽取了每個開源項目在軟件開發(fā)的過程中需要相應的代碼和軟件開發(fā)技術人員每次提交軟件開源代碼時需要上傳代碼描述信息,同時通過抽取Github項目所提供的api,還獲取了每個開源軟件項目相應的代碼和開發(fā)人員每次開發(fā)的記錄。當然每次獲取的代碼質量信息都可以在每個軟件的開發(fā)人員主頁上方便的找到。以下主要將對這些優(yōu)質的軟件開源項目在軟件和未來項目進行對代碼質量的分析,體現(xiàn)項目的具體代碼質量信息和細節(jié)。Github開源社區(qū)數(shù)據集類型以及規(guī)模表,如表4-1所示。表4-1Github開源社區(qū)數(shù)據集類型以及規(guī)模項目類型項目數(shù)量代碼提交次數(shù)Python631,106Java768,410JavaScript818,4104.2實驗設計實驗過程在開始之前,需要先對所有的SonarQube軟件安裝一個基于git的插件,還有三種語言的插件。本節(jié)通過之前文章中描述的最優(yōu)項目代碼質量的分析實驗算法對所有由git軟件所控制的最優(yōu)項目開發(fā)人員進行了版本的回退,同時對其進行了相應的軟件版本回退運用SonarQube算法掃描其中的代碼質量,統(tǒng)計項目開發(fā)人員在設計和開發(fā)整個軟件過程中的項目代碼執(zhí)行質量,主要的步驟和方法有以下幾個。步驟一:對協(xié)同開發(fā)項目過程中的所有的軟件開發(fā)人員電子郵箱進行代碼貢獻數(shù)據的統(tǒng)計,主要的方法就是通過釆用git命令對每一個項目中所有的每一個軟件開發(fā)工作人員的電子郵箱,代碼開發(fā)行為貢獻數(shù)據等進行代碼貢獻數(shù)據的統(tǒng)計。很多軟件開發(fā)技術人員在進行協(xié)同開發(fā)的項目時都已經習慣于使用自己的電子郵箱開發(fā)代碼作為自己的電子郵箱標記,在一開始就知道需要對每一個軟件開發(fā)技術人員的電子郵箱代碼貢獻量進行數(shù)據排名。步驟二:對每一個項目在軟件開發(fā)的過程中所提交產生的數(shù)據和日志進行了分析,通過git的提取命令將項目軟件開發(fā)的過程中每次日志提交產生的數(shù)據和日志全部都提取了出來:cl,c2,c3等;同時還需要對每次開發(fā)者提交使用源代碼時可能發(fā)生改動的源代碼和文件提交集進行詳細的記錄,由于一個成熟優(yōu)質的開源項目和軟件的整個開發(fā)周期往往長達數(shù)年,源代碼的版本和文件提交集數(shù)量也眾多,并且需要有數(shù)百名的軟件開發(fā)技術人員,所以必須對之前提取得出來的所有源代碼和軟件提交集進行了篩選,減少了需要需要多次掃描的文件版本次數(shù)。步驟三:對上一個遍歷步驟的代碼結果集文件進行遍歷。如果前后兩次代碼的提交結果集記錄所改動的結果集文件沒有第一次發(fā)生的代碼提交集,就將后面那次的提交結果集記錄與后面的第一次提交記錄的結果集繼續(xù)進行比較,直到兩次的代碼提交結果集記錄中已經修改的代碼文件結果集都有了第一次的交集,則再繼續(xù)記錄這次的提交記,如此將從原來的提交記錄集中重新篩選產生出新的代碼提交集:nc1,nc2,nc3等;的具體流程。步驟四:首先使用分析器SonarQube對每次篩選項目提取出來的每次分析結果提交的記錄都進行了質量跟蹤分析,并且MySQL將每次質量跟蹤分析的結果提交記錄取出并將其關聯(lián)到具體的篩選軟件開發(fā)項目的人員中,這樣就已經可以將篩選的項目中每個軟件開發(fā)人員的代碼以及質量跟蹤問題都進行了統(tǒng)計。4.3實驗結果及分析通過軟件開發(fā)的過程,對軟件開發(fā)工作人員的代碼貢獻量的分析和統(tǒng)計,本文將項目開發(fā)過程中的核心軟件開發(fā)工作人員基本上分成了兩類,第一類指的是普通軟件開發(fā)人員:項目中的代碼提交次數(shù)貢獻人員的數(shù)量通常是占項目軟件源代碼的總行數(shù)的百分之五以下或者項目中的代碼開發(fā)人員提交的次數(shù)通常小于5次;第二類是項目中的核心軟件開發(fā)人員:這類普通軟件開發(fā)工作人員的項目中代碼提交次數(shù)貢獻人員的數(shù)量通常是在百分之五以上而且項目中代碼提交的次數(shù)通常大于5次。通過以上的分析和規(guī)則,可以發(fā)現(xiàn),在本次選取的項目人員中有1596名普通軟件開發(fā)人員,有367名項目中的核心軟件開發(fā)人員,普通軟件開發(fā)人員的提交次數(shù)比例已經占到了81%。為了進一步研究普通的開發(fā)人員與其他一些核心等級的開發(fā)人員之間項目代碼質后的關系和差異,首先測量和比較了兩種級別的開發(fā)人員在不同核心等級的代碼質量問題平均的數(shù)量,可以發(fā)現(xiàn)除了info級別的質量是代碼問題,在其他的級別上普通的開發(fā)人員引入一個項目的過程中代碼質量的問題一般都遠遠多于一些核心等級的開發(fā)人員引入的項目質量是代碼問題。特別的在一些普通或更高級別的代碼質量問題上。核心開發(fā)人員與普通開發(fā)人員引入的平均質量問題數(shù)量截圖,如圖4-1所示。圖4-1核心開發(fā)人員與普通開發(fā)人員引入的平均質量問題數(shù)量blocked和critical,普通企業(yè)核心系統(tǒng)開發(fā)人員能夠解決實際問題累計引入的項目質量和能夠解決實際問題的項目數(shù)量一般都可以是普通企業(yè)核心系統(tǒng)開發(fā)人員的累計引入問題數(shù)量的三倍。所以這張圖中可以明顯發(fā)現(xiàn):在目前大規(guī)模的協(xié)同源代碼開發(fā)的市場背景下,一個成熟的協(xié)同開源項目中,普通的開發(fā)人員可能會接觸到比一個項目核心的開發(fā)人員直接引入的更多的是代碼復雜度和質量的問題,而且一些級別復雜度越高的代碼質量問題上普通的開發(fā)人員直接引入的代碼質量問題可能會更多。同時也詳細統(tǒng)計了普通的開發(fā)人員比較容易被觸犯的影響代碼設計質量的問題,圖中可以明顯發(fā)現(xiàn)5類影響代碼設計質量的問題最容易被普通的開發(fā)人員直接引入:convention(代碼設計規(guī)范的問題)、security(開發(fā)人員代碼安全設計規(guī)范問題)、error-handing(開發(fā)人員程序異常處理不當)、cwe(開發(fā)人員代碼的設計規(guī)范不合理)、brain(開發(fā)人員代碼復雜度過高)。由此也可以看出知道普通代碼開發(fā)人員的代碼主要問題就是不規(guī)范而且可能會給程序員帶來較多的代碼性能問題。普通開發(fā)人員引入的質量問題種類與比例截圖,如圖4-2所示。圖4-2普通開發(fā)人員引入的質量問題種類與比例接下來主要通過對SonarQube的代碼和技術質量債務來進行分析這些技術債務代碼的質量債務問題會如何直接影響涉及到軟件相應的開發(fā)軟件的技術債務質量,這里首先要給大家介紹一下技術債務sqale,是一套用來評估軟件代碼債務質量的基本方法。主要的思路是計算對應技術債務的時間占軟件開發(fā)所有代碼所需要的技術債務時間的大小比例(technicaldebtratio),并按照技術債務比例的多少和大小可以劃分出從a到d的技術債務等級。在設計的模型中,軟件性能的優(yōu)良主要是有以下幾個主要的方面來由設計決定的:readability(算法可讀性),Exception-handing(異常處理),logicreliability(邏輯可靠性),CPUefficiency(CPU效率),unitytestability(統(tǒng)一的可測試性),other(其他)。通過對于SonarQube的技術債務分析和結果進一步的研究,可以進一步了解考慮到這些對應的技術債務代碼issue,這些都會直接影響涉及到開發(fā)軟件相應的技術債務性能和各方面的技術債務問題,所以對于SonarQube的代碼質量債務進行分析。代碼質量影響到的代碼性能統(tǒng)計截圖,如圖3-3所示。圖4-3代碼質量影響到的代碼性能統(tǒng)計從這張圖中,可以明顯發(fā)現(xiàn)軟件代碼質量的問題直接影響軟件受到最多的還是軟件相應的代碼質量和可讀性,其次是代碼會直接影響到自帶軟件的異常發(fā)現(xiàn)和處理,然后是軟件整體設計和架構的邏輯性和保證軟件正常運行的穩(wěn)定性和能耗。在仔細觀察這個實驗的結果和數(shù)據集時,可以發(fā)現(xiàn)有一部分的專業(yè)軟件開發(fā)技術人員通常會同時參加幾個項目的軟件開發(fā),而且往往這些人員會在不同的軟件開發(fā)項目中扮演不同的軟件開發(fā)角色,這些因素驅使必須去觀察和驗證相同的軟件開發(fā)人員以及他是否在不同的軟件項目開發(fā)過程中的表現(xiàn)和編寫的開發(fā)代碼質量也是不一樣的。通過上述的實驗可以發(fā)現(xiàn),開發(fā)人員在不同的軟件開發(fā)項目中扮演不同的代碼管理角色時,其開發(fā)代碼的質量往往不會因此有太大的實質性變化。同時上述的研究結果在實驗總結中也分析了一些現(xiàn)在開源軟件項目中的普通軟件開發(fā)人員最容易被觸犯的是代碼出現(xiàn)質量的問題,從下表中可以清楚的看到,在一個軟件開發(fā)項目中普通軟件開發(fā)人員引入的代碼質量異常處理問題比例超過50%這是一個關于代碼質量規(guī)范的問題和異常處理的問題,隨后分別列舉了開發(fā)人員相應的最容易被觸犯的最高質量代碼問題和質量異常處理問題。普通開發(fā)人員最容易引入的質量問題統(tǒng)計表,如表4-2所示。表4-2普通開發(fā)人員最容易引入的質量問題統(tǒng)計類別名字破碎時間百分比嚴重程度語言Convention每個語句都應該以分號結束73,12239.6%minorJavaScript語句應該在單獨的行中31,9286.2%mionrJava方法名稱應該符合命名21,37323.4%minorPythonError-handing不應引發(fā)泛型異常87,51516.9%majorJava異常處理應保留原來的異常31,8766.2%croticalJava可拋錯誤不應被發(fā)現(xiàn)了12,3592.4%blockerJavaCweSenialable字段應該是可序列化的4,8721.0%criticalJava類變量字段不應具有公共訪問權限4,5360.9%majorJava廢棄的商店應該被刪除2,6300.5%majorJavaBrain函數(shù)不應該太復雜16,6619.0%majorJavaScript重載方法不應該太復雜13,0927.1%majorJava函數(shù)不應該太復雜7,1587.8%majorPython總共成功選取了29名特別合格符合條件的優(yōu)秀產品開發(fā)人員,這些特別合格的產品開發(fā)人員一般至少在兩個產品開發(fā)設計項目中分別成功扮演不同的產品開發(fā)經理角色。其中比如:artem-zinnatullin這位優(yōu)秀的產品開發(fā)人員在整個rxjava這個產品開發(fā)設計項目中分別只成功提交了25次的開發(fā)源代碼,而在這個項目中只有retrofit分別提交了和。khttp項目中分別只有提交了3次和4次的開放源代碼。這邊好像也有類似這種一個情況的。同樣可以清楚地發(fā)現(xiàn),軟件開發(fā)技術人員通過對不同的軟件開發(fā)項目中需要扮演不同的代碼開發(fā)管理角色時,他在不同的項目中需要引入的軟件代碼質量問題數(shù)量:與軟件代碼等級問題數(shù)量是差不多的,所以真正直接決定了軟件的代碼開發(fā)質量的還是取決于軟件開發(fā)技術人員本身??梢院苊黠@地發(fā)現(xiàn)當軟件開發(fā)人員在不同的項目中分別扮演不同的角色時,其平均項目中引入的相應角色代碼質量的問題應該是不會因為其在項目中相應開發(fā)人員角色的代碼質量變化而有可能引入相應太大的代碼質量變化,所以從這個問題是根據實驗結果從上圖中可以很明顯地發(fā)現(xiàn)一個軟件開發(fā)人員貢獻的平均代碼質量。軟件開發(fā)技術人員分別從其中選取了37組類似的測試例子樣本來作為本次測試的例子樣本,由于從其中選取的測試例子樣本問題數(shù)量比較小,分別釆用了T檢驗的方式對其來進行驗證,驗證的結果如下表所示。表4-3配對樣本統(tǒng)計NMeanStd.ErrormeanMain37.042.011Casual37.110.048表4-4配對樣本的相關性CorrelationSigMain&.034.842Main&CasualCasual表4-5配對樣本測試MeanStd.errormeanTSigMain-.049-0.168Casual.0691.405本章小結通過分析的結果可以明顯發(fā)現(xiàn),相對與其他的代碼問題和質量異常處理問題,代碼質量規(guī)范對于開發(fā)人員來說很難真正的去完全理解和遵守的。因此在開源社區(qū)一般開發(fā)人員都會建立有自己的一套開源代碼質量規(guī)范體系來用以幫助從事軟件開發(fā)的人員規(guī)范其他有貢獻的開源代碼。第5章研究方法對比與評價在這個過程中,介紹FP-Tree算法,利用實驗環(huán)境以及數(shù)據通過對比分析實驗進行比較分析,然后利用圖表直觀的表明哪類算法更加適合這個研究內容,得出最終結果,然后將最終結果進行評價分析。5.1FP-Tree挖掘算法建簡介在FP-Tree的算法上首先需要運用文獻的方法進行數(shù)據清理,然后將CVS中的文件通過CVS自帶的版本比較器進行解析,這就是CVS僅僅記錄修改過的文件和所發(fā)生變化的代碼行數(shù),F(xiàn)P-Tree算法改進了Apriori算法的I/O瓶頸,非常靈活的利用了樹結構,這樣可以聯(lián)想到BIRCH聚類,BIRCH聚類也是一樣的方法,巧妙的運用樹結構來加快算法的運行速度。通過利用內存數(shù)據結構以及空間所轉換的時間是常用的提高算法運行時間瓶頸的辦法。通過解析就可以把被修改過的軟件實體按照文件名、變量、函數(shù)等三個粒度提取出來。接著按照本文算法提取CVS每兩個歷史版本間的事務,最后用FP-Tree算法挖掘規(guī)則。FP-Tree算法步驟截圖,如圖5-1所示。圖5-1FP-Tree算法步驟5.2實驗環(huán)境及數(shù)據實驗的硬件環(huán)境如下,CPU為Inteli5-1035G1,內存為4G,硬盤為500GB;軟件環(huán)境為Windows2010,實驗用的軟件平臺是Eclipse,用Java語言編寫算法實現(xiàn)。與兩個大型的開源項目的CVS庫:Eclipse和Mozilla,這兩個開源項目事務數(shù)量較大。數(shù)據按時間段在CVS中選取,然后用在該時間段內不同的數(shù)據進行測試。算法用查準率和查全率兩個評價指標度量以下內容。1.預測修改位置即當程序員的修改某個軟件實體,算法是否能為其提供與之相關需要修改的軟件實體位置。2.粒度主要是

溫馨提示

  • 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
  • 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權益歸上傳用戶所有。
  • 3. 本站RAR壓縮包中若帶圖紙,網頁內容里面會有圖紙預覽,若沒有圖紙預覽就沒有圖紙。
  • 4. 未經權益所有人同意不得將文件中的內容挪作商業(yè)或盈利用途。
  • 5. 人人文庫網僅提供信息存儲空間,僅對用戶上傳內容的表現(xiàn)方式做保護處理,對用戶上傳分享的文檔內容本身不做任何修改或編輯,并不能對任何下載內容負責。
  • 6. 下載文件中如有侵權或不適當內容,請與我們聯(lián)系,我們立即糾正。
  • 7. 本站不保證下載資源的準確性、安全性和完整性, 同時也不承擔用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

評論

0/150

提交評論