【软件体系结构】软件体系结构复杂性
復(fù)雜性
復(fù)雜性具有不同的種類(lèi)和形態(tài),一種簡(jiǎn)明的度量是類(lèi)之間通信路徑的數(shù)量,通信路徑是類(lèi)之間存在的持久或暫時(shí)連接。
復(fù)雜性存在四種維度的解釋:
- 問(wèn)題復(fù)雜性:問(wèn)題問(wèn)題域本身的復(fù)雜性,也稱(chēng)為計(jì)算復(fù)雜性。
- 算法復(fù)雜性:目標(biāo)是度量軟件算法的效率。具有降低相關(guān)性應(yīng)歸于從算法到交互計(jì)算模式的轉(zhuǎn)變。
- 結(jié)構(gòu)復(fù)雜性:目標(biāo)是建立軟件結(jié)構(gòu)之間的關(guān)系及易于維護(hù)和易于演化。對(duì)郎被應(yīng)用到軟件對(duì)象之間的依賴(lài)。
- 認(rèn)知復(fù)雜性:度量理解軟件所需要的努力,即捕獲程序的邏輯流,并度量邏輯流的各種特性。
從適應(yīng)能力的角度,認(rèn)知復(fù)雜性度量可以增強(qiáng)可理解性質(zhì)量,結(jié)構(gòu)復(fù)雜性可以增強(qiáng)可維護(hù)性和可伸縮性質(zhì)量。這兩種度量是有關(guān)系的,對(duì)于低結(jié)構(gòu)復(fù)雜性,認(rèn)知復(fù)雜性的較小值雖然是必要不充分條件,這與修改代碼的需求是一致的,在修改之前首先要理解它。
空間認(rèn)知復(fù)雜性
計(jì)算機(jī)現(xiàn)代程序的可認(rèn)知復(fù)雜性的最合適的度量就是空間復(fù)雜性度量,其目標(biāo)是度量軟件工程師為了構(gòu)造軟件的智力模型而必須在代碼中移動(dòng)的距離,空間復(fù)雜性的度量體現(xiàn)出不同的特點(diǎn)。
空間復(fù)雜性的度量有面向過(guò)程的理論和面向?qū)ο蟮睦碚?#xff0c;面向?qū)ο蟮睦碚摶A(chǔ)很差且常常是錯(cuò)誤的,而函數(shù)程序設(shè)計(jì)的空間復(fù)雜性公式則是存在的。
導(dǎo)出復(fù)雜性的值應(yīng)該這么做:
上述公式的主要弱點(diǎn)是以代碼行計(jì)算距離。對(duì)于更現(xiàn)代的程序設(shè)計(jì)方法,代碼行缺少相關(guān)性,當(dāng)進(jìn)行分析時(shí)也缺少將程序代碼可視化的方法。另外,在這種情況下,代碼行曲解了空間的含義。
結(jié)構(gòu)復(fù)雜性
認(rèn)知復(fù)雜性關(guān)注邏輯流,結(jié)構(gòu)復(fù)雜性關(guān)注程序?qū)ο箝g的依賴(lài)。
一個(gè)依賴(lài)在模型元素之間定義了一種供應(yīng)者/客戶(hù)關(guān)系,對(duì)供應(yīng)者的修改可能會(huì)影響客戶(hù)模型的元素、依賴(lài)意味著沒(méi)有供應(yīng)者,客戶(hù)的語(yǔ)義是不完整的。
如果更改提供服務(wù)的對(duì)象,則有必要修改此服務(wù)的客戶(hù)對(duì)象,那么這兩個(gè)系統(tǒng)對(duì)象之間就存在依賴(lài)。
如果系統(tǒng)中的所有依賴(lài)都被標(biāo)識(shí)和理解,則說(shuō)系統(tǒng)有適應(yīng)性,即具有可理解性、可維護(hù)性、可伸縮性。適應(yīng)性的一個(gè)必要條件是依賴(lài)可追蹤,軟件工程師的任務(wù)是減少依賴(lài)。
在軟件系統(tǒng)中,可以根據(jù)不同粒度的對(duì)象(構(gòu)件、包、類(lèi)、方法)來(lái)識(shí)別依賴(lài)。位于低層次粒度上的較特殊對(duì)象的依賴(lài)會(huì)向上傳遞,在高層次粒度上產(chǎn)生依賴(lài)。依賴(lài)管理有必要更詳細(xì)地研究代碼,識(shí)別數(shù)據(jù)結(jié)構(gòu)之間的所有關(guān)系以及軟件對(duì)象之間的代碼調(diào)用。
網(wǎng)絡(luò)的結(jié)構(gòu)復(fù)雜性
網(wǎng)絡(luò)的每條通信路徑一般都允許類(lèi)之間進(jìn)行雙向交互,其復(fù)雜性可以表示為netCCD=n(n?1){}_{net}CCD=n(n-1)net?CCD=n(n?1)。
我們以類(lèi)的數(shù)量而不是以對(duì)象的數(shù)量來(lái)測(cè)量復(fù)雜性。程序中,是對(duì)象而不是類(lèi)發(fā)送消息給相同類(lèi)或不同類(lèi)的其他對(duì)象,這對(duì)于負(fù)責(zé)移交應(yīng)用程序邏輯和管理程序變量和其他數(shù)據(jù)結(jié)構(gòu)的程序員來(lái)說(shuō)又引入了另外的困難。然而,這種困難在這種情況下不重要,可以忽略。
只有兩個(gè)對(duì)象之間存在持久或瞬態(tài)連接,一個(gè)對(duì)象才可以向另一個(gè)對(duì)象發(fā)送消息。瞬態(tài)連接是在單個(gè)程序調(diào)用中解決的,在程序結(jié)構(gòu)中直接可見(jiàn),也可以不直接可見(jiàn)。只有在類(lèi)模型中定義了連接,持久連接才存在。
層次的結(jié)構(gòu)復(fù)雜性
復(fù)雜性控制結(jié)構(gòu)的解決方案是通過(guò)將類(lèi)組織成類(lèi)的合并結(jié)構(gòu)來(lái)減少網(wǎng)絡(luò)結(jié)構(gòu)。用這種方法,類(lèi)可以很自然地形成層,強(qiáng)調(diào)類(lèi)之間的層次體系分解,而層的內(nèi)部允許類(lèi)似網(wǎng)絡(luò)的交互。
分等級(jí)的層次組織通過(guò)限制類(lèi)之間潛在交互路徑的數(shù)量而降低復(fù)雜性,方法是:將類(lèi)分到層中,只有同一層的內(nèi)部及一層與層次體系中下面的相鄰層之間才允許直接的類(lèi)交互。
令size(li)size(l_{i})size(li?)表示第lil_{i}li?層的對(duì)象數(shù),lil_{i}li?為第lil_{i}li?層的雙親數(shù),pj(li)p_{j}(l_{i})pj?(li?)為第lil_{i}li?層的第jjj個(gè)雙親。
holarchyCCD=∑i=1nsize(li)×(size(li)?1)2+∑i=1n∑j=1li(size(li)×size(pj(li)))_{holarchy}CCD=\sum\limits_{i=1}^{n}{\frac{size(l_{i})\times(size(l_{i})-1)}{2}}+\sum\limits_{i=1}^{n}\sum\limits_{j=1}^{l_{i}}(size(l_{i})\times{size(p_{j}(l_{i}))})holarchy?CCD=i=1∑n?2size(li?)×(size(li?)?1)?+i=1∑n?j=1∑li??(size(li?)×size(pj?(li?)))
總結(jié)
以上是生活随笔為你收集整理的【软件体系结构】软件体系结构复杂性的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 23种设计模式C++源码与UML实现--
- 下一篇: 23种设计模式C++源码与UML实现--