l

2023年7月3日 星期一

為什麼開發人員會過度設計?

July 03 23:10~23:45


  

▲圖1:軟體開發的三個圈圈


前言

今天學生問Teddy一個問題:為什麼會產生過度設計(Over Design)?開發人員的時間不是都很寶貴嗎,怎麼會做出「超出目前需要」的設計?

***

原因很多

造成過度設計的原因很多,常見的有:

  1. 需求不清:很多開發人員沒有機會或意願接觸業務人員或領域專家去持續釐清需求,因此在開發系統的時候,只能依據文件或是對於需求模糊的認知來做設計。因此,很可能產生存在於設計中,但卻不存在於需求中的軟體,如圖1的區域6。
  2. 超前佈署:不管需求是否明確,開發人員通常會有一種「預留彈性」的傾向。「雖然客戶現在沒有要求,但是這個地方如果可以這樣再那樣設計,套某某設計模式,以後需求改變就輕鬆多了。」
  3. 改動架構成本很高:這一點和超前佈署有關,但發生在軟體架構層面。因為軟體架構的修改成本很高,所以如果可以在架構設計階段就「留有彈性」,那未來的日子就好過多了。很可惜,此時的彈性絕大部分都是開發人員腦補的結果,不但沒有幫未來鋪路,反倒增加人為的複雜度。
  4. 展現技術能力:有時候,過度設計就僅是開發人員展現自我技術能力的結果。「08學得一身功夫,就該好好施展一番。先來個23個設計模式漱漱口。」
  5. 演化的結果:有時候系統初期過度設計並不明顯,但隨著系統不斷開發與重構,演化的結果導致系統存在一些過於彈性的設計。例如,想要code reuse與去除重複程式碼,就很容易產生過於彈性的設計。

***

結論

過度設計的原因很多,Teddy覺得主要還是對於需求的理解是否到位,以及對於改變的反應能力是否足夠,會造成開發人員有沒有信心只要當下做出「將將好的設計」(Just Enough Design)即可。從敏捷開發的角度來看,採用TDD/BDD/SBE的開發方法,可以讓 (Specification = Test) = Program,在理想狀況下,可以大幅減少過度設計。

***

友藏內心獨白:要做到Lean,並不容易。

1 則留言:

  1. 過度設計:為何我們有時會陷入這個陷阱? | 第三大脑
    https://temberature.github.io/post/1a9_MXf8S/

    回覆刪除