l

2013年7月17日 星期三

了解Force讓你做出好設計(2):一個軟體設計範例

July 11 14:00~15:40

螢幕快照 2013-07-11 下午3.39.58

 

在《了解Force讓你做出好設計》這一篇,Teddy舉了一些Force的例子。今天談一個常見的軟體設計問題,推敲一下從problem找出force,進而推導出solution,或是用來判斷一個solution是否合適。

Context:你正在開發一個web-based資訊系統,主要的功能是收集使用者輸入的資料,並將後端資料庫的資料顯示在瀏覽器上。為了提升使用者體驗,你大量使用AJAX技術。你的系統同時上線人數約在50~100人之間,大部分使用者是透過區域網路存取系統。系統上線幾個月之後,使用者開始覺得系統效能太慢。

Problem:如何提升系統效能?

「如何提升系統效能」是一個常見的軟體設計問題,有經驗的鄉民看到這裡,隨隨便便都可以想到很多solution:

  • 硬體升級,最簡單且有效,但卻可能是最花錢的方法。
  • 檢查一下資料庫表格該建的index有沒有建好。
  • 看看SQL程式有沒有優化的空間。
  • …還是硬體升級挑眉質疑

除了憑經驗以外,還有沒有其他方法可以幫助鄉民們思考這個問題?

***

Force可以被視為問題(problem),或是需要(need)的原因。藉由不斷的問why,一直到回答不出來或是問不下去為止,來嘗試尋找force。以下是Teddy針對這個問題所做的練習:

螢幕快照 2013-07-11 下午2.47.50

經過分析之後,系統效能不佳可能由以下幾點較為重要的force所引起:

Force

  • 時間匆促或技能不足可能會設計出效率不佳的資料庫與SQL指令。
  • 硬體不夠力會讓後端與前端處理資料速度變慢。
  • 升級硬體要花一筆不少的錢,而公司很窮…Orz。
  • 升級瀏覽器可以提升Javascrip處理速度,但可能造成舊有系統無法執行。
  • 一次處理的資料量越多,速度自然會越慢。
  • 處理頻率越高,所需的時間越多。

差不多先這樣,再簡化一下,force可歸類為:「時間壓力」、「技術能力不足」、「硬體與網路速度太慢」、「經費有限」、「相容性限制」、「資料量大」、「頻率高」。

螢幕快照 2013-07-11 下午3.35.44

 

現在思考solution的方向就有一個參考依據,比較以下四個solution:

  1. 在不改程式的情況下,把IE7換成IE9便可達到提升效率的要求,但有些舊有系統會出問題。
  2. 在不改程式的情況下,花60萬升級資料庫伺服器電腦的硬體便可達到提升效率的要求。
  3. 花20萬升級資料庫伺服器電腦,再花5天修改10隻SQL程式。花6天針對唯讀資料設計cache機制。
  4. 修改程式限制使用者一次只能看到10筆資料(但使用者用起來可能會不爽)。

要挑選哪一個solution,或者是混用上述四種solution的內容,將最後的設計結果,代回原本找出的force裡面(原力場挑眉質疑)。如果最後的結果(resulting context)是公司(客戶)可以接受的,那這就是一個合適的solution。

***

差不多就這樣子,同樣的方法可以用來設計使用者介面或是探討軟體架構的問題。廣義的說,很多(不敢說全部)設計問題都可以用這種方式來思考。報告完畢。

***

友藏內心獨白:正在打通任督二脈當中。

2 則留言:

  1. 用思考分析的方式固然不錯,但似乎少了performance tuning中最重要的步驟:profiling by tool。通常bottleneck都發生在意想不到的地方啊~

    回覆刪除