軟件系統(tǒng)的復(fù)雜度及其控制

因?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ù)也可能最多玷禽。

image
  • 基本復(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):

image

組分復(fù)雜性
組分復(fù)雜性是指枕荞,復(fù)雜系統(tǒng)擁有數(shù)目繁多的組分柜候,組分間擁有多樣且復(fù)雜的相互作用搞动,要素與要素間的關(guān)系呈現(xiàn)出各種不確定。它包括:

  1. 構(gòu)成復(fù)雜性

系統(tǒng)演化過(guò)程中渣刷,構(gòu)成系統(tǒng)的不同因素會(huì)影響其自身的復(fù)雜性鹦肿。

  1. 分類(lèi)復(fù)雜性

組分個(gè)體要素之間的變異,及其在空間分布上的不規(guī)則性辅柴,以及由于組分的異質(zhì)箩溃,導(dǎo)致組分種類(lèi)姿態(tài)萬(wàn)千而引起的系統(tǒng)復(fù)雜性。

  1. 規(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ù)雜性。它包括:

  1. 組織復(fù)雜性

組織形態(tài)復(fù)雜度的提高魁瞪,帶來(lái)了組織結(jié)構(gòu)的多樣性和復(fù)雜性穆律,開(kāi)放系統(tǒng)在演化過(guò)程中,結(jié)構(gòu)狀態(tài)的橫向导俘、縱向和空間分布的差異性越大峦耘,系統(tǒng)復(fù)雜性越高。

  1. 層次復(fù)雜性

系統(tǒng)不同層級(jí)間的作用差別很大旅薄,構(gòu)成系統(tǒng)的子系統(tǒng)的層次越多辅髓,系統(tǒng)結(jié)構(gòu)越復(fù)雜。

  1. 過(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ù)雜性烘跺。它包括:

  1. 預(yù)測(cè)復(fù)雜性

當(dāng)預(yù)測(cè)系統(tǒng)狀態(tài)演化時(shí)湘纵,復(fù)雜性可定義為系統(tǒng)狀態(tài)或行為的不可預(yù)測(cè)性。

  1. 保持復(fù)雜性

當(dāng)希望保持系統(tǒng)功能時(shí)液荸,復(fù)雜性可定義為系統(tǒng)的功能瞻佛,關(guān)于系統(tǒng)要素平衡程度的靈敏性(脆弱性或非魯棒性)。

  1. 調(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ù)雜性奄毡。

  1. 計(jì)算復(fù)雜性

等效于由計(jì)算機(jī)解決一個(gè)問(wèn)題折欠,所消耗的時(shí)間和空間度量。

  1. 算法復(fù)雜性

問(wèn)題解決過(guò)程中吼过,涉及的描述锐秦、步驟、方法盗忱、以及仿真程序等要素的無(wú)規(guī)則和隨機(jī)性帶來(lái)的復(fù)雜性酱床。

  1. 有效復(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ù)雜性揍堕,如圖:

image

復(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)題尚未解決鲜侥。例如:

  1. 軟件工程的復(fù)雜度概念貼近應(yīng)用技術(shù)領(lǐng)域,但不夠系統(tǒng)诸典。復(fù)雜性學(xué)科中的定義雖然完善描函,但其中的概念偏于通用和抽象,難以直接用于應(yīng)用技術(shù)領(lǐng)域問(wèn)題的討論和判定狐粱。
  2. 所有的復(fù)雜度赘阀,都未將目標(biāo)系統(tǒng)的需求(外部變更)和組織考慮為復(fù)雜度因素,導(dǎo)致復(fù)雜度控制會(huì)淪為滯后性的思維和措施脑奠,且難以落實(shí)到組織行為。
  3. 多數(shù)的復(fù)雜度解析幅慌,缺少形式化描述和推理過(guò)程宋欺,導(dǎo)致復(fù)雜度理解和討論,也是一件復(fù)雜的事情。
  4. 未提出復(fù)雜度的優(yōu)化策略齿诞,并給出系統(tǒng)性證明酸休。

復(fù)雜度的形式化定義
在展開(kāi)軟件系統(tǒng)復(fù)雜度形式化之前,我們先討論抽象系統(tǒng)中祷杈,依賴(lài)關(guān)系帶來(lái)的復(fù)雜度如何評(píng)估斑司。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市但汞,隨后出現(xiàn)的幾起案子宿刮,更是在濱河造成了極大的恐慌,老刑警劉巖私蕾,帶你破解...
    沈念sama閱讀 216,372評(píng)論 6 498
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件僵缺,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡踩叭,警方通過(guò)查閱死者的電腦和手機(jī)磕潮,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,368評(píng)論 3 392
  • 文/潘曉璐 我一進(jìn)店門(mén),熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)容贝,“玉大人自脯,你說(shuō)我怎么就攤上這事〗锔唬” “怎么了膏潮?”我有些...
    開(kāi)封第一講書(shū)人閱讀 162,415評(píng)論 0 353
  • 文/不壞的土叔 我叫張陵,是天一觀的道長(zhǎng)茂缚。 經(jīng)常有香客問(wèn)我戏罢,道長(zhǎng),這世上最難降的妖魔是什么脚囊? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,157評(píng)論 1 292
  • 正文 為了忘掉前任龟糕,我火速辦了婚禮,結(jié)果婚禮上悔耘,老公的妹妹穿的比我還像新娘讲岁。我一直安慰自己,他們只是感情好衬以,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,171評(píng)論 6 388
  • 文/花漫 我一把揭開(kāi)白布缓艳。 她就那樣靜靜地躺著,像睡著了一般看峻。 火紅的嫁衣襯著肌膚如雪阶淘。 梳的紋絲不亂的頭發(fā)上,一...
    開(kāi)封第一講書(shū)人閱讀 51,125評(píng)論 1 297
  • 那天互妓,我揣著相機(jī)與錄音溪窒,去河邊找鬼坤塞。 笑死,一個(gè)胖子當(dāng)著我的面吹牛澈蚌,可吹牛的內(nèi)容都是我干的摹芙。 我是一名探鬼主播,決...
    沈念sama閱讀 40,028評(píng)論 3 417
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼宛瞄,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼浮禾!你這毒婦竟也來(lái)了?” 一聲冷哼從身側(cè)響起份汗,我...
    開(kāi)封第一講書(shū)人閱讀 38,887評(píng)論 0 274
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤盈电,失蹤者是張志新(化名)和其女友劉穎,沒(méi)想到半個(gè)月后裸影,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體挣轨,經(jīng)...
    沈念sama閱讀 45,310評(píng)論 1 310
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,533評(píng)論 2 332
  • 正文 我和宋清朗相戀三年轩猩,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了卷扮。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點(diǎn)故事閱讀 39,690評(píng)論 1 348
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡均践,死狀恐怖晤锹,靈堂內(nèi)的尸體忽然破棺而出,到底是詐尸還是另有隱情彤委,我是刑警寧澤鞭铆,帶...
    沈念sama閱讀 35,411評(píng)論 5 343
  • 正文 年R本政府宣布,位于F島的核電站焦影,受9級(jí)特大地震影響车遂,放射性物質(zhì)發(fā)生泄漏。R本人自食惡果不足惜斯辰,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,004評(píng)論 3 325
  • 文/蒙蒙 一舶担、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧彬呻,春花似錦衣陶、人聲如沸。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,659評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)。三九已至蒲跨,卻和暖如春译断,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背或悲。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,812評(píng)論 1 268
  • 我被黑心中介騙來(lái)泰國(guó)打工镐作, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留藏姐,地道東北人。 一個(gè)月前我還...
    沈念sama閱讀 47,693評(píng)論 2 368
  • 正文 我出身青樓该贾,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親捌臊。 傳聞我的和親對(duì)象是個(gè)殘疾皇子杨蛋,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,577評(píng)論 2 353

推薦閱讀更多精彩內(nèi)容