因?yàn)樯婕耙恍┕剑瑘D片無(wú)法上傳随闪,此處只有部分內(nèi)容搀崭,完整內(nèi)容請(qǐng)參考語(yǔ)雀:
軟件系統(tǒng)的復(fù)雜度評(píng)估和控制 · 語(yǔ)雀
信息和計(jì)算領(lǐng)域捻浦,有很多懸而未決的問(wèn)題粗卜,歸約到軟件系統(tǒng)或者應(yīng)用技術(shù)領(lǐng)域屋确,復(fù)雜度是最為顯著和重要的問(wèn)題之一,它關(guān)聯(lián)著產(chǎn)品续扔、技術(shù)攻臀、工具、文檔纱昧、組織等許多方面的現(xiàn)狀和歷史刨啸,又深遠(yuǎn)密切地影響者它們的未來(lái)。能否解決軟件復(fù)雜度帶來(lái)的問(wèn)題识脆,控制好軟件復(fù)雜度的增長(zhǎng)速度设联,是我們能否多快好省地落實(shí)產(chǎn)品計(jì)劃善已,實(shí)現(xiàn)產(chǎn)品需求,提升產(chǎn)品性能的核心所在离例。
接觸過(guò)程序設(shè)計(jì)的人都了解一個(gè)概念换团,程序=數(shù)據(jù)結(jié)構(gòu)+算法,其中算法又有時(shí)間復(fù)雜度和空間復(fù)雜度粘招,但是稍有經(jīng)驗(yàn)者會(huì)知道啥寇,算法復(fù)雜度屬于計(jì)算復(fù)雜度偎球,無(wú)法用于評(píng)估龐大軟件系統(tǒng)洒扎,也無(wú)法用于指導(dǎo)更加復(fù)雜的研發(fā)過(guò)程拱燃。對(duì)此膜宋,我們衍生出的軟件工程,以及其他如系統(tǒng)論坛缕、控制論猫牡、耗散論胡诗、協(xié)同學(xué)等無(wú)關(guān)的基礎(chǔ)學(xué)科,有著更加清晰的問(wèn)題闡述淌友,更加合適的理論框架煌恢,和更加有效的解決方案。但是它們離應(yīng)用技術(shù)領(lǐng)域有稍有距離且難以掌握震庭,我們往往用自己熟悉的語(yǔ)言瑰抵,用經(jīng)驗(yàn)性方法去交流、解決軟件復(fù)雜度帶來(lái)的問(wèn)題器联。顯然二汛,很多時(shí)候,我們無(wú)法將面臨的問(wèn)題拨拓,歸納到統(tǒng)一的邏輯框架中肴颊,得出始終一致的,有效的結(jié)論和方案渣磷。
因此婿着,我想借助本文,提出一個(gè)簡(jiǎn)要的復(fù)雜度評(píng)估模型醋界,用于指導(dǎo)在應(yīng)用技術(shù)領(lǐng)域的架構(gòu)竟宋、設(shè)計(jì)、重構(gòu)等工作物独,并倡導(dǎo)一個(gè)思想——將復(fù)雜度控制袜硫,作為軟件迭代的基礎(chǔ)目標(biāo)。為了引申出挡篓,并且更好地理解這個(gè)模型婉陷,我們先來(lái)了解一下帚称,關(guān)于(軟件)復(fù)雜度,目前的一些研究和看法秽澳。
軟件工程中的復(fù)雜性定義
軟件工程學(xué)科也沒(méi)有提出通用的復(fù)雜性定義和度量方式闯睹,但針對(duì)某些具體的場(chǎng)景,有一些明確的定義和評(píng)估方式担神。
Manny Lehman的復(fù)雜度定義
Manny Lehman教授在軟件演進(jìn)法則中首次系統(tǒng)性提出了軟件復(fù)雜度楼吃。
軟件(程序)復(fù)雜度是軟件的一組特征,它由軟件內(nèi)部的相互關(guān)聯(lián)引起妄讯。隨著軟件的實(shí)體(模塊)的增加孩锡,軟件內(nèi)部的相互關(guān)聯(lián)會(huì)指數(shù)式增長(zhǎng),直至無(wú)法被全部掌握和理解亥贸。
在他的描述中躬窜,軟件復(fù)雜度的影響是:
軟件的高復(fù)雜度,會(huì)導(dǎo)致在修改軟件時(shí)引入非主觀意圖的變更的概率上升炕置,最終在做變更的時(shí)候更容易引入缺陷荣挨。在更極端的情況下,軟件復(fù)雜到幾乎無(wú)法修改朴摊。
Halstead的復(fù)雜度定義
Halstead 復(fù)雜度 (Maurice H. Halstead, 1977) 是軟件科學(xué)提出的第一個(gè)計(jì)算機(jī)軟件的分析“定律”默垄,用以確定計(jì)算機(jī)軟件開(kāi)發(fā)中的一些定量規(guī)律。Halstead 復(fù)雜度采用一組基本的度量值甚纲,這些度量值通常在程序產(chǎn)生之后得出口锭,或者在設(shè)計(jì)完成之后進(jìn)行估算。
Halstead 復(fù)雜度根據(jù)程序中語(yǔ)句行的操作符和操作數(shù)的數(shù)量計(jì)算程序復(fù)雜性贩疙。
- 操作符和操作數(shù)的量越大讹弯,程序結(jié)構(gòu)就越復(fù)雜。
- 操作符通常包括語(yǔ)言保留字这溅、函數(shù)調(diào)用组民、運(yùn)算符,也可以包括有關(guān)的分隔符等悲靴。
- 操作數(shù)可以是常數(shù)和變量等標(biāo)識(shí)符臭胜。
John Ousterhout的復(fù)雜度定義
斯坦福教授、Tcl語(yǔ)言發(fā)明者John Ousterhout癞尚,在他的著作《A Philosophy of Software Design》中提出耸三,軟件設(shè)計(jì)的核心在于降低復(fù)雜性。他選擇從認(rèn)知的負(fù)擔(dān)和開(kāi)發(fā)工作量的角度來(lái)定義軟件的復(fù)雜性浇揩,并且給出了一個(gè)復(fù)雜度量公式:
[圖片上傳失敗...(image-6479d9-1629287281563)]
子模塊的復(fù)雜度Cp乘以該模塊對(duì)應(yīng)的開(kāi)發(fā)時(shí)間權(quán)重值tp仪壮,累加后得到系統(tǒng)的整體復(fù)雜度C。系統(tǒng)整體的復(fù)雜度并不簡(jiǎn)單等于所有子模塊復(fù)雜度的累加胳徽,還要考慮開(kāi)發(fā)維護(hù)該模塊所花費(fèi)的時(shí)間在整體時(shí)間中的占比(對(duì)應(yīng)權(quán)重值tp)积锅。也就是說(shuō)爽彤,即使某個(gè)模塊非常復(fù)雜,如果很少使用或修改缚陷,也不會(huì)對(duì)系統(tǒng)的整體復(fù)雜度造成大的影響适篙。子模塊的復(fù)雜度Cp是一個(gè)經(jīng)驗(yàn)值,它關(guān)注幾個(gè)現(xiàn)象:
- 修改擴(kuò)散箫爷,修改時(shí)有連鎖反應(yīng)嚷节。
- 認(rèn)知負(fù)擔(dān),開(kāi)發(fā)人員需要多長(zhǎng)時(shí)間來(lái)理解功能模塊虎锚。
- 不可知(Unknown Unknowns)硫痰,開(kāi)發(fā)人員在接到任務(wù)時(shí),不知道從哪里入手翁都。
造成復(fù)雜的原因一般是代碼依賴(lài)和晦澀(Obscurity)碍论。其中,依賴(lài)是指某部分代碼不能被獨(dú)立地修改和理解柄慰,必定會(huì)牽涉到其他代碼。代碼晦澀税娜,是指從代碼中難以找到重要信息坐搔。
McCabe推出的一系列復(fù)雜度
70年代,軟件系統(tǒng)已經(jīng)變得極其復(fù)雜敬矩,無(wú)論是開(kāi)發(fā)還是維護(hù)都是一項(xiàng)成本高昂的工作概行。人們意識(shí)到必須使軟件模塊化,以便于開(kāi)發(fā)弧岳、測(cè)試和維護(hù)凳忙。為此,成立于1976的McCabe&Associates公司開(kāi)發(fā)出了McCabe Cyclomatic Complexity Metric(圈復(fù)雜度)技術(shù)對(duì)軟件進(jìn)行結(jié)構(gòu)測(cè)試禽炬,隨后又推出了其他一些復(fù)雜度涧卵,統(tǒng)稱(chēng)為McCabe復(fù)雜度。McCabe復(fù)雜度包括:圈復(fù)雜度腹尖、基本復(fù)雜度柳恐、模塊設(shè)計(jì)復(fù)雜度、設(shè)計(jì)復(fù)雜度热幔、集成復(fù)雜度乐设、行數(shù)、規(guī)范化復(fù)雜度绎巨、全局?jǐn)?shù)據(jù)復(fù)雜度近尚、局部數(shù)據(jù)復(fù)雜度、病態(tài)數(shù)據(jù)復(fù)雜度场勤。
McCabe復(fù)雜度是對(duì)軟件結(jié)構(gòu)進(jìn)行嚴(yán)格的算術(shù)分析得來(lái)的戈锻,實(shí)質(zhì)上是以圖論為工具介汹,對(duì)程序拓?fù)浣Y(jié)構(gòu)復(fù)雜性的度量。
它認(rèn)為程序的復(fù)雜性很大程度上取決于程序圖的復(fù)雜性舶沛。單一的順序結(jié)構(gòu)最為簡(jiǎn)單嘹承,循環(huán)和選擇所構(gòu)成的環(huán)路越多,程序就越復(fù)雜如庭。因此叹卷,計(jì)算McCabe系列的復(fù)雜度時(shí),需要將程序還原成程序圖坪它。
程序圖是退化的程序流程圖骤竹。也就是說(shuō),把程序流程圖的每一個(gè)處理符號(hào)都退化成一個(gè)結(jié)點(diǎn)往毡,原來(lái)連接不同處理符號(hào)的流線變成連接不同結(jié)點(diǎn)的有向弧蒙揣,這樣得到的有向圖就叫做程序圖。程序圖僅描述程序內(nèi)部的控制流程开瞭,完全不表現(xiàn)對(duì)數(shù)據(jù)的具體操作分支和循環(huán)的具體條件懒震。因此,它往往把一個(gè)簡(jiǎn)單的IF語(yǔ)句與循環(huán)語(yǔ)句的復(fù)雜性看成是一樣的嗤详,把嵌套的IF語(yǔ)句與CASE的復(fù)雜性看成是一樣的个扰。
下面,我們簡(jiǎn)單了解一下各個(gè)復(fù)雜度的定義和計(jì)算方法葱色。
- 圈復(fù)雜度(Cyclomatic complexity递宅,V(G))
圈復(fù)雜度也稱(chēng)為條件復(fù)雜度,它可以用來(lái)衡量一個(gè)模塊判定結(jié)構(gòu)的復(fù)雜程度苍狰。其數(shù)量上表現(xiàn)為獨(dú)立路徑的條數(shù)办龄,也可理解為覆蓋所有的可能情況最少使用的測(cè)試用例個(gè)數(shù)。
計(jì)算方法:
- 點(diǎn)邊計(jì)算法淋昭,V(G) = E - N + 2
- 節(jié)點(diǎn)判定法俐填,V (G) = P + 1
程序的可能錯(cuò)誤和高的圈復(fù)雜度有著很大關(guān)系,圈復(fù)雜度最高的模塊和方法响牛,其缺陷個(gè)數(shù)也可能最多玷禽。
- 基本復(fù)雜度(Essential Complexity, VE(G))
基本復(fù)雜度是用來(lái)衡量程序非結(jié)構(gòu)化程度的,非結(jié)構(gòu)成分降低了程序的質(zhì)量呀打,增加了代碼的維護(hù)難度矢赁,使程序難于理解。因此贬丛,基本復(fù)雜度高意味著非結(jié)構(gòu)化程度高撩银,難以模塊化和維護(hù)。實(shí)際上豺憔,消除了一個(gè)錯(cuò)誤有時(shí)會(huì)引起其他的錯(cuò)誤额获。
計(jì)算方法:
將圈復(fù)雜度圖中的結(jié)構(gòu)化部分簡(jiǎn)化成一個(gè)點(diǎn)够庙,計(jì)算簡(jiǎn)化以后流程圖的圈復(fù)雜度就是基本復(fù)雜度。
- 模塊設(shè)計(jì)復(fù)雜度(Module Design Complexity (iv(G))
模塊設(shè)計(jì)復(fù)雜度用來(lái)衡量模塊之間的調(diào)用關(guān)系抄邀,復(fù)雜度越高耘眨,模塊之間耦合性越高,越難隔離境肾,維護(hù)和復(fù)用剔难。
計(jì)算方法:
從模塊控制流圖中移去那些不包含調(diào)用子模塊的判定和循環(huán)結(jié)構(gòu)后得到的圈復(fù)雜度。模塊設(shè)計(jì)復(fù)雜度通常遠(yuǎn)小于圈復(fù)雜度奥喻。
- 設(shè)計(jì)復(fù)雜度(Design Complexity (S0)
設(shè)計(jì)復(fù)雜度以數(shù)量來(lái)衡量程序模塊之間的相互作用關(guān)系偶宫,它提供了系統(tǒng)級(jí)模塊設(shè)計(jì)復(fù)雜度的概況,有助于衡量進(jìn)行自底向上集成測(cè)試的效果环鲤,而且提供了全面衡量程序設(shè)計(jì)規(guī)格和復(fù)雜度的數(shù)據(jù)纯趋,不反映獨(dú)立模塊的內(nèi)部情況。高設(shè)計(jì)復(fù)雜度的系統(tǒng)意味著系統(tǒng)各部分之間有著復(fù)雜的相互關(guān)系冷离,這樣系統(tǒng)將難以維護(hù)吵冒。
計(jì)算方法:
程序中所有模塊設(shè)計(jì)復(fù)雜度之和。
[圖片上傳失敗...(image-fa6075-1629287281563)]
- 集成復(fù)雜度(Integration Complexity (S1) )
集成復(fù)雜度是為了防止錯(cuò)誤所必須進(jìn)行的集成測(cè)試的數(shù)量表示酒朵,另一種說(shuō)法是程序中獨(dú)立線性子樹(shù)的數(shù)目桦锄。一棵子樹(shù)是一個(gè)有返回的調(diào)用序列。就像圈復(fù)雜度是測(cè)試路徑的數(shù)目蔫耽,而集成復(fù)雜度是程序或其子系統(tǒng)的獨(dú)立線性子樹(shù)。
計(jì)算方法:
S1=S0-N+1留夜, N是程序中模塊的數(shù)目匙铡。
- 行數(shù)(Number of Lines (nl) )
模塊中總的代碼行數(shù),包括注釋碍粥。
- 規(guī)范化復(fù)雜度(Normalized Complexity (nv) )
規(guī)范化復(fù)雜度等于圈復(fù)雜度除以行數(shù)
計(jì)算方法:
nv=v(G)/nl
復(fù)雜性科學(xué)中的定義
系統(tǒng)復(fù)雜性有專(zhuān)門(mén)的學(xué)術(shù)分支鳖眼,而軟件系統(tǒng)正是一種特定的易于研究的系統(tǒng),因此嚼摩,復(fù)雜性學(xué)科的許多結(jié)論和方法钦讳,都適用于軟件系統(tǒng),甚至比軟件工程中的描述更加通用枕面。
復(fù)雜性學(xué)科認(rèn)為愿卒,復(fù)雜系統(tǒng)是指相互依賴(lài),每個(gè)組件的行為依賴(lài)其他組件的行為潮秘,減少部分或者分解后不能運(yùn)行的系統(tǒng)琼开。它以本體論和認(rèn)知論為框架,將復(fù)雜性分為以下幾類(lèi):
組分復(fù)雜性
組分復(fù)雜性是指枕荞,復(fù)雜系統(tǒng)擁有數(shù)目繁多的組分柜候,組分間擁有多樣且復(fù)雜的相互作用搞动,要素與要素間的關(guān)系呈現(xiàn)出各種不確定。它包括:
- 構(gòu)成復(fù)雜性
系統(tǒng)演化過(guò)程中渣刷,構(gòu)成系統(tǒng)的不同因素會(huì)影響其自身的復(fù)雜性鹦肿。
- 分類(lèi)復(fù)雜性
組分個(gè)體要素之間的變異,及其在空間分布上的不規(guī)則性辅柴,以及由于組分的異質(zhì)箩溃,導(dǎo)致組分種類(lèi)姿態(tài)萬(wàn)千而引起的系統(tǒng)復(fù)雜性。
- 規(guī)模復(fù)雜性
單元數(shù)量越大碌识,單元類(lèi)型越多碾篡,系統(tǒng)則因自身規(guī)模的增大而復(fù)雜。
結(jié)構(gòu)復(fù)雜性
復(fù)雜性會(huì)隨關(guān)聯(lián)結(jié)構(gòu)的從屬性和多樣性的提高筏餐,以及聯(lián)結(jié)數(shù)量和強(qiáng)度的提高而增加开泽,整合生成結(jié)構(gòu)復(fù)雜性。它包括:
- 組織復(fù)雜性
組織形態(tài)復(fù)雜度的提高魁瞪,帶來(lái)了組織結(jié)構(gòu)的多樣性和復(fù)雜性穆律,開(kāi)放系統(tǒng)在演化過(guò)程中,結(jié)構(gòu)狀態(tài)的橫向导俘、縱向和空間分布的差異性越大峦耘,系統(tǒng)復(fù)雜性越高。
- 層次復(fù)雜性
系統(tǒng)不同層級(jí)間的作用差別很大旅薄,構(gòu)成系統(tǒng)的子系統(tǒng)的層次越多辅髓,系統(tǒng)結(jié)構(gòu)越復(fù)雜。
- 過(guò)程復(fù)雜性
在復(fù)雜系統(tǒng)進(jìn)化和演化過(guò)程中少梁,系統(tǒng)內(nèi)部的要素之間的相互作用洛口、系統(tǒng)與環(huán)境邊界交互作用、及系統(tǒng)與外部環(huán)境的復(fù)雜作用都會(huì)產(chǎn)生復(fù)雜性凯沪。系統(tǒng)通過(guò)自組織第焰、耗散行為和自組織臨界,不斷變革內(nèi)部結(jié)構(gòu)和外部環(huán)境之間的關(guān)系妨马,可能會(huì)出現(xiàn)分岔挺举、混沌等現(xiàn)象因而會(huì)在演化過(guò)程中產(chǎn)生復(fù)雜性。
功能復(fù)雜性
功能復(fù)雜性是指系統(tǒng)中要素的平衡性與系統(tǒng)整體功能(結(jié)構(gòu))之間的關(guān)系帶來(lái)的復(fù)雜性烘跺。它包括:
- 預(yù)測(cè)復(fù)雜性
當(dāng)預(yù)測(cè)系統(tǒng)狀態(tài)演化時(shí)湘纵,復(fù)雜性可定義為系統(tǒng)狀態(tài)或行為的不可預(yù)測(cè)性。
- 保持復(fù)雜性
當(dāng)希望保持系統(tǒng)功能時(shí)液荸,復(fù)雜性可定義為系統(tǒng)的功能瞻佛,關(guān)于系統(tǒng)要素平衡程度的靈敏性(脆弱性或非魯棒性)。
- 調(diào)控復(fù)雜性
當(dāng)改變系統(tǒng)功能時(shí),復(fù)雜性可定義為如何實(shí)現(xiàn)新功能或所需功能的難度伤柄。
如何根據(jù)功能绊困,對(duì)系統(tǒng)的要素進(jìn)行合理的分配,將會(huì)直接影響到系統(tǒng)的功能復(fù)雜性适刀。從控制論的角度的角度看秤朗,系統(tǒng)的復(fù)雜性與系統(tǒng)的能控性、可觀性或能達(dá)性均密切相關(guān)笔喉,系統(tǒng)設(shè)計(jì)必須平衡系統(tǒng)性能和復(fù)雜性之間的關(guān)系取视。
描述復(fù)雜性
從描述系統(tǒng)的狀態(tài)的工作量、信息量以及存儲(chǔ)量角度出發(fā)常挚,來(lái)定義系統(tǒng)的復(fù)雜性作谭。描述復(fù)雜性是以數(shù)學(xué)的復(fù)雜性理論和信息論為形式表現(xiàn)出來(lái)的,認(rèn)為系統(tǒng)的復(fù)雜性就是描述系統(tǒng)特征的復(fù)雜性奄毡。
- 計(jì)算復(fù)雜性
等效于由計(jì)算機(jī)解決一個(gè)問(wèn)題折欠,所消耗的時(shí)間和空間度量。
- 算法復(fù)雜性
問(wèn)題解決過(guò)程中吼过,涉及的描述锐秦、步驟、方法盗忱、以及仿真程序等要素的無(wú)規(guī)則和隨機(jī)性帶來(lái)的復(fù)雜性酱床。
- 有效復(fù)雜性
以對(duì)系統(tǒng)規(guī)律性認(rèn)知的表述長(zhǎng)度來(lái)衡量系統(tǒng)的復(fù)雜性。
復(fù)雜性分類(lèi)的聯(lián)系
在三維空間中趟佃,該分類(lèi)可以看作是以基元扇谣、功能維、結(jié)構(gòu)維為基準(zhǔn)闲昭,以描述復(fù)雜性為手段體現(xiàn)具
體表示過(guò)程來(lái)定義系統(tǒng)的復(fù)雜性揍堕,如圖:
復(fù)雜性分類(lèi)及聯(lián)系示意圖
復(fù)雜性的度量
即使在復(fù)雜性學(xué)科中,度量方式也并未統(tǒng)一汤纸,針對(duì)不同的類(lèi)別的復(fù)雜性,有著多種不同的度量方式芹血,有些精確的贮泞,有些是經(jīng)驗(yàn)的,但都相對(duì)復(fù)雜幔烛。鑒于我們的討論目的以及時(shí)間成本啃擦,此處不再予以展開(kāi)。多數(shù)時(shí)候饿悬,我們只需要了解幾種復(fù)雜度的概念令蛉、機(jī)制、模糊的度量方案,用于引導(dǎo)我們解決問(wèn)題的思路珠叔,或者比較幾種實(shí)現(xiàn)方案的復(fù)雜度優(yōu)劣蝎宇。
復(fù)雜度定義整理
了解了軟件工程和復(fù)雜性科學(xué)中的復(fù)雜度定義和度量方式之后,我們對(duì)復(fù)雜度的研究情況祷安,有了整體上的印象姥芥。可以看到汇鞭,復(fù)雜度本身的衡量也是趨于復(fù)雜的凉唐。我們研究復(fù)雜度,是為了利用它解決我們的問(wèn)題霍骄,而不是為了多出一個(gè)問(wèn)題台囱。所以,我們簡(jiǎn)單總結(jié)一下读整,每種復(fù)雜度的定義的優(yōu)缺點(diǎn)簿训。
作為最早提出的復(fù)雜度,它是一種經(jīng)驗(yàn)性的表述绘沉,沒(méi)有度量方式煎楣,僅指出了復(fù)雜度由軟件的規(guī)模和內(nèi)部的關(guān)聯(lián)引起,并且會(huì)導(dǎo)致難以理解和修改车伞。
使用程序程序的操作符择懂、操作數(shù)作為復(fù)雜度的度量方式,本質(zhì)上另玖,主要是度量程序規(guī)模引起的復(fù)雜度困曙,是一種模糊的局限性較強(qiáng)的度量方式。
首次在軟件領(lǐng)域谦去,提出了使用認(rèn)知難度和工作量來(lái)衡量復(fù)雜度慷丽,但是它提出的評(píng)估方法依然是模糊的,更關(guān)鍵的是鳄哭,是后驗(yàn)的要糊、總結(jié)式的,無(wú)法在應(yīng)用在設(shè)計(jì)和架構(gòu)階段妆丘。
基于圖論來(lái)計(jì)算程序復(fù)雜度锄俄,推出了核心的圈復(fù)雜度,以及基于圈復(fù)雜度的多個(gè)輔助指標(biāo)勺拣,并且開(kāi)發(fā)了統(tǒng)計(jì)工具奶赠。因?yàn)椴扇D論作為理論工具,接近程序本質(zhì)药有,而且理論成熟毅戈,因此是一種準(zhǔn)確的清晰的復(fù)雜度定義,被廣泛接受和應(yīng)用。但是也因?yàn)槿绱宋琈cCabe系列的復(fù)雜度都偏向于代碼細(xì)節(jié)赘理,更適合用作函數(shù)、類(lèi)級(jí)別的復(fù)雜度評(píng)估塑陵,而作為軟件系統(tǒng)復(fù)雜度評(píng)估手段時(shí)感憾,統(tǒng)計(jì)會(huì)非常困難,理解統(tǒng)計(jì)結(jié)果令花,得出有效結(jié)論也會(huì)非常困難阻桅,往往會(huì)陷入復(fù)雜度評(píng)估陷阱,甚至本末倒置兼都。
作為復(fù)雜性方向的學(xué)科嫂沉,最系統(tǒng)地剖析了復(fù)雜性的本質(zhì),且引入了三維空間來(lái)衡量系統(tǒng)的復(fù)雜度扮碧,引入描述復(fù)雜度來(lái)粘合空間系中的復(fù)雜度分量和作為最終復(fù)雜度的定量趟章。了解了復(fù)雜度科學(xué)之后,我們很容易聯(lián)想慎王、理解軟件工程中的復(fù)雜度概念蚓土。比如,軟件難于修改赖淤,實(shí)際是表達(dá)調(diào)控復(fù)雜度蜀漆;圈復(fù)雜度,實(shí)際是表達(dá)預(yù)測(cè)復(fù)雜度咱旱;計(jì)算機(jī)科學(xué)中的算法復(fù)雜度屬于描述復(fù)雜度等等确丢。
縱觀已有的復(fù)雜度體系,筆者看來(lái)吐限,仍有一些問(wèn)題尚未解決鲜侥。例如:
- 軟件工程的復(fù)雜度概念貼近應(yīng)用技術(shù)領(lǐng)域,但不夠系統(tǒng)诸典。復(fù)雜性學(xué)科中的定義雖然完善描函,但其中的概念偏于通用和抽象,難以直接用于應(yīng)用技術(shù)領(lǐng)域問(wèn)題的討論和判定狐粱。
- 所有的復(fù)雜度赘阀,都未將目標(biāo)系統(tǒng)的需求(外部變更)和組織考慮為復(fù)雜度因素,導(dǎo)致復(fù)雜度控制會(huì)淪為滯后性的思維和措施脑奠,且難以落實(shí)到組織行為。
- 多數(shù)的復(fù)雜度解析幅慌,缺少形式化描述和推理過(guò)程宋欺,導(dǎo)致復(fù)雜度理解和討論,也是一件復(fù)雜的事情。
- 未提出復(fù)雜度的優(yōu)化策略齿诞,并給出系統(tǒng)性證明酸休。
復(fù)雜度的形式化定義
在展開(kāi)軟件系統(tǒng)復(fù)雜度形式化之前,我們先討論抽象系統(tǒng)中祷杈,依賴(lài)關(guān)系帶來(lái)的復(fù)雜度如何評(píng)估斑司。