大數(shù)據(jù)應(yīng)用的需求分析方法
張靖笙
傳統(tǒng)方法在大數(shù)據(jù)需求面前遇到問題
需求分析階段關(guān)系到一個軟件開發(fā)的成敗,這已經(jīng)得到了普遍的認(rèn)識,然而,根據(jù)作者實戰(zhàn)經(jīng)驗,在大數(shù)據(jù)應(yīng)用項目中,按照傳統(tǒng)軟件工程規(guī)范要求的需求分析往往是一個非常尷尬的過程,為什么呢?
根據(jù)筆者在實際工作中的經(jīng)驗,問題主要來自以下方面:
1.需求分析本身的難度。需求的任務(wù)是了解和描述軟件用戶對軟件的需求,即明確做什么。但在實際的軟件開發(fā)中,用戶了解他們的專業(yè)領(lǐng)域,但計算機(jī)知識,特別是軟件知識往往比較薄弱,而開發(fā)人員與此恰好相反,而在需求分析的過程中,雙方面對的往往不是一個可見的產(chǎn)品,而只是頭腦中的構(gòu)思和想象,由于專業(yè)的差異和溝通的有限,用戶的許多需求對開發(fā)人員來說往往是難于理解的和準(zhǔn)確把握。
2.傳統(tǒng)軟件工程規(guī)范在需求分析的嚴(yán)格執(zhí)行有實際管理上的難度。在廣大的應(yīng)用軟件開發(fā)部門,軟件開發(fā)工作的地位往往只是本單位業(yè)務(wù)的輔助,一般沒有專職的而且非常有經(jīng)驗的系統(tǒng)分析員,需求分析往往由主管經(jīng)理和開發(fā)程序員簡單進(jìn)行,而領(lǐng)導(dǎo)往往重成績多于重過程,對于一個沒有顯效的需求分析過程,領(lǐng)導(dǎo)的耐心往往有限,這就造成了對需求分析缺乏嚴(yán)格的管理和要求。
3.嚴(yán)格按照軟件工程規(guī)范要求進(jìn)行需求分析在時間和開發(fā)成本的限制。由于用戶對軟件技術(shù)的認(rèn)識水平,他們對軟件的開發(fā)在時間上往往要求過高,特別當(dāng)用戶是單位的上層領(lǐng)導(dǎo),他們往往覺得這種對他們而言空洞無物的分析是開發(fā)人員的紙上談兵,時間一長不免就會流露出不滿。這令開發(fā)人員非常尷尬,往往非常嚴(yán)重地打擊他們的自信心和士氣。
綜上所述,傳統(tǒng)軟件工程規(guī)范中需求分析理論在實踐中的矛盾是成本,效率和規(guī)范要求間的矛盾。而忽略規(guī)范要求的代價也是慘重的,那我們能找到一種方法解決以上矛盾嗎?
大數(shù)據(jù)應(yīng)用的需求特點
數(shù)據(jù)庫技術(shù)的核心思想是數(shù)據(jù)的獨立與共享,所以開發(fā)數(shù)據(jù)應(yīng)用,就是利用云計算、數(shù)據(jù)庫、數(shù)據(jù)分析等技術(shù)來組織、管理和使用信息。不同形式的數(shù)據(jù)應(yīng)用可謂多種多樣,但功能需求的核心是圍繞著數(shù)據(jù)分析需求來展開的。筆者曾開發(fā)過多個不同應(yīng)用領(lǐng)域的數(shù)據(jù)應(yīng)用,我發(fā)現(xiàn)在數(shù)據(jù)應(yīng)用中雖然功能很多,許多功能在邏輯上相似,往往只是處理的數(shù)據(jù)不同,所以,筆者認(rèn)為數(shù)據(jù)應(yīng)用需求分析應(yīng)該圍繞數(shù)據(jù)(信息),而不是軟件功能展開。這與傳統(tǒng)的需求分析中以軟件的功能需求為核心有明顯的不同。從這個意義上,如果傳統(tǒng)需求分析階段是“做什么”,在數(shù)據(jù)應(yīng)用需求分析階段就是先要解決“有什么”,然后再明確“做什么”。
大數(shù)據(jù)需求分析工作方法
需求分析作為軟件工程的第一階段,是整個軟件開發(fā)項目進(jìn)行設(shè)計和實現(xiàn)的基礎(chǔ),決定了一個項目的成敗。但是需求分析不能只看成是一個獨立的階段,對需求的了解貫穿整個項目的始終,了解需求的過程是一個逐步細(xì)化,逐步深入的過程,整個項目自始而終都需要與用戶交流。
既然大數(shù)據(jù)應(yīng)用需求以數(shù)據(jù)為中心,在需求分析階段就強(qiáng)調(diào)數(shù)據(jù)和數(shù)據(jù)結(jié)構(gòu)的分析一點也不過分。圍繞數(shù)據(jù)應(yīng)用的需求分析大體上分為以下幾個階段:
1)場景需求分析(總體設(shè)計)
2)概念需求分析(概念設(shè)計)
3)細(xì)節(jié)需求分析(詳細(xì)設(shè)計)
4)界面需求分析(界面設(shè)計)
這些需求分析貫穿整個項目的各個環(huán)節(jié)中,與設(shè)計是穿插在一起。
大數(shù)據(jù)需求分析過程活動
1)場景需求分析
這個階段體現(xiàn)了系統(tǒng)的總體構(gòu)思與設(shè)計,任務(wù)是了解系統(tǒng)的組織形式和功能需求概貌,解決“是什么”的問題。我認(rèn)為場景需求分析主要任務(wù)是用戶應(yīng)用場景的定義,需要明確用戶將來是用何種方式、在什么條件下、如何用哪些數(shù)據(jù)解決什么問題的場景,這當(dāng)然也會涉及到硬件,用戶環(huán)境,系統(tǒng)功能等多方面的全局考慮。如界面是手機(jī)APP應(yīng)用還是Web 應(yīng)用,如何進(jìn)行功能的分層。這些都需要在場景需求分析過程中決定。
場景需求分析工作是大數(shù)據(jù)應(yīng)用項目的早期分析,所以對功能的描述應(yīng)該有高度的抽象性,在理想的情況下,一個系統(tǒng)最好由一張紙內(nèi)直觀圖形化描述,便于開發(fā)人員對系統(tǒng)目標(biāo)的整體把握,也保持了與用戶交流的靈活性和一致性。所以在項目初期,我不贊成用功能模塊圖對功能需求做太多層次的金字塔式羅列,特別如果是系統(tǒng)的分布式分層設(shè)計,詳細(xì)的功能模塊圖在項目早期沒有什么實際意義,反而容易舍本求末。如對大數(shù)據(jù)應(yīng)用場景中數(shù)據(jù)范圍的分析中,可以用筆者前文所介紹的商業(yè)模式分析方法,從商業(yè)模式的角度對于數(shù)據(jù)范圍做明確的界定。
2)概念需求分析
概念需求分析的任務(wù)是對系統(tǒng)中涉及的概念、數(shù)據(jù)范圍和內(nèi)容等進(jìn)行調(diào)查和分析,分析有什么信息、從什么地方可以可靠獲得,如何組織和描述數(shù)據(jù),數(shù)據(jù)由那些數(shù)據(jù)項組成,各數(shù)據(jù)項是什么含義,數(shù)據(jù)的走向是什么樣的?概念需求分析的目的是建立系統(tǒng)的概念模型,主要是建立描述數(shù)據(jù)的靜態(tài)模型和描述系統(tǒng)運(yùn)行流程的動態(tài)模型,解決“有什么”問題。
當(dāng)完成模型需求分析后,就要進(jìn)入到概念需求分析。做概念需求分析,首先要收集原始資料,然后請用戶講述手工的工作流程,根據(jù)用戶提供的原始資料和對工作流程的了解的基礎(chǔ)上,我們才可以著手進(jìn)行概念設(shè)計。
3)細(xì)節(jié)需求分析
細(xì)節(jié)需求分析要在進(jìn)行了概念設(shè)計之后進(jìn)行,這個階段是分析如何具體實現(xiàn)用戶需求,就是解決“怎么做”的問題。這個階段要對用戶的需求完整而清晰地確定下來,所以與用戶的交流比前兩個階段多,交流的內(nèi)容應(yīng)該更加具體。
細(xì)節(jié)分析的具體任務(wù)是要根據(jù)概念設(shè)計定義的概念模型制定具體的實現(xiàn)細(xì)節(jié)。對于靜態(tài)模型,要給出詳細(xì)的數(shù)據(jù)字典,包括了表,數(shù)據(jù)項,數(shù)據(jù)項限制條件等詳細(xì)信息。對于動態(tài)模型,要給出具體的狀態(tài)定義,事件定義,狀態(tài)改變的流程,對數(shù)據(jù)所有操作的定義等等詳細(xì)的設(shè)計信息。要求根據(jù)細(xì)節(jié)需求分析的成果應(yīng)該能成為編碼和建庫的依據(jù)。
對于大數(shù)據(jù)應(yīng)用,可能還要明確的是采用怎樣的大數(shù)據(jù)技術(shù)架構(gòu)(例如Hadoop)和數(shù)據(jù)挖掘模型,隨著開源技術(shù)的普及,目前成熟的大數(shù)據(jù)工具和數(shù)據(jù)挖掘模型選擇已經(jīng)很多,實際上很多數(shù)據(jù)應(yīng)用的開發(fā)工作就是在現(xiàn)有的一些大數(shù)據(jù)分析工具的基礎(chǔ)上結(jié)合應(yīng)用場景需求來做些配置性的簡單編碼就可以了,沒有必要做一些重新發(fā)明輪子的事情。
4)界面需求分析
用戶能否用好軟件最終決定項目的成敗,良好的用戶使用界面是不可忽視的。用戶界面的好壞并不是追求界面的花巧(這是程序員經(jīng)常犯的毛病),而是界面的設(shè)計是否能提高用戶使用軟件的效率,這需要了解用戶的使用環(huán)境,操作水平,操作習(xí)慣,個人喜好等多方面。輸入輸出需求分析要做到界面設(shè)計和概念設(shè)計的相互獨立,不能因為界面的表示影響概念設(shè)計的穩(wěn)定,同時也要保持能適應(yīng)用戶各種不同操作要求的靈活性。具體可以先和用戶共同草擬一些界面設(shè)計大綱,在開發(fā)過程中邀請用戶試用軟件,根據(jù)反饋意見不斷改進(jìn)和修改。
大數(shù)據(jù)需求表達(dá)工具的考慮
我們分析“有什么”信息,傳統(tǒng)的需求分析理論用數(shù)據(jù)流圖和數(shù)據(jù)字典來表達(dá)“有什么”信息對大數(shù)據(jù)應(yīng)用可能不是特別合適。傳統(tǒng)的數(shù)據(jù)流圖核心是面向軟件功能的,而在許多大數(shù)據(jù)數(shù)據(jù)庫應(yīng)用系統(tǒng)開發(fā)初期,在沒有清晰完整的大數(shù)據(jù)信息內(nèi)容構(gòu)成分析前,功能的需求往往難以穩(wěn)定。在大數(shù)據(jù)應(yīng)用的需求分析初期,我不提倡使用數(shù)據(jù)流圖,因為在大數(shù)據(jù)應(yīng)用中,數(shù)據(jù)流圖往往不能令人滿意地說明信息構(gòu)成問題,而且隨著數(shù)據(jù)的增加,功能流程的變遷需要經(jīng)常修改早期的設(shè)計,這會造成工作的反復(fù)。數(shù)據(jù)字典可以表達(dá)數(shù)據(jù)的構(gòu)成,但卻沒有定義數(shù)據(jù)的類型。在一個大數(shù)據(jù)應(yīng)用中,數(shù)據(jù)的類型的通過字段類型表達(dá),有開發(fā)經(jīng)驗的人應(yīng)該知道,清楚每一個數(shù)據(jù)字段的含義和類型在開發(fā)數(shù)據(jù)庫應(yīng)用中有重要的意義,試想一下,如果一個數(shù)據(jù)格式是視頻或者圖像,對數(shù)據(jù)的功能需求不言而喻。而傳統(tǒng)的需求分析過程不要求確定數(shù)據(jù)的具體類型,而在開發(fā)一個數(shù)據(jù)應(yīng)用時,需求分析階段忽略了這一步就會毫無疑問地造成對需求理解的模糊,并使得需求分析變成空洞無物的紙上談兵。所以,對于數(shù)據(jù)應(yīng)用需求分析的表達(dá),最好還是和業(yè)務(wù)場景的分析結(jié)合在一起,筆者推薦使用質(zhì)量管理大師戴明(Deming)博士發(fā)明的SPIOC方法。
SIPOC模型是一代質(zhì)量大師戴明提出來的組織系統(tǒng)模型,是一門最有用而且最常用的,用于流程管理和改進(jìn)的技術(shù)。是過程管理和改進(jìn)的常用技術(shù),作為識別核心過程的首選方法。
為什么筆者推薦這個貌似是跟IT界不太搭邊的管理學(xué)方面的模型呢?從接下來的示例可以看到,在SPIOC里面,我們可以看清楚兩方面的數(shù)據(jù)需求,一方面是業(yè)務(wù)流程工作本身要處理的數(shù)據(jù),另外一方面是更有應(yīng)用前景的分析業(yè)務(wù)過程效率中的條件測量指標(biāo)(KPI)和成果測量指標(biāo)(KPO)數(shù)據(jù),這兩個指標(biāo)性數(shù)據(jù)是支持不斷優(yōu)化業(yè)務(wù)流程、最終達(dá)到精益目的的必要手段,數(shù)字孿生理念之父Michael Grieves說得好:“信息是被浪費(fèi)的物理資源的替代品;在精益的理念世界里,我們最終能實現(xiàn)用最少的資源數(shù)生產(chǎn)產(chǎn)品的目標(biāo)”。沒有數(shù)據(jù)支撐的精益是無法落地的,這樣數(shù)據(jù)應(yīng)用的價值就不言而喻了。
產(chǎn)品光有精益是不夠的,產(chǎn)品也必須是創(chuàng)新的,不僅要減少資源的浪費(fèi),同時也要創(chuàng)造新的信息和知識,使得創(chuàng)新產(chǎn)品成為可能。從這個方面來說,今天做業(yè)務(wù)的過程也是一個不斷積累數(shù)據(jù)資源的過程,這樣才能為創(chuàng)新奠基大數(shù)據(jù)的基礎(chǔ)。
(本稿完成于2018年9月30日,如需要引用,請注明出處)