當前位置:文書都 >

實用範文 >論文 >

開源軟件系統中社會技術網絡的協同演化探析論文

開源軟件系統中社會技術網絡的協同演化探析論文

引言

開源軟件系統中社會技術網絡的協同演化探析論文

近十多年來,複雜網絡理論研究逐漸得到深入和推廣,其應用非常廣泛,涉及社會學、生物、計算機等領域。在軟件工程領域,軟件系統尤其是大型軟件系統規模的持續增長引發系統複雜性的質變,許多大型軟件系統在內部結構、外部交互、演化方式等維度上表現出新特性。從結構方面,由於規模變大,從局部度量系統內部結構複雜性變得越來越困難,網絡思想有助於從全局的角度解決這一問題。根據軟件系統內部實體(如包,類、方法、組件等)間的依賴關係,將軟件系統抽象為一個網絡,即軟件網絡。從參與者角度而言,軟件系統的開發不再是單個精英團隊或專家所能完成,而是依靠大眾開發,利用羣體智慧才能達到目標,是一個典型的“社會-技術”交融系統。技術層面分析主要是對已有軟件採用逆向工程方法抽象其組織結構,構建軟件網絡;社會層面分析主要是根據社區羣體交互採用社會網絡分析方法,挖掘羣體行為。複雜網絡與軟件工程的交叉研究,已引起了眾多學者的關注與認可,如李兵等基於軟件網絡的拓撲結構度量開源軟件系統的複雜性,提高軟件設計質量;Bhattachary等根據軟件網絡中節點的重要性進行缺陷預測,為測試人員提供檢測優先順序;鑑於軟件拓撲結構的多粒度性,潘偉豐等分別從軟件包、類和方法3個粒度研究了開源軟件系統的演化特性。

軟件網絡的研究結合了複雜網絡和軟件工程理論,它以軟件系統的結構特徵為切入點,將複雜網絡的理論應用到軟件工程領域。持續演化是計算機軟件的固有特性,瞭解和發現軟件演化規律,有助於提高軟件產品質量,降低軟件開發和維護成本。針對軟件演化問題,Lehman提出8個典型的定律,涉及軟件的規模、質量、複雜度、生產率與開發過程等。目前,隨着軟件的網絡化趨勢越來越明顯,軟件與網絡的關係更加密不可分,用網絡的觀點來分析軟件演化,為軟件工程實踐提供了新的視角。然而,軟件開發是一個社會性(“人”)和技術性(“軟件”)匯聚的過程,很多已有研究只是從技術層面出發,探索了軟件系統技術維度的複雜性與應用。在軟件生命週期中,從需求獲取、到系統的設計與開發,以及後期維護等階段都離不開人的參與,即軟件系統的社會屬性。軟件的結構決定功能,而Conway定律指出系統的最終設計結構等同於設計系統的組織成員之間的交互結構。因此,一個軟件系統既是一個技術依賴的製品,也涉及一個社會交互的羣體,其網絡模型可抽象為一個社會-技術網絡。

軟件系統在不斷適應環境和需求變化的過程中持續演化,軟件演化作為一種技術,主要關心對軟件進行修改的方法;作為一種現象,主要關心誰驅動的演化以及演化效果如何。基於社會-技術網絡模型,本文嘗試從軟件演化分析角度探討社會-技術網絡中的協同演化問題,彌補已有研究工作只從單一網絡層面審視軟件的演化過程。本文采用類依賴關係描述軟件網絡,任務參與關係描述開發者網絡,基於複雜網絡度量研究與驗證開源軟件系統版本演化過程中存在的規律。本文的主要工作為:構建開源軟件系統的社會-技術網絡模型,統計開源軟件系統中軟件網絡與開發者網絡的網絡規模、平均度、最短路徑、聚類係數、社區結構網絡度量指標等;依次對比分析兩類網絡在10個軟件版本中網絡指標的演化趨勢,發掘它們演化規律的一致性與差異。

1 相關工作

Valverde等首次將複雜網絡方法引入軟件結構分析中,將軟件系統的類圖用無向網絡來表示,分析軟件網絡中的複雜網絡特性(如“小世界”和“無標度”),認為軟件開發中局部優化過程可能是導致軟件網絡呈現這些特性的原因。Valverde等還考慮了類之間的有向性,構建有向網絡對系統結構進行研究,發現除了以上特性外,軟件網絡同時具有層次性和模塊性。隨後,一些研究者從不同方面(開發語言、項目規模、分析粒度等)再次驗證了軟件網絡的諸多特性併成功應用於工程實踐。在軟件生命週期中,軟件處在一個不斷變化的環境(新需求、新應用環境、性能改進等)中,為適應環境軟件系統必須不斷演化。Jenkins等對軟件包之間的關係進行建模,分析一系列版本中軟件架構圖的結構穩定性。Wang等獲取了Linux kernel模塊233個版本的類調用網絡,研究軟件網絡的演化特性。李兵等將複雜網絡與演化算法相結合,提出一種新的軟件網絡演化模型,發現該方法能夠很好地刻畫實際軟件系統複雜網絡特性的湧現過程。潘偉豐等更是從包、類和方法3個粒度分析了軟件網絡中節點度、聚類係數、最短路徑等指標的演化特性。Businge等研究了Eclipse系統及相關插件的演化規律,發現結果基本滿足Lehman的8項目演化定律。

軟件開發團隊的演化對軟件質量也會帶來很大影響,研究開發者網絡的演化有助於更好地理解團隊成員在參與開發過程中的改變。Ngamkajornwiwat等使用社會網絡分析方法研究了KOffice項目開發者社區的演化。Hong等討論分析了開發者合作網絡中冪律分佈、模塊性和社區大小等屬性的演化。Datta等在IBM提供的Jazz平台上,將開發者合作網絡的平均最短路徑、聚集係數、巨型組件大小和平均度等指標與科學家合作網絡進行時間序列的演化對比。Kumar等研究了貢獻者數、社區大小、聚類係數等6個指標的演化。此外,Cataldo等、Lim等、Sharma等應用社會網絡分析方法分別分析了分佈式項目、合作網絡與涉眾投入關係、項目測試階段團隊的演化。

以上研究工作存在一個主要的不足:侷限於單個網絡層面分析軟件系統中的演化問題,忽略了軟件系統的社會-技術一致性,以及開發者合作網絡與軟件網絡之間的相互影響。軟件是由人開發的,現實中,由於人員的動態調整,尤其是核心成員的變動,可能使得原有的設計方案受到影響,最後導致軟件結構發生變化。針對此類情況,僅從軟件網絡或開發者網絡的演化分析並不能全面反應實際軟件系統的演化問題。

2 研究方法

本文的研究主要分為3部分,首先利用我們團隊開發的聚焦爬蟲工具從網站爬取開源項目Vuze的郵件列表信息,並結合使用TortoiseSVN工具導出該項目的版本日誌信息;根據網上提供的項目版本信息,使用Dependencyfinder工具解析源代碼構建軟件網絡,再根據所獲取的項目歷史信息構建開發者網絡;基於所得的軟件網絡與開發者網絡,進行協同演化分析。

1) 數據獲取。我們的工作需要具備獲取項目源代碼和修改日誌相關信息的權限,所以選取開源軟件為實

驗對象。開源軟件Vuze(原名Azureus)是一款知名的採用BitTorrent協議的P2P文件共享客户端軟件,可用於查找/下載種子文件。該軟件項目的開發信息都公開部署在開源平台上,任何感興趣的開發者都可以為項目提供個人的貢獻。通常一個成功的開源軟件在其生命週期中都會有一系列版本,本文選取從版本開始的10個連續版本作為演化分析對象,為便於描述,我們將版本V4310標記為1,依此類推版本V4502標記為10。

針對每個目標版本,我們先編譯源代碼並將編譯後的壓縮文件導入dependencyFinder中,得到解析文件;然後利用自行開發的工具分析解析文件,獲取類之間的依賴關係並保存為網絡格式;最後利用網絡可視化工具Gephi即可呈現對應的軟件網絡。另外,我們根據對應版本的提交時間,有選擇地爬取項目的郵件列表信息與提交日誌。我們先對開發者信息進行去重,例如Paul Gardner與ner實際上是指同一個開發者;以往在對郵件列表信息處理時,會發現同一個開發者使用多個郵箱進行交互的情況,而本次處理過程中並未發現此類情況。最後我們把在同一個線程出現和修改了同一個類文件的開發者間視為有一條合作連邊,構建無向非加權開發者網絡。

2) 網絡模型。軟件網絡模型:根據選取的粒度不同,常用的軟件網絡有包級軟件網絡、類級軟件網絡和方法級軟件網絡。考慮到包級粒度過於粗糙而方法級粒度一定程度上太細會加重數據處理負擔,本文所使用的網絡是基於類之間依賴關係的軟件網絡(Software Dependency Network,簡稱SDN),定義為:Gc=(Vc,Ec),其中Vc為節點集,即為開源軟件中所有的類和接口;Ec為節點對之間的邊集,即為對象之間的關聯關係。在CDN中,4種情況下類A與類B之間被視為存在關聯關係:類A與類B之間有繼承關係;類A與接口B之間有實現關係;類A中有類B的變量;類A中的`方法調用了類B對象。在軟件實現中,類之間的依賴關係是有向的,而考慮到開發者合作的相互性,我們的軟件網絡為無向非加權網絡,即類A與類B之間只有存在以上4種關係中的至少一種便有eab=1,否則eab=0。關於軟件網絡的詳細介紹,推薦感興趣的讀者參考我們之前的工作。

開發者網絡模型:開源軟件社區中的開發者大部分是來自世界各地的志願者,他們加入一個開源軟件的開發主要是為了增加開發經驗和體檢虛擬團隊合作的樂趣,通過共享創意、信息交互體現羣體智慧在軟件開發過程中的作用。開發者可以通過各種交互渠道,如郵件列表、版本控制工具CVS/SVN/Git、Bug庫和論壇等,來實現交互。在構建開發者合作網絡(Developer Collaboration Network,簡稱DCN)過程中,用Gd=(Vd,Ed)表示一個開發者網絡,其中Vd代表參與項目的開發者,Ed為開發者之間的合作,即若開發者C 與開發者D 參與了同一任務(包括bug修復,功能改進)則被視為存在一條合作連邊ecd=1,否則ecd=0。本文沒有考慮兩個開發者間的合作次數。

3 演化分析

3.1 節點與邊的協同演化

網絡的節點數與邊數直接反映了一個網絡的規模,一個開源軟件系統的軟件網絡節點代表系統中類的個數,而邊代表類之間的依賴關係,功能越多類越多,邊越多系統越複雜。因此,軟件網絡規模的變化能夠體現軟件系統內部結構複雜性的變化。與軟件網絡相對應,開源社區開發者合作網絡中節點代表參與的社區開發者,開源社區中的開發者可自由選擇感興趣的項目,因此節點規模間接反映項目的受歡迎程度;開發者間的合作緊密程度可通過網絡的連邊進行體現,邊越多表示開發者間合作越緊密,加權網絡中邊的權重還可表示合作的頻率。已有研究關注開發者潛在合作同行的推薦,以緩解合作的稀疏性。

為分析兩類網絡節點與邊的演化情況,分別給出了它們在10個版本中的變化趨勢,其中橫軸表示每個版本對應的版本序列號(1-10),縱軸表示對應的指標值。顯示SDN網絡與DCN網絡的節點數均隨時間不斷增多,只是增長趨勢有所不同。SDN網絡中節點與邊的增長在一定週期內幅度很小,之後存在一個大的增加,隨後又保持相對穩定,如版本1-3,4-7,8-10這3個階段增長幅度很少,可能的解釋是這些階段主要負責系統的維護工作,無新的功能添加;而3-4,7-8之間卻有一個大幅度的增長,分別增加了90和98個類文件,説明在這兩個階段版本間有新的功能添加。SDN網絡規模的演化也表明大致3-4個版本週期後會有一次大的更新。

雖然同樣呈增長趨勢,但DCN網絡與SDN網絡的演化趨勢明顯存在差異。首先,開發者數量線性增長更明顯,不存在週期性增長的現象,其中一個主要原因可能與開源社區的零散、自由的鬆耦合合作方式有關,感興趣的開發者任何時刻都可以參與項目提供貢獻,這種自願性使得項目成員隨時間一直增長,經歷10個版本,開發者數由原來的38人增加到144人。其次,DCN 網絡中邊的增長幅度相對更緩慢,説明合作並不緊密;在版本6-9期間,網絡的合作僅增加了18。需要注意的是,DCN網絡中開發者既可以自由加入,同樣可以隨時離開,所以這裏的增長都是相對前一個時間段而言。

實驗結果表明:DCN網絡與SDN網絡的規模隨時間均滿足持續增長規律,只是SDN網絡節點與邊的增長趨勢表現出一定的週期性,而DCN網絡的線性增長趨勢更明顯,但節點與邊增長不同步。

4 討論

很明顯,DCN網絡與SDN網絡的規模差別甚大,他們的演化方式也不同。一個成型的軟件系統在維護過程中僅需修改少量的模塊,而開發人員變化可能更大。開源社區中開發者往往分佈在世界各地,不受時間、地域和文化等因素的約束,任何有能力的個人都可以提供問題的解決方案,甚至一些開發者只是在某一個版本中做出貢獻,在以後的版本中都不加參與。這種“低門檻”正是為什麼DCN網絡節點呈明顯的線性增長的一個主要原因。軟件系統的每個版本並不會一直有新的功能添加,有些版本只是修改上一版本中存在的缺陷問題,這種修復工作一般不會導致網絡規模的明顯變化。另外,SDN網絡規模與DCN網絡規模並不成正比,表明開發團隊的壯大並不會直接影響系統內部結構的複雜性。

平均度〈k〉可反映一個網絡中節點的平均連接程度,在軟件工程實踐中,SDN網絡〈k〉有助於項目負責人根據需要對新建與維護的工作量進行成本預測,DCN網絡〈k〉可為評估項目完成時間與團隊協調代價提供參考;加上SDN網絡與DCN網絡最短路徑均小於6,聚類係數較大且隨時間還有不同程度的增大,説明在STN網絡中,儘管SDN網絡與DCN網絡的一些指標增長並不同步,但隨着時間的變化,兩類網絡中節點的直接或間接的關聯關係會越來越明顯。根據開發者的開發歷史信息與DCN網絡的“小世界”特性,一個修改任務可以很快分配到具備完成任務能力的人手中。

  • 文章版權屬於文章作者所有,轉載請註明 https://wenshudu.com/shiyongfanwen/lunwen/p478mx.html
專題