沈熠
(吉林大學(xué)軟件學(xué)院 吉林省長(zhǎng)春市 130000)
現(xiàn)代軟件開發(fā)的規(guī)模和復(fù)雜程度隨著現(xiàn)代信息技術(shù)的不斷發(fā)展逐步增加,并且開發(fā)高質(zhì)量的軟件成為一項(xiàng)艱巨的任務(wù);同時(shí),軟件需求的變化對(duì)軟件開發(fā)周期的不斷縮短和軟件的快速迭代提出了更高的要求和挑戰(zhàn),與軟件的重復(fù)、擴(kuò)展和可靠性相關(guān)。針對(duì)當(dāng)前軟件開發(fā)中的困難,軟件工程師近幾十年來(lái)研究了新的軟件開發(fā)方法,如面向?qū)ο?、面向服?wù)、可信軟件項(xiàng)目和大型數(shù)據(jù)處理軟件項(xiàng)目。以群體智能為核心的軟件,其目的就是創(chuàng)造性的解決復(fù)雜的問(wèn)題,這是今年來(lái)軟件工程研究的重點(diǎn)。
群體智能的方法來(lái)自于群體內(nèi)智慧和行為的結(jié)合,這突出表明,在群體合作或競(jìng)爭(zhēng)中,整個(gè)群體比群體中的任何一個(gè)個(gè)體都能表現(xiàn)出更大的智慧,因此,一個(gè)個(gè)體群體可以是一群沒(méi)有智能或者智能相對(duì)簡(jiǎn)單的動(dòng)物,也可以是一群人本身。人類群體智能、機(jī)器群體智能和人機(jī)組合智能群體都屬于群體智能。
群體智能是由許多個(gè)體之間的合作和競(jìng)爭(zhēng)過(guò)程中形成的,它的主要優(yōu)勢(shì)在于,在處理復(fù)雜問(wèn)題方面增強(qiáng)了群體中的每一個(gè)體的智能,Winston 等人和Schutter 等人研究發(fā)現(xiàn)僅僅只有基本本能的個(gè)體在組成群體后,總的來(lái)說(shuō)可以表現(xiàn)出比他們中的任何一個(gè)個(gè)體都要高出很多的智能水平。這種與生物群有關(guān)的現(xiàn)象,促使人們提出各種復(fù)雜問(wèn)題的進(jìn)化優(yōu)化方案,并將其應(yīng)用于解決復(fù)雜的問(wèn)題。
盡管人類群體智能以表達(dá)的形式類似于解決諸如人群合作等問(wèn)題的一般方法,并且有不同的組織結(jié)構(gòu):很多人的交互通常采用集中的層次結(jié)構(gòu),而集群的智能依賴于軟件開發(fā)過(guò)程中的分布式個(gè)體。當(dāng)軟件的規(guī)模和復(fù)雜度達(dá)到一定的水平時(shí),僅僅增加幾個(gè)人的團(tuán)隊(duì)是不能提高軟件開發(fā)效率的。人類群體的智力是相對(duì)獨(dú)立和有組織的群體之間相互作用過(guò)程中的一系列復(fù)雜活動(dòng),隨著人口的增長(zhǎng),人類群體智能的智能水平也在提高。提高計(jì)算機(jī)輔助的效率使機(jī)器智能能夠在更廣泛的范圍內(nèi)尋求最佳解決方案;互聯(lián)網(wǎng)的迅速發(fā)展將使利用人類群體智能創(chuàng)造大規(guī)模的群體智能進(jìn)行開發(fā)軟件成為可能。
群體智能在很多問(wèn)題上都有廣泛的應(yīng)用,也被廣泛應(yīng)用于解決軟件開發(fā)過(guò)程中的復(fù)雜問(wèn)題?;谲浖O(shè)計(jì)、搜索軟件設(shè)計(jì)和開源軟件等一系列智能的軟件規(guī)劃,特別是基于搜索的SBSE 項(xiàng)目和BCE 項(xiàng)目是這一領(lǐng)域中兩個(gè)重要且相對(duì)成熟的研究方向。它們是機(jī)器群體智能和人類群體智能在軟件工程方面廣泛應(yīng)用的有效代表。本文將對(duì)此問(wèn)題進(jìn)行討論。
與傳統(tǒng)的問(wèn)題空間軟件不同,它是由算法設(shè)計(jì)的,SBSE 將對(duì)傳統(tǒng)的軟件技術(shù)問(wèn)題進(jìn)行優(yōu)化,并使用群體智能方法來(lái)尋找空間問(wèn)題的最佳解決方案。有關(guān)學(xué)者總結(jié)了SBSE 應(yīng)用的兩個(gè)先決條件:
(1)優(yōu)化問(wèn)題的表單表示;
(2)無(wú)論是研究對(duì)象,還是能夠確定適應(yīng)功能軟件不是物理主體的解決方案,虛擬性允許軟件開發(fā)的幾乎所有階段都以數(shù)學(xué)抽象的形式表示優(yōu)化。
此外,軟件領(lǐng)域的許多問(wèn)題都涉及到一套相互關(guān)聯(lián)、多種多樣的軟件度量標(biāo)準(zhǔn),這是一套前瞻性的初始適應(yīng)功能。軟件技術(shù)問(wèn)題的這兩個(gè)特點(diǎn)使得使用SBSE 解決軟件開發(fā)問(wèn)題成為可能,前提是它們可以用優(yōu)化的形式來(lái)表達(dá)。
眾包軟件工程是創(chuàng)造軟件制造解決問(wèn)題的重要手段。通過(guò)互聯(lián)網(wǎng)工具,軟件的技術(shù)問(wèn)題可以由合格的人員來(lái)解決。眾包軟件工程設(shè)計(jì)有三個(gè)主要任務(wù):基于互聯(lián)網(wǎng)的搜索系統(tǒng)、這個(gè)需求的作者和開發(fā)者可以是一個(gè)企業(yè),企業(yè)可以利用這個(gè)搜索平臺(tái)來(lái)完成自己的業(yè)務(wù),提高開發(fā)效率,節(jié)約成本。個(gè)人也可以通過(guò)搜索平臺(tái)來(lái)發(fā)布任務(wù),來(lái)幫助自己實(shí)現(xiàn)軟件開發(fā)?;贗nternet 的搜索平臺(tái)是一個(gè)關(guān)鍵的軟件搜索系統(tǒng),整個(gè)軟件搜索過(guò)程的業(yè)務(wù)邏輯都在他的管轄范圍,一個(gè)理想的眾包軟件平臺(tái)應(yīng)該包括開發(fā)在線軟件的環(huán)境和工具、知識(shí)共享和協(xié)作工具、質(zhì)量保證和改進(jìn)工具以及項(xiàng)目管理工具。如圖1所示。
水力壓裂技術(shù)可以使煤層中的含水飽和度增加,進(jìn)而減弱煤體結(jié)構(gòu)的強(qiáng)度數(shù)據(jù),使煤層之間的抗壓、抗拉強(qiáng)度均得到有效降低,這樣煤層開采的難度會(huì)減少很多,同時(shí)進(jìn)一步減少工作人員煤層開采的安全風(fēng)險(xiǎn)。
圖1:眾包軟件工程的3 類參與者
圖2顯示了使用一系列智能解決軟件開發(fā)問(wèn)題的一致框架。這一過(guò)程將一直持續(xù)到滿足某些停滯條件,并將在整個(gè)過(guò)程中找到最佳解決辦法,作為群體智能的最終結(jié)果。決策設(shè)計(jì)、決策評(píng)估和決策優(yōu)化是上述基于群體智能的項(xiàng)目下的三項(xiàng)關(guān)鍵任務(wù),它可以通過(guò)機(jī)器群體智能或人類群體智能來(lái)實(shí)現(xiàn)。當(dāng)這三項(xiàng)任務(wù)都是通過(guò)及其群體智能來(lái)完成時(shí),這就意味著及其群體智能層次基于群體智能的軟件項(xiàng)目;當(dāng)這三個(gè)任務(wù)都是利用人類群體智能來(lái)完成的時(shí)候,它們就是基于群體智能的項(xiàng)目,在人類群體智能的層次上;機(jī)器智能群體完成一部分任務(wù),人類群體智能完成另一部分的任務(wù),換言之,人類智能群體和機(jī)器智能群體相結(jié)合的基于群體智能的軟件工程。
圖2:基于群體智能的軟件工程方法統(tǒng)一框架
圖3顯示了利用群體智能方法解決軟件開發(fā)過(guò)程中復(fù)雜問(wèn)題的示意圖。為了自動(dòng)利用群體智能方法制造、評(píng)估和優(yōu)化候選軟件,首先需要以可計(jì)算和查看的形式對(duì)軟件進(jìn)行編碼,并提供索引作為候選解決方案,決定可能采取的解決辦法,即:在此基礎(chǔ)上,以進(jìn)化優(yōu)化算法為代表的機(jī)器群智能方法,通過(guò)引入適應(yīng)度函數(shù),自動(dòng)生成候選解。
圖3:利用機(jī)器群體智能進(jìn)行軟件工程問(wèn)題求解
圖4顯示了在軟件開發(fā)中使用人類群體智能所產(chǎn)生的問(wèn)題的解決方案示意圖。特別是管理平臺(tái)是形成群體智能的有效基礎(chǔ),開發(fā)者發(fā)布軟件項(xiàng)目并尋求解決方案,在這種情況下,軟件開發(fā)項(xiàng)目將經(jīng)歷一個(gè)迭代過(guò)程,導(dǎo)致決策、方案評(píng)估和選擇更合適的解決方案,直到請(qǐng)求人得到滿意的解決。在迭代過(guò)程中,出現(xiàn)了許多微項(xiàng)目,如提交解決問(wèn)題、評(píng)估其他解決方案等。一個(gè)理想的平臺(tái),加上得力的工具支持,為幫助較大規(guī)模的群體個(gè)體之間進(jìn)行協(xié)助和聯(lián)系群奠定了基礎(chǔ)。
圖4:利用人類群體智能進(jìn)行軟件工程問(wèn)題求解
至于那些難以用形式化描述或者形式化度量的軟件技術(shù)問(wèn)題,很難得到解決,也限制了機(jī)器群體智能的應(yīng)用;人類群體要求每個(gè)任務(wù)都有人類個(gè)體來(lái)完成,不能有效利用機(jī)器群體智能與人類群體智能相結(jié)合。圖5 為相應(yīng)解決方案的示意圖。有效結(jié)合機(jī)器群體智能和人類群體智能,利用人群的知識(shí)庫(kù)成為全自動(dòng)化間接機(jī)結(jié)合機(jī)器群體智能,以人機(jī)交互的形式解決軟件開發(fā)過(guò)程中遇到的問(wèn)題。
圖5:利用人機(jī)結(jié)合群體智能解決軟件工程問(wèn)題
“需求”工程是一個(gè)方法論概念,使技術(shù)人員在分析客戶需求的基礎(chǔ)上,了解問(wèn)題領(lǐng)域,確定目標(biāo)系統(tǒng)的功能特性,是軟件開發(fā)生命周期的關(guān)鍵要素。需求設(shè)計(jì)強(qiáng)調(diào)開發(fā)人員需要了解用戶需求,以減少開發(fā)過(guò)程中潛在的偏差和系統(tǒng)錯(cuò)誤;同時(shí),要監(jiān)測(cè)和應(yīng)對(duì)需求變化,降低需求變化的成本,提高生產(chǎn)效率。
目前,群體智能方法主要應(yīng)用在項(xiàng)目中的獲取需求和分析需求,表1 顯示了如何使用不同層次群體智能來(lái)滿足特定的項(xiàng)目需求。特別是機(jī)器群體智能在需求分析中的智能化主要用于解決需求沖突、協(xié)調(diào)需求、相互作用,需求選擇和需求管理;人類群體智能在獲取需求方面有著重要的作用,例如在識(shí)別需求、提取需求并分析需求。
表1:基于群體智能的需求工程相關(guān)研究
如表2所示,人類群體智能在軟件設(shè)計(jì)方面的研究并不多,主要涉及軟件概念的建模,UI 界面和網(wǎng)頁(yè)設(shè)計(jì)。人類群體智能在上述問(wèn)題上的應(yīng)用主要由兩個(gè)因素決定:
表2:基于群體智能的軟件設(shè)計(jì)相關(guān)研究
(1)在激勵(lì)作用下,大量的開發(fā)者給予自己的軟件開發(fā)方案,眾多軟件開發(fā)方案之間的競(jìng)爭(zhēng)會(huì)帶來(lái)一個(gè)目前的最優(yōu)設(shè)計(jì)方案;
(2)通過(guò)不斷探索人類群體智能形成的知識(shí)庫(kù),可以不斷優(yōu)化現(xiàn)有結(jié)構(gòu),從而達(dá)到近乎最優(yōu)的解決方案。
軟件構(gòu)建是以設(shè)計(jì)為目的的軟件設(shè)計(jì)過(guò)程,如何高效寫出告知交的代碼是軟件構(gòu)造所面臨的主要問(wèn)題。表3 顯示了一系列用于解決軟件構(gòu)建問(wèn)題的群體智能方法。其中,人類群體智能方法在故障診斷、程序優(yōu)化、自動(dòng)糾錯(cuò)等方面得到了應(yīng)用。這主要是因?yàn)檐浖_發(fā)人員眾多,開源代碼存儲(chǔ)和社區(qū)開發(fā)的快速發(fā)展將帶來(lái)大量的編程資源和經(jīng)驗(yàn),如代碼、文檔和測(cè)試等。同樣有了這些信息,群體智能能夠自動(dòng)有效地進(jìn)行程序優(yōu)化、軟件自動(dòng)修復(fù)等編碼問(wèn)題;人類和機(jī)器群體智能的結(jié)合對(duì)程序優(yōu)化和自動(dòng)修復(fù)有很好的效果。
表3:基于群體智能的軟件構(gòu)造相關(guān)研究
基于群體智能的智能軟件測(cè)試是現(xiàn)代IT 理論和軟件技術(shù)開發(fā)人員進(jìn)行工程科學(xué)研究的重要組成部分。軟件測(cè)試是一個(gè)通過(guò)查找和修復(fù)軟件中可能存在的潛在漏洞和錯(cuò)誤的過(guò)程,它與機(jī)器群體智能的實(shí)際應(yīng)用有著緊密的聯(lián)系,其中研究的以搜索為首的軟件測(cè)試是該研究方向的一個(gè)主要代表,也是SBSE 領(lǐng)域內(nèi)最常見、也是廣泛流行的研究領(lǐng)域之一。同時(shí),終端用戶對(duì)于軟件測(cè)試整個(gè)流程的參考亦是構(gòu)建人類群體智能研究框架所所面臨的一個(gè)迫切需要努力解決的熱點(diǎn)問(wèn)題,并且目前已經(jīng)在大數(shù)據(jù)眾包基礎(chǔ)上開發(fā)了多種不同的軟件測(cè)試方法。
表4展示了在軟件測(cè)試的過(guò)程中,人類體智能研究包括軟件測(cè)試和軟件驗(yàn)證,人類群體智能在軟件測(cè)試中包括用例生成、GUI 測(cè)試、Oracle 問(wèn)題 、性能測(cè)試和可用性測(cè)試等;機(jī)器群體智能方法被應(yīng)用于建立測(cè)試用例生成、排序驗(yàn)證、Oracle 問(wèn)題、圖形界面測(cè)試、性能測(cè)試、功能測(cè)試和回歸測(cè)試以及軟件建模;將人類智能與機(jī)器群體智能相結(jié)合,在創(chuàng)建測(cè)試腳本和Oracle 問(wèn)題方面取得了顯著的效果。人類群體在軟件驗(yàn)證過(guò)程中的錯(cuò)誤定位方面有一些應(yīng)用。
表4:基于群體智能的軟件測(cè)試相關(guān)研究
軟件演化和軟件文檔的更新包含在軟件維護(hù)階段。如表5所示,人類群體智能主要用于軟件的演化,機(jī)器群體智能則用于軟件演化、重構(gòu)和軟件模塊化,人類群體智能和機(jī)器群體智能相結(jié)合則用于軟件重構(gòu)中。Mariani 等人,總結(jié)了用于確定軟件構(gòu)件優(yōu)化重構(gòu)序列的搜索方法的共同特征,并討論了未來(lái)研究的可能性。
表5:基于群體智能的軟件維護(hù)相關(guān)研究
軟件重構(gòu)是一個(gè)提高程序性能以減緩其因更改而惡化的過(guò)程,它意味著改進(jìn)解決方案的結(jié)構(gòu)以便于理解。在軟件維護(hù)階段,將SBSE 放在軟件重構(gòu)重點(diǎn)問(wèn)題上,主要討論如何利用群體智能法改進(jìn)軟件開發(fā)過(guò)程,并對(duì)修改后的軟件進(jìn)行重組,以優(yōu)化其結(jié)構(gòu)。無(wú)論是重構(gòu)階段的選擇還是改進(jìn)軟件問(wèn)題階段,都可以轉(zhuǎn)化為搜索問(wèn)題在機(jī)器群體智能應(yīng)用中,力求尋找最佳解決方案。
基于群體智能的軟件技術(shù)已成為軟件研究的前沿和熱點(diǎn),具有良好的軟件開發(fā)和應(yīng)用前景。本文第一步提出了幾個(gè)主要概念為例,分別提出了一個(gè)包括機(jī)器群體智能、人類群體智能和人機(jī)組合群體智能的一個(gè)系統(tǒng)性框架,以便來(lái)實(shí)現(xiàn)基于群體智能的各種軟件工程開發(fā)手段。然后從軟件設(shè)計(jì)過(guò)程中各個(gè)階段,總結(jié)了上述三個(gè)維度的群體智能方法在各個(gè)軟件項(xiàng)目中運(yùn)用和應(yīng)用。