沈熠
(吉林大學軟件學院 吉林省長春市 130000)
現代軟件開發的規模和復雜程度隨著現代信息技術的不斷發展逐步增加,并且開發高質量的軟件成為一項艱巨的任務;同時,軟件需求的變化對軟件開發周期的不斷縮短和軟件的快速迭代提出了更高的要求和挑戰,與軟件的重復、擴展和可靠性相關。針對當前軟件開發中的困難,軟件工程師近幾十年來研究了新的軟件開發方法,如面向對象、面向服務、可信軟件項目和大型數據處理軟件項目。以群體智能為核心的軟件,其目的就是創造性的解決復雜的問題,這是今年來軟件工程研究的重點。
群體智能的方法來自于群體內智慧和行為的結合,這突出表明,在群體合作或競爭中,整個群體比群體中的任何一個個體都能表現出更大的智慧,因此,一個個體群體可以是一群沒有智能或者智能相對簡單的動物,也可以是一群人本身。人類群體智能、機器群體智能和人機組合智能群體都屬于群體智能。
群體智能是由許多個體之間的合作和競爭過程中形成的,它的主要優勢在于,在處理復雜問題方面增強了群體中的每一個體的智能,Winston 等人和Schutter 等人研究發現僅僅只有基本本能的個體在組成群體后,總的來說可以表現出比他們中的任何一個個體都要高出很多的智能水平。這種與生物群有關的現象,促使人們提出各種復雜問題的進化優化方案,并將其應用于解決復雜的問題。
盡管人類群體智能以表達的形式類似于解決諸如人群合作等問題的一般方法,并且有不同的組織結構:很多人的交互通常采用集中的層次結構,而集群的智能依賴于軟件開發過程中的分布式個體。當軟件的規模和復雜度達到一定的水平時,僅僅增加幾個人的團隊是不能提高軟件開發效率的。人類群體的智力是相對獨立和有組織的群體之間相互作用過程中的一系列復雜活動,隨著人口的增長,人類群體智能的智能水平也在提高。提高計算機輔助的效率使機器智能能夠在更廣泛的范圍內尋求最佳解決方案;互聯網的迅速發展將使利用人類群體智能創造大規模的群體智能進行開發軟件成為可能。
群體智能在很多問題上都有廣泛的應用,也被廣泛應用于解決軟件開發過程中的復雜問題?;谲浖O計、搜索軟件設計和開源軟件等一系列智能的軟件規劃,特別是基于搜索的SBSE 項目和BCE 項目是這一領域中兩個重要且相對成熟的研究方向。它們是機器群體智能和人類群體智能在軟件工程方面廣泛應用的有效代表。本文將對此問題進行討論。
與傳統的問題空間軟件不同,它是由算法設計的,SBSE 將對傳統的軟件技術問題進行優化,并使用群體智能方法來尋找空間問題的最佳解決方案。有關學者總結了SBSE 應用的兩個先決條件:
(1)優化問題的表單表示;
(2)無論是研究對象,還是能夠確定適應功能軟件不是物理主體的解決方案,虛擬性允許軟件開發的幾乎所有階段都以數學抽象的形式表示優化。
此外,軟件領域的許多問題都涉及到一套相互關聯、多種多樣的軟件度量標準,這是一套前瞻性的初始適應功能。軟件技術問題的這兩個特點使得使用SBSE 解決軟件開發問題成為可能,前提是它們可以用優化的形式來表達。
眾包軟件工程是創造軟件制造解決問題的重要手段。通過互聯網工具,軟件的技術問題可以由合格的人員來解決。眾包軟件工程設計有三個主要任務:基于互聯網的搜索系統、這個需求的作者和開發者可以是一個企業,企業可以利用這個搜索平臺來完成自己的業務,提高開發效率,節約成本。個人也可以通過搜索平臺來發布任務,來幫助自己實現軟件開發。基于Internet 的搜索平臺是一個關鍵的軟件搜索系統,整個軟件搜索過程的業務邏輯都在他的管轄范圍,一個理想的眾包軟件平臺應該包括開發在線軟件的環境和工具、知識共享和協作工具、質量保證和改進工具以及項目管理工具。如圖1所示。
水力壓裂技術可以使煤層中的含水飽和度增加,進而減弱煤體結構的強度數據,使煤層之間的抗壓、抗拉強度均得到有效降低,這樣煤層開采的難度會減少很多,同時進一步減少工作人員煤層開采的安全風險。

圖1:眾包軟件工程的3 類參與者
圖2顯示了使用一系列智能解決軟件開發問題的一致框架。這一過程將一直持續到滿足某些停滯條件,并將在整個過程中找到最佳解決辦法,作為群體智能的最終結果。決策設計、決策評估和決策優化是上述基于群體智能的項目下的三項關鍵任務,它可以通過機器群體智能或人類群體智能來實現。當這三項任務都是通過及其群體智能來完成時,這就意味著及其群體智能層次基于群體智能的軟件項目;當這三個任務都是利用人類群體智能來完成的時候,它們就是基于群體智能的項目,在人類群體智能的層次上;機器智能群體完成一部分任務,人類群體智能完成另一部分的任務,換言之,人類智能群體和機器智能群體相結合的基于群體智能的軟件工程。

圖2:基于群體智能的軟件工程方法統一框架
圖3顯示了利用群體智能方法解決軟件開發過程中復雜問題的示意圖。為了自動利用群體智能方法制造、評估和優化候選軟件,首先需要以可計算和查看的形式對軟件進行編碼,并提供索引作為候選解決方案,決定可能采取的解決辦法,即:在此基礎上,以進化優化算法為代表的機器群智能方法,通過引入適應度函數,自動生成候選解。

圖3:利用機器群體智能進行軟件工程問題求解
圖4顯示了在軟件開發中使用人類群體智能所產生的問題的解決方案示意圖。特別是管理平臺是形成群體智能的有效基礎,開發者發布軟件項目并尋求解決方案,在這種情況下,軟件開發項目將經歷一個迭代過程,導致決策、方案評估和選擇更合適的解決方案,直到請求人得到滿意的解決。在迭代過程中,出現了許多微項目,如提交解決問題、評估其他解決方案等。一個理想的平臺,加上得力的工具支持,為幫助較大規模的群體個體之間進行協助和聯系群奠定了基礎。

圖4:利用人類群體智能進行軟件工程問題求解
至于那些難以用形式化描述或者形式化度量的軟件技術問題,很難得到解決,也限制了機器群體智能的應用;人類群體要求每個任務都有人類個體來完成,不能有效利用機器群體智能與人類群體智能相結合。圖5 為相應解決方案的示意圖。有效結合機器群體智能和人類群體智能,利用人群的知識庫成為全自動化間接機結合機器群體智能,以人機交互的形式解決軟件開發過程中遇到的問題。

圖5:利用人機結合群體智能解決軟件工程問題
“需求”工程是一個方法論概念,使技術人員在分析客戶需求的基礎上,了解問題領域,確定目標系統的功能特性,是軟件開發生命周期的關鍵要素。需求設計強調開發人員需要了解用戶需求,以減少開發過程中潛在的偏差和系統錯誤;同時,要監測和應對需求變化,降低需求變化的成本,提高生產效率。
目前,群體智能方法主要應用在項目中的獲取需求和分析需求,表1 顯示了如何使用不同層次群體智能來滿足特定的項目需求。特別是機器群體智能在需求分析中的智能化主要用于解決需求沖突、協調需求、相互作用,需求選擇和需求管理;人類群體智能在獲取需求方面有著重要的作用,例如在識別需求、提取需求并分析需求。

表1:基于群體智能的需求工程相關研究
如表2所示,人類群體智能在軟件設計方面的研究并不多,主要涉及軟件概念的建模,UI 界面和網頁設計。人類群體智能在上述問題上的應用主要由兩個因素決定:

表2:基于群體智能的軟件設計相關研究
(1)在激勵作用下,大量的開發者給予自己的軟件開發方案,眾多軟件開發方案之間的競爭會帶來一個目前的最優設計方案;
(2)通過不斷探索人類群體智能形成的知識庫,可以不斷優化現有結構,從而達到近乎最優的解決方案。
軟件構建是以設計為目的的軟件設計過程,如何高效寫出告知交的代碼是軟件構造所面臨的主要問題。表3 顯示了一系列用于解決軟件構建問題的群體智能方法。其中,人類群體智能方法在故障診斷、程序優化、自動糾錯等方面得到了應用。這主要是因為軟件開發人員眾多,開源代碼存儲和社區開發的快速發展將帶來大量的編程資源和經驗,如代碼、文檔和測試等。同樣有了這些信息,群體智能能夠自動有效地進行程序優化、軟件自動修復等編碼問題;人類和機器群體智能的結合對程序優化和自動修復有很好的效果。

表3:基于群體智能的軟件構造相關研究
基于群體智能的智能軟件測試是現代IT 理論和軟件技術開發人員進行工程科學研究的重要組成部分。軟件測試是一個通過查找和修復軟件中可能存在的潛在漏洞和錯誤的過程,它與機器群體智能的實際應用有著緊密的聯系,其中研究的以搜索為首的軟件測試是該研究方向的一個主要代表,也是SBSE 領域內最常見、也是廣泛流行的研究領域之一。同時,終端用戶對于軟件測試整個流程的參考亦是構建人類群體智能研究框架所所面臨的一個迫切需要努力解決的熱點問題,并且目前已經在大數據眾包基礎上開發了多種不同的軟件測試方法。
表4展示了在軟件測試的過程中,人類體智能研究包括軟件測試和軟件驗證,人類群體智能在軟件測試中包括用例生成、GUI 測試、Oracle 問題 、性能測試和可用性測試等;機器群體智能方法被應用于建立測試用例生成、排序驗證、Oracle 問題、圖形界面測試、性能測試、功能測試和回歸測試以及軟件建模;將人類智能與機器群體智能相結合,在創建測試腳本和Oracle 問題方面取得了顯著的效果。人類群體在軟件驗證過程中的錯誤定位方面有一些應用。

表4:基于群體智能的軟件測試相關研究
軟件演化和軟件文檔的更新包含在軟件維護階段。如表5所示,人類群體智能主要用于軟件的演化,機器群體智能則用于軟件演化、重構和軟件模塊化,人類群體智能和機器群體智能相結合則用于軟件重構中。Mariani 等人,總結了用于確定軟件構件優化重構序列的搜索方法的共同特征,并討論了未來研究的可能性。

表5:基于群體智能的軟件維護相關研究
軟件重構是一個提高程序性能以減緩其因更改而惡化的過程,它意味著改進解決方案的結構以便于理解。在軟件維護階段,將SBSE 放在軟件重構重點問題上,主要討論如何利用群體智能法改進軟件開發過程,并對修改后的軟件進行重組,以優化其結構。無論是重構階段的選擇還是改進軟件問題階段,都可以轉化為搜索問題在機器群體智能應用中,力求尋找最佳解決方案。
基于群體智能的軟件技術已成為軟件研究的前沿和熱點,具有良好的軟件開發和應用前景。本文第一步提出了幾個主要概念為例,分別提出了一個包括機器群體智能、人類群體智能和人機組合群體智能的一個系統性框架,以便來實現基于群體智能的各種軟件工程開發手段。然后從軟件設計過程中各個階段,總結了上述三個維度的群體智能方法在各個軟件項目中運用和應用。