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