官术网_书友最值得收藏!

1.1.1 軟件復雜度與規模

本節將首先討論第一個軟件復雜度維度——規模。規模是軟件復雜度最基本的表現形式。

1.規模的表現形式和關注點

關于如何評估一個軟件系統的規模,業界存在很多實踐方法。圖1-3展示了一種常見的評估方法——功能點(Function Point,FP)評估法。

圖1-3 功能點評估法

FP評估法是軟件行業專用的估算方法之一。應用FP評估法時,首先識別系統邊界和應用類型,區分新開發的系統和增強型遺留系統;然后識別系統的功能點計數項,包括內部邏輯文件數量、對外接口數量、輸入和輸出數量,以及包括排序和聚集在內的查詢數量等五大計數項;識別各個功能點計數項并確定各項指標的系數后,加權求和即得到最終的估算結果。在圖1-3中,我們可以看到該示例中的功能點數量為215。從這個示例中,我們明確了軟件規模的一種表現形式——數量。

我們再來看軟件規模的另一種表現形式——交互。圖1-4展示了McCabe圈復雜度(Cyclomatic Complexity)的組成結構。

圖片2

圖1-4 McCabe圈復雜度的組成結構

這里解釋一下圈復雜度的概念。如果一段代碼中不包含控制流語句(條件或決策點),那么這段代碼的圈復雜度為1,因為這段代碼中只有一條路徑;如果一段代碼中僅包含一個if語句,且if語句僅有一個條件,那么這段代碼的圈復雜度為2;如果一段代碼中包含兩個嵌套的if語句,或者一個if語句有兩個條件代碼塊,那么這段代碼的圈復雜度為3……以此類推。

在軟件測試的概念中,圈復雜度用來衡量一個模塊判定結構的復雜程度,數量上表現為線性無關的路徑條數,即合理預防錯誤所需測試的最少路徑條數,路徑條數本質上就是系統內部的交互過程。圈復雜度高說明交互過程的復雜性高。根據經驗,代碼的出錯可能性和圈復雜度的高低有很大關系。

2.規模的應對策略

如何應對規模導致的軟件復雜度?基本思路就是通過分而治之來控制規模。分而治之是一種設計思想,這一設計思想有多種實現策略,其中最具代表性的就是圖1-5所示的AKF擴展立方體。

圖1-5 AKF擴展立方體結構

AKF擴展立方體是業界關于如何開展系統拆分工作的一條原則,通過這條原則,系統就可以實現高度的擴展性。在AKF擴展立方體的X軸上,開發人員可以使用負載均衡等技術來實現水平復制;在Z軸上,開發人員可以使用類似數據分區的方式實現系統擴展性。這里需要重點關注的是Y軸,它提示針對單體系統,應該基于業務體系按功能進行拆分。實際上,AKF擴展立方體也為拆分微服務提供了解決方案。

系統拆分的基本思路有兩種——縱向(Vertical)拆分和橫向(Horizontal)拆分。所謂縱向拆分,就是將一個大應用拆分為多個小應用。如果新業務較為獨立,那么直接將其部署為一個獨立的應用系統。例如,在圖1-6中,將互聯網醫院系統拆分為醫生子系統、就診子系統和患者子系統等獨立業務子系統。

圖1-6 系統縱向拆分示例

縱向拆分關注業務,基于不同的業務場景,通過將內聚度較高的相關業務進行剝離以形成不同的子系統。相較縱向拆分的面向業務特性,橫向拆分更關注技術。將可以復用的業務進行拆分,獨立部署為分布式服務后,我們只需調用這些分布式服務即可構建復雜的新業務。所以,橫向拆分的關鍵在于識別可復用的業務,設計服務接口并規范服務依賴關系,示例如圖1-7所示。

圖1-7 系統橫向拆分示例

圖1-7是對圖1-6中的互聯網醫院系統進行橫向拆分的結果。可以看到,當我們將醫生、就診、處方和患者等業務抽象為獨立的垂直化服務,并在各個服務上應用分布式環境下的調用和管理框架時,系統的業務就可以轉變為一種排列組合的構建方式,如基于醫生和處方服務,我們可以構建出業務A,基于就診和患者服務,我們可以構建出業務B。

主站蜘蛛池模板: 沧州市| 闽清县| 满洲里市| 凉山| 美姑县| 育儿| 特克斯县| 普兰县| 东明县| 双鸭山市| 冀州市| 五峰| 蓬莱市| 扎兰屯市| 汶川县| 吐鲁番市| 江永县| 宁化县| 旬邑县| 玉门市| 旬邑县| 连城县| 北京市| 永城市| 迁西县| 忻城县| 文化| 双峰县| 平陆县| 鲁山县| 大姚县| 财经| 明溪县| 上杭县| 三门峡市| 沙坪坝区| 乌兰察布市| 五指山市| 台江县| 清水县| 阿坝县|