軟件開發(fā)必須追求需求和設(shè)計
2015-06-10 14:24:18 訪問:
一般來說,軟件產(chǎn)品要取得成功,必須同時兼顧需求和設(shè)計。而且歸根到底,所有的精妙設(shè)計都源自于實際的需求。如果沒有實際的需求,那么不論設(shè)計多么精妙,只是徒增成本而已。下面我們來探討一下設(shè)計是如何來滿足各種需求的。
一、功能性。功能性需求是最容易想到的那部分需求,但是要確保系統(tǒng)功能的完整實現(xiàn),仍需要精心設(shè)計。通常我們通過領(lǐng)域分析來學習并確定系統(tǒng)功能,通過劃分子系統(tǒng)和功能模塊來實現(xiàn)對功能性的關(guān)注點分離。例如,在《彩色UML建模》一書中,將一個企業(yè)信息系統(tǒng)分解成了12個子系統(tǒng),分別是:物料資源管理、設(shè)施管理、制造管理、庫存管理、產(chǎn)品銷售管理、現(xiàn)金銷售管理、客戶賬戶管理、人力資源管理、關(guān)系管理、項目活動管理、會計管理和文檔管理。
二、可靠性。不同的系統(tǒng)對可靠性有不同的要求,即平均無故障時間(MTBF)達到多少,或可用性達到幾個9.我們知道,一般系統(tǒng)的組成部件越多,出錯的概率越大。但這只是故事的一個方面。要想提高系統(tǒng)的可用性,就要為系統(tǒng)增加更多的組成部件,即提供冗余部件。無單點故障的設(shè)計,正是為了提高系統(tǒng)的可用性。RAID以及專為容錯而設(shè)計的“NonStop”系列計算機和操作系統(tǒng),都是針對系統(tǒng)的可靠性需求所做的設(shè)計?,F(xiàn)在,人們越來越多地使用計算機集群來實現(xiàn)高可用性(HA)。安全性也是可靠性的一個方面,為此架構(gòu)師會設(shè)計一些機制,犧牲一點性能和易用性。
三、易用性。為了追求易用性,工業(yè)設(shè)計師和人機界面設(shè)計師殫思竭慮,設(shè)計出一些操作簡單方便、適用于各種人群、各種場合的產(chǎn)品。IPhone以及奮起直追的Android手機就是這樣的產(chǎn)品。易用性為用戶節(jié)約了操作時間,帶來了價值。同樣,Photoshop的快捷鍵設(shè)計也是為了提高易用性,它只是有一條比較陡的學習曲線,學習成本較高而已。這些易用性設(shè)計的背后,都有真真切切的用戶需求。GUI是為了易用性,命令腳本也是為了易用性。
四、效率。不存在無限的資源,所以系統(tǒng)必然在效率方面有所要求。算法設(shè)計中的時間復雜度分析和空間復雜度分析,是每一個軟件架構(gòu)設(shè)計師必備的能力。如果需要讓一臺服務器服務盡可能多的并發(fā)用戶,如果需要讓軟件運行在手機上,那么架構(gòu)師就必須為資源使用效率而設(shè)計,考慮用時間換取空間或是反之。是否使用緩存機制?使用哪種緩存機制?架構(gòu)師會在需要的時候仔細斟酌。
五、可維護性。系統(tǒng)的運營維護成本才是總體擁有成本中的大頭。所以,好的架構(gòu)師知道,需要為運營維護而設(shè)計。復制/粘貼代碼是不好的行為。系統(tǒng)需要具備審計追蹤能力、需要能記錄日志。架構(gòu)的設(shè)計應該盡可能滿足高內(nèi)聚低耦合的原則。需要有一些基礎(chǔ)設(shè)施來保證降低系統(tǒng)故障診斷成本和修復成本。SOA治理主要是從企業(yè)系統(tǒng)的可維護性需求出發(fā)來考慮問題的。
六、可移植性。為什么Java會流行?因為系統(tǒng)有可移植性需求。人們甚至愿意為可移植性而犧牲一點效率。但是真正的架構(gòu)師知道,不用Java也能實現(xiàn)可移植性,用了Java也可能不能移植。Java只是架構(gòu)師在面對可移植性需求時的一個選擇。有的系統(tǒng)用Java設(shè)計,但只能運行在Windows平臺或Oracle數(shù)據(jù)庫上,這樣的故事我們聽到的不少。Java虛擬機幫助我們實現(xiàn)對可移植性的關(guān)注點分離,并帶來一些開銷。
七、可伸縮性。進入互聯(lián)網(wǎng)時代,信息系統(tǒng)有了根本的變化,即強調(diào)可伸縮性。設(shè)計中的系統(tǒng)如果獲得成功,可能在不遠的將來需要承受幾個數(shù)量級的客戶。這就要求系統(tǒng)有很好的可伸縮性。在這種情況下,不論使用怎樣的架構(gòu)風格和編程語言,架構(gòu)師必須為可伸縮性而設(shè)計。Google的Map/Reduce技術(shù)和Apache的Hadoop項目就是很好的例子,架構(gòu)師設(shè)計出一些基礎(chǔ)設(shè)施,實現(xiàn)了可伸縮性的關(guān)注點分離。
虛擬機、SOA、RESTful、云計算、SaaS、PaaS、Android,無論是哪種架構(gòu),你都可以找出隱藏在這些架構(gòu)設(shè)計背后的需求。哪種適合你?只有實踐能給出答案。所以,實踐是檢驗真理的唯一標準。沒有什么比好的理論更可實踐的了。紙上得來終覺淺,絕知此事要躬行。學而實習之,不亦樂乎?實踐是認識的來源,實踐是認識發(fā)展的動力,實踐是認識的最終目的。