軟體設計是怎樣煉成的(1) 什麼是優秀的設計?

2021-09-06 13:36:00 字數 2592 閱讀 1059

摘要:

某專案的設計文件評審會上,各路技術大牛進行了「熱烈」的討論,討論的焦點是怎樣的設計才漂亮!大家圍繞著如何oo,如何高內聚低耦合,如何反轉控制等話題進行了「熱烈」的爭論。照這樣開下去,這個評審會豈不是變成了「神仙大會」!怎樣的設計才叫優秀的設計呢?

大綱:

1.什麼是優秀的設計?

2.優秀的設計能節省專案工作量

3.優秀設計從分析需求開始

4.軟體系統不是木桶型的

5.軟體設計的「大道理」

6.規劃系統骨架——架構設計

7.打造系統的底蘊——資料庫設計

8.細節決定成敗——詳細設計

9.使用者感覺好才是真的好——使用者體驗設計

10.持續提公升設計水平

1.什麼是優秀的設計?

某專案的設計文件評審會上,各路技術大牛進行了「熱烈」的討論,討論的焦點是怎樣的設計才漂亮!大家圍繞著如何oo,如何高內聚低耦合,如何反轉控制等話題進行了「熱烈」的爭論。

你覺得以下標準可以成為「漂亮」設計的標準嗎?

1)高效

2)可靠

3)易用

4)安全

5)可擴充套件

6)相容性強

7)移植性強

……如果每次設計文件評審,我們都採用上述標準來評審,你覺得這個設計評審會有效果嗎?

當時我參加了這樣的乙個設計評審會,覺得氣氛很不對,照這樣開下去,這個評審會豈不是變成了「神仙大會」!

於是我問了兩個問題:

1)誰能說說這個專案的主要需求?

2)這些需求,設計上是如何考慮實現的?

結果沒有人能答上來!

我們從書本上看到的那些」通用「的設計標準,說得難聽一點,就是廢話!對實際的專案工作基本上沒有實質用途!

請看下面4個例子,分別思考這4個案例的軟體設計思路,你會發現上述「漂亮設計的標準」,真的是廢話!

案例1:某專案要求在很短時間內完成,而且客戶對系統的當前認識還是比較初步的,你打算怎樣設計這個系統?

案例2:某軟體公司接了乙個「網頁+資料庫」型別的專案,這類專案已經做過多個,但這次的業務卻是新的,你怎樣考慮這個專案的設計?

案例3:某軟體公司已經成功為n個醫院做了管理系統,現在需要為一家新的大醫院做類似這個系統,你會怎樣考慮這個系統的設計?

案例4:你接到乙個任務,要做乙個即時戰略遊戲,目標是要在當前遊戲市場找中殺出一條血路,你怎樣考慮這個遊戲的設計?

4個案例各有特點,分別代表了4種「典型」:

案例1:需求很朦朧,工期很緊,技術上基本上沒有積累。

案例2:需求是新的,但可以重用「網頁+資料庫」的技術架構。

案例3:需求是類似的,技術架構也是類似的,相信你會直接重用之前的系統。

案例4:這是乙個需要創意和高技術含量的遊戲,而遊戲軟體的需求和技術都是充滿挑戰的。

上述4種情況,相信你採取的設計策略是不一樣的,你可能會發現所謂的優秀設計沒有固定的標準。

如果硬是要來乙個優秀設計的標準呢?

我會這樣說:就是做高價效比的設計!

乙個優秀的設計應該具備以下特點:

1)優秀的設計都是需求驅動的,不熟悉需求就做出來的設計是不靠譜的;

2)優秀的設計應該是當前團隊能理解能實現的,太超前的設計專案團隊做不出來,這個設計只能是擺設;

3)優秀的設計應充分考慮當前各種限制條件,適當做出平衡,能保證達成專案的目標:

4)優秀的設計能盡量降低專案的整體工作量,讓整個專案更加可控。

2.優秀的設計能節省專案工作量

你打算如何設計上述系統呢?

你可能會問,有工期限制嗎?

你說呢?真實專案一定會有工期限制的,這個專案你的工期只有1個月!

你可能會說:你當我是神仙啊,1個月有可能怎樣死都死不出啊!

這個時候能幫助你的就是優秀的設計,優秀的設計有可能能讓你用很少的工作量就做出來,優秀的設計也不一定需要你全部從零開發的,我們可以拿來主義!有不少開源軟體是可以基本滿足上述要求的,我們可以直接拿來用,這樣你需要付出的工作量就少很多了。

我曾經用某開源軟體做了這樣的乙個**出來,但發現沒有全文搜尋功能,結果我想了乙個「投機取巧」的辦法,自己不寫一句**,直接利用谷歌的這個搜尋功能「site:網域名稱 關鍵字」,讓谷歌幫我搞定全文搜尋。當然這樣做出來的效果還不是很完美,但至少我能在很短時間內能做出個大概啊,如果自己開發還不一定能做出這樣的效果呢!

小結:

受工期限制、受能力限制等制約因素,十全十美的設計基本上是很難做到的,但如果因為趕工期而在軟體設計上節省時間甚至是直接忽略這步,其實是得不償失的。在軟體設計上「節省」1小時,可能會讓你將來多投入成倍的專案時間;越是工期緊,越需要冷靜思考軟體的設計,合適的設計能大大地降低專案工作量,讓你後期的工作輕鬆很多。

創新工場創業課堂(敏捷課程)講師

軟體研發管理資深顧問

cmmi首席專家

《火球——uml大戰需求分析》作者

軟體知識原創基地創辦人

軟體設計是怎樣煉成的(1) 什麼是優秀的設計?

摘要 某專案的設計文件評審會上,各路技術大牛進行了 熱烈 的討論,討論的焦點是怎樣的設計才漂亮!大家圍繞著如何oo,如何高內聚低耦合,如何反轉控制等話題進行了 熱烈 的爭論。照這樣開下去,這個評審會豈不是變成了 神仙大會 怎樣的設計才叫優秀的設計呢?大綱 1.什麼是優秀的設計?2.優秀的設計能節省專...

軟體設計是怎樣煉成的(4) 軟體設計的「大道理」

摘要 十幾年前剛畢業不久,我從事第乙份軟體開發的工作,要完成乙個專案,但沒有任何軟體設計的思路,於是請教我的老闆。我的老闆給了我兩種思路 1 先假設軟體已經做出來了,想好軟體的外在表現,由此倒推軟體的實現方法 2 思考程式的資料結構,先設計資料庫,然後再搭建軟體的上層建築。老闆給了我很大的啟發,隨著...

軟體設計是怎樣煉成的(4) 軟體設計的「大道理」

摘要 十幾年前剛畢業不久,我從事第乙份軟體開發的工作,要完成乙個專案,但沒有任何軟體設計的思路,於是請教我的老闆。我的老闆給了我兩種思路 1 先假設軟體已經做出來了,想好軟體的外在表現,由此倒推軟體的實現方法 2 思考程式的資料結構,先設計資料庫,然後再搭建軟體的上層建築。老闆給了我很大的啟發,隨著...