網(wǎng)站默認(rèn)樣式表愛站網(wǎng)seo
需求分析,即分析需求,分析軟件用戶需要解決的問題。
需求分析的下一環(huán)節(jié)是軟件的整體架構(gòu)設(shè)計,需求是輸入,架構(gòu)是輸出,需求決定了架構(gòu)。
決定架構(gòu)的是軟件的所有需求嗎?肯定不是,真正決定架構(gòu)設(shè)計的是關(guān)鍵需求或用戶要解決的關(guān)鍵問題,其余非關(guān)鍵性的需求或非關(guān)鍵性的問題,可以用來驗證軟件架構(gòu)設(shè)計的合理性。
需求分析,是在談什么?談識別關(guān)鍵需求。
如何識別關(guān)鍵需求呢?
關(guān)鍵需求具有決定性的意義和價值,根據(jù)筆者所參與研發(fā)過軟件,總結(jié)為:關(guān)鍵需求往往是基礎(chǔ)需求、核心需求和高風(fēng)險需求。
-
基礎(chǔ)需求:基礎(chǔ)需求體現(xiàn)在軟件上是基礎(chǔ)功能,往往具有 “穩(wěn)定” 和 “原子化” 特征;基礎(chǔ)功能很穩(wěn)定,很少受到需求變動的影響;而且,基礎(chǔ)功能往往不會再拆分;基于基礎(chǔ)功能,軟件往往會衍生出更多的擴(kuò)展功能;在電商系統(tǒng)中,像 “商品”、“訂單”、“支付” 等屬于軟件的基礎(chǔ)功能,以此為基礎(chǔ)進(jìn)行擴(kuò)展的 “營銷”、“評論”、“客服” 則屬于軟件的擴(kuò)展功能。
-
核心需求:核心需求很容易理解,往往是軟件必須要提供的能力,失去了核心需求,軟件則沒有意義;比如,移動手機(jī)系統(tǒng)的電話功能、智能汽車的駕駛功能、微信軟件的聊天功能等等;識別關(guān)鍵需求,往往從識別用戶必須要解決的關(guān)鍵問題入手來確認(rèn)核心需求。
-
高風(fēng)險需求:高風(fēng)險需求往往會影響軟件研發(fā)的成敗,必須在軟件架構(gòu)設(shè)計時充分考慮其高風(fēng)險性,提出解決方案,降低或消除其風(fēng)險;高風(fēng)險需求更多體現(xiàn)在非功能需求方面,比如:在電商系統(tǒng)中用戶搜索任何一類商品必須在 0.5 秒內(nèi)看到結(jié)果,在水利監(jiān)測系統(tǒng)中任意1~3臺服務(wù)器宕機(jī)都不會影響水情警報的告警。
所以,架構(gòu)師在接觸到紛繁復(fù)雜的一堆需求時,切忌眉毛胡子一把抓地逐一分析,而應(yīng)該將精力放在識別關(guān)鍵需求上面。
關(guān)鍵需求 = 基礎(chǔ)需求 || 核心需求 || 高風(fēng)險需求。
普適需求分析模型
這里,以 IM 系統(tǒng)為例,總結(jié)一個普適性的需求分析模型,見下圖。
首先對所有需求點進(jìn)行篩選,區(qū)分出 “功能需求” 和 “非功能需求”;然后對 “功能需求” 進(jìn)行分析,識別出 “基礎(chǔ)功能需求” 和 “擴(kuò)展功能需求”,這樣則將一團(tuán)需求點從同一視角出發(fā),拆分成了同類要素,整體化繁為簡。
-
基礎(chǔ)功能需求:基礎(chǔ)功能需求是整個系統(tǒng)的核心,往往體現(xiàn)關(guān)鍵需求中的 “基礎(chǔ)需求” 和 “核心需求”; IM 系統(tǒng)的基礎(chǔ)功能需求包括三部分: “用戶”、“聯(lián)系人” 和 “消息”,“用戶” 描述的是當(dāng)前登錄者, “聯(lián)系人” 描述的是當(dāng)前登錄用戶的好友,“消息” 是 IM 系統(tǒng)最最核心的功能,包括 “私信消息”、“系統(tǒng)消息”、“云消息” 和 “離線消息”。
-
擴(kuò)展功能需求:是對基礎(chǔ)功能需求的擴(kuò)展,擴(kuò)展功能需求的典型特征就是 “變動” 和 “擴(kuò)展”,需求最不穩(wěn)定;在實現(xiàn)擴(kuò)展功能需求時往往基于基礎(chǔ)功能進(jìn)行。IM 系統(tǒng)的基礎(chǔ)功能需求決定了 整個 IM 的業(yè)務(wù)框架,IM 系統(tǒng)的擴(kuò)展功能需求,如: “群消息”、“多媒體消息”、“子母號”、 “紅包” 等都是基于 IM的 “基礎(chǔ)功能需求” 實現(xiàn)的;據(jù)說,微信的 “搖一搖” 功能,是由三個實習(xí)生用了不到一周時間就上線的功能。
-
非功能需求:非功能需求更多體現(xiàn)的是關(guān)鍵需求中的 “高風(fēng)險需求”;軟件的非功能需求很多,我們對其進(jìn)行歸類和抽象,總結(jié)為高擴(kuò)展需求、高吞吐需求和穩(wěn)定性需求。
-
高擴(kuò)展—高擴(kuò)展包括功能的高擴(kuò)展和容量的高擴(kuò)展; 功能的高擴(kuò)展是指基于現(xiàn)有功能和代碼,通過簡單改造就可以輕松實現(xiàn)新的功能,這要求系統(tǒng)的基礎(chǔ)功能的實現(xiàn)做到合適粒度的 “高內(nèi)聚” 和 “低耦合”(在《架構(gòu)技能(三):擴(kuò)展性》一文中有詳細(xì)分析); 容量的高擴(kuò)展是指可以輕松地對集群進(jìn)行線性橫向擴(kuò)容,以處理更高流量規(guī)模的訪問請求。
-
高吞吐—是互聯(lián)網(wǎng)系統(tǒng)一直孜孜不倦的所追求的目標(biāo),如何提高系統(tǒng)的吞吐量呢?需要從兩個方面著手,一是提高系統(tǒng)的并發(fā)量,一是提高系統(tǒng)的處理性能;也就是 “高吞吐” 依賴 “高并發(fā)” 和 “高性能”,這里需要注意,嚴(yán)格地說,在系統(tǒng)資源未耗盡之前提高并發(fā)量可以在一定程度上提高吞吐量;高吞吐、高并發(fā)、高性能是系統(tǒng)在同一維度三個不同視角的描述,一體三面,相互關(guān)聯(lián)。
-
穩(wěn)定性—穩(wěn)定性包括兩個方面,分別是可用性和可靠性; 可用性是指系統(tǒng)持續(xù)工作的能力,比如系統(tǒng)可以 7 * 24 連續(xù)工作; 可靠性是指系統(tǒng)對于正確的輸入一定會有正確的輸出??捎眯酝ǔR蕾囉谙到y(tǒng)的整體架構(gòu)設(shè)計,而可靠性通常更多的依賴于合理地程序編寫。
-
直播答題案例
需求分析時,需要識別關(guān)鍵需求,對關(guān)鍵需求進(jìn)行重點剖析,從而由關(guān)鍵需求導(dǎo)出系統(tǒng)的架構(gòu)設(shè)計。下面以百萬直播答題系統(tǒng)為例,演示整個過程。
百萬直播答題系統(tǒng)需求描述如下:
直播答題是在視頻直播的基礎(chǔ)上增加了答題的玩法,每場12道題,每次下發(fā)一道題,答題時間10s,作答時間結(jié)束幾秒后下發(fā)答案和統(tǒng)計數(shù)據(jù),全部答對者平分獎金,答錯或者超時未作答不可繼續(xù)答題。
對上述文字描述進(jìn)行分析,畫出直播答題系統(tǒng)的客戶端與服務(wù)端之間的交互流程,時序圖如下:
綜合文字描述和時序圖,可以確定系統(tǒng)模塊邊界,業(yè)務(wù)范圍框圖如下:
明確了直播答題系統(tǒng)的業(yè)務(wù)流程、模塊邊界、功能需求和非功能需求后,可以進(jìn)一步分析出其關(guān)鍵需求。
-
百萬用戶同時在線答題,集中在10秒內(nèi)提交答案,對系統(tǒng)的并發(fā)訪問和造成的瞬時負(fù)載是非常高的,這是首當(dāng)其沖最不能忽視的一點,所以 “高并發(fā)訪問” 作為非功能需求,體現(xiàn)了關(guān)鍵需求的高風(fēng)險需求類型;
-
直播答題是在視頻直播的基礎(chǔ)上增加的答題的玩法,視頻直播是整個系統(tǒng)的基座,體現(xiàn)了關(guān)鍵需求的基礎(chǔ)需求類型;
-
直播答題系統(tǒng)解決的是多個用戶在線集中答題的問題,用戶答題是系統(tǒng)必不可少的功能,體現(xiàn)了關(guān)鍵需求的核心需求類型;另外,“平分獎金” 的誘惑肯定會吸引 “黑客用戶” 的蜂擁而至,因此 “防用戶作弊” 也是系統(tǒng)的關(guān)鍵需求。
根據(jù)上述分析,百萬直播答題系統(tǒng)的關(guān)鍵需求包括:
-
高并發(fā)訪問
-
視頻直播
-
用戶答題
-
防用戶作弊
在充分考慮上述四項關(guān)鍵需求后,可以推導(dǎo)出系統(tǒng)的架構(gòu)設(shè)計,見下圖。
如何根據(jù)關(guān)鍵需求,推導(dǎo)出系統(tǒng)的架構(gòu)設(shè)計?系統(tǒng)的架構(gòu)是如何實現(xiàn)上述關(guān)鍵需求的?以及怎樣用非關(guān)鍵需求驗證架構(gòu)設(shè)計的合理性?在后續(xù)的文章中逐步進(jìn)行分析。
最后,總結(jié)文中關(guān)鍵:
-
真正決定架構(gòu)設(shè)計的是關(guān)鍵需求,非關(guān)鍵性需求用來驗證軟件架構(gòu)設(shè)計的合理性;
-
關(guān)鍵需求往往是基礎(chǔ)需求、核心需求和高風(fēng)險需求;
-
普適性的需求分析模型中,將需求劃分為功能需求和非功能需求,功能需求可劃分為基礎(chǔ)功能需求和擴(kuò)展功能需求;
-
百萬直播答題案例中,關(guān)鍵需求包括:高并發(fā)訪問、視頻直播、用戶答題、防用戶作弊。