• <input id="zdukh"></input>
  • <b id="zdukh"><bdo id="zdukh"></bdo></b>
      <b id="zdukh"><bdo id="zdukh"></bdo></b>
    1. <i id="zdukh"><bdo id="zdukh"></bdo></i>

      <wbr id="zdukh"><table id="zdukh"></table></wbr>

      1. <input id="zdukh"></input>
        <wbr id="zdukh"><ins id="zdukh"></ins></wbr>
        <sub id="zdukh"></sub>
        公務(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é)點、控制依賴結(jié)點和結(jié)點可到達(dá)語句來計算變量切片[1];不過此檢測方式粒度太細(xì),不利于軟件模塊級識別。劉杰等提出基于歸納變量的循環(huán)依賴分析方法[2],識別變量級別的循環(huán)依賴;劉鵬遠(yuǎn)等提出采用提取公共部分方法消除包級別循環(huán)依賴[3],若模塊粒度更細(xì)、數(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)示例,在實際情況中,有的環(huán)路節(jié)點有很多個可以達(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中的刪除,因為這些刪除的依賴是從其他平臺引入的依賴,此步處理完后,所有模塊的扇入只來源此平臺的扇出,這樣在后續(xù)計算時,減少冗余的計算。3)選擇任意模塊作為當(dāng)前計算模塊,并檢查此模塊是否有扇入,如果有扇入則把所有扇入的父節(jié)點進(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é)點分別存放到二維數(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實驗結(jié)果與分析

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

        4結(jié)語

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

        无码人妻一二三区久久免费_亚洲一区二区国产?变态?另类_国产精品一区免视频播放_日韩乱码人妻无码中文视频
      2. <input id="zdukh"></input>
      3. <b id="zdukh"><bdo id="zdukh"></bdo></b>
          <b id="zdukh"><bdo id="zdukh"></bdo></b>
        1. <i id="zdukh"><bdo id="zdukh"></bdo></i>

          <wbr id="zdukh"><table id="zdukh"></table></wbr>

          1. <input id="zdukh"></input>
            <wbr id="zdukh"><ins id="zdukh"></ins></wbr>
            <sub id="zdukh"></sub>
            贵阳市| 定边县| 博爱县| 静宁县| 罗定市| 黑水县| 湘乡市| 垦利县| 谷城县| 禹城市| 鲜城| 邢台市| 获嘉县| 乐都县| 新宾| 双城市| 蓬安县| 临高县| 封丘县| 景泰县| 介休市| 崇明县| 新宁县| 韶关市| 吴桥县| 长春市| 柳河县| 漳州市| 宁海县| 德令哈市| 富裕县| 德令哈市| 鄢陵县| 怀仁县| 玛曲县| 五台县| 顺昌县| 望奎县| 台湾省| 阿克陶县| 沅江市| http://444 http://444 http://444