引言

近十多年來,復雜網絡理論研究逐漸得到深入和推廣,其應用非常廣泛,涉及社會學、生物、計算機等領域。在軟件工程領域,軟件系統尤其是大型軟件系統規模的持續增長引發系統復雜性的質變,許多大型軟件系統在內部結構、外部交互、演化方式等維度上表現出新特性。從結構方面,由于規模變大,從局部度量系統內部結構復雜性變得越來越困難,網絡思想有助于從全局的角度解決這一問題。根據軟件系統內部實體(如包,類、方法、組件等)間的依賴關系,將軟件系統抽象為一個網絡,即軟件網絡。從參與者角度而言,軟件系統的開發不再是單個精英團隊或專家所能完成,而是依靠大眾開發,利用群體智慧才能達到目標,是一個典型的“社會-技術”交融系統。技術層面分析主要是對已有軟件采用逆向工程方法抽象其組織結構,構建軟件網絡;社會層面分析主要是根據社區群體交互采用社會網絡分析方法,挖掘群體行為。復雜網絡與軟件工程的交叉研究,已引起了眾多學者的關注與認可,如李兵等基于軟件網絡的拓撲結構度量開源軟件系統的復雜性,提高軟件設計質量;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等應用社會網絡分析方法分別分析了分布式項目、合作網絡與涉眾投入關系、項目測試階段團隊的演化。
以上研究工作存在一個主要的不足:局限于單個網絡層面分析軟件系統中的演化問題,忽略了軟件系統的社會-技術一致性,以及開發者合作網絡與軟件網絡之間的相互影響。軟件是由人開發的,現實中,由于人員的動態調整,尤其是核心成員的變動,可能使得原有的設計方案受到影響,最后導致軟件結構發生變化。針對此類情況,僅從軟件網絡或開發者網絡的演化分析并不能全面反應實際軟件系統的演化問題。
本文來源:http://www.nvnqwx.com/shiyongwen/1657962.htm