本發(fā)明屬于計(jì)算機(jī)技術(shù)領(lǐng)域,具體地涉及一種基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法。
背景技術(shù):
軟件產(chǎn)品線是一組相關(guān)聯(lián)的系列產(chǎn)品,也被稱為產(chǎn)品家族。各軟件產(chǎn)品擁有共同的核心資產(chǎn),產(chǎn)品家族中產(chǎn)品成員之間的差異被稱為可變性。通常使用特征模型來描述這樣的一個(gè)產(chǎn)品集合,特征往往對應(yīng)著系統(tǒng)的功能模塊,組成構(gòu)件等。而產(chǎn)品是由一組選定的特征構(gòu)成,特征模型定義了特征與特征之間的約束關(guān)系,判定由特征生成產(chǎn)品的有效性。對于軟件產(chǎn)品線而言,產(chǎn)品派生是指從其領(lǐng)域工程所得到的特征模型上選擇合適的特征,然后由選擇的特征構(gòu)建軟件產(chǎn)品的過程。如何復(fù)用核心資產(chǎn)并高效率的進(jìn)行軟件產(chǎn)品的派生是研究軟件產(chǎn)品線的重要目的。目前主流算法是利用多目標(biāo)優(yōu)化算法來進(jìn)行特征選擇。
在具體應(yīng)用領(lǐng)域,一個(gè)合法(沒有約束違反情況)的產(chǎn)品才是能實(shí)際可行的方案。產(chǎn)品有效率將是軟件產(chǎn)品線特征模型選擇問題的一個(gè)很重要的評估指標(biāo)?,F(xiàn)有算法,例如sayyad以及henard等人的研究中,最終種群的有效個(gè)體比率(vr)指標(biāo)則表現(xiàn)不佳。具體到問題本身,由于當(dāng)前對特征模型進(jìn)行基因編碼時(shí),當(dāng)前算法大部分對特征模型進(jìn)行直接編碼,基因節(jié)點(diǎn)之間的相關(guān)性太高,交叉變異過程中難以保持子代的有效性,進(jìn)而導(dǎo)致最終解集的產(chǎn)品有效率較低的情況出現(xiàn)。
技術(shù)實(shí)現(xiàn)要素:
本發(fā)明的目的在于針對現(xiàn)有技術(shù)的缺陷,提供基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法。
本發(fā)明的技術(shù)方案如下:一種基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法,包括如下步驟:
a、從待進(jìn)行產(chǎn)品派生的產(chǎn)品線提取得到特征模型;
b、采用遺傳算法對所述特征模型進(jìn)行特征選擇,形成新的解集;
c、將步驟b得到的所有解集,按照特征模型變異對應(yīng)的解釋,轉(zhuǎn)換為對應(yīng)的產(chǎn)品配置,并交由產(chǎn)品線其他工序生成最終產(chǎn)品。
優(yōu)選地,步驟a具體包括如下步驟:
a1、使用步驟xml格式從待進(jìn)行產(chǎn)品派生的產(chǎn)品線提取得到特征模型;
a2、將得到的特征模型轉(zhuǎn)化為cnf格式,便于調(diào)用步驟at求解器以及約束違反項(xiàng)的計(jì)數(shù)。
優(yōu)選地,在步驟b具體包括如下步驟:
b1、根據(jù)步驟a得到的特征模型獲得所有特征樹子樹;
b2、隨機(jī)選擇所述特征模型中的一個(gè)特征樹子樹,并將所述特征樹子樹對應(yīng)的基因位進(jìn)行交叉操作;
b3、將交叉得到的個(gè)體進(jìn)行單點(diǎn)變異操作,融合親代個(gè)體與子代個(gè)體形成一個(gè)新種群,對所述新種群中的所有個(gè)體進(jìn)行適應(yīng)度計(jì)算,按照適應(yīng)度大小排序從而得到新的解集。
優(yōu)選地,在步驟b1中具體包括如下步驟:
b11、建立所述特征樹子樹的根節(jié)點(diǎn)集合,其中,所述根節(jié)點(diǎn)集合是特征樹所有節(jié)點(diǎn)組成的集合;
b12、從跨子樹約束集合中取出一條約束,對所述約束中的對應(yīng)特征樹上的兩個(gè)節(jié)點(diǎn)求取最小公共祖先節(jié)點(diǎn),并將所述兩個(gè)節(jié)點(diǎn)到所述最小公共祖先節(jié)點(diǎn)路徑上的所有節(jié)點(diǎn)從所述根節(jié)點(diǎn)集合中移除;
b13、不斷重復(fù)步驟b12直到所述跨子樹約束集合為空,則所述根節(jié)點(diǎn)集合中包含所有的特征樹子樹的根節(jié)點(diǎn)。
優(yōu)選地,在步驟b2中具體包括如下步驟:
b21、從所述特征樹子樹的根節(jié)點(diǎn)集合中移除特征樹的根節(jié)點(diǎn);
b22、對所有特征樹子樹所含的節(jié)點(diǎn)數(shù)進(jìn)行計(jì)數(shù),按照輪盤選擇算法選擇待交叉的子樹根節(jié)點(diǎn),得到所有待交叉的基因位;
b23、判斷親代個(gè)體中待交叉的根節(jié)點(diǎn)對應(yīng)的基因位是否均為true,如果是,則進(jìn)行交叉操作,如果否,則重復(fù)步驟b22得到新的待交叉基因位。
本發(fā)明提供的技術(shù)方案具有如下有益效果:
所述基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法可以在遺傳算法的框架下高效地對具體的軟件產(chǎn)品線工程特征模型進(jìn)行產(chǎn)品派生;而且,通過設(shè)計(jì)基于特征樹子樹的新交叉算子來改進(jìn)迭代效果,可以根據(jù)實(shí)際表現(xiàn)顯著地提高最終解集的有效產(chǎn)品率。
附圖說明
圖1是一個(gè)簡單手機(jī)樣例的特征樹子樹結(jié)構(gòu)示意圖;
圖2是本發(fā)明實(shí)施例提供的基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法的流程框圖。
具體實(shí)施方式
為了使本發(fā)明的目的、技術(shù)方案及優(yōu)點(diǎn)更加清楚明白,以下結(jié)合附圖及實(shí)施例,對本發(fā)明進(jìn)行進(jìn)一步詳細(xì)說明。應(yīng)當(dāng)理解,此處所描述的具體實(shí)施例僅僅用以解釋本發(fā)明,并不用于限定本發(fā)明。
除非上下文另有特定清楚的描述,本發(fā)明中的元件和組件,數(shù)量既可以單個(gè)的形式存在,也可以多個(gè)的形式存在,本發(fā)明并不對此進(jìn)行限定。本發(fā)明中的步驟雖然用標(biāo)號進(jìn)行了排列,但并不用于限定步驟的先后次序,除非明確說明了步驟的次序或者某步驟的執(zhí)行需要其他步驟作為基礎(chǔ),否則步驟的相對次序是可以調(diào)整的。可以理解,本文中所使用的術(shù)語“和/或”涉及且涵蓋相關(guān)聯(lián)的所列項(xiàng)目中的一者或一者以上的任何和所有可能的組合。
需要說明的是,產(chǎn)品通常由一組選中的特征構(gòu)成,特征則對應(yīng)著具體系統(tǒng)的某項(xiàng)功能。特征模型(featuremodels)則可以被用來描述這樣的整個(gè)產(chǎn)品家族。特征模型可以用來表達(dá)一個(gè)產(chǎn)品線上的所有可能產(chǎn)品,并且能夠準(zhǔn)確的表達(dá)各個(gè)特征之間的約束關(guān)系。一個(gè)特征模型可由一顆特征樹來描述,由一系列特征以及之間的約束關(guān)系構(gòu)成:
a)親代特征及其子特征的約束關(guān)系;
b)跨子樹約束,通常是依賴和互斥關(guān)系。
一個(gè)特征模型通常能轉(zhuǎn)換成布爾析取范式(cnf)。字句代表了特征之間的約束關(guān)系,變量對應(yīng)著特征,可以是選中的特征(fi)或是未選中的特征
而且,一個(gè)產(chǎn)品配置由特征模型的組選中特征構(gòu)成,可以表示為:c={l1,…,lm},其中l(wèi)j=fj或
例如,圖1中的一個(gè)產(chǎn)品配置為
但是,將違反了特征模型中約束關(guān)系的配置稱為無效配置,例如
多目標(biāo)優(yōu)化通常用來研究在具體領(lǐng)域下多個(gè)目標(biāo)同時(shí)最優(yōu)化的問題。多目標(biāo)優(yōu)化問題可以由一組目標(biāo)函數(shù)以及相關(guān)的約束條件組成。令x為產(chǎn)品線步驟pl的所有的可能配置空間,v=[f1(x),…,fk(x)]t為k個(gè)目標(biāo)函數(shù)的優(yōu)化目標(biāo)向量。為了使得k個(gè)目標(biāo)函數(shù)同時(shí)最小,即找到一個(gè)配置項(xiàng),使得目標(biāo)向量v最小。
基于上述描述,本發(fā)明實(shí)施例提供的基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法使用ibea多目標(biāo)遺傳算法實(shí)現(xiàn)多目標(biāo)優(yōu)化的目的。
具體的,請參閱圖2,本發(fā)明實(shí)施例提供的基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法具體地包括如下步驟:
步驟1、從待進(jìn)行產(chǎn)品派生的產(chǎn)品線提取得到特征模型。
具體的,在步驟1中,包括如下步驟:
步驟11、使用步驟xml格式從待進(jìn)行產(chǎn)品派生的產(chǎn)品線提取得到特征模型;
步驟12、將得到的特征模型轉(zhuǎn)化為cnf格式(布爾析取范式),便于調(diào)用步驟at求解器以及約束違反項(xiàng)的計(jì)數(shù)。
步驟2、采用遺傳算法對所述特征模型進(jìn)行特征選擇,形成新的解集。
具體的,在步驟2具體包括如下步驟:
步驟21、根據(jù)步驟1得到的特征模型獲得所有特征樹子樹;
步驟22、隨機(jī)選擇所述特征模型中的一個(gè)特征樹子樹,并將所述特征樹子樹對應(yīng)的基因位進(jìn)行交叉操作;
步驟23、將交叉得到的個(gè)體進(jìn)行單點(diǎn)變異操作,融合親代個(gè)體與子代個(gè)體形成一個(gè)新種群,對所述新種群中的所有個(gè)體進(jìn)行適應(yīng)度計(jì)算,按照適應(yīng)度大小排序從而得到新的解集。
具體的,在步驟21中具體包括如下步驟:
步驟211、建立所述特征樹子樹的根節(jié)點(diǎn)集合,其中,所述根節(jié)點(diǎn)集合是特征樹所有節(jié)點(diǎn)組成的集合;
步驟212、從跨子樹約束集合中取出一條約束,對所述約束中的對應(yīng)特征樹上的兩個(gè)節(jié)點(diǎn)求取最小公共祖先節(jié)點(diǎn),并將所述兩個(gè)節(jié)點(diǎn)到所述最小公共祖先節(jié)點(diǎn)路徑上的所有節(jié)點(diǎn)從所述根節(jié)點(diǎn)集合中移除;
步驟213、不斷重復(fù)步驟212直到所述跨子樹約束集合為空,則所述根節(jié)點(diǎn)集合中包含所有的特征樹子樹的根節(jié)點(diǎn)。
在步驟22中具體包括如下步驟:
步驟221、從所述特征樹子樹的根節(jié)點(diǎn)集合中移除特征樹的根節(jié)點(diǎn);
步驟222、對所有特征樹子樹所含的節(jié)點(diǎn)數(shù)進(jìn)行計(jì)數(shù),按照輪盤選擇算法選擇待交叉的子樹根節(jié)點(diǎn),得到所有待交叉的基因位;
步驟223、判斷親代個(gè)體中待交叉的根節(jié)點(diǎn)對應(yīng)的基因位是否均為true,如果是,則進(jìn)行交叉操作,如果否,則重復(fù)步驟222得到新的待交叉基因位。
步驟3、將步驟2得到的所有解集,按照特征模型變異對應(yīng)的解釋,轉(zhuǎn)換為對應(yīng)的產(chǎn)品配置,并交由產(chǎn)品線其他工序生成最終產(chǎn)品。
例如,圖1是一個(gè)簡單手機(jī)樣例的特征樹子樹,圖中橢圓所圍的節(jié)點(diǎn)構(gòu)成所有的特征樹子樹,在進(jìn)行交叉時(shí),以特征節(jié)點(diǎn)“傳感器”作為父節(jié)點(diǎn)的子樹可以作為一顆特征樹子樹,設(shè)“傳感器”、“重力感應(yīng)”和“距離感應(yīng)”在編碼中分別編碼為f4,f2,f9,則進(jìn)行交叉操作時(shí),親代的個(gè)體的f4,f2,f9三個(gè)基因位將同時(shí)交換。
又例如,以圖1為例,在步驟2中采用遺傳算法對所述特征模型進(jìn)行特征選擇,形成新的解集的過程具體如下:
1)設(shè)定參數(shù),本次示例中種群大小設(shè)為300,變異概率設(shè)為為染色體長度的倒數(shù),即1/clength,clength為染色體中的基因個(gè)數(shù);
2)對特征模型進(jìn)行染色體編碼,采用二進(jìn)制編碼,ture表示選定,false表示未選定,參考圖1所示的模型編碼如下:
3)初始化種群,采用隨機(jī)初始化,即個(gè)體的染色體基因位隨機(jī)選擇0或者1;
4)判斷是否達(dá)到給定的迭代代數(shù),是則結(jié)束操作,選擇種群中所有未違反約束條件的個(gè)體作為最終得到的產(chǎn)品配置。否則繼續(xù)執(zhí)行下一步操作;
5)采用錦標(biāo)賽選擇法,挑選出親代個(gè)體進(jìn)行交叉操作,交叉操作需要按照本發(fā)明設(shè)計(jì)的特征樹子樹交叉的方法,即隨機(jī)選擇特征模型中的一顆特征樹子樹,將特征樹子樹對應(yīng)的基因塊進(jìn)行交叉;
6)對交叉得到的個(gè)體進(jìn)行單點(diǎn)變異操作;
7)融合親代個(gè)體與子代個(gè)體稱為一個(gè)新種群,對新種群中的所有個(gè)體進(jìn)行適應(yīng)度計(jì)算,按照適應(yīng)度大小排序,挑選出前300個(gè)個(gè)體保留,進(jìn)行操作4)。
相較于現(xiàn)有技術(shù),本發(fā)明具有如下有益效果:所述基于子樹分解的軟件產(chǎn)品線產(chǎn)品派生方法可以在遺傳算法的框架下高效地對具體的軟件產(chǎn)品線工程特征模型進(jìn)行產(chǎn)品派生;而且,通過設(shè)計(jì)基于特征樹子樹的新交叉算子來改進(jìn)迭代效果,可以根據(jù)實(shí)際表現(xiàn)顯著地提高最終解集的有效產(chǎn)品率。
對于本領(lǐng)域技術(shù)人員而言,顯然本發(fā)明不限于上述示范性實(shí)施例的細(xì)節(jié),而且在不背離本發(fā)明的精神或基本特征的情況下,能夠以其他的具體形式實(shí)現(xiàn)本發(fā)明。因此,無論從哪一點(diǎn)來看,均應(yīng)將實(shí)施例看作是示范性的,而且是非限制性的,本發(fā)明的范圍由所附權(quán)利要求而不是上述說明限定,因此旨在將落在權(quán)利要求的等同要件的含義和范圍內(nèi)的所有變化囊括在本發(fā)明內(nèi)。不應(yīng)將權(quán)利要求中的任何附圖標(biāo)記視為限制所涉及的權(quán)利要求。
此外,應(yīng)當(dāng)理解,雖然本說明書按照實(shí)施方式加以描述,但并非每個(gè)實(shí)施方式僅包含一個(gè)獨(dú)立的技術(shù)方案,說明書的這種敘述方式僅僅是為清楚起見,本領(lǐng)域技術(shù)人員應(yīng)當(dāng)將說明書作為一個(gè)整體,各實(shí)施例中的技術(shù)方案也可以經(jīng)適當(dāng)組合,形成本領(lǐng)域技術(shù)人員可以理解的其他實(shí)施方式。