敏捷設計之拙劣設計的症狀(摘錄)

2021-08-29 13:21:19 字數 1877 閱讀 8951

摘錄自:敏捷軟體開發

1.僵化性(rigidity): 很難對系統進行改動,因為每個改動都會迫使許多對系統其他部分的其它改動。

2.脆弱性(fragility): 對系統的改動會導致系統中和改動的地方在概念上無關的許多地方出現問題。

3.牢固性(immobility): 很難解開系統的糾結,使之成為一些可在其他系統中重用的元件。

4.粘滯性(viscosity): 做正確的事情比做錯誤的事情要困難。

5.不必要的複雜性(needless complexity): 設計中包含有不具任何直接好處的基礎結構。

6.不必要的重複(needless repetition): 設計中包含有重複的結構,而該重複的結構本可以使用單一的抽象進行統一。

7.晦澀性(opacity): 很難閱讀、理解。沒有很好地表現出意圖。

fragility

在進行乙個系統改動時,程式的許多地方就可能出現問題。常常是,出現新問題的地方與改動的地方並沒有概念上的關聯。要修正這些問題又會引出更多的問題,從而使開發團隊就像乙隻不停追逐自己尾巴的狗樣(忙得團團轉)。隨著模組脆弱性的增加,改動會引出意想不到的問題的可能性就越來越大。這看起來很荒謬,但是這樣的模組是非常常見的。這些模組需要不斷的修補——它們從來不會被從錯誤列表中去掉,開發人員知道需要對它們進行重新設計,你越是修正它們,它們就變得越糟糕。

immobility:

設計中包含了對其它系統有用的部分,但是要把這部分從系統中分離出來所需要的努力和風險是巨大的。

viscosity:難以做正確的事情

兩種表現形式:軟體的粘滯性和環境的粘滯性。當面臨乙個改動時,開發人員常常會發現有多種改動的方法。其中一些方法會保持設計,另外一些方法會破壞設計(也就是生硬的方法)。當那些保持設計的方法比那些生硬手法更難以使用時,就表明設計具有高粘滯性。當開發環境遲鈍、底效時,就會產生環境的粘滯性。

needless complexity:過分設計

如果設計中包含有當前沒有用的組成部分,它就含有不必要的複雜性。當開發人員**需求大額變化,並在軟體中防止了處理哪些潛在變化的**時,常常會出現這種情況。起初,這樣做看起來象是一件好事。糟糕的是結果常常相反。為過多的可能性做準備,致使設計中包含絕對不可能用到的結構,從而變得混亂。一些準備會帶來回報,但是更多的是不會。期間,設計揹負著這些用不到的部分使軟體變得複雜,並且難以理解。

needless repetition:濫用滑鼠(亂拷貝)

剪貼和貼上常常使軟體系統都是構建於眾多的重複**片斷之上。

當同樣的**以稍微不同的形式一再出現時,就表示開發人員忽視了抽象。對於開發人員而言,發現所有的重複並通過適當的抽象來削除它們的做法可能沒有高的優先級別,但是這樣做非常有助於使系統更加易於理解和維護。

當系統中有重複的**時,對系統改動會變得困難。在乙個重複的**體中發現的錯誤必須要在每個重複體中一一修正。不過,由於每個重複體之間都有細微的差別,所以修正的方式也不總是相同的。

opacity:混亂的表達

是指模組難以理解。**可以用清晰、富有表現力的方式編寫。或者可以用晦澀、費解的方式編寫。**隨著時

間而演化,往往會變得越來越晦澀。 為了使**的晦澀性保持最低,就需要持續的保持**清晰並富有表現力。

需求是專案中最不穩定的因素。如果設計由於持續、大量的需求變化而失敗,就表明我們的設計和實踐本身是有缺陷的。我們必須找到一種方法,使得設計對於這種變化具有彈性,並且應用一些實踐來防止設計腐化。

敏捷團隊依靠變化來獲取活力。團隊幾乎不進行預先設計,因此,不需要乙個成熟的初始設計。它們更願意保持系統設計盡可能的乾淨、簡單、並使用許多單元測試和驗收測試作為支援。(這裡就有乙個問題,如果事先不進行較完善的設計,那麼,當核心需求(或者說是基礎需求)變動後,就意謂著全域性設計的改變,這就意味著幾乎整個系統都需要重構。我以為,初始的設計之前,應該至少需要對系統全域性有很深刻的把握。敏捷開發在一些模組化的設計中,有更持續的活力) 

敏捷開發之設計文件

對於設計文件的一點體會就是,明確需求 精簡語言 並繪 相輔 易於溝通。下文援引 在產品研發過程中經常需要編寫很多文件,例如 需求文件 設計文件 api文件 驗收文件等等。團隊成員要花費很多精力去維護眾多的文件,甚至有 兄弟,我替你寫 你替我寫文件 的無奈。敏捷開發宣言 個體和互動 勝於 流程和工具 ...

敏捷開發之設計文件

對於設計文件的一點體會就是,明確需求 精簡語言 並繪 相輔 易於溝通。下文援引 在產品研發過程中經常需要編寫很多文件,例如 需求文件 設計文件 api文件 驗收文件等等。團隊成員要花費很多精力去維護眾多的文件,甚至有 兄弟,我替你寫 你替我寫文件 的無奈。敏捷開發宣言 個體和互動 勝於 流程和工具 ...

《服務設計的SOA原則》的設計實踐摘錄

thomas erl編著的 服務設計的soa原則 soa principles of service design 是一部關於服務設計的百科全書,是構建soa解決方案的必備參考。這篇文章包含了3個支撐實踐 服務概要,詞彙表和組織角色。在記錄服務的早期階段,使用乙個公共模板或乙個 來收集所有服務相似的...