brooks曾指出:「愛因斯坦認為自然界必定存在著簡單的解釋,因為上帝不是反覆無常或隨心所欲的。軟體工程師沒有這樣的信仰來提供安慰。許多必須控制的複雜性是隨心所欲的複雜性。」
定義軟體的複雜性。
軟體確實有較為簡單的軟體,系統簡單,沒有什麼複雜的變化,甚至不需要系統的學習,你就可以寫出乙個和他一樣的軟體或比他寫的更好。但是對於複雜的軟體系統,你該怎麼辦?完犢子。
問題域的複雜性。實際系統的基本功能難以確認解釋,非功能需求(可用性、效能、成本、健壯性和可靠性)變化多端。造成這種現象的原因有使用者和系統開發者之間的「溝通困難」,使用者只是對想要的軟體系統有乙個模糊的想法。而這是缺乏鄰域的經驗。缺乏很好的描述性文件。現有的只能是一些文字,插圖,這樣的文件容易產生歧義,不好理解,而且經常包含一些設計方案,而不是基本需求。解決方法,看到早期的產品(設計文件和原型),會幫助我們更好的促進使用者和系統開發人員的溝通與交流。
軟體的維護與演化。修正錯誤時,這是維護;應對需求改變時,這是演化;保持老軟體繼續工作,這是保護。
管理開發過程的困難性。對於開發團隊來說,主要的管理挑戰總是維持設計的一致性和完整性。
軟體中隨處可能出現的靈活性(既是優點,也是缺點)。軟體行業還是一種勞動密集型的產業。許多東西需要自己重新開發,並且缺乏乙個統一的編碼和標準。
描述離散系統行為的問題。造成的原因,組合,這導致系統可能狀態的數目非常大。關於系統的正確性,必須滿足於可接受的資訊級別。
複雜系統的5個屬性
層次結構。在simon和ando工作的基礎之上,courtis提出:「複雜性常常以層次結構的形式存在。複雜的系統由一些相關的子系統組成,這些子系統又有自己的系統,如此下去,直到達到某種最低層次的基本元件。」「所有系統都有子系統,所有系統都是更大系統的組成部分......乙個系統所提供的價值肯定來自於各個組成部分之間的相互關係,而不是來自於單個的組成部分」
相對本原。「選擇哪些作為系統的基礎元件相對來說比較隨意,在很大程度上取決於系統觀察者的判斷。」
分離關注。元件內的聯絡通常比元件間的聯絡更強。這一事實實際上將元件中高頻的動作(涉及元件的內部結構)和低頻的動作(涉及元件間的相互作用)分離開來。
共同模式。層次結構通常只是由少數不同型別的子系統按照不同的組合和安排方式構成的。(小組件的復用,如細胞)
穩定的中間形式。複雜系統毫無例外都是從能工作的簡單系統演變而來的。
總結:軟體本質上是複雜的,軟體系統的複雜性常常超出了人類智慧型的範圍。
簡化根本複雜性,消除偶發複雜性
根本複雜性 essential complexity 指的是問題與生俱來的,無法避免的困難。比如,協調全國的空中交通就是乙個 天生的 複雜問題,必須實時跟蹤每架飛機的位置 包括飛行高度 航速 航向和目的地,才能預防空中和地面上的衝突。像天氣驟變這樣的情況會令航班計畫全盤失效,航班時刻表必須適應不斷變...
造成軟體複雜性的原因
1 問題域的複雜性,造成這種複雜性的主要原因,還是使用者與開發者之間的 溝通問題 使用者常常對某個需求只存在 乙個模糊的概念,對具體要實現成乙個什麼樣子沒有特別明顯的想法。並且由於使用者與開發者思維的不一致,使用者很 難將他的意思很清晰的傳達給開發者。通常這種情況下,我們開發者也只能借助些工具,例如...
複雜性思考
複雜性思考 基本資訊 原書名 think complexity 原出版社 o reilly media 譯者 張龍 叢書名 o reilly精品圖書系列 出版社 機械工業出版社 isbn 9787111419990 出版日期 2013 年5月 開本 16開 頁碼 117 版次 1 1 所屬分類 計算...