徐立鑫 吳化堯
(計(jì)算機(jī)軟件新技術(shù)國家重點(diǎn)實(shí)驗(yàn)室(南京大學(xué)) 南京 210023)(141270043@smail.nju.edu.cn)
隨著信息技術(shù)的飛速發(fā)展,現(xiàn)代軟件的規(guī)模和復(fù)雜度正不斷提高,開發(fā)高質(zhì)量的軟件已成為一項(xiàng)困難的工作;而軟件需求的不斷變化、開發(fā)周期的持續(xù)縮短以及軟件產(chǎn)品的快速迭代更是對(duì)軟件的可重用性、可擴(kuò)展性和可靠性提出了更高的要求和挑戰(zhàn).為了應(yīng)對(duì)當(dāng)前軟件開發(fā)面臨的困境,軟件工程領(lǐng)域的學(xué)者近幾十年來一直在不斷探索新的軟件開發(fā)方法,形成了面向?qū)ο筌浖こ蹋?]、面向服務(wù)軟件工程[2]、網(wǎng)構(gòu)軟件工程[3]、可信軟件工程[4]和大數(shù)據(jù)軟件工程[5]等一批各具特色的軟件工程方法.基于群體智能的軟件工程旨在利用群體智能方法來高效且富有創(chuàng)造力地解決軟件開發(fā)各個(gè)階段中遇到的各類復(fù)雜問題,是近年來軟件工程領(lǐng)域研究的前沿和熱點(diǎn).
群體智能方法來源于智能行為在群體中的匯聚現(xiàn)象,其強(qiáng)調(diào)了在一群個(gè)體間的相互合作或競(jìng)爭(zhēng)模式下,整個(gè)群體能表現(xiàn)出遠(yuǎn)超其中任何一個(gè)個(gè)體智能水平的智能能力[6].這樣一群個(gè)體既可以是沒有智能、或僅具有相對(duì)簡(jiǎn)單智能的動(dòng)物群體,也可以是人類群體本身.對(duì)應(yīng)地,對(duì)群體智能的利用也就可分為3種不同的層次:機(jī)器群體智能、人類群體智能以及人機(jī)結(jié)合群體智能.
1) 機(jī)器群體智能
機(jī)器群體智能方法利用模擬生物群體行為的進(jìn)化優(yōu)化算法[7]來進(jìn)行復(fù)雜問題求解.基于搜索的軟件工程(search based software engineering, SBSE)是機(jī)器群體智能在軟件工程領(lǐng)域應(yīng)用的一種代表性方法[8],其中軟件工程問題首先被形式化地轉(zhuǎn)化為優(yōu)化問題,隨后機(jī)器群體智能方法就能在適應(yīng)值函數(shù)的指導(dǎo)下自動(dòng)搜索平衡眾多因素關(guān)系的最優(yōu)解.
2) 人類群體智能
人類群體智能利用大規(guī)模人類群體的協(xié)同來進(jìn)行復(fù)雜問題求解.眾包軟件工程(crowdsourced software engineering, CSE)是人類群體智能在軟件工程領(lǐng)域應(yīng)用的一種代表性方法[9],其通常需要3種角色的協(xié)同參與,包括問題的提出者、潛在解決問題的大規(guī)模分布式用戶群體以及一個(gè)促進(jìn)各方交互的公共平臺(tái).
3) 人機(jī)結(jié)合群體智能
人機(jī)結(jié)合群體智能是機(jī)器群體智能和人類群體智能的結(jié)合.對(duì)于某些軟件工程問題來說,問題的某些方面可以使用計(jì)算機(jī)來自動(dòng)優(yōu)化,而在另一些方面上則需要手工進(jìn)行求解,通過人機(jī)結(jié)合的方式有助于提高人們處理上述軟件工程問題的有效性和自動(dòng)化程度.
目前,在利用機(jī)器群體智能和人類群體智能來解決軟件工程問題上已有很多研究工作.例如Harman等人[10]和Mao等人[11]曾分別對(duì)SBSE和CSE的基本概念和研究現(xiàn)狀進(jìn)行了全面細(xì)致的總結(jié).然而,已有研究大多僅關(guān)注了單一層次的群體智能方法,忽視了不同層次間群體智能方法的內(nèi)在聯(lián)系,從而可能在一定程度上限制了基于群體智能的軟件工程方法的有效應(yīng)用和發(fā)展?jié)摿?
基于此,本文首先提出了應(yīng)用不同層次的群體智能方法進(jìn)行問題求解的統(tǒng)一框架;在此基礎(chǔ)上,系統(tǒng)梳理和總結(jié)了各類群體智能方法在軟件工程生命周期各項(xiàng)活動(dòng)(包含需求分析、設(shè)計(jì)、構(gòu)造、測(cè)試和維護(hù))中的應(yīng)用.我們希望本文工作能為不同層次間群體智能方法的相互借鑒和轉(zhuǎn)化提供參考,從而進(jìn)一步增強(qiáng)人們利用和優(yōu)化群體智能方法來解決復(fù)雜軟件工程問題的能力.
群體智能是在許多個(gè)體的合作和競(jìng)爭(zhēng)中涌現(xiàn)的共享智慧,其在復(fù)雜問題求解上的優(yōu)勢(shì)主要在于群體對(duì)于個(gè)體智能的放大作用[12-15].人們對(duì)于群體智能的認(rèn)識(shí)很大程度受到生物物種的啟示.Winston等人[16]和Schutter等人[17]曾分別研究了蜂群和蟻群的協(xié)作行為,他們發(fā)現(xiàn)一群只有基本本能的個(gè)體在組成群體之后,整體上可以表現(xiàn)出遠(yuǎn)超其中任何一個(gè)個(gè)體的智能水平.這樣一種生物群體現(xiàn)象隨后啟發(fā)人們提出了不同的進(jìn)化優(yōu)化算法(例如蟻群算法[18]、粒子群算法[19]和蜂群算法[20]),并將這些算法應(yīng)用于解決難以通過傳統(tǒng)方法構(gòu)造和求解的現(xiàn)實(shí)復(fù)雜問題.
低智能生物體的群體行為讓人們深刻認(rèn)識(shí)到群體對(duì)智能的放大作用,大量學(xué)者因而開始考慮如何利用人群的智能解決某些難題.例如Engelbart在20世紀(jì)60年代就預(yù)言通過將人類的智力能力組織到更高層次的協(xié)同結(jié)構(gòu)中可以放大人類的智力[21];而1714年英國政府公開征集能夠準(zhǔn)確測(cè)量海上船只經(jīng)度的方法則是眾包方法的最早實(shí)踐[22].
然而,對(duì)大規(guī)模人類群體智能的挖掘和利用出現(xiàn)的很晚,這主要是由于物理時(shí)空對(duì)人類群體協(xié)同規(guī)模的限制,以使得人類個(gè)體之間的信息難于快速共享和傳播[23].互聯(lián)網(wǎng)的快速發(fā)展極大地克服了這個(gè)問題,為人類群體智能的大規(guī)模應(yīng)用奠定了基礎(chǔ),大量基于人類群體智能的應(yīng)用也因此逐步出現(xiàn).例如免費(fèi)協(xié)作、多語言的互聯(lián)網(wǎng)百科全書Wikipedia(1)https://en.wikipedia.org/wiki/Main_Page;利用互聯(lián)網(wǎng)大規(guī)模人類群體來輔助開發(fā)藥物的InnoCentive(2)https://www.innocentive.com;;利用機(jī)器計(jì)算和人類計(jì)算[24]來高效解決任務(wù)的Mechanical Turk(3)https://www.mturk.com;;利用游戲設(shè)計(jì)蛋白質(zhì)模型,為抗逆轉(zhuǎn)錄病毒藥物的設(shè)計(jì)提供新見解的游戲平臺(tái)[25];以及加強(qiáng)研究團(tuán)體和社會(huì)中研究者的聯(lián)系,豐富藥物發(fā)現(xiàn)工作價(jià)值的眾包平臺(tái)[26]等都是人類群體智能應(yīng)用的成功實(shí)踐.
雖然人類群體智能在表現(xiàn)形式上與多人協(xié)作等通用的問題求解方式相似,它們?cè)诮M織方式上具有本質(zhì)不同:多人協(xié)作通常采用集中式層級(jí)結(jié)構(gòu),而群體智能則依賴分布式的獨(dú)立個(gè)體.在軟件開發(fā)活動(dòng)中,人們已經(jīng)發(fā)現(xiàn)當(dāng)軟件的規(guī)模和復(fù)雜度達(dá)到一定程度時(shí),單純?cè)黾佣嗳藚f(xié)作團(tuán)隊(duì)的成員規(guī)模并不能提高軟件開發(fā)的效率[23].與之相比,人類群體智能代表了一群相對(duì)獨(dú)立、自組織的智能個(gè)體在相互交互時(shí)產(chǎn)生的一系列復(fù)雜行為,這些行為尤其能在群體的層次上表現(xiàn)出某種連貫、協(xié)調(diào)的活動(dòng),涌現(xiàn)的群體智能也會(huì)隨著群體規(guī)模的增大而增大.計(jì)算機(jī)算力的提升使得機(jī)器群體智能可以在更大的解空間中搜索最優(yōu)解;互聯(lián)網(wǎng)的快速發(fā)展使得大規(guī)模人類群體智能得以涌現(xiàn),利用人類群體智能進(jìn)行軟件開發(fā)成為可能.
群體智能作為一類通用的問題求解方法,其同樣被廣泛應(yīng)用于解決軟件開發(fā)過程中面臨的各類復(fù)雜問題,這一應(yīng)用趨勢(shì)經(jīng)過逐步發(fā)展即形成了基于群體智能的軟件工程研究領(lǐng)域.目前基于群體智能的軟件工程中已經(jīng)有很多研究方向,例如基于搜索的軟件工程、眾包軟件工程以及開源軟件等,基于群體智能的軟件工程也和智能化軟件工程等領(lǐng)域有交叉.其中基于搜索的軟件工程(SBSE)和眾包軟件工程(CSE)是該領(lǐng)域的2個(gè)重要且發(fā)展相對(duì)成熟的研究方向,分別代表了對(duì)機(jī)器群體智能和人類群體智能的有效探索和利用,將作為本文討論的重點(diǎn).
1.2.1 基于搜索軟件工程
SBSE最早可以追溯到1976年,Miller等人[27]最早使用遺傳算法來解決浮點(diǎn)數(shù)測(cè)試用例的生成問題.2001年Harman和Jones[8]系統(tǒng)性將軟件工程問題轉(zhuǎn)化為基于搜索的優(yōu)化問題,并利用遺傳算法等群智優(yōu)化算法進(jìn)行問題求解,標(biāo)志著SBSE開始成為軟件工程中的一個(gè)新研究方向.
不同于傳統(tǒng)軟件工程在問題空間中通過算法構(gòu)造出一個(gè)解,SBSE將傳統(tǒng)軟件工程問題轉(zhuǎn)化為優(yōu)化問題,并以適應(yīng)度函數(shù)作導(dǎo)向,利用群智優(yōu)化算法在解空間中尋找問題的近似最優(yōu)解.Harman等人[10]總結(jié)了應(yīng)用SBSE的2個(gè)前提條件:
1) 能將問題表述成形式化的優(yōu)化問題;
2) 能夠定義出適應(yīng)度函數(shù)(fitness function).
軟件工程的研究對(duì)象和解決方案都不是物理實(shí)體,這種虛擬性使得幾乎軟件開發(fā)生命周期各階段的問題都可以通過數(shù)學(xué)抽象形式化表示為優(yōu)化問題.此外,軟件工程中許多問題都有一組與之相關(guān)且豐富多樣的軟件度量標(biāo)準(zhǔn),這些度量標(biāo)準(zhǔn)形成了良好的初始適應(yīng)度函數(shù)候選集[28].軟件工程問題的這2個(gè)特點(diǎn)使SBSE的應(yīng)用成為可能:只要軟件工程問題能夠形式化表達(dá)為優(yōu)化問題,就可以使用SBSE方法來求解.
經(jīng)過長時(shí)間的發(fā)展,SBSE領(lǐng)域已形成了一定規(guī)模的研究者群體,基于搜索的軟件工程國際研討會(huì)(International Symposium on Search-Based Soft-ware Engineering, SSBSE)和基于搜索的軟件測(cè)試國際研討會(huì)(International Workshop on Search-Based Software Testing, SBST)每年都召開,在很多子研究領(lǐng)域上也都有綜述論文發(fā)表[10,29-30].Harman等人尤其建立了一個(gè)SBSE領(lǐng)域論文數(shù)據(jù)庫(4)https://crestweb.cs.ucl.ac.uk/resources/sbse_repository/repository.html,收集了該領(lǐng)域近2 000篇研究論文,是開展SBSE研究的重要資源.
1.2.2 眾包軟件工程
眾包是一種新興的開放式協(xié)作模式.2006年Howe[9,31]將眾包定義為“公司或機(jī)構(gòu)將需要員工完成的任務(wù),以公開招募勞動(dòng)力的形式外包給一個(gè)尚未界定(通常規(guī)模較大)的網(wǎng)絡(luò)群體的行為”,以用來描述企業(yè)是如何利用互聯(lián)網(wǎng)將工作外包給大眾.
眾包軟件工程使用眾包解決軟件工程問題.通過互聯(lián)網(wǎng)在線平臺(tái),軟件工程問題被分解成一個(gè)個(gè)任務(wù),分配給有能力的個(gè)體解決,利用人類群體智能的作用高效高質(zhì)量給出解決方案.如圖1所示,眾包軟件工程的工作流程涉及3個(gè)主要角色:基于互聯(lián)網(wǎng)的眾包平臺(tái)、需求提出方和開發(fā)者.需求提出方可以是一個(gè)公司,公司利用眾包平臺(tái)完成公司業(yè)務(wù)可以加快軟件開發(fā)周期、節(jié)省成本,個(gè)人也可以通過眾包平臺(tái)發(fā)布任務(wù),幫助自己實(shí)現(xiàn)軟件開發(fā).開發(fā)者可以是個(gè)人也可以是一個(gè)團(tuán)隊(duì),可以根據(jù)個(gè)人或者團(tuán)隊(duì)的能力選擇相應(yīng)的開發(fā)任務(wù).基于互聯(lián)網(wǎng)的眾包平臺(tái)是軟件眾包的核心,管理整個(gè)軟件眾包項(xiàng)目的業(yè)務(wù)邏輯,一個(gè)理想的軟件眾包平臺(tái)應(yīng)該有在線軟件開發(fā)環(huán)境和工具、知識(shí)分享和協(xié)同工具、解決方案質(zhì)量保證和改善工具以及項(xiàng)目管理工具[32].
眾包軟件工程屬于人類群體智能在軟件工程中的一種實(shí)踐形式,可以極大提高軟件開發(fā)速度和交付軟件產(chǎn)品的質(zhì)量.從近年來出現(xiàn)的眾包軟件工程研討會(huì)(International Workshop on CrowdSourcing in Software Engineering, CSI-SE@ICSE)和與會(huì)文章可以看出,眾包軟件工程發(fā)展十分迅速,并且越來越完善,與眾包軟件工程相關(guān)的研究非常多,一些研究人員從不同角度對(duì)眾包相關(guān)研究工作進(jìn)行了總結(jié)[33-36],其中Mao等人[11]在2016年對(duì)眾包技術(shù)在軟件工程中的應(yīng)用進(jìn)行了系統(tǒng)的總結(jié).
Fig.1 The three participants in crowdsourced software engineering[11]圖1 眾包軟件工程的3類參與者[11]
1.2.3 基于群體智能的軟件工程方法統(tǒng)一框架
以基于搜索的軟件工程為代表的研究旨在利用源自生物群體的進(jìn)化優(yōu)化算法來搜索軟件工程問題的最佳解決方案,而以眾包軟件工程為代表的研究則更加關(guān)注人類群體智能的高效匯聚和應(yīng)用.這些方法雖然具有不同的群體智能表現(xiàn)形式,但從問題求解的統(tǒng)一的視角來看,對(duì)于特定的問題解空間,每個(gè)個(gè)體能感知和搜索的范圍通常是有限的,而群體智能能通過個(gè)體間的交互作用來更有效地探索整個(gè)問題解空間,并最終找到問題的最優(yōu)解或局部最優(yōu)解.
圖2給出了利用群體智能方法進(jìn)行軟件工程問題求解的統(tǒng)一框架.對(duì)于一個(gè)給定的軟件工程問題,首先群體中的每個(gè)個(gè)體分別產(chǎn)生問題的解決方案,隨后在群體智能的幫助下對(duì)已有解決方案進(jìn)行評(píng)估,并在此基礎(chǔ)上對(duì)解決方案進(jìn)行優(yōu)化以產(chǎn)生更好的解決方案.這一過程將不斷循環(huán)迭代,直到滿足某種終止條件,最后在整個(gè)流程中找到的最優(yōu)解即作為群體智能的最終求解結(jié)果.
Fig.2 A unified framework of collective intelligence based software engineering圖2 基于群體智能的軟件工程方法統(tǒng)一框架
產(chǎn)生解決方案、評(píng)估解決方案以及優(yōu)化解決方案是上述基于群體智能的軟件工程框架中的3個(gè)關(guān)鍵任務(wù),這些任務(wù)既可以借助機(jī)器群體智能來實(shí)現(xiàn),也可以借助人類群體智能來實(shí)現(xiàn).當(dāng)3個(gè)任務(wù)都使用機(jī)器群體智能來實(shí)現(xiàn)時(shí),即代表了機(jī)器群體智能層次的基于群體智能的軟件工程(例如使用蟻群算法自動(dòng)化地構(gòu)造、評(píng)估和優(yōu)化測(cè)試數(shù)據(jù)[37]);當(dāng)3個(gè)任務(wù)都使用人類群體智能來實(shí)現(xiàn)時(shí),即代表了人類群體智能層次的基于群體智能的軟件工程(例如使用眾包機(jī)制公開召集一群人類個(gè)體來構(gòu)造、評(píng)估和優(yōu)化軟件設(shè)計(jì)[38]);而當(dāng)一部分任務(wù)由機(jī)器群體智能來實(shí)現(xiàn),另一部分任務(wù)由人類群體智能來實(shí)現(xiàn),即代表了人機(jī)結(jié)合群體智能層次的基于群體智能的軟件工程.
Fig.3 Solving software engineering problem by machine collective intelligence圖3 利用機(jī)器群體智能進(jìn)行軟件工程問題求解
具體地,圖3給出了利用機(jī)器群體智能進(jìn)行軟件工程問題求解的示意圖.為了自動(dòng)化地使用機(jī)器群體智能構(gòu)造、評(píng)估和優(yōu)化候選解,軟件工程問題首先需要被結(jié)構(gòu)化地編碼為可以被計(jì)算和搜索的形式,同時(shí)需要給出候選解的形式化評(píng)估指標(biāo),即定義結(jié)構(gòu)化的適應(yīng)值函數(shù).在此基礎(chǔ)上,以進(jìn)化優(yōu)化算法為代表的機(jī)器群體智能方法就能在適應(yīng)值函數(shù)的指導(dǎo)下自動(dòng)化地演化候選解.
圖4給出了利用人類群體智能進(jìn)行軟件工程問題求解的示意圖.其中,一個(gè)管理平臺(tái)是群體智能有效涌現(xiàn)的基礎(chǔ),項(xiàng)目請(qǐng)求者在平臺(tái)上發(fā)布軟件工程項(xiàng)目和獲得解決方案.軟件工程項(xiàng)目在平臺(tái)中將經(jīng)歷產(chǎn)生解決方案、評(píng)估方案和選擇一個(gè)比較好的解決方案的迭代過程,直到請(qǐng)求者獲得一個(gè)滿意的解決方案.在上述迭代過程中會(huì)產(chǎn)生許多的微任務(wù),例如提交解決方案任務(wù)、評(píng)估其他人解決方案任務(wù)等.工人群體通過平臺(tái)可以選擇自己感興趣的任務(wù),提交任務(wù)結(jié)果.理想的平臺(tái)還有工具支持,為大規(guī)模群體個(gè)體協(xié)作和通信奠定基礎(chǔ).
Fig.4 Solving software engineering problem by human collective intelligence圖4 利用人類群體智能進(jìn)行軟件工程問題求解
對(duì)于某些軟件工程問題,其解決方案可能難于形式化描述、或者難于形式化度量,這限制了機(jī)器群體智能的應(yīng)用;而人類群體智能則要求所有任務(wù)都由人類個(gè)體來完成,這又缺乏對(duì)機(jī)器運(yùn)算效率的有效利用.人機(jī)結(jié)合群體智能是對(duì)上述兩者的結(jié)合,圖5給出了其對(duì)應(yīng)的軟件工程問題求解示意圖.其中,機(jī)器群體智能既可以和人類群體智能結(jié)合,人機(jī)合力半自動(dòng)化解決軟件工程問題,也可以利用人群形成的知識(shí)庫成為全自動(dòng)化的間接人機(jī)結(jié)合群體智能來解決問題.
基于機(jī)器群體智能、人類群體智能和人機(jī)結(jié)合群體智能的軟件工程分別代表了利用群體智能進(jìn)行軟件工程問題求解的3種不同層次,它們統(tǒng)一于基于群體智能的軟件工程框架中,同時(shí)也在很多領(lǐng)域都有著廣泛且成熟的應(yīng)用.
1.3.1 人類群體智能在軟件工程中的實(shí)踐
軟件開發(fā)本身就是一項(xiàng)高度依賴人類智能的創(chuàng)造性活動(dòng).在基于人類群體智能的軟件工程上,目前人們已開發(fā)了很多商業(yè)化的眾包平臺(tái),這些平臺(tái)通過不同的問題求解模型來解決軟件工程問題.目前世界上最大規(guī)模的軟件眾包開發(fā)平臺(tái)是2001年建立的TopCoder(5)https://www.topcoder.com;,用戶可以通過TopCoder發(fā)布軟件設(shè)計(jì)、軟件開發(fā)、軟件測(cè)試等任務(wù).此外,UDesignIt(6)https://www.marketingideasforprinters.com;,StakeNet[39]和StakeSource[40]專注于需求獲取與分析;DesignCrowd(7)https://www.designcrowd.com;可以利用人類群體智能進(jìn)行軟件設(shè)計(jì);Bountify(8)https://bountify.co;,HelpMeout[41]等可以幫助用戶進(jìn)行代碼編寫和軟件實(shí)現(xiàn);而軟件測(cè)試領(lǐng)域有最多的工具與平臺(tái),例如uTest(9)https://www.utest.com/;,Testin(10)https://www.testin.cn/;,Testbirds(11)https://www.testbirds.com/.
TopCoder是利用人類群體智能解決軟件工程相關(guān)問題的先行者.在TopCoder中,人類群體智能以在線競(jìng)爭(zhēng)的形式產(chǎn)生、評(píng)估、優(yōu)化解決方案.從頂層設(shè)計(jì)來看,系統(tǒng)過程類似于瀑布模型,每個(gè)開發(fā)階段都是由一系列在線競(jìng)爭(zhēng)來實(shí)現(xiàn)的.每個(gè)參與者都產(chǎn)出特定任務(wù)的解決方案,由人群中選出的審查委員會(huì)對(duì)每個(gè)解決方案進(jìn)行評(píng)估,解決方案的優(yōu)化來自于參與者之間的競(jìng)爭(zhēng)機(jī)制.由于人群無法處理復(fù)雜的軟件問題,TopCoder將復(fù)雜任務(wù)分解為多個(gè)簡(jiǎn)單子任務(wù)發(fā)布,降低了對(duì)人類群體智能的限制,有利于充分利用人群的優(yōu)勢(shì).
AppStori(12)https://www.appstori.com;是一個(gè)新穎的移動(dòng)應(yīng)用開發(fā)眾包平臺(tái).和TopCoder直接利用人群智能解決問題不同,AppStori利用人群智能輔助軟件開發(fā)過程,AppStori創(chuàng)新性地將消費(fèi)者群體和軟件開發(fā)過程緊密聯(lián)系,消費(fèi)者群體可以以眾籌形式為項(xiàng)目提供資金;消費(fèi)者群體中有能力的開發(fā)者可以加入項(xiàng)目的開發(fā)過程中;消費(fèi)者群體可以在應(yīng)用開發(fā)過程中提出建議和需求;消費(fèi)者群體還可以充當(dāng)原型軟件測(cè)試人員的角色,為現(xiàn)有項(xiàng)目提供反饋.整個(gè)開發(fā)過程,從概念到發(fā)布,都是通過開發(fā)人員和消費(fèi)者群體之間的協(xié)作來實(shí)現(xiàn)的,涉眾群體幫助評(píng)估、優(yōu)化現(xiàn)有的解決方案絕對(duì)是高效、高質(zhì)量的人類群體智能利用方式.
StackOverflow(13)https://www.stackoverflow.com;是一個(gè)編程知識(shí)問答網(wǎng)站.在這個(gè)平臺(tái)中,人類群體以經(jīng)驗(yàn)知識(shí)庫的形式出現(xiàn),提問者需要通過提問的方式主動(dòng)從經(jīng)驗(yàn)知識(shí)庫中“拉出”問題解決方案.一方面,經(jīng)驗(yàn)知識(shí)庫為問題提供多種多樣的解決方案,這個(gè)過程反映出人類群體智能對(duì)解決方案的優(yōu)化;另一方面,提問者需要評(píng)估不同的回答找到最合適的解決方案.
1.3.2 機(jī)器群體智能在軟件工程中的實(shí)踐
與人類群體智能的相關(guān)實(shí)踐相比,機(jī)器群體智能在軟件工程中的代表性應(yīng)用包括自動(dòng)化測(cè)試數(shù)據(jù)生成和程序代碼修復(fù)等工具,這些工具已被成功應(yīng)用到很多真實(shí)的軟件開發(fā)環(huán)境中.
Austin(14)https://github.com/kiranlak/austin-sbst;是一個(gè)用于單元測(cè)試C程序的結(jié)構(gòu)測(cè)試數(shù)據(jù)生成工具.Austin認(rèn)為一個(gè)單元是一個(gè)被測(cè)試的函數(shù),并且該函數(shù)中的所有函數(shù)都是可訪問的.在函數(shù)代碼覆蓋率相關(guān)適應(yīng)度函數(shù)的評(píng)估下,Austin不斷生成給定函數(shù)的輸入?yún)?shù),形成新的測(cè)試用例,從而優(yōu)化測(cè)試用例集.
EvoSuite(15)http://www.evosuite.org;和Austin類似,不過EvoSuite針對(duì)Java語言,并且對(duì)測(cè)試過程中的Oracle問題提供了解決方案.EvoSuite通過添加小而有效的斷言集來提供可能的指示,這些斷言集簡(jiǎn)潔地總結(jié)了當(dāng)前的行為,允許開發(fā)人員檢測(cè)預(yù)期行為的偏差,并捕獲當(dāng)前行為,以防止未來的缺陷破壞這種行為.
GenProg(16)https://squareslab.github.io/genprog-code/;使用基因編程來修復(fù)代碼缺陷.具體地來說,修復(fù)代碼的解決方案以對(duì)源代碼進(jìn)行修改的操作序列表示.每一個(gè)候選解決方案被用于源代碼,生成新的代碼程序;測(cè)試套件充當(dāng)評(píng)估解決方案的角色,通過的測(cè)試越多,說明該解決方案越接近完美;優(yōu)化體現(xiàn)在不同解決方案的競(jìng)爭(zhēng)當(dāng)中.
為了搜集目前與基于群體智能的軟件工程相關(guān)的主流研究論文,我們?cè)谶@里主要考慮SBSE和CSE這2個(gè)較為成熟的基于群體智能的軟件工程領(lǐng)域.
具體地,我們首先從SBSE和CSE對(duì)應(yīng)的文獻(xiàn)庫(17)https://github.com/Rhapsod/software-crowdsourcing-papers中獲取所有相關(guān)研究論文,共計(jì)1 450篇,表1給出了這些論文的研究主題在軟件工程生命周期各個(gè)階段上的分布情況.隨后,為了使本文調(diào)研工作聚焦到較高水平的研究論文上,我們進(jìn)一步根據(jù)CCF期刊和會(huì)議推薦列表對(duì)上述論文進(jìn)行篩選,最終共收集706篇研究論文作為本文調(diào)研的對(duì)象.
我們對(duì)上述每個(gè)軟件工程階段相關(guān)的論文進(jìn)行深入分析,表1給出了基于群體智能的軟件工程在軟件開發(fā)各個(gè)活動(dòng)上的應(yīng)用和分布情況.從表1中可以看出,目前在軟件工程的整個(gè)生命周期中都有基于群體智能的軟件工程相關(guān)的研究和應(yīng)用.
Table 1 Statistics of Literatures of Collective Intelligence Based Software Engineering表1 基于群體智能的軟件工程主流文獻(xiàn)統(tǒng)計(jì)結(jié)果
需求工程是通過分析客戶需求,幫助技術(shù)人員理解問題域并定義目標(biāo)系統(tǒng)功能特征的方法論,是軟件開發(fā)生命周期中至關(guān)重要的一環(huán)[42].需求工程強(qiáng)調(diào)開發(fā)者對(duì)用戶需求的理解,從而減少系統(tǒng)建設(shè)過程中可能出現(xiàn)的偏差與錯(cuò)誤;同時(shí),需要追蹤與處理需求變更,減少需求變更帶來的耗費(fèi),提高生產(chǎn)效率.
目前群體智能在需求工程中主要用于需求獲取和分析,表2給出了不同層次的群體智能在解決具體需求工程問題上的應(yīng)用.其中,機(jī)器群體智能在需求分析中主要用于解決需求沖突協(xié)商[43]、需求交互[44-48]、需求選擇[49-53]和需求規(guī)范[54]等問題;人類群體智能主要在需求獲取中發(fā)揮作用,如尋找需求涉眾[39-40,55-57]、需求提取[58-61]和需求分析[40,55-56,62-63]等.目前,基于人機(jī)結(jié)合群體智能的需求工程研究較少,僅在需求規(guī)范[64]和需求優(yōu)先級(jí)排序[65]中有相關(guān)研究.
Table 2 Research on Collective Intelligence Based Requirement Engineering表2 基于群體智能的需求工程相關(guān)研究
需求獲取指理解涉眾的要求以及他們是如何使用新軟件系統(tǒng)來支持他們的工作.如果項(xiàng)目需求分析的涉眾群體不夠多或者沒有代表性,需求分析結(jié)果就會(huì)出現(xiàn)偏差,從而導(dǎo)致軟件產(chǎn)品無法被用戶接受.因此在需求獲取之前應(yīng)盡量全面地分析并尋找軟件涉眾.傳統(tǒng)需求工程方法通常選取部分用戶作為全體用戶的代表,這會(huì)導(dǎo)致僅對(duì)有限的需求進(jìn)行提取,從而難于適應(yīng)互聯(lián)網(wǎng)環(huán)境下大規(guī)模、多樣和動(dòng)態(tài)演化的用戶群體和軟件使用環(huán)境.
基于大規(guī)模人群涌現(xiàn)人類群體智能在尋找涉眾任務(wù)中具有特殊優(yōu)勢(shì).人類群體規(guī)模越大,涉眾的多樣性越豐富;同時(shí)人類群體規(guī)模越大,涌現(xiàn)的群體智能越強(qiáng)大,應(yīng)用在涉眾確定任務(wù)中的效果越好.
首先,可以通過涉眾的背景來尋找初始的涉眾群體.例如為了尋找到足夠多的特定領(lǐng)域涉眾,Wang等人[57]根據(jù)具有特定領(lǐng)域知識(shí)的人群會(huì)在特定的時(shí)空間聚集的現(xiàn)象,提出了一種新型的參與者招募框架來以更有效的方式招募所需領(lǐng)域的參與者.其次,涉眾群體可以通過涉眾之間的關(guān)系進(jìn)行優(yōu)化,例如Lim 等人[39-40,55]提出了StakeNet方法并開發(fā)了相關(guān)工具.在StakeNet方法中,為了尋找和項(xiàng)目有關(guān)的所有涉眾群體,讓涉眾推薦可能的涉眾群體,在真實(shí)項(xiàng)目中取得了良好的效果.最后,通過將涉眾關(guān)系抽象定義為網(wǎng)絡(luò)圖,定義相關(guān)度量函數(shù)來評(píng)估涉眾群體是否已經(jīng)滿足要求.StakeNet方法中采用了PageRank等算法指標(biāo)來計(jì)算涉眾群體的優(yōu)先級(jí),并且在后續(xù)的工作[56]中提出了StakeRare方法,使用社交網(wǎng)絡(luò)分析和協(xié)同過濾技術(shù)來識(shí)別大型軟件工程中的需求并對(duì)需求優(yōu)先級(jí)進(jìn)行排序.
需求提取是將各種形式的需求意見提取為可用于后續(xù)需求分析的規(guī)范需求文檔的過程.需求提取面臨的困難主要來自于從大量自然語言形式文檔中提取需求的時(shí)間成本,限制了需求提取的規(guī)模.基于群體智能的軟件工程方法通過增加處理問題的并行程度,縮減時(shí)間成本,從而增加了需求提取的規(guī)模.但是非專業(yè)的人群手動(dòng)從大型自然語言文本源中提取需求是一項(xiàng)艱巨的任務(wù),限制了人類群體智能需求提取的一般化.Breaux等人[61]進(jìn)行了3個(gè)實(shí)驗(yàn),雇傭未經(jīng)培訓(xùn)的人群工作人員手動(dòng)從隱私政策文檔中提取需求.實(shí)驗(yàn)結(jié)果表明,合理的任務(wù)分解可以降低人群提取難度,提高了人類群體智能提取需求的能力.此外,Hosseini等人[58]還發(fā)現(xiàn)眾包應(yīng)用于需求提取可以適應(yīng)軟件需求提取的高要求,該研究深入研究了如何使用眾包可以提高提取需求的質(zhì)量,優(yōu)化基于群體智能的軟件工程方法的評(píng)估、優(yōu)化解決方案過程.
人類群體智能方法充分利用了用戶群體的主體作用,通過將需求提取任務(wù)以一定方式眾包出去,從而盡可能全面地感知和收集需求[60].Adepetu等人[59]提出了一個(gè)概念化的眾包平臺(tái)CrowdREquire,人群中的個(gè)體需要向客戶端定義的任務(wù)提交規(guī)范的需求文檔解決方案.在競(jìng)賽機(jī)制作用下,個(gè)體會(huì)相互競(jìng)爭(zhēng),不斷優(yōu)化自身的解決方案,最后由任務(wù)提出方從人群提交的眾多解決方案中選出最優(yōu)的解決方案.
需求分析包括提煉、分析和審查已經(jīng)收集到的需求,以確保所有風(fēng)險(xiǎn)承擔(dān)者都知道其中含義,并找到需求中沖突、錯(cuò)誤和其他不足的地方.需求分析相關(guān)研究集中在需求優(yōu)先級(jí)排序、需求分類、需求沖突協(xié)商以及需求交互研究等活動(dòng).
在需求分析問題上,對(duì)不同層次群體智能來說,非專業(yè)人類群體很難利用人類群體智能對(duì)需求分析問題進(jìn)行直接集體決策,因此人類群體智能應(yīng)用有限;需求優(yōu)先級(jí)、客戶滿意度、項(xiàng)目成本等因素的需求分析能夠表述為多目標(biāo)優(yōu)化問題,因此機(jī)器群體智能在需求分析問題中具有廣泛的應(yīng)用;通過機(jī)器群體智能對(duì)問題進(jìn)行優(yōu)化,轉(zhuǎn)換為比較容易的子任務(wù)分配給人類群體智能解決,可以充分利用人機(jī)群體智能的優(yōu)勢(shì).
目前,人類群體智能在需求分析中的應(yīng)用主要是利用眾包技術(shù)來進(jìn)行需求優(yōu)先級(jí)排序[40,55-56].此外,Nascimento等人[62]還利用眾包對(duì)需求進(jìn)行分類以分析用戶對(duì)產(chǎn)品的真正期望;而Liang等人[63]提出了基于Web 2.0的需求分析框架來輔助需求決策,以降低用戶參與需求分析的難度.
當(dāng)需求分析問題可以較容易地轉(zhuǎn)化為結(jié)構(gòu)化的優(yōu)化問題時(shí),機(jī)器群體智能方法就能得到廣泛的應(yīng)用,其中最有代表性的例子就是下一版本問題(next release plan, NRP),即如何根據(jù)現(xiàn)有資源選擇新的功能加入到軟件系統(tǒng)中來滿足客戶需求[64].機(jī)器群體智能在NRP問題中應(yīng)用的關(guān)鍵是解決方案的評(píng)估,由于功能選擇時(shí)需要考慮多方面因素,例如客戶之間的優(yōu)先級(jí)關(guān)系、成本和需求之間的關(guān)系等,人們尤其關(guān)注基于多目標(biāo)優(yōu)化的NRP問題.例如Brasil等人[46]提出了一種多目標(biāo)優(yōu)化公式,在考慮客戶滿意度、需求之間相關(guān)性、業(yè)務(wù)價(jià)值和可用資源等多種因素的條件下確定系統(tǒng)理想的版本數(shù)量,實(shí)驗(yàn)中使用帶精英策略的非支配排序的遺傳算法(nondo-minated sorting genetic algorithms Ⅱ,NSGAⅡ)和MOCell[65]算法驗(yàn)證了公式的有效性.
評(píng)估NRP問題還需要考慮項(xiàng)目資源和成本,在項(xiàng)目資源限制內(nèi)找出一組需求滿足不同涉眾的訴求.Zhang等人[49]采用Kiviat圖直觀顯示出預(yù)算壓力對(duì)于多方涉眾滿意度的影響,并且比較了Two-Archive算法、NSGAⅡ算法和隨機(jī)算法在此問題的性能.實(shí)驗(yàn)表明,隨著問題規(guī)模擴(kuò)大,Two-Archive算法的收斂性更好.此外,項(xiàng)目預(yù)算不準(zhǔn)確也會(huì)對(duì)NRP問題的最終結(jié)果有很大影響.Harman等人[51]在單目標(biāo)或多目標(biāo)需求優(yōu)化問題基礎(chǔ)上進(jìn)行了成本的可接受敏感范圍分析,決策者可以根據(jù)分析結(jié)果的可視化圖表識(shí)別數(shù)據(jù)中的敏感范圍.
在某些情況下,機(jī)器群體智能評(píng)估需求分析解決方案還需要考慮需求交互問題[66],即某些特定目標(biāo)只有多個(gè)需求同時(shí)滿足時(shí)才能達(dá)到.Zhang等人[44]修改了傳統(tǒng)NSGAⅡ算法[67],使之可以用于解決考慮需求交互約束的多目標(biāo)需求優(yōu)化評(píng)估問題.Zhang等人[47]隨后對(duì)算法進(jìn)行了進(jìn)一步改進(jìn),提高了算法的收斂性和最終解決方案的多樣性.此外,Sureka等人[48]將NPR中的需求交互看作需求之間的協(xié)同作用,分為積極協(xié)同作用和消極協(xié)同作用,研究了機(jī)器群體智能對(duì)此類問題的性能,驗(yàn)證了機(jī)器群體智能對(duì)NRP問題的適用性.
此外,針對(duì)多客戶需求之間的相互沖突和競(jìng)爭(zhēng)問題, Finkelstein等人[43]提出了3種公平性衡量公式來評(píng)估和客戶優(yōu)先級(jí)相關(guān)的需求分析解決方案,并且利用遺傳算法尋求需求公平性權(quán)衡的需求協(xié)商方案.針對(duì)用戶輸入需求的不準(zhǔn)確或不完全問題,Devries等人[54]結(jié)合符號(hào)分析和演化計(jì)算將需求進(jìn)行分解,枚舉所有必要的分解需求和確定分解需求的影響范圍.
在上述研究中可以發(fā)現(xiàn),利用機(jī)器群體智能產(chǎn)生解決方案的方法也十分重要,機(jī)器群體智能算法的選擇對(duì)解決問題過程的收斂性和最終解決方案的多樣性有很大影響.Souza等人[45]認(rèn)為NRP問題可以看作是背包問題,蟻群算法在這類問題上的收斂性和產(chǎn)生解決方案的質(zhì)量上表現(xiàn)非常好,因此作者對(duì)蟻群算法進(jìn)行改進(jìn),使之可以解決存在互相依賴的需求的NRP問題.Kumari等人[50]結(jié)合量子計(jì)算和演化計(jì)算的特性,提出了一種量子啟發(fā)的多目標(biāo)演化算法來解決NRP問題中的需求選擇問題.Chaves等人[52]提出一個(gè)蜂群算法解決多目標(biāo)下一版本問題(multi-objective next release problem, MONRP),該方法可以生成高質(zhì)量的需求集供工程師進(jìn)行決策.José等人[53]改進(jìn)了早期的蟻群系統(tǒng)用于項(xiàng)目迭代中需求集的選擇問題,算法效果得到了很大提升.
人機(jī)結(jié)合群體智能能夠使用人類智能來彌補(bǔ)機(jī)器智能的不足.Tonella等人[68]提出了一種基于人機(jī)交互的遺傳算法來解決需求優(yōu)先級(jí)排序問題,該方法將評(píng)估解決方案的任務(wù)交給具有相關(guān)專業(yè)知識(shí)的人群,實(shí)驗(yàn)表明該方法的有效性和魯棒性均優(yōu)于機(jī)器群體智能方法,并且可以容忍一定的人為錯(cuò)誤率.Wever等人[69]采用協(xié)同演化算法通過確定性有限狀態(tài)機(jī)半自動(dòng)化尋找合適的形式化軟件規(guī)范,該方法需要用戶對(duì)有限的訓(xùn)練數(shù)據(jù)進(jìn)行標(biāo)記,幫助機(jī)器群體智能產(chǎn)生高質(zhì)量的解決方案.
此外Sultanov等人[70]的研究表明機(jī)器群體智能也適用于需求跟蹤問題.Yue等人[71]為需求審查提出了評(píng)估需求審查分配結(jié)果的適應(yīng)度函數(shù),機(jī)器群體智能也可以用于自動(dòng)需求審查分配問題.
和傳統(tǒng)需求工程方法相比,應(yīng)用群體智能方法的優(yōu)勢(shì)包括大規(guī)模群體的問題并行處理能力、涉眾群體的多樣性以及對(duì)需求分析結(jié)果的優(yōu)化等.但是具體到不同層次的群體智能時(shí),可以發(fā)現(xiàn)機(jī)器群體智能很難進(jìn)行涉眾確定活動(dòng);而人類群體中個(gè)體無法處理復(fù)雜任務(wù),因而在進(jìn)行需求分析時(shí)存在任務(wù)分解難題.針對(duì)上述問題,我們可以通過不同層次群體智能的相互轉(zhuǎn)化來增強(qiáng)群體智能方法的普適性.例如,在涉眾確定活動(dòng)中,機(jī)器群體智能的局限性正是人類群體智能的優(yōu)勢(shì)所在,將涉眾群體看作群體智能涌現(xiàn)的源泉即可解決問題;同樣,利用機(jī)器群體智能優(yōu)化分解問題,人類群體智能解決子問題的人機(jī)結(jié)合群體智能模式在需求分析中能夠發(fā)揮巨大作用.
軟件設(shè)計(jì)是從需求說明到軟件具體實(shí)現(xiàn)的過渡階段.人類群體智能在這方面的研究比較少,如表3所示,主要有軟件概念建模[72]、UI界面設(shè)計(jì)[38]和Web網(wǎng)站頁面設(shè)計(jì)[73].人類群體智能方法在上述問題上的應(yīng)用主要來源于2方面因素:1)在激勵(lì)的作用下,大量工人會(huì)給出自己的軟件設(shè)計(jì)方案,眾多軟件設(shè)計(jì)方案的競(jìng)爭(zhēng)會(huì)帶來一個(gè)當(dāng)下最優(yōu)的設(shè)計(jì)方案;2)通過不斷學(xué)習(xí)人類群體智能形成的知識(shí)庫,可以不斷優(yōu)化已有設(shè)計(jì),從而獲得近似最優(yōu)解決方案.
Table 3 Research on Collective Intelligence Based Software Design表3 基于群體智能的軟件設(shè)計(jì)相關(guān)研究
與之相比,利用機(jī)器群體智能解決軟件設(shè)計(jì)問題目前已有大量的應(yīng)用,相關(guān)研究領(lǐng)域包括軟件體系結(jié)構(gòu)設(shè)計(jì)[75-77]、軟件產(chǎn)品線設(shè)計(jì)[78-83]和面向服務(wù)的軟件設(shè)計(jì)[84-85]等.R?ih?[87]從更廣泛的角度總結(jié)了機(jī)器群智優(yōu)化算法在軟件設(shè)計(jì)中的應(yīng)用,不僅包括軟件開發(fā)前期的軟件設(shè)計(jì),還包括軟件維護(hù)和重構(gòu)工程中的軟件設(shè)計(jì).機(jī)器群體智能能夠在上述軟件設(shè)計(jì)方法中發(fā)揮作用,主要是因?yàn)閺?fù)用和模塊化已成為現(xiàn)代軟件系統(tǒng)設(shè)計(jì)的基本準(zhǔn)則,因此軟件設(shè)計(jì)問題通常能轉(zhuǎn)化為在成本、資源和性能約束下選擇并組合已有軟件組件的問題.由于軟件組件的多樣性和龐大的數(shù)量,機(jī)器群體智能應(yīng)用于軟件設(shè)計(jì)的關(guān)鍵在于如何選擇并組合已有軟件組件,優(yōu)化設(shè)計(jì)方案.例如Lagerstrom等人[74]根據(jù)非功能性需求、效用理論和涉眾需求設(shè)計(jì)適應(yīng)度函數(shù),從組件庫中選取新的組件對(duì)UML進(jìn)行修改,搜索最佳解決方案.
在軟件體系結(jié)構(gòu)設(shè)計(jì)上,人們通常關(guān)注的是軟件系統(tǒng)組織方式和整體結(jié)構(gòu),其目的是確定一個(gè)系統(tǒng)的主要構(gòu)件以及構(gòu)件之間的相互關(guān)系.機(jī)器群體智能在這一問題上已有很多應(yīng)用,例如Andrade等人[76]提出了DuSE方法并開發(fā)了對(duì)應(yīng)的DuSE-MT[75]工具,該工具能夠給出設(shè)計(jì)空間系統(tǒng)化表示元模型,在運(yùn)行過程中不斷利用元模型對(duì)已有架構(gòu)進(jìn)行自動(dòng)修改,生成新的體系架構(gòu),并利用帕累托最優(yōu)理論評(píng)估系統(tǒng)體系結(jié)構(gòu),為決策提供價(jià)值權(quán)衡.Li等人[77]則提出了PETUT-MOO工具,在給定軟件體系結(jié)構(gòu)設(shè)計(jì)模型時(shí)通過模型轉(zhuǎn)換自動(dòng)優(yōu)化和改進(jìn)該設(shè)計(jì)方案的非功能性需求.該工具利用集成環(huán)境來實(shí)時(shí)分析架構(gòu)模型性能,從而利用處理器利用率、成本和系統(tǒng)延遲等軟件質(zhì)量因素評(píng)估新的軟件架構(gòu)方案.
軟件產(chǎn)品線架構(gòu)(product line architecture, PLA)指的是一個(gè)共性的體系結(jié)構(gòu)以及共享構(gòu)件的一組應(yīng)用,其中每個(gè)應(yīng)用都可以通過特征化來滿足特定用戶需求.Harman等人[88]系統(tǒng)總結(jié)了應(yīng)用機(jī)器群智優(yōu)化算法解決軟件產(chǎn)品線工程中問題的研究,為軟件產(chǎn)品線的自動(dòng)演化提供了方向.在軟件產(chǎn)品線設(shè)計(jì)問題上,如何利用機(jī)器群體智能優(yōu)化軟件設(shè)計(jì)是問題的關(guān)鍵.現(xiàn)有優(yōu)化搜索算子改變PLA的結(jié)構(gòu),可能違反分層體系結(jié)構(gòu),使得PLA靈活性和可維護(hù)性降低.為此,Mariani等人[79]引入考慮分層體系結(jié)構(gòu)樣式的搜索算子,可以保證PLA風(fēng)格不變并且與之前的方法相比有更好或等價(jià)的適應(yīng)度函數(shù)用于軟件設(shè)計(jì)方案的評(píng)估過程.同時(shí),PLA是根據(jù)軟件特征進(jìn)行設(shè)計(jì)的,將特征模塊化可以保證PLA的擴(kuò)展,Colanzi等人[81]提出基于特征的算子用于PLA設(shè)計(jì)方案的優(yōu)化,可以解決此類問題.Le等人[82]通過引入變異算子將設(shè)計(jì)模式引入PLA的設(shè)計(jì)優(yōu)化過程中,提高了產(chǎn)生和優(yōu)化的解決方案的質(zhì)量.
為了能夠直觀評(píng)價(jià)機(jī)器群智方法優(yōu)化PLA設(shè)計(jì)方案的實(shí)際效果,Wu等人[89]提出了一個(gè)尋找所有解決方案的3階段算法,可以促進(jìn)決策者選擇的決策.之后Wu等人[80]還分享了使用該算法和機(jī)器群智優(yōu)化算法解決實(shí)際PLA設(shè)計(jì)問題的計(jì)算經(jīng)驗(yàn),實(shí)驗(yàn)證明該算法能夠幫助決策者確定算法的最優(yōu)參數(shù).Colanzi等人[83]提出了新的基于搜索PLA直接表示方法,比現(xiàn)有研究中的表示方法更有效率.Féderle等人[78]提出一個(gè)工具OPLA-Tool,實(shí)現(xiàn)機(jī)器智能在多目標(biāo)優(yōu)化PLA任務(wù)上的輔助.
近年來,面向服務(wù)的軟件體系結(jié)構(gòu)也正受到人們的日益關(guān)注,其中每個(gè)服務(wù)實(shí)現(xiàn)一個(gè)特定的功能,并具有松耦合、可復(fù)用和技術(shù)異構(gòu)等特征.在面向服務(wù)的軟件設(shè)計(jì)上,人們通常面臨服務(wù)組合和服務(wù)選擇的問題,其中服務(wù)質(zhì)量[90](quality of service, QoS)是機(jī)器群體智能評(píng)估解決方案的主要指標(biāo).例如,云服務(wù)提供商提供的云服務(wù)及其相關(guān)定價(jià)模型各不相同,導(dǎo)致部署云服務(wù)十分復(fù)雜.Ardagna等人[84]提出了一種MILP方法,可以利用機(jī)器群體智能生成一個(gè)可行的初始解決方案用于自動(dòng)搜索優(yōu)化過程,該方案利用成本和QoS作為評(píng)估函數(shù),實(shí)驗(yàn)證明該方法可以降低云應(yīng)用程序的成本,并提高最終系統(tǒng)的質(zhì)量.為了實(shí)現(xiàn)服務(wù)組合成所需系統(tǒng)的所有階段自動(dòng)化,F(xiàn)anjiang等人[85]提出了一種服務(wù)組合自動(dòng)化的方法,該方法利用遺傳算法生成和優(yōu)化服務(wù)組合方案,利用功能性和非功能性需求相關(guān)度量對(duì)服務(wù)組合方案進(jìn)行評(píng)估.
此外,Simons等人[91]提出了一種新型的交互式蟻群算法,可用于軟件開發(fā)生命周期早期的軟件設(shè)計(jì)中.
在人類群體智能的應(yīng)用上,由于單個(gè)建模者無法建立高質(zhì)量概念模型,Jiang等人[72]設(shè)計(jì)了一個(gè)工具,可以使在線建模者突破時(shí)間空間限制進(jìn)行協(xié)作,完成概念模型建模,Huang等人[38]利用人群已有的設(shè)計(jì)方案建立了在線的程序應(yīng)用線框圖和UI設(shè)計(jì)示例之間的映射,為開發(fā)者提供參考.同樣的,Lasecki等人[92]提出了一個(gè)實(shí)時(shí)眾包系統(tǒng)Apparition,通過理解需求方對(duì)軟件功能的描述和畫出的草圖,在線群體幫助給出軟件的原型設(shè)計(jì).Latoza等人[93]研究了眾包軟件設(shè)計(jì)中解決方案之間的關(guān)系,其他人的解決方案可以幫助自己的解決方案演化,獲得更好的解決方案,這為軟件設(shè)計(jì)競(jìng)賽提供了好的改善方向.Nebeling等人[73]提出了輕量級(jí)Web信息系統(tǒng)開發(fā)方法,網(wǎng)站設(shè)計(jì)的演化基于人群提供的數(shù)據(jù)和功能,網(wǎng)站所需組件的開發(fā)也由眾包實(shí)現(xiàn).
人機(jī)結(jié)合群體智能在軟件設(shè)計(jì)問題上同樣有一定程度的應(yīng)用.例如,在面向?qū)ο缶幊讨?,Simons等人[86]發(fā)現(xiàn)使用演化計(jì)算和軟件代理的基于交互式搜索的人機(jī)結(jié)合群體智能方法進(jìn)行類設(shè)計(jì)非常有前景.
與傳統(tǒng)軟件設(shè)計(jì)方法相比,人類群體智能方法的使用能夠提供高質(zhì)量、多樣性的設(shè)計(jì)方案[93];機(jī)器群體智能能夠有效量化軟件設(shè)計(jì)中的各種約束,科學(xué)地進(jìn)行體系結(jié)構(gòu)、產(chǎn)品線和服務(wù)組合等設(shè)計(jì)問題.從表3中相關(guān)論文數(shù)量來看,關(guān)于如何使用人類群體智能進(jìn)行軟件設(shè)計(jì)和應(yīng)用的研究相對(duì)較少,其原因在于軟件設(shè)計(jì)任務(wù)很難分解為簡(jiǎn)單的子任務(wù),因此無法有效降低處理問題的復(fù)雜性.
軟件構(gòu)造是將設(shè)計(jì)模型實(shí)現(xiàn)為目標(biāo)軟件系統(tǒng)的過程,其中面臨的主要問題是如何高效編寫高質(zhì)量的代碼.表4給出了不同群體智能方法在解決軟件構(gòu)造問題上的代表性工作.其中人類群體智能方法在輔助調(diào)試[41,94-96]、程序優(yōu)化[97-98]和程序自動(dòng)修復(fù)[99-100]中都有應(yīng)用,這主要是因?yàn)檐浖_發(fā)者通常數(shù)量眾多,能夠大規(guī)模涌現(xiàn)群體智能.開源軟件代碼倉庫和社區(qū)的快速發(fā)展帶來大量的代碼、文檔和測(cè)試等編程資源和經(jīng)驗(yàn),機(jī)器群體智能方法復(fù)用這些知識(shí),可以自動(dòng)高效地解決很多編碼問題,例如程序優(yōu)化[101-106]和程序自動(dòng)修復(fù)[107-112];人機(jī)結(jié)合群體智能則在程序優(yōu)化[113]和程序自動(dòng)修復(fù)[114-115]中具有很好效果.
Table 4 Research on Collective Intelligence Based Software Coding表4 基于群體智能的軟件構(gòu)造相關(guān)研究
在編碼和調(diào)試問題上,人類群體智能主要體現(xiàn)在知識(shí)與經(jīng)驗(yàn)的復(fù)用.將人群的編碼調(diào)試經(jīng)驗(yàn)、相似功能代碼整合和代碼依賴庫的說明文檔等知識(shí)融合,形成編碼知識(shí)庫.開發(fā)者在開發(fā)新的軟件系統(tǒng)時(shí)可以利用知識(shí)庫對(duì)自己的代碼進(jìn)行優(yōu)化,修改錯(cuò)誤的函數(shù)使用方法、優(yōu)化代碼結(jié)構(gòu)、代碼算法優(yōu)化以及提高調(diào)試效率等.
例如經(jīng)驗(yàn)不足的新手開發(fā)者在編碼和錯(cuò)誤調(diào)試上通常會(huì)浪費(fèi)太多的時(shí)間,針對(duì)這一問題,Hartmann等人[41]設(shè)計(jì)了面向靜態(tài)語言的Help-MeOut推薦系統(tǒng),通過展示其他程序員是如何糾正類似錯(cuò)誤的示例來幫助用戶調(diào)試錯(cuò)誤和異常消息.Mujumdar等人[95]開發(fā)了一種輔助工具Crowd Debug,能夠?yàn)閯?dòng)態(tài)解釋的Web開發(fā)語言提供調(diào)試幫助.此外,F(xiàn)ast等人[94]提供的Codex工具能夠記錄程序員是如何使用編程語言的,新手程序員可以通過Codex掌握經(jīng)典函數(shù)調(diào)用方式,避免出現(xiàn)不必要的程序語句.
這種利用人類群體智能的輔助工具需要預(yù)先收集大量代碼方面的知識(shí),如何建立對(duì)應(yīng)的知識(shí)庫因而也是相關(guān)研究中的一個(gè)重要問題.一般來說,人們通常從編程相關(guān)的問答社區(qū)中獲取信息來建立知識(shí)庫,但其中出現(xiàn)的代碼片段往往不可直接運(yùn)行.基于此,Terragni等人[116]致力于將問答社區(qū)中代碼片段自動(dòng)合成可以直接編譯的程序;Chen等人[96]從Stack Overflow數(shù)據(jù)中建立代碼匹配數(shù)據(jù)庫,可以幫助開發(fā)者發(fā)現(xiàn)有缺陷的代碼,并且提出修復(fù)缺陷的解決方案.
利用群體智能對(duì)程序進(jìn)行優(yōu)化的研究主要關(guān)注編譯優(yōu)化.在人類群體智能層次上,F(xiàn)ast等人[98]設(shè)計(jì)了一個(gè)Python語言擴(kuò)展Meta,可以為開發(fā)者尋找代碼優(yōu)化和錯(cuò)誤修復(fù)方案.Auler等人[97]通過收集Web客戶端的性能數(shù)據(jù),為JavaScript建立了在線編譯標(biāo)記參數(shù)推薦系統(tǒng),可以對(duì)給定的平臺(tái)達(dá)到5倍的性能優(yōu)化.
在人機(jī)結(jié)合群體智能層次上,Cochran等人[113]提出了Program boosting方法來解決專業(yè)人士都難以解決的編程問題.例如在書寫正則表達(dá)式時(shí),通過熟練的開發(fā)人群提供問題的初始方案,通過演化來生成改進(jìn)的解決方案,在這期間,未經(jīng)訓(xùn)練的人群評(píng)估程序輸出來幫助產(chǎn)生改進(jìn)的方案,實(shí)驗(yàn)證明這樣使得正則表達(dá)式精度得到了提升.
除了人類群體智能利用編碼經(jīng)驗(yàn)知識(shí)輔助程序優(yōu)化的方式以外,利用搜索算法創(chuàng)建程序變體,生成自動(dòng)修復(fù)方案,在多個(gè)版本中選取最優(yōu)解決方案的機(jī)器群體智能同樣也被成功應(yīng)用于程序優(yōu)化.遺傳優(yōu)化(genetic improvement, GI)是其中的代表性自動(dòng)修復(fù)方案生成和優(yōu)化方法,其能通過自動(dòng)搜索生成新的程序代碼來改進(jìn)軟件的現(xiàn)有版本.在程序優(yōu)化任務(wù)中,有非常多的優(yōu)化評(píng)估函數(shù),例如軟件執(zhí)行效率[101-106]、能耗[117-119]和內(nèi)存消耗[120]等非功能性指標(biāo)都可以用于評(píng)估機(jī)器群體智能方法生成的優(yōu)化結(jié)果.
程序修復(fù)包括故障定位、補(bǔ)丁生成和補(bǔ)丁驗(yàn)證3個(gè)階段.程序自動(dòng)修復(fù)的評(píng)估準(zhǔn)則是通過測(cè)試用例的數(shù)量,修復(fù)過的代碼通過的測(cè)試用例越多,說明修復(fù)效果越好.為了利用人類群體智慧進(jìn)行故障定位,Adriano等人[99]討論了將復(fù)雜系統(tǒng)故障定位分解成可以眾包的微小任務(wù)的可能性,而Fryer等人[100]則對(duì)使用獎(jiǎng)勵(lì)機(jī)制鼓勵(lì)有能力的人發(fā)現(xiàn)軟件漏洞的現(xiàn)象進(jìn)行了系統(tǒng)的研究.
與上述研究相比,機(jī)器群體智能在程序自動(dòng)修復(fù)中的應(yīng)用更為廣泛,相關(guān)方法主要利用搜索算法對(duì)故障代碼進(jìn)行修改,希望能夠在不改變代碼功能的情況下自動(dòng)修復(fù)故障.例如Nguyen等人[109]提出了一種利用遺傳編程(genetic programming, GP)自動(dòng)進(jìn)行軟件修復(fù)的方法.通過將修改集中在與bug發(fā)生位置相關(guān)的區(qū)域,該方法有效地將搜索空間復(fù)雜性最小化,能在短時(shí)間內(nèi)生成大量的高質(zhì)量修復(fù)方案.Weimer等人[107]提出了一種用于故障定位和修復(fù)缺陷的全自動(dòng)方法GenProg.一旦發(fā)現(xiàn)程序錯(cuò)誤,GenProg就通過使用一種擴(kuò)展形式的遺傳編程演化程序變體來生成修復(fù)方案,直到既保留了所需的功能又修復(fù)程序中的缺陷為止.Le等人[108]進(jìn)一步通過實(shí)驗(yàn)驗(yàn)證了該方法的有效性.
除了高級(jí)程序語言外,程序修復(fù)還可以在匯編語言層次進(jìn)行.面向匯編語言的修復(fù)不需要訪問源代碼,具有很強(qiáng)的普適性,而且所有修復(fù)都可以在更細(xì)粒度的級(jí)別上進(jìn)行.例如Schulte等人[110]描述了一種利用進(jìn)化計(jì)算在匯編代碼級(jí)自動(dòng)修復(fù)遺留軟件的方法,在Java字節(jié)碼和x86匯編程序上的實(shí)驗(yàn)展示了如何獲得在保留所需程序特征的同時(shí)糾正缺陷的程序變體.
此外,為了提高機(jī)器群體智能方法在程序修復(fù)應(yīng)用中的有效性,需要提高機(jī)器群體智能評(píng)估修復(fù)結(jié)果的能力,F(xiàn)ast等人[111]研究了適應(yīng)度函數(shù)的設(shè)計(jì)問題,其提出的適應(yīng)度距離相關(guān)度量方法有助于提高算法的效率和準(zhǔn)確性.Qi等人[112]則從測(cè)試用例優(yōu)化角度進(jìn)行了研究,將回歸測(cè)試優(yōu)先級(jí)分析技術(shù)引入自動(dòng)化程序修復(fù)領(lǐng)域,并提出了一種新的優(yōu)先級(jí)分析技術(shù)FRTP,能夠減少修復(fù)過程中所需執(zhí)行測(cè)試用例的數(shù)量,大大提高自動(dòng)修復(fù)的效率.
在程序自動(dòng)修復(fù)領(lǐng)域中,人機(jī)結(jié)合群體智能中人類群體智能的作用往往體現(xiàn)在為機(jī)器群體智能提供知識(shí)庫,增強(qiáng)機(jī)器群體智能的效果.機(jī)器群智方法應(yīng)用于故障修復(fù)時(shí),解決方案的搜索空間非常巨大,處理問題時(shí)復(fù)雜性非常高.例如雖然GenProg方法在應(yīng)用時(shí)能顯示出非常好的效果,但是由于突變操作的隨機(jī)性,GenProg會(huì)生成無意義的補(bǔ)丁.Kim等人[115]利用人機(jī)結(jié)合群體智能,提出了基于模式的自動(dòng)程序修復(fù)技術(shù),將現(xiàn)有的人工編寫的補(bǔ)丁作為知識(shí)庫,通過學(xué)習(xí)總結(jié)出常見的修復(fù)模式為自動(dòng)生成補(bǔ)丁服務(wù).該方法生成的補(bǔ)丁比GenProg生成的補(bǔ)丁更容易被接受,且實(shí)驗(yàn)中的生成的補(bǔ)丁成功修復(fù)錯(cuò)誤的概率更高.Nguyen等人[114]在使用GI對(duì)程序進(jìn)行修復(fù)時(shí)也參考了人工開發(fā)的補(bǔ)丁來提高程序自動(dòng)修復(fù)的效果.
目前自動(dòng)化軟件構(gòu)造方法以形式化方法和模型驅(qū)動(dòng)軟件開發(fā)方法為主,機(jī)器群體智能方法尚無法實(shí)現(xiàn)完全自動(dòng)化的軟件構(gòu)造,因此軟件構(gòu)造階段的相關(guān)文獻(xiàn)數(shù)量最少,研究集中在程序優(yōu)化和修復(fù)上[94-96].與之相比,人類群體智能基本上是以經(jīng)驗(yàn)知識(shí)庫的形式出現(xiàn),在軟件構(gòu)造中發(fā)揮了輔助作用.機(jī)器群體智能反映了對(duì)自動(dòng)化軟件構(gòu)造目標(biāo)的不懈追求,將人力從繁雜的編碼任務(wù)解放出來,但是機(jī)器群體智能在程序優(yōu)化和自動(dòng)修復(fù)上的效果仍有待提高,搜索復(fù)雜性和解決方案本身距離滿足實(shí)用的要求也存在一定差距.
基于群體智能的軟件測(cè)試是基于群體智能的軟件工程研究的一個(gè)重要分支.軟件測(cè)試是搜索軟件中存在潛在錯(cuò)誤的過程,這非常契合機(jī)器群體智能的使用方式,其中基于搜索的軟件測(cè)試便是這一方向的代表,也是SBSE中最為熱門的研究領(lǐng)域[121].同時(shí),讓終端用戶參與到軟件測(cè)試過程中也是人類群體智能研究的關(guān)注點(diǎn),目前已提出了很多基于眾包的軟件測(cè)試方法[122].
群體智能在軟件測(cè)試中的應(yīng)用包括軟件測(cè)試和軟件驗(yàn)證,如表5所示.在軟件測(cè)試中,人類群體智能研究包括測(cè)試用例生成[123-125]、Oracle問題[126]、GUI測(cè)試[127-128]、性能測(cè)試[129]和可用性測(cè)試[130]等;機(jī)器群體智能方法應(yīng)用于測(cè)試用例生成[27,37,131-135]、測(cè)試用例排序[136]、Oracle問題[137]、GUI測(cè)試[138-141]、性能測(cè)試[142]、功能測(cè)試[143-144]和回歸測(cè)試[145]等和軟件模型檢測(cè)[146-149];人機(jī)結(jié)合群體智能在測(cè)試用例生成[150]和Oracle問題[150-151]中效果顯著.在軟件驗(yàn)證中,人類群體智能在錯(cuò)誤定位等方面有一些應(yīng)用[152-153].
Table 5 Research on Collective Intelligence Based Software Testing表5 基于群體智能的軟件測(cè)試相關(guān)研究
機(jī)器群體智能在軟件工程領(lǐng)域應(yīng)用的最早嘗試就是解決軟件測(cè)試數(shù)據(jù)生成問題.Miller等人[27]使用遺傳算法來自動(dòng)生成浮點(diǎn)數(shù)測(cè)試數(shù)據(jù),首次將測(cè)試數(shù)據(jù)生成問題轉(zhuǎn)變?yōu)榛谒阉鞯膬?yōu)化問題.隨后,相關(guān)研究的發(fā)展十分迅速,基于搜索的軟件工程領(lǐng)域中超過一半的研究都關(guān)注在軟件測(cè)試[27],其中包括遺傳算法、蟻群算法等機(jī)器群體智能方法已被廣泛應(yīng)用于測(cè)試用例的生成[37,131-135]、優(yōu)先級(jí)排序[136]等各種問題.
在回歸測(cè)試中,時(shí)間往往不足以執(zhí)行所有的測(cè)試用例,需要對(duì)測(cè)試用例的優(yōu)先級(jí)進(jìn)行排序.Singh等人[136]實(shí)現(xiàn)了回歸測(cè)試排序技術(shù)的算法形式,使用ACO優(yōu)化了排序結(jié)果.在路徑測(cè)試中,Li等人[133]使用ACO自動(dòng)化測(cè)試用例生成,使用代碼覆蓋率作為評(píng)估準(zhǔn)則.類似地,Srivastava等人[134]也使用ACO自動(dòng)生成測(cè)試用例來達(dá)到更好的代碼覆蓋率.在特殊情況下,對(duì)于某些容易出錯(cuò)的程序路徑需要重點(diǎn)測(cè)試,Rao等人[135]提出了一種適用于測(cè)試比較容易出錯(cuò)的路徑的方法,該方法提高了測(cè)試性能.Mahajan等人[131]曾提出一個(gè)模型,可以用來檢驗(yàn)遺傳算法被用于使用數(shù)據(jù)流測(cè)試技術(shù)自動(dòng)創(chuàng)建測(cè)試套件的性能,幫助評(píng)估測(cè)試用例生成的效果.
利用機(jī)器群體智能生成測(cè)試數(shù)據(jù)就是不斷搜索被測(cè)函數(shù)的輸入空間,生成新的測(cè)試數(shù)據(jù),不斷迭代直到測(cè)試數(shù)據(jù)集滿足給定覆蓋率等測(cè)試要求的過程.上述使用基于機(jī)器群體智能的測(cè)試用例生成方法能節(jié)省大量的人力資源,代碼覆蓋率也很高,但是在實(shí)現(xiàn)更高層次的代碼覆蓋上仍存在一些困難[154].
除了機(jī)器群體智能外,人類群體智能同樣也被應(yīng)用于測(cè)試數(shù)據(jù)生成.其目的通常是利用人類智力的主觀性有意識(shí)地生成測(cè)試數(shù)據(jù),有助于減少重復(fù)或無用的測(cè)試用例數(shù)量,同時(shí)可以提高代碼覆蓋率.例如Chen等人[125]提出基于謎題的半自動(dòng)測(cè)試環(huán)境,它將對(duì)象變異和復(fù)雜約束解決問題分解為小難題,采用游戲性的測(cè)試流程吸引人群,從而利用人群涌現(xiàn)的群體智能生成較優(yōu)的測(cè)試用例,該方法較當(dāng)前一些自動(dòng)測(cè)試用例生成技術(shù)提高了代碼覆蓋率.Pham等人[123]對(duì)Github開展了一項(xiàng)研究,GitHub社區(qū)中有能力的人可以很輕松地解決別人代碼庫中出現(xiàn)的問題,從這個(gè)現(xiàn)象中發(fā)現(xiàn)了從社會(huì)性代碼社區(qū)中生成測(cè)試用例的可能性[124],但是這個(gè)想法還有待完善.
研究者也嘗試使用人機(jī)結(jié)合群體智能來產(chǎn)生測(cè)試數(shù)據(jù),尤其是以人類知識(shí)庫的方式為機(jī)器群體智能的應(yīng)用提供支持,希望可以提高自動(dòng)化測(cè)試用例生成的效率和生成的測(cè)試用例質(zhì)量.例如McMinn等人[150]曾提出一種從開發(fā)者、源代碼和文檔抽取知識(shí)的自動(dòng)測(cè)試數(shù)據(jù)生成方法,從而通過利用這些知識(shí)來生成更加貼近真實(shí)應(yīng)用場(chǎng)景、和更加容易判斷測(cè)試結(jié)果的測(cè)試數(shù)據(jù).
除了測(cè)試用例生成和排序外,群體智能方法在其他測(cè)試問題上也得到了廣泛的應(yīng)用.在測(cè)試用例的預(yù)期輸出問題中,預(yù)期輸出Oracle的判定通常需要人工來完成.Pastore等人[126]曾開展一項(xiàng)實(shí)驗(yàn)來讓人群判斷程序斷言和代碼文檔描述的行為是否一致,他們發(fā)現(xiàn)人類群體智能對(duì)解決預(yù)期輸出問題有一定的幫助,但如何有效組織人類群體仍舊面臨巨大的挑戰(zhàn).
目前,盡管人工判定Oracle的成本很高,但很少有研究來提高這項(xiàng)工作的效率.人工判定Oracle成本的一個(gè)來源是機(jī)器生成的測(cè)試輸入通常具有不可讀性,例如自動(dòng)生成的字符串輸入往往是難以讀取的任意字符序列.Afshan等人[151]提出了一種將自然語言模型引入基于搜索的輸入數(shù)據(jù)生成過程中,以提高生成字符串的可讀性的方法.實(shí)驗(yàn)結(jié)果表明參與者在判定使用語言模型生成輸入的Oracle時(shí),速度顯著加快,部分實(shí)驗(yàn)在準(zhǔn)確性上也有顯著提高.
Just等人[137]發(fā)現(xiàn)Oracle問題很難利用機(jī)器群體智能自動(dòng)化解決,而利用底層函數(shù)或算法的約束來識(shí)別測(cè)試系統(tǒng)中的故障是比較有前景的判定Oracle的方法.
群體智能在針對(duì)不同開發(fā)方式和應(yīng)用場(chǎng)景的軟件測(cè)試方法中也有著廣泛的應(yīng)用,其中一個(gè)代表性例子是基于群體智能的圖形用戶界面(GUI)測(cè)試.GUI是如今軟件的重要組成部分,它的正確執(zhí)行是保證整個(gè)軟件正確性的必要條件.但是在機(jī)器群體智能的應(yīng)用中,創(chuàng)建一個(gè)可用于自動(dòng)化測(cè)試用例生成的模型是困難的[155],很少有工具能夠幫助自動(dòng)化測(cè)試過程.大部分研究只針對(duì)GUI測(cè)試的一個(gè)小階段進(jìn)行優(yōu)化.
在GUI測(cè)試上,目前工業(yè)界最常用的技術(shù)仍然是捕獲和重放工具,它簡(jiǎn)化了輸入序列的記錄和執(zhí)行,但是不支持測(cè)試人員尋找故障敏感的測(cè)試用例.Bauersfeld等人[138-139]針對(duì)GUI測(cè)試序列生成問題,使用蟻群優(yōu)化算法來生成對(duì)故障敏感的測(cè)試用例.此外,在進(jìn)行GUI測(cè)試時(shí)常常會(huì)因?yàn)橹谎芯坑脩艚缑娑z漏許多底層程序行為.Gross等人[140]開發(fā)出EXSYST原型工具,使用遺傳算法來生成測(cè)試用例,優(yōu)化GUI測(cè)試套件,以實(shí)現(xiàn)在探索用戶界面的同時(shí)保證最大可能的代碼覆蓋率.
上述研究表明群智優(yōu)化算法可以為GUI生成復(fù)雜的測(cè)試序列,但是測(cè)試序列有很強(qiáng)的隨機(jī)性.對(duì)于希望用戶在GUI中輸入特定輸入值的應(yīng)用程序,測(cè)試效率會(huì)非常低.Salvesen等人[141]利用動(dòng)態(tài)符號(hào)執(zhí)行生成特定輸入值,實(shí)驗(yàn)中使用DSE對(duì)基于搜索的測(cè)試生成工具EXSYST進(jìn)行拓展,成功增加了2個(gè)案例程序的測(cè)試代碼覆蓋率.
GUI測(cè)試難以自動(dòng)化,而人工測(cè)試GUI非常費(fèi)時(shí)、昂貴且難以集成到連續(xù)的測(cè)試過程中.Dolstra等人[127]展示了使用人類群體智能解決GUI測(cè)試的可能.實(shí)驗(yàn)證明,通過實(shí)例化測(cè)試系統(tǒng)的虛擬機(jī),讓測(cè)試人員通過互聯(lián)網(wǎng)訪問測(cè)試系統(tǒng)可以讓大量參與者參與到測(cè)試過程中,從而在軟件系統(tǒng)的連續(xù)測(cè)試中實(shí)現(xiàn)GUI的半自動(dòng)連續(xù)測(cè)試,并且成本很低.Vliegendhart等人[128]在Amazon的眾包平臺(tái)Mechanical Turk上對(duì)一個(gè)多媒體應(yīng)用程序進(jìn)行A/B測(cè)試的例子同樣證明了人類群體智能在GUI測(cè)試上的巨大優(yōu)勢(shì).
除了針對(duì)不同的待測(cè)軟件外,群體智能方法還被應(yīng)用于軟件不同質(zhì)量屬性的測(cè)試.其中,性能測(cè)試是群體智能廣泛應(yīng)用的一個(gè)領(lǐng)域,其目標(biāo)通常是發(fā)現(xiàn)影響系統(tǒng)服務(wù)質(zhì)量QoS的因素,如響應(yīng)時(shí)間、執(zhí)行效率和可靠性等.
在機(jī)器群體智能應(yīng)用中,Gu等人[142]針對(duì)組合服務(wù)軟件系統(tǒng)提出一種基于遺傳算法的測(cè)試用例自動(dòng)生成方法,該方法根據(jù)系統(tǒng)的工作流程,將系統(tǒng)使用模式建模為基于性能需求的QoS敏感因子,采用群智優(yōu)化算法自動(dòng)尋找具有最大或最小QoS的測(cè)試用例.實(shí)驗(yàn)證明該自動(dòng)測(cè)試數(shù)據(jù)生成方法生成的測(cè)試數(shù)據(jù)優(yōu)于隨機(jī)測(cè)試.
然而,對(duì)系統(tǒng)建模仿真測(cè)試或者在受控環(huán)境中進(jìn)行性能測(cè)試很難準(zhǔn)確評(píng)估在極端異構(gòu)環(huán)境中軟件運(yùn)行的性能.利用人類群體智能,將用戶的真實(shí)使用性能數(shù)據(jù)收集起來用于性能測(cè)試評(píng)估能夠幫助開發(fā)者團(tuán)隊(duì)識(shí)別和確定性能問題的優(yōu)先級(jí).Musson等人[129]在Lync(18)https://products.office.com/en-us/previous-versions/microsoft-lync-2013平臺(tái)上的實(shí)驗(yàn)證明了該方法的有效性.
并不是所有軟件測(cè)試問題都可以用機(jī)器群體智能解決.例如可用性測(cè)試是檢查軟件程序的人為因素和易用性等問題,人類群體智能基于人群的特點(diǎn)在這個(gè)領(lǐng)域有一些研究[130],但是機(jī)器群體智能很難在這個(gè)領(lǐng)域發(fā)揮作用.總的來說,群體智能被廣泛應(yīng)用于解決各種軟件測(cè)試問題,除上面提到的研究以外,功能測(cè)試[143-144]、回歸測(cè)試[145]等不同測(cè)試方法中遇到的問題都可以借助群體智能解決.
軟件測(cè)試的目的是發(fā)現(xiàn)程序中的錯(cuò)誤,而軟件驗(yàn)證則更加關(guān)注軟件是否滿足其所聲明的功能性和非功能性需求.目前,機(jī)器群體智能在軟件驗(yàn)證中的應(yīng)用主要集中于模型檢測(cè).例如Alba等人[146]將蟻群算法應(yīng)用于模型檢測(cè),在狀態(tài)空間中尋找反例.Banerjee等人[147]利用蟻群算法和粒子群算法來優(yōu)化模型檢測(cè).Katz等人[148-149]使用基于模型檢查的GP在程序規(guī)格說明中驗(yàn)證和合成代碼,其中模型檢查用于提供評(píng)估每個(gè)階段突變結(jié)果的適應(yīng)度函數(shù)值.
軟件驗(yàn)證一般由經(jīng)過專業(yè)訓(xùn)練的工程師進(jìn)行,如何讓未經(jīng)訓(xùn)練的普通人也能夠進(jìn)行軟件驗(yàn)證工作是人類群體智能相關(guān)研究的重點(diǎn).例如Dietl等人[152]將驗(yàn)證任務(wù)轉(zhuǎn)化成為小游戲,普通人熟悉游戲玩法便可以通過游戲證明軟件的正確性.Li等人[153]建立了一個(gè)系統(tǒng)CrowdMine,通過模擬實(shí)驗(yàn)證明未經(jīng)訓(xùn)練的人群確實(shí)在一些軟件驗(yàn)證工作如錯(cuò)誤定位等有幫助作用.
從表5相關(guān)文獻(xiàn)數(shù)量可以看出,人類群體智能和機(jī)器群體智能在軟件測(cè)試與驗(yàn)證階段都能發(fā)揮巨大作用,利用群體智能可以提高測(cè)試效率,降低成本.但是不同層次群體智能方法存在各自的優(yōu)缺點(diǎn),需要根據(jù)測(cè)試的實(shí)際要求進(jìn)行選擇.例如機(jī)器群體智能是一種廣泛適用的、有效的生成測(cè)試數(shù)據(jù)和優(yōu)化測(cè)試過程的方法,能夠解決許多人類群體智能不能解決的軟件測(cè)試問題[156];而人類群體智能利用大量在線工人參與完成測(cè)試任務(wù),對(duì)真實(shí)應(yīng)用場(chǎng)景和真實(shí)用戶表現(xiàn)的良好模擬是機(jī)器群體智能無法提供的[122].整體上來說,相比于傳統(tǒng)測(cè)試方法,群智方法更加高效、成本低廉,易于集成到持續(xù)集成過程中.
軟件維護(hù)階段的主要任務(wù)包括軟件演化以及軟件文檔和相關(guān)制品的更新.如表6所示,人類群體智能主要應(yīng)用于軟件演化[157-159],機(jī)器群體智能在軟件演化[160]和軟件重構(gòu)[161-163]及軟件模塊化[164-166]中都有研究,人機(jī)結(jié)合群體智能出現(xiàn)在軟件重構(gòu)[167]中.其中,Mariani等人[168]曾總結(jié)了應(yīng)用于確定軟件構(gòu)件的最佳重構(gòu)序列的基于搜索方法的共同特點(diǎn),并討論了未來的研究機(jī)會(huì).
Table 6 Research on Collective Intelligence Based Software Maintenance表6 基于群體智能的軟件維護(hù)相關(guān)研究
軟件的運(yùn)行環(huán)境往往會(huì)隨著系統(tǒng)使用時(shí)間的增長而發(fā)生變化,對(duì)應(yīng)地,軟件也需要不斷進(jìn)行演化和更新.在軟件開發(fā)中,軟件的上下文環(huán)境是很難監(jiān)視的,Ali等人[157]提出Social sensing以利用終端用戶監(jiān)視軟件上下文環(huán)境的變化,不斷發(fā)掘用戶需求,從而進(jìn)行軟件演化.He等人[158]提出一個(gè)模型,鼓勵(lì)用戶參與到軟件運(yùn)行適應(yīng)的流程中,用戶可以提出和修改他們的意見,應(yīng)用程序借鑒這些建議可以使自身運(yùn)行時(shí)更好地適應(yīng)環(huán)境.例如Nebeling等人[159]采用眾包的方式,讓用戶參與網(wǎng)頁接口自適應(yīng)過程中,從而讓網(wǎng)頁可以適應(yīng)廣泛的使用環(huán)境.
人類群體智能通過引入人群作為軟件系統(tǒng)的評(píng)估對(duì)象對(duì)軟件進(jìn)行演化和優(yōu)化,相比于上述人類群體智能的應(yīng)用,機(jī)器群體智能在軟件演化上的研究較少.Schulte等人[160]利用程序的“中性網(wǎng)絡(luò)”和演化算法可以對(duì)軟件進(jìn)行自動(dòng)演化,這項(xiàng)研究將對(duì)現(xiàn)實(shí)軟件系統(tǒng)的開發(fā)人員和維護(hù)人員有巨大幫助.
軟件重構(gòu)是提升程序性能以減緩其由于更改而性能退化的過程.重構(gòu)意味著通過修改程序來改進(jìn)程序結(jié)構(gòu),讓程序更容易理解.SBSE在軟件維護(hù)階段的研究重點(diǎn)就就是軟件重構(gòu)問題,相關(guān)研究主要關(guān)注2個(gè)方面[10]:1)利用群體智能方法將軟件優(yōu)化,形成重構(gòu)后的版本[161,167];2)優(yōu)化軟件的重構(gòu)步驟,使重構(gòu)獲得最好的效果[162-163].無論是軟件優(yōu)化過程還是重構(gòu)步驟的選擇,在機(jī)器群體智能應(yīng)用中都可以轉(zhuǎn)化為搜索問題,進(jìn)而探索最優(yōu)的解決方案.在軟件重構(gòu)中,機(jī)器群體智能應(yīng)用的問題在于如何評(píng)估方案的好壞.
例如軟件系統(tǒng)反復(fù)修改會(huì)導(dǎo)致代碼壞味[172]的出現(xiàn).重構(gòu)可以消除這些壞味,可以將代碼壞味作為評(píng)估重構(gòu)方案的指標(biāo),但是手工確定和執(zhí)行有用的重構(gòu)是一項(xiàng)艱巨的挑戰(zhàn).Kebir等人[162]提出一種基于遺傳算法的基于構(gòu)件軟件自動(dòng)重構(gòu)方法.該方法包括利用遺傳算法生成優(yōu)化重構(gòu)的最佳序列,檢測(cè)并消除與構(gòu)件相關(guān)的代碼壞味.Mkaouer等人[163]進(jìn)一步引入了一個(gè)基于NSGAⅡ的多目標(biāo)健壯模型,該模型將軟件質(zhì)量改進(jìn)、代碼壞味嚴(yán)重性和代碼的重要性作為評(píng)估的適應(yīng)度函數(shù),通過對(duì)3個(gè)因素的權(quán)衡以獲取重構(gòu)效果最大化.
人機(jī)結(jié)合群體智能同樣被應(yīng)用于解決軟件重構(gòu)問題.例如Ghannem等人[167]提出了一種交互式遺傳算法,該算法利用人的智力對(duì)產(chǎn)生的重構(gòu)建議進(jìn)行評(píng)估,從而提高重構(gòu)活動(dòng)的自動(dòng)化程度.
軟件模塊化是降低軟件復(fù)雜性的重要方法,有助于軟件實(shí)現(xiàn)可控、可維護(hù)和可擴(kuò)展.Mancoridis等人[164]最早將機(jī)器群體智能算法用于軟件的自動(dòng)模塊化.該方法利用了傳統(tǒng)的爬山算法和遺傳算法,取得了不錯(cuò)的效果.隨后Mancoridis等人[165]還開發(fā)了一個(gè)聚類工具Bunch,實(shí)現(xiàn)了軟件模塊聚類.在Mancoridis等人研究影響下,其他一些研究者也將軟件模塊聚類看作可以利用SBSE方法解決的研究問題.例如Harman等人[166]研究了將模塊粒度、內(nèi)聚性和耦合性度量作為評(píng)估的適應(yīng)度函數(shù)的影響.
除上述軟件維護(hù)問題以外,群體智能還被應(yīng)用在其他維護(hù)活動(dòng)中.例如在把遺留系統(tǒng)遷移到面向?qū)ο蠹夹g(shù)體系中的過程中,在代碼中識(shí)別對(duì)象是整個(gè)過程的關(guān)鍵任務(wù),Sahraoui等人[171]利用遺傳算法在過程代碼中識(shí)別對(duì)象解決了這一問題.
而在人類群體智能的應(yīng)用上,眾包還被用來解決軟件文檔維護(hù)問題[169]和軟件本地化問題[170].例如Jiau等人[169]提出了一種眾包軟件文檔重用的方法,能夠有效解決軟件相關(guān)文檔不足的問題.研究團(tuán)隊(duì)在Stackoverflow平臺(tái)上的研究證明了文檔重用的可行性,同時(shí)實(shí)驗(yàn)還表明文檔重用能夠有效提高文檔的覆蓋率和質(zhì)量.
軟件本地化是指將軟件產(chǎn)品的用戶界面和輔助文檔從其原產(chǎn)國語言向另一種語言轉(zhuǎn)化,使之適應(yīng)某一外國語言和文化的過程.Exton等人[170]發(fā)現(xiàn)眾包是解決本地化的可行方法,其使得軟件本地化的決策從大型企業(yè)轉(zhuǎn)移到服務(wù)用戶,從而使軟件可以有更多的語言可用,因此提出并描述了一種新的眾包模式,它可以為實(shí)現(xiàn)突破語言障礙的“信息與知識(shí)的平等獲取”提供一個(gè)平臺(tái).在這個(gè)平臺(tái)上,軟件本地化的決策由用戶執(zhí)行,用戶個(gè)體出于自身利益不斷優(yōu)化本地化方案,并接受其他人評(píng)估和優(yōu)化,最終得到的語言解決方案應(yīng)該是大家都認(rèn)可,最優(yōu)的結(jié)果.
在軟件維護(hù)階段中,以用戶群體作為人類群體智能涌現(xiàn)主體可以在軟件文檔編寫、軟件本地化等任務(wù)發(fā)揮優(yōu)勢(shì),給出更符合用戶群體需求的解決方案;而軟件重構(gòu)問題,如重構(gòu)序列確定問題對(duì)于非專業(yè)人群是十分困難的任務(wù),但是非常符合搜索算法的優(yōu)化思想,因而更加適合使用機(jī)器群體智能解決[161].從表6相關(guān)論文數(shù)量可以看出,軟件維護(hù)是軟件生命周期的最后一個(gè)階段,常常被開發(fā)者忽視,但是其實(shí)是一個(gè)非常重要且成本很大的開發(fā)階段,群體智能有利于軟件維護(hù)工作自動(dòng)化和簡(jiǎn)單化發(fā)展.
群體智能在軟件工程中的應(yīng)用十分廣泛,除了在軟件開發(fā)生命周期5個(gè)階段中有豐富的研究,在軟件工程的其他方面也有很多的應(yīng)用.如表7所示,人類群體智能還被應(yīng)用于軟件安全[17,173]、軟件用戶支持[174-176]和軟件創(chuàng)意競(jìng)賽服務(wù)[177]等研究,機(jī)器群體智能則在軟件項(xiàng)目管理上擁有巨大優(yōu)勢(shì)[178-179].
為了利用人類群體智能保證軟件安全,Arellano等人[180]開發(fā)了一個(gè)基于眾包的Web擴(kuò)展,不僅將用戶看作程序的使用者,更是程序想法設(shè)計(jì)的貢獻(xiàn)者,以保證Web應(yīng)用程序的安全性和完整性.類似地,Sharifi等人[173]實(shí)現(xiàn)了一個(gè)名為SmartNotes的系統(tǒng),利用人群眾包檢測(cè)潛在的Web瀏覽安全威脅.
而在軟件用戶支持方面,Chilana等人[174-175]發(fā)現(xiàn)即使在以用戶為中心的設(shè)計(jì)和可用性方面做出了最大的努力,也不是所有的用例中的細(xì)微差別都能在設(shè)計(jì)時(shí)預(yù)料到,用戶在尋找軟件相關(guān)幫助也十分困難.基于此,他們?cè)O(shè)計(jì)了LemonAid方法,允許用戶從其他用戶那里找到問題的答案,讓軟件支持能夠被重用.Chilana等人[176]之后還對(duì)LemonAid進(jìn)行實(shí)例研究,驗(yàn)證了LenmonAid的價(jià)值和有效性.
開展創(chuàng)意競(jìng)賽有益于眾包的推廣和軟件開放創(chuàng)新過程.Leimeister等人[177]發(fā)現(xiàn)許多基于信息技術(shù)的創(chuàng)意競(jìng)賽不能吸引用戶積極參與,相關(guān)發(fā)現(xiàn)強(qiáng)調(diào)了主辦方的榮譽(yù)、獎(jiǎng)勵(lì)和專業(yè)知識(shí)作為激勵(lì)的重要性.
Table 7 Research on Other Collective Intelligence Based Software Activities表7 其他基于群體智能的軟件工程活動(dòng)相關(guān)研究
軟件工程項(xiàng)目管理關(guān)注的是軟件生命周期不同階段執(zhí)行的復(fù)雜活動(dòng)管理,目標(biāo)是優(yōu)化軟件生產(chǎn)過程以及這個(gè)過程產(chǎn)生的產(chǎn)品.機(jī)器群體智能對(duì)于這類多目標(biāo)約束優(yōu)化問題有很強(qiáng)的處理能力,不同的解決方案生成算法和不同的評(píng)估適應(yīng)度函數(shù)是研究的重點(diǎn),其中Chang等人[178]最先將群智優(yōu)化算法應(yīng)用在軟件項(xiàng)目管理中,而Kapur等人[179]使用遺傳算法在有限的時(shí)間限制下為客戶提供最優(yōu)的產(chǎn)品發(fā)布人員和最優(yōu)的服務(wù)質(zhì)量.
以基于搜索軟件工程為代表的機(jī)器群體智能在軟件工程中的應(yīng)用已經(jīng)是一個(gè)相對(duì)成熟的研究領(lǐng)域了.但是,在已有的研究領(lǐng)域中還有許多問題無法使用機(jī)器群體智能來解決,包括在需求工程中如何尋找盡可能多且具有代表性的用戶群體、軟件測(cè)試中涉及人因工程的可用性測(cè)試和Oracle問題等.此外,各種新的軟件工程形式,如面向服務(wù)軟件工程[2]、云平臺(tái)軟件工程[181]、大數(shù)據(jù)軟件工程[182]的出現(xiàn)也向SBSE的廣泛應(yīng)用帶來了新的挑戰(zhàn).
在研究新的軟件工程問題外,機(jī)器群體智能的發(fā)展還需要新方法和新技術(shù)的支持.機(jī)器學(xué)習(xí)能夠在一定程度上彌補(bǔ)機(jī)器群體智能的不足,增強(qiáng)機(jī)器群體智能算法的性能,主要表現(xiàn)在其能夠代替人工,加深機(jī)器群體智能方法的自動(dòng)化程度,同時(shí)還能優(yōu)化群體智能算法性能.然而,這個(gè)交叉領(lǐng)域尚未成熟,許多問題還沒有現(xiàn)成可用的機(jī)器學(xué)習(xí)解決方案,使用機(jī)器學(xué)習(xí)解決問題的質(zhì)量也不能得到保證.
對(duì)于特定問題,機(jī)器群體智能使用者一直在尋找性能良好的群體優(yōu)化算法[183],然而這是一個(gè)非常困難的過程.同時(shí),機(jī)器群體智能通常依賴定制化的搜索算法來確保在具體問題上取得理想的效果[184].未來機(jī)器群體智能應(yīng)用的一種新方式應(yīng)該是在廣泛的問題實(shí)例中學(xué)習(xí)搜索策略,提供一種類似超啟發(fā)式搜索的單一的泛型方法[168].另一方面,通過機(jī)器學(xué)習(xí)的數(shù)據(jù)分析預(yù)測(cè)能力能夠?yàn)闄C(jī)器群體智能的應(yīng)用提供新思路,提高機(jī)器群體智能算法的效率.例如,在軟件測(cè)試中,根據(jù)已有測(cè)試結(jié)果預(yù)測(cè)哪些剩余的測(cè)試用例會(huì)失敗,哪些測(cè)試應(yīng)該有更高的優(yōu)先級(jí),通過預(yù)測(cè)能力加快軟件測(cè)試的速度.
如今軟件工程以及機(jī)器學(xué)習(xí)都和大數(shù)據(jù)技術(shù)緊密相連,大數(shù)據(jù)軟件工程因而也為機(jī)器群體智能的應(yīng)用提供了借鑒.在此基礎(chǔ)上,基于機(jī)器群體智能的軟件工程范式應(yīng)該轉(zhuǎn)變?yōu)閿?shù)據(jù)驅(qū)動(dòng)的軟件工程方法,即首先通過大數(shù)據(jù)技術(shù)從已有軟件系統(tǒng)、開源軟件和社區(qū)中采集海量的數(shù)據(jù)并組織形成信息,隨后通過對(duì)相關(guān)信息的整合和提煉,以機(jī)器群體智能為基礎(chǔ)形成自動(dòng)化的軟件工程問題解決模型.
人類群體智能通常從大規(guī)模人群的競(jìng)爭(zhēng)與合作中涌現(xiàn),其有效性高度依賴于人類群體的組織管理模式、人類群體智能的激勵(lì)機(jī)制以及質(zhì)量保證3個(gè)方面的因素.
當(dāng)前人類群體智能方法還停留在組織管理單個(gè)人類群體解決實(shí)際問題的階段,未來人類群體智能應(yīng)用的新方式應(yīng)該是將項(xiàng)目分解為小任務(wù),交給多個(gè)人群完成,利用不同人群的特點(diǎn)解決不同的任務(wù),從而提高群體智能的利用效率.例如在基于多人類群智的軟件開發(fā)前期,需求捕獲和原型開發(fā)可以同時(shí)進(jìn)行,一個(gè)人群用于收集需求,另一個(gè)人群為這些需求開發(fā)原型,人群中個(gè)體的特征取決于這個(gè)人群需要處理的問題.
人類智能方法應(yīng)用的困難在于如何有效促進(jìn)人群中個(gè)體之間的協(xié)同作用[32],未來人類群體智能領(lǐng)域需要加強(qiáng)對(duì)人類群體智能的形成機(jī)理和人群協(xié)作規(guī)律的探索,為高效組織管理人類群體和促進(jìn)協(xié)同作用提供堅(jiān)實(shí)的理論基礎(chǔ).另外,當(dāng)前互聯(lián)網(wǎng)是人類群體智能涌現(xiàn)的主要平臺(tái),需要解決人類群體智能方法在互聯(lián)網(wǎng)平臺(tái)上應(yīng)用的相關(guān)問題,例如人群組織管理相關(guān)的核心服務(wù)如何整合到互聯(lián)網(wǎng)平臺(tái)中.人類群體智能本身十分抽象,在使用時(shí)如何對(duì)群體協(xié)作程度進(jìn)行度量與調(diào)控,保證群體智能的工作效率需要更多的研究.
人類群體智能的激勵(lì)機(jī)制是群體智能涌現(xiàn)的動(dòng)力,對(duì)于激發(fā)參與者積極性和確??煽康慕桓镀脚_(tái)至關(guān)重要[185].Groen等人[186]在基于人群的需求工程中將參與者的自身動(dòng)力分為7種,但是大部分已有人類群體智能應(yīng)用激勵(lì)單一,因而僅能吸引小部分人群;或者激勵(lì)機(jī)制不合理,打擊大部分參與者的積極性.最好的方式就是針對(duì)不同類型的個(gè)體給予相應(yīng)的激勵(lì)機(jī)制,但是這種方式在實(shí)現(xiàn)中十分的不切實(shí)際,還有很多問題需要解決.
使用人類群體智能解決問題的質(zhì)量保證是最重要的問題.參與者短期參與項(xiàng)目,參與者的個(gè)人背景和工作能力各不相同,依賴上述人群完成的任務(wù)往往容易產(chǎn)生質(zhì)量問題[187].眾包軟件開發(fā)中存在23個(gè)和質(zhì)量有關(guān)的因素[188],質(zhì)量保證問題非常復(fù)雜.許多質(zhì)量相關(guān)工作有待評(píng)估,軟件質(zhì)量保證將會(huì)是人類群體智能方法未來的關(guān)注重點(diǎn).
人機(jī)結(jié)合群體智能結(jié)合了機(jī)器的高度并行性和人類智力的優(yōu)點(diǎn),是一種發(fā)揮基于群體智能的軟件工程優(yōu)點(diǎn)的有效方法.其中,人機(jī)之間的相互關(guān)系和組織形式是人機(jī)結(jié)合群體智能應(yīng)用所面臨的關(guān)鍵問題,即如何針對(duì)人類和機(jī)器的特點(diǎn)設(shè)計(jì)并分配最為合適的任務(wù).
現(xiàn)有的人機(jī)結(jié)合群體智能應(yīng)用的出發(fā)點(diǎn)在于機(jī)器群體智能在某些問題上存在局限性,需要人類智力的幫助才能解決問題.例如在Cochran等人[113]提出的Program boosting方法中,通過專業(yè)人群生成群智優(yōu)化算法的初始解,讓未經(jīng)訓(xùn)練的人群評(píng)估解的質(zhì)量是人機(jī)結(jié)合群體智能的良好嘗試.但是,這種形式的人機(jī)結(jié)合群體智能僅將人類智能作為機(jī)器群體智能的補(bǔ)充,如何利用機(jī)器學(xué)習(xí)方法來進(jìn)一步增強(qiáng)人機(jī)結(jié)合的能力,以及如何將半自動(dòng)化人機(jī)結(jié)合群體智能轉(zhuǎn)化為全自動(dòng)化人機(jī)結(jié)合群體智能仍需要進(jìn)一步研究.
此外,人機(jī)群體智能需要的人的知識(shí)可以通過建立知識(shí)庫來實(shí)現(xiàn)基于群體智能的軟件工程方法的自動(dòng)化.人群知識(shí)庫對(duì)絕大部分軟件工程問題都應(yīng)該有借鑒意義,因此在建立普遍適用的人群知識(shí)庫時(shí),知識(shí)的表示和共享要能滿足復(fù)用知識(shí)庫的要求,并遵循一定的規(guī)范.在此基礎(chǔ)上,復(fù)用人群知識(shí)庫能縮減軟件工程問題求解所需時(shí)間,提高軟件生產(chǎn)力.不同知識(shí)庫的相互補(bǔ)充還能使得全自動(dòng)群體智能的性能不斷提升,提高解決問題的性能.
基于群體智能的軟件工程為解決復(fù)雜軟件工程問題提供了新的思路,已成為現(xiàn)代軟件工程方法的重要組成部分.為了進(jìn)一步推廣該方法,還有必要開展更多的經(jīng)驗(yàn)研究,并與傳統(tǒng)軟件工程方法進(jìn)行系統(tǒng)對(duì)比.同時(shí),還需要針對(duì)云平臺(tái)系統(tǒng)、移動(dòng)應(yīng)用、智能軟件系統(tǒng)等新興軟件系統(tǒng)的特點(diǎn)開展基于群體智能的軟件工程的實(shí)證研究和示范性應(yīng)用.此外,需要開發(fā)全面的基于群體智能的軟件工程工具集,為該領(lǐng)域的推廣奠定基礎(chǔ).
基于群體智能的軟件工程是當(dāng)前軟件工程領(lǐng)域研究的前沿和熱點(diǎn),具有良好的發(fā)展和應(yīng)用前景.本文首先提出了涵蓋機(jī)器群體智能、人類群體智能以及人機(jī)結(jié)合群體智能的基于群體智能的軟件工程方法統(tǒng)一框架,隨后從軟件生命周期中的需求分析、設(shè)計(jì)、構(gòu)造、測(cè)試和維護(hù)5個(gè)方面總結(jié)了上述3個(gè)層次群體智能方法在軟件工程領(lǐng)域的應(yīng)用,最后討論了不同層次群體智能未來的發(fā)展方向和可能的挑戰(zhàn).