深入理解需求分析的目標(biāo)(C系架構(gòu)設(shè)計法,sishuok)
需求分析的目標(biāo):是盡可能準(zhǔn)確、全面、深入的理解業(yè)務(wù)。
1:理解“盡可能準(zhǔn)確”
首先,需求分析,要做的事,肯定是去理解業(yè)務(wù),但是要達(dá)到什么樣的程度,才算是我們理解了這個業(yè)務(wù)呢?
第一個是“盡可能”,盡可能的意思,就是你不太可能百分之百的、完整的、準(zhǔn)確的去理解,做不到。我們只能說是盡自己最大努力去理解,理解性的東西,你不可能做到百分之百的理解這些業(yè)務(wù)。
第二個詞叫“準(zhǔn)確”,這個是特別重要的關(guān)鍵詞。準(zhǔn)確的含義就是:對每個功能點的理解要沒有歧義,理解的這個功能點要不可再分,也就是說如果對一個功能點,不同的人有不同的理解,那這就是有歧義。

舉個例子來說,當(dāng)我們看到需求調(diào)研文檔上有這么一句話,“這個用戶數(shù)據(jù)需要在界面上進(jìn)行選擇”。出現(xiàn)這樣的句子,這個就是不準(zhǔn)確的,為什么呢?因為這句話他是有歧義的。
什么樣的歧義呢?關(guān)鍵就在這個選擇上,大家怎么選呢,是下拉列表選;還是checkbox選;還是像搜索框一樣搜索參照去選擇。你并沒有給我一個準(zhǔn)確的描述,所以說,你告訴我界面上可以選擇用戶,對于看文檔的人來說,這就是有歧義的,不同的人他可以有不同的理解,這樣是不行的。
當(dāng)然,如果這個時候是配了原型界面,或者是有相應(yīng)的html,上面已經(jīng)準(zhǔn)確的畫出來了,他就是下拉列表,或者說他就是checkbox,這沒有問題。但是如果單純只有文檔,這個就是有歧義的。
第三個詞是“不可再分”。意思是這個功能點不能太大,不能說這個功能點還能夠裂變成很多小功能點。如果他還能夠裂變成很多小功能點的話,這個功能點的理解就是不夠準(zhǔn)確的。
比如說在文檔當(dāng)中來這么一句話:“要求能夠?qū)θ罩具M(jìn)行管理”。其實咱們最怕看到這種話,進(jìn)行管理,怎么管?有些什么樣的功能?是只對日志做一個保存,然后取出來進(jìn)行查看,還有沒有其他的真正管理性的功能?
這一個“管理”,它就可以再往下分出很多具體的功能。比如說,我還要把日志存儲起來,又會涉及到要存儲多長時間的日志;如何存儲?是集中式的存儲,還是分布式的存儲;對這些存儲的日志,有沒有什么其他的功能要求,比如說查看,比如說審計,比如說進(jìn)行數(shù)據(jù)分析,而數(shù)據(jù)分析,又涉及到要分析哪些東西?分析的算法是什么?
這些東西都屬管理的內(nèi)容,你光給我一個要求對日志進(jìn)行管理,就這么一句話,你讓架構(gòu)師怎么設(shè)計?你讓開發(fā)人員怎么開發(fā)?這就是不夠準(zhǔn)確。
看到這個地方,可能很多朋友就會在想,咱們自己的需求里頭,看過太多這樣子的坑了,往往是一兩句話,就一筆帶過了好大一個功能塊,做著做著就發(fā)現(xiàn)問題了。最后為了去填坑,耗費出大量的人力和時間,咱可沒少吃這樣子的虧。
所以說,咱們現(xiàn)就要求,對于需求分析來說,一定要盡可能準(zhǔn)確去理解。
2:理解“全面”
第二個,“全面”。這個比較容易理解,就是這個功能點,涉及到什么細(xì)節(jié)功能,涉及到什么樣的流程等等的,都應(yīng)該分析到,不要漏東西。這個咱就不多講了。
3:理解“深入”
第三個,“深入”。這又有兩層含義,一個就是對自己功能點的一個深入,另一個是功能點之間的深入理解,也就是功能點之間的關(guān)系。

對自己功能點的深入,咱們來個例子,比如需求文檔上是這么寫的:“這個價格可以被價格管理員修改,修改后要進(jìn)行審核才能生效”,說的很清楚,對吧。但是你仔細(xì)往下去分析,就會發(fā)現(xiàn)問題了。
你看“價格可以被價格管理員修改”,這句話應(yīng)該沒啥太大的問題。但是修改過后要進(jìn)行審核才能生效,問題就來了,既然是審核,誰來審核?審核有沒有流程?審核過后的結(jié)果,是回到價格管理人員,還是直接生效等等的。大家一看就知道這中間是有問題的了。
有人可能會說,這好像是對審核功能理解不準(zhǔn)確,不是我們說的最終的功能點,也可以這么理解。
這里強(qiáng)調(diào)的是深入,他有可能并沒有流程,但是我們深入思考一下,要進(jìn)行審核才能生效,那么這個時候我們就要求明確,比方說誰來審、如何審、審核結(jié)果對業(yè)務(wù)有什么影響、有沒有審核流程等等的。我們一定要把這些問題,都要考慮清楚,這才是需求分析真正要做的。
需求分析,不是叫你表面上把拿到的這些需求文檔讀一遍,不是這樣子的,你讀完了覺得說這些字我都看懂了,然后大概意思也明白了,這樣子的需求分析是不到位的。一定要一個功能點一個功能點的,準(zhǔn)確、全面、深入的去理解才行。
因為在這個過程當(dāng)中,你會發(fā)現(xiàn)很多不明確的地方,而這些東西,現(xiàn)在如果不把它找出來,這些問題就往后推延,就遺留到開發(fā)期間,光寫這句話,程序人員根本沒有辦法去做的。
所以說,咱們越早分析清楚越好,這中間可能很多功能,需要我們在做架構(gòu)設(shè)計,做概要設(shè)計、詳細(xì)設(shè)計的過程當(dāng)中,就需要把它考慮進(jìn)去,而不是說把這個任務(wù),一直推到程序人員開發(fā)的時候。因此,架構(gòu)師在做需求分析的時候一定要分析的特別的仔細(xì)。
再來看另外一個點,就是功能點之間的一些關(guān)系的深入理解,可能在需求文檔里面,并沒有提到A功能和B功能之間有什么樣的聯(lián)系。但是經(jīng)過我們的深入分析,發(fā)現(xiàn)他們之間是有聯(lián)系的。

看個簡單的例子,就來個大家熟悉的請假功能吧,當(dāng)然請假是有流程的,但是這里假設(shè)它是一個單一的功能,比方說叫“短時請假”的功能。這個功能要求請假人填寫請假單,然后由他的直接領(lǐng)導(dǎo)審核,他的直接領(lǐng)導(dǎo)批準(zhǔn)了,這個請假就通過了,請假成功;不同意的話,也就是請假不成功,就這么簡單。
但是這個功能,你仔細(xì)來分析,又有幾個點,第一個,短時請假,請問啥叫短時?一天兩天三天還是幾個小時,這就意味著為了做短時請假,我們需要有一個配置這個時間限制的功能。這個時候就要想,整個系統(tǒng)里面有沒有這樣子的配置功能,能夠去控制什么是短時請假,什么是長時間請假,是這個道理吧??赡苡捎谶@個分析,就引申出新的功能點來了,也可算是一個功能點之間的關(guān)系。
再看這句話,“由他的直接領(lǐng)導(dǎo)審核”。什么叫他的直接領(lǐng)導(dǎo)?可能有朋友會說,直接領(lǐng)導(dǎo),不就是他所在的部門領(lǐng)導(dǎo)嗎?那不一定,如果他所在的部門比較大,他可能是在某一個項目組里面,那項目組長或者TeamLeader算不算他的直接領(lǐng)導(dǎo)?
你看,這又引伸出來一個功能,就是能夠設(shè)置每個人的直接領(lǐng)導(dǎo)。這個功能,通常是由組織機(jī)構(gòu)和人員管理子系統(tǒng)來提供的,這就是功能點之間的一個關(guān)系,如果組織機(jī)構(gòu)和人員管理子系統(tǒng)那邊不提供這個功能,請問我怎么判斷誰是他的直接領(lǐng)導(dǎo)呢?
這就是做深入理解,所以,需求分析要真正做好,不是那么簡單的,是需要大家花很多力氣,去認(rèn)真、仔細(xì)、反復(fù)、深入的思考的??傊?,大家需要理解,需求分析的目標(biāo)就是:盡可能準(zhǔn)確、全面、深入的去理解業(yè)務(wù)。就算咱不能百分之百做到,也要盡可能朝這個目標(biāo)去努力。
為了大家更好的交流架構(gòu)設(shè)計的思想和知識,大家可以加sishuok,拉你進(jìn)架構(gòu)設(shè)計群,一起共同學(xué)習(xí),共同進(jìn)步。