開源軟件系統中社會技術網絡的協同演化探析論文
引言
近十多年來,復雜網絡理論研究逐漸得到深入和推廣,其應用非常廣泛,涉及社會學、生物、計算機等領域。在軟件工程領域,軟件系統尤其是大型軟件系統規模的持續增長引發系統復雜性的質變,許多大型軟件系統在內部結構、外部交互、演化方式等維度上表現出新特性。從結構方面,由于規模變大,從局部度量系統內部結構復雜性變得越來越困難,網絡思想有助于從全局的角度解決這一問題。根據軟件系統內部實體(如包,類、方法、組件等)間的依賴關系,將軟件系統抽象為一個網絡,即軟件網絡。從參與者角度而言,軟件系統的開發不再是單個精英團隊或專家所能完成,而是依靠大眾開發,利用群體智慧才能達到目標,是一個典型的“社會-技術”交融系統。技術層面分析主要是對已有軟件采用逆向工程方法抽象其組織結構,構建軟件網絡;社會層面分析主要是根據社區群體交互采用社會網絡分析方法,挖掘群體行為。復雜網絡與軟件工程的交叉研究,已引起了眾多學者的關注與認可,如李兵等基于軟件網絡的拓撲結構度量開源軟件系統的復雜性,提高軟件設計質量;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部分,首先利用我們團隊開發的聚焦爬蟲工具從Sourcforge.net網站爬取開源項目Vuze的郵件列表信息,并結合使用TortoiseSVN工具導出該項目的版本日志信息;根據網上提供的項目版本信息,使用Dependencyfinder工具解析源代碼構建軟件網絡,再根據所獲取的項目歷史信息構建開發者網絡;基于所得的軟件網絡與開發者網絡,進行協同演化分析。
1) 數據獲取。我們的工作需要具備獲取項目源代碼和修改日志相關信息的權限,所以選取開源軟件為實
驗對象。開源軟件Vuze(原名Azureus)是一款知名的采用BitTorrent協議的P2P文件共享客戶端軟件,可用于查找/下載種子文件。該軟件項目的開發信息都公開部署在開源平臺Sourceforge.net上,任何感興趣的開發者都可以為項目提供個人的貢獻。通常一個成功的開源軟件在其生命周期中都會有一系列版本,本文選取從版本4.3.1.0開始的10個連續版本作為演化分析對象,為便于描述,我們將版本V4310標記為1,依此類推版本V4502標記為10。
針對每個目標版本,我們先編譯源代碼并將編譯后的壓縮文件.zip導入dependencyFinder中,得到.xml解析文件;然后利用自行開發的工具分析.xml解析文件,獲取類之間的依賴關系并保存為.net網絡格式;最后利用網絡可視化工具Gephi即可呈現對應的軟件網絡。另外,我們根據對應版本的提交時間,有選擇地爬取項目的郵件列表信息與提交日志。我們先對開發者信息進行去重,例如Paul Gardner與P.Gardner實際上是指同一個開發者;以往在對郵件列表信息處理時,會發現同一個開發者使用多個郵箱進行交互的情況,而本次處理過程中并未發現此類情況。最后我們把在同一個線程出現和修改了同一個類文件的開發者間視為有一條合作連邊,構建無向非加權開發者網絡。
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網絡的“小世界”特性,一個修改任務可以很快分配到具備完成任務能力的人手中。
隨著需求的變動與運行環境的改變,軟件系統的結構會相應變動,而模塊度的波動是最直觀的體現。SDN網絡模塊度的演化可用于軟件重構,例如兩個版本間的模塊度大幅度下降意味著存在重構點。相對于SDN網絡,DCN網絡的抱團現象不明顯且波動較大,說明社區開發者更多的是小范圍的局部合作,整體上合作比較稀疏。眾所周知,這種合作不利于知識的傳播,所以可根據DCN網絡中模塊度的變化對社區成員合作進行協調,提供更多的交互渠道,建立開發者推薦和激勵方法。
通過對比STN網絡中DCN網絡與SDN網絡在一些指標上的演化,我們得到了一些有趣的發現,但本文也存在一些不足之處:首先,10個版本的時間跨度并不相等,我們僅以網上提供的提交時間為劃分基準,雖然在數據處理過程中不可避免會引入一些偏差,但實驗結果表明,這些小的偏差并沒有影響最終的演化分析,所以,文中的發現具有一定的代表性。其次,開發者的歷史信息只考慮了郵件列表和提交日期,針對開發者間的合作,我們假設參與同一個任務的開發者間存在合作,且構建的DCN網絡為無權網絡,無法呈現他們之間的合作次數。雖然DCN網絡的定義比較狹隘,但很多已有研究工作采用了這種基于“共事”關系構建DCN網絡的方法,并證實了這種DCN網絡的有效性。
5 總結與展望
隨軟件版本的更新,軟件網絡與開發者合作網絡的規模不斷增大,軟件網絡以3-4個版本為周期有規律地增長,而開發者合作網絡呈明顯的線性增長;兩類網絡的平均度均滿足近似線性增長,但整體上增長并不一致;它們均有“小世界”特性,且最短路徑都表現為階段性下降,但開發者間局部合作更明顯;它們的社區結構都不斷地變化,且整體上模塊度呈下降趨勢,但開發者合作網絡的變化更大。總之,我們的工作發現開源軟件系統的社會-技術網絡模型中兩類網絡既有共性又有差異,一定程度上既相互促進又相互影響。
我們的下一步工作將主要關注兩個方面:引入更多的版本,考慮不同語言(除Java之外)、不同規模的軟件系統作為研究對象,進一步驗證并豐富我們的結論;軟件網絡中類之間的依賴實際是有向帶權重的,開發者合作網絡中合作的次數也會對結果產生一定影響,因此,考慮邊的方向與權重,能使結論更貼近現實和更具一般性。
【開源軟件系統中社會技術網絡的協同演化探析論文】相關文章:
開源軟件聲明范本10-25
軟件技術專業論文致謝(通用8篇)04-20
軟件系統維護服務合同04-25
《離騷》中“澤”字注釋的探析11-11
管理軟件系統買賣合同05-28
軟件系統維護服務合同范本04-24
軟件管理系統買賣合同(6篇)04-02
軟件技術委托開發合同09-25
物業管理自考工作的探析論文09-23