6種辦法實現精益軟體

banq發表於2018-09-03
最近,我瀏覽了公司的程式碼庫,發現它有三個版本的儀表板,都是用於分析頁面,我很確定客戶不需要那樣做。這引發了我幼稚腦中的一些事情,我開始在網際網路上尋找相關的想法。就在那時,我發現了這篇古老的論文:“為精益軟體辯護”

這篇文章提出的觀點很大程度上與我共鳴。

介紹
與10年前的類似功能軟體相比,我們今天寫的軟體很大,執行任何現代軟體所需的記憶體和資源都非常高,增強的使用者體驗和功能只是增加的大小的一部分,原因還有更多。

所有現代設計模式、程式碼架構等都是教會我們如何應對這種複雜性,而不可能從根本上消滅它。

兩條法則非常準確地反映了軟體的狀態:
1. 記憶體越來愈大,軟體擴充套件了才能填充可用記憶體。
2. 硬體卻變得越來越快,但是軟體變得慢更多。

簡化軟體的方法在於用訓練有素的方法將其返回本質。

“FAT軟體”的原因
導致複雜性的一個主要原因是軟體擁有的功能太多,這些不一定都是使用時所必需的功能,我們不斷新增新功能和擴充套件,並且與原始系統的任何不相容性將被忽略或傳遞無法識別。

當系統的強大到透過功能數量來衡量時, 數量變得比質量更重要 ,每個新版本都必須新增功能,即使它真的不需要新增任何功能。

1.所有功能,所有時間
軟體的單體設計是使軟體複雜化的主要原因之一,每個可以想象得到的功能都是系統設計的一部分,隨著時間的推移,大多數功能都變得無關緊要,但會繼續對系統產生影響。

2.對某些人來說,複雜性就是力量。
當我建議將去除一些不必要的靈活性並使事情標準化以降低複雜性和提高可維護性時,PM當時的反應至今記憶猶新。

不可理解性應引起人們的懷疑,而不是欽佩。

3.沒有足夠的時間
時間壓力是笨重軟體的首要原因。我們沒有足夠的時間從程式碼中刪除已棄用的功能並改進我們認為可接受的解決方案。

六種辦法幫助保持軟體“精益”
1. 強型別語言
使用強型別語言有助於以更簡單的方式設計複雜系統,它允許編譯器精確定位錯誤和介面,並且可以更自信地使用和更改抽象。

2.找到適當的分解
系統應該被分解成模組,模組應該被分解成元件,元件應該有單一的責任,整個系統應該在層次結構中進行分解,同時最小化複雜性並且去除重複程式碼。

3.可擴充套件性
可擴充套件性是保持系統從一開始就簡化的先決條件。它還允許定製系統以適應新的更改和刪除已棄用的擴充套件。

4.永遠不應該構建複雜的軟體
認為複雜系統需要設計師和程式設計師的紀律是不正確的,完全無法理解的系統,至少在單個個體的重要程度上,應該永遠不會建立起來。

5.溝通是關鍵
隨著時間的增長,溝通問題變得占主導地位,複雜的團隊結構促成複雜的軟體。

6.降低複雜性應該是目標
降低軟體的複雜性和規模應該是每個開發步驟的目標,在系統規範中,對於詳細的程式設計設計 - 每個步驟都必須有意地消除系統中任何不必要的複雜性。

結論
本主題確實觸及了軟體團隊的敏感神經,當我和我的團隊討論這個時,他們的回答就是“不同意,這是銷售需要的功能。“,”現在沒有必要保持軟體小。我們擁有更大的機器和更好的工具“等藉口。

我明白了。我在某種程度上也不會同意,但不是因為保持軟體精益是錯誤的,而是因為它很難,儘管如此,我希望在設計系統時牢記這些想法應該可以減少軟體的複雜性。

A plea for lean software: 6 Lessons I learned to h

相關文章