网站首页
教育杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
医学杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
经济杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
金融杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
管理杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
科技杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
工业杂志
CSSCI期刊 北大期刊 CSCD期刊 统计源期刊 知网收录期刊 维普收录期刊 万方收录期刊 SCI期刊(美)
SCI杂志
中科院1区 中科院2区 中科院3区 中科院4区
全部期刊
公務(wù)員期刊網(wǎng) 論文中心 正文

談軟件系統(tǒng)模塊間循環(huán)依賴識別

前言:想要寫出一篇引人入勝的文章?我們特意為您整理了談軟件系統(tǒng)模塊間循環(huán)依賴識別范文,希望能給你帶來靈感和參考,敬請閱讀。

談軟件系統(tǒng)模塊間循環(huán)依賴識別

摘要:軟件系統(tǒng)中各平臺多模塊開發(fā)過程中,若開發(fā)人員對自己模塊扇入、扇出盲目增刪,導(dǎo)致模塊間依賴變更,容易產(chǎn)生系統(tǒng)級循環(huán)依賴。如果模塊間產(chǎn)生循環(huán)依賴環(huán),代碼在編譯時若不清除中間生成文件,編譯生成的產(chǎn)品有極大的風(fēng)險或者采用2次編譯的方法解決。通過進(jìn)行循環(huán)依賴分析找出所有依賴環(huán)的解決辦法。

關(guān)鍵詞:循環(huán)依賴;非法依賴;多模塊;軟件工程;識別

引言

隨著當(dāng)前軟件系統(tǒng)越來越復(fù)雜,平臺越來越多,平臺包含的模塊也越來越多,開發(fā)人員在開發(fā)代碼的時候如果對模塊的依賴未按照設(shè)計要求隨意增加,容易導(dǎo)致平臺級或系統(tǒng)級別產(chǎn)生循環(huán)依賴。賈利敏等提出通過程序執(zhí)行軌跡,確定數(shù)據(jù)依賴結(jié)點(diǎn)、控制依賴結(jié)點(diǎn)和結(jié)點(diǎn)可到達(dá)語句來計算變量切片[1];不過此檢測方式粒度太細(xì),不利于軟件模塊級識別。劉杰等提出基于歸納變量的循環(huán)依賴分析方法[2],識別變量級別的循環(huán)依賴;劉鵬遠(yuǎn)等提出采用提取公共部分方法消除包級別循環(huán)依賴[3],若模塊粒度更細(xì)、數(shù)量更大的話,不易實(shí)現(xiàn);丁麗麗等基于GCC5.1針對分支嵌套循環(huán)的依賴提出計算依賴距離方法能夠快速地分析出該類循環(huán)潛在的并行性[4],但此計算類似C語言某幾條語句循環(huán)依賴,不適用于系統(tǒng)內(nèi)模塊查找循環(huán)依賴。

1依賴概述

在架構(gòu)設(shè)計合理,各平臺的依賴關(guān)系應(yīng)該是上層平臺依賴下層平臺,各模塊的扇入、扇出設(shè)計合理的前提下,整個系統(tǒng)所有模塊的依賴關(guān)系不應(yīng)該存在循環(huán)依賴。正常情況下平臺或模塊間的依賴關(guān)系應(yīng)該是上層平臺依賴下層平臺:①上層依賴下層。②上層對下層一對一或一對多。③最下層不對本平臺依賴,但可能會對下層級平臺有依賴。④最上層不會被本平臺依賴,但會被上層平臺依賴。⑤存在上層跨層依賴下層。⑥所有模塊都會被依賴。⑦所有模塊對外不重復(fù)。

2循環(huán)依賴分析與解決方案

2.1分析根因

由于平臺級的循環(huán)依賴根因也是由于各平臺對應(yīng)的模塊產(chǎn)生的模塊級循環(huán)依賴導(dǎo)致,所以可以把平臺級循環(huán)依賴和模塊級循環(huán)依賴看作相同的問題。循環(huán)依賴的根因是縱向依賴鏈上出現(xiàn)了環(huán):如A依賴B、B依賴C、C依賴A或D依賴E、E依賴F、F依賴G、G依賴D,這樣就出現(xiàn)依賴環(huán),當(dāng)然這個是比較簡單的環(huán)示例,在實(shí)際情況中,有的環(huán)路節(jié)點(diǎn)有很多個可以達(dá)到10多個模塊,如果靠人工計算,一是計算工作量比較大,另一個是容易遺漏。

2.1.1數(shù)學(xué)模型假設(shè)數(shù)學(xué)模型如下。1)假定我們當(dāng)前有一個平臺(多個平臺檢測方法類似)。2)假定這一個平臺一共有n個模塊{M1,M2,M3,…,Mn}。3)第k個模塊扇入ik個。4)第k個模塊扇出ok個。

2.1.2計算方法1)把這n個模塊所有扇出o1,o2,o3,…,on合并起來,記為AllOutputList[]。2)把這n個模塊遍歷,扇入不在AllOutputList中的刪除,因?yàn)檫@些刪除的依賴是從其他平臺引入的依賴,此步處理完后,所有模塊的扇入只來源此平臺的扇出,這樣在后續(xù)計算時,減少冗余的計算。3)選擇任意模塊作為當(dāng)前計算模塊,并檢查此模塊是否有扇入,如果有扇入則把所有扇入的父節(jié)點(diǎn)進(jìn)行統(tǒng)計并去重,并把此模塊記錄到ParentsList數(shù)組,如某模塊一共有20個扇入,其中5個扇入來源于A模塊、10個扇入來源于B模塊、另外5個扇入來源于C模塊,則此模塊的Parents數(shù)據(jù)包含A、B、C三個模塊,此時Parents里存放A、B、C;如果沒有扇入,則不計算。4)遍歷Parents數(shù)組所有成員,如A,則先把A與Par-entsList中所有元素進(jìn)行比較,檢查是否有重復(fù),若有重復(fù),則發(fā)現(xiàn)環(huán),并打印環(huán),然后出棧;若無重復(fù),則把A模塊視為當(dāng)前計算模塊,把A模塊進(jìn)行壓棧,并返回到步驟3;等數(shù)組的第一個成員完成遍歷后,繼續(xù)搜索Parents第二個成員B,并返回到步驟3,把B模塊視作模塊1進(jìn)行遞歸;如果沒有重復(fù),則把A壓棧到ParentsList;并返回到步驟3,把A模塊視作模塊1進(jìn)行遞歸,依此類推。5)在檢查的過程中如果發(fā)現(xiàn)當(dāng)前計算模塊沒有扇入,則不計算,直接返回。通過不斷查詢數(shù)組中成員數(shù)據(jù)是否包含新模塊名,再對數(shù)組進(jìn)行壓棧、出棧,再對比,這樣最終可遍歷到整個系統(tǒng)所有循環(huán)依賴環(huán)。經(jīng)過3、4、5這3步能把所有模塊所有依賴環(huán)找出來。但還有另一個問題:多個依賴環(huán)有重復(fù)的情形,假設(shè)4個模塊依賴環(huán)為:A依賴B,B依賴C,C依賴D,D依賴A,則搜索出來的結(jié)果可能出現(xiàn)環(huán)的4種情況分別為:A,B,C,D;B,C,D,A;C,D,A,B;D,A,B,C。碰到這種情形需要對這幾種環(huán)進(jìn)行去重操作,詳細(xì)處理辦法是把生成環(huán)的所有結(jié)點(diǎn)分別存放到二維數(shù)組以模塊名為單位排序后進(jìn)行比較,如果相同,則表示環(huán)相同,反之則不相同。像首尾相同的模塊:[A—B—C—D—A],這樣的環(huán)?。跘—B—C—D],此去重方法較簡單,不再贅述。

2.2測試數(shù)據(jù)來源

來源于XX產(chǎn)品XX平臺,測試模塊220個,扇入、扇出共計2000多個。

3實(shí)驗(yàn)結(jié)果與分析

通過對數(shù)據(jù)進(jìn)行計算后展示的結(jié)果如下(只展示部分?jǐn)?shù)據(jù),實(shí)際發(fā)現(xiàn)環(huán)個數(shù)72個)。從上述結(jié)果可以看出:①單模塊可能會存在于多個環(huán)。②可發(fā)現(xiàn)被其他多次循環(huán)依賴模塊。

4結(jié)語

本文通過把軟件系統(tǒng)中模塊名視為樹節(jié)點(diǎn),通過深度遍歷優(yōu)先算法進(jìn)行查找模塊間依賴環(huán),不斷對縱向依賴鏈進(jìn)行先判斷再壓棧,若對下層無依賴則出棧,遞歸查詢所有依賴環(huán),并且給出多種依賴環(huán)去重的方法,最終發(fā)現(xiàn)所有模塊所有依賴環(huán)。不過還有一個問題,當(dāng)前方法查找出來的依賴環(huán)不具備給架構(gòu)師詳細(xì)依賴接口的能力,需要在代碼實(shí)現(xiàn)的時候壓棧、出棧時把父子節(jié)點(diǎn)之間的接口關(guān)系也添加上,這個難度也不大,不再贅述。

參考文獻(xiàn):

[1]賈利敏,張忠林.一種簡化依賴關(guān)系的動態(tài)程序切片算法[J].鄭州大學(xué)學(xué)報,2009,30(2):84-87.

[2]劉杰,曹琰,魏強(qiáng),等.符號執(zhí)行中的循環(huán)依賴分析方法[J].計算機(jī)工程,2012,38(22):24-33.

[3]劉鵬遠(yuǎn),鄧沌華,李祥.不同粒度循環(huán)依賴的消去方法[J].信息通信,2013(6):9-10.

[4]丁麗麗,李雁冰,張素平,等.分支嵌套循環(huán)的自動并行化研究[J].計算機(jī)科學(xué),2017,44(5):14-52.

作者:任啟紅 黃輝 周鋒 王永亮 單位:三江學(xué)院計算機(jī)科學(xué)與工程學(xué)院

免责声明

本站为第三方开放式学习交流平台,所有内容均为用户上传,仅供参考,不代表本站立场。若内容不实请联系在线客服删除,服务时间:8:00~21:00。

AI写作,高效原创

在线指导,快速准确,满意为止

立即体验
文秘服务 AI帮写作 润色服务 论文发表