軟件的復雜度 vs 難度

本文是對于軟件復雜度的零碎思考和記錄。 內容包括,軟件復雜度本身沒有統一定義; 介紹常見代碼復雜度,圈復雜度;比較復雜度和難度關系;最后回答從三個方面如何降低軟件的難度(復雜度,能力,以及項目控制)。

前面文章介紹軟件復雜度是軟件最大的敵人,其對于軟件開發和維護帶來挑戰。如果復雜度沒有不能很好的控制,甚至失控,那么必然成本超出,時間延誤,功能不能滿足期望,那就災難。軟件危機就是這么來的。

Complexity is the enemy of flexibility. It entangles us in unintended consequences. It blocks our attempts to change. It hides potential defects, making it impossible to be sure our systems will function correctly. Performance, transparency, security — all these highly desirable attributes leak away in the face of increasing complexity.

定義

復雜度可以被感知,影響也被普遍認可,然而對于復雜度卻沒有統一的定義,當然也沒有統一的衡量方式,可以參考不同人的理解。

但是對于軟件不同的側面,可以定義不同的復雜度,可以幫助了解某一個側面或者一個點的復雜度。 比如衡量算法的時間復雜度,常用大O來表示; 算法的空間復雜度; 下面介紹一個常用的衡量代碼復雜的 函數的圈復雜度。

  • 函數圈復雜度(cyclomatic complexity)

The cyclomatic complexity of a section of source code is the number of linearly independent paths within it.

簡單就可以數代碼里面分叉(if),循環(for、while)的個數,當做圈復雜度。 如果圈復雜度太大,比如超過10,那么代碼有 1024(2^10) 個獨立路徑 。 那么如何保證代碼的正確,就不是一件容易的事。理論上要測試所有的路徑,至少需要1024個測試用例。啟發 降低函數的圈復雜度??梢酝ㄟ^重構,將巨型函數變為小函數。

上面介紹圈復雜度,只是衡量代碼的復雜度。其實已經與軟件本身的復雜度已經范圍縮小很多了。

復雜度vs難度

復雜度是系統客觀存在的屬性,與系統組成元素,種類,數量,狀態有關,同時元素之間互動,信息交換的頻度有關。這些是系統本身的復雜度,而系統的實現映射到計算機里面,有會帶來偶然的復雜度。同樣系統的開發與維護,需要團隊協作,復雜度增大。 此外,隨著時間系統繼續在演變,大腦對于信息的遺忘,復雜度有上一個臺階。

難度,是我們個體的一種感覺。隨著復雜度的增加,會越的系統越來越難。那么對于系統中如何降低難度,我們就有下面幾個思路。

image.png
  • 降低客觀復雜度

    • 問題復雜度。 對于正確事情的認識,清楚的表達,以及如何驗證定義清楚,減輕需求蔓延,降低問題復雜度。 USM,BDD,sbe 這些都是從軟件的根源澄清價值,定義范圍,避免二義性,減少折騰。

    • 技術復雜度。 更高的抽象,分解,信息封裝手段; 使用成熟的軟件的框架,庫,標準(http,servlet , rest, sql ...),中間件(event queue, cache, nigix...); 更加靈活的架構,隨著軟件持續演化的架構; 更高界別語言,dsl; 提高代碼的可讀性和維護性,clean code , simple design, 重構等。

    • 環境的限制。 infrastructure as code 的理念,使用Docker提供的封裝和標準環境, 自動化部署,持續發布,k8s 自動化的調度, 監控,這些大大降低環境復雜度和運行的復雜度。

  • 提高團隊個人的能力。

    • 這個主要是提高團隊或者開發者的技能, 所謂會者不難。
    • 深化自己的技術棧.
    • 團隊持續學習。
  • 通過項目管理,降低軟件開發的干擾。

    • 項目管理,溝通協作,降低項目的干擾,從而減少復雜度。流程,使得軟件開發過程更有秩序,信息暢通,信息透明,加強信任,減少干擾。 這里暫且不談,會在軟件的生命周期里面談到。

    • 敏捷工程實踐,提高對軟件的控制力。 比如TDD, 單元測試,重構,持續集成,持續部署, 自動化。通過反饋,來提高對于系統的感知和控制力。
      極限編程和ASE開發都會提高對于軟件的控制力

reference

  1. complexity explorer
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,546評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,570評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事?!?“怎么了?”我有些...
    開封第一講書人閱讀 176,505評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,017評論 1 313
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,786評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,219評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,287評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,438評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,971評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,796評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,995評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,540評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,230評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,662評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,918評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,697評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,991評論 2 374

推薦閱讀更多精彩內容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,661評論 25 708
  • 軟件行業待了這么多年,抽空 總結一下,畢竟好記性不如爛筆頭。另外一個,想的明白,說的清楚,才能寫的準確,也是檢驗一...
    生活如同馬拉松_yaguang閱讀 3,486評論 3 2
  • 書籍推薦: 1)評估 2)拉伸康復 3)功能性貼扎 瑜伽是運動康復里的左右手 康復師需要懂得運動理療 拉伸+瑜伽=...
    瑜伽緣梅子閱讀 1,243評論 0 0
  • 1 小米定時遙控器插座。 2 木地板安裝修復工具套裝 3 撬釘子的專用支桿. 4袖珍螺絲刀套件(適合電腦,筆記本,...
    naturef閱讀 330評論 0 0
  • 月兒依偎在 浩瀚星空的懷抱里。 它不孤單, 它有繁星的陪伴啊。 月兒坐落在 黑暗空洞的宇宙中。 它不迷茫, 它有北...
    薄暮古井閱讀 128評論 2 3