談談需求(上)
楔子
? ? ? ? 標題叫《談談需求》其實不確切桨踪,因為需求只是一個名詞页慷,但是很明顯我這所指并不是要闡述“需求”這個概念察郁,而是指需求分析這個階段性動作待逞。但是后續(xù)可能還會寫談談設計受楼、談談測試垦搬、談談寫代碼之類的文章,做成一個系列艳汽,為了標題對仗猴贰,也就把動詞省略了。
? ? ? ? 何謂需求河狐,往小了說米绕,就是用戶想要實現(xiàn)的一個IT系統(tǒng)功能瑟捣;往大了說,其實也是人類求生欲望的延續(xù)义郑,就類比克勞.塞維茨說的——戰(zhàn)爭不過是政治的延續(xù)蝶柿。當然,這里的求生在人類科技文明高度發(fā)展的今天非驮,不僅僅是求生存,而是求生活——渴求更好的生活雏赦。這種生活不僅僅是滿足人的物質生活劫笙,更是為了滿足人的精神生活,以求精神富足星岗。
? ? ? ? 將IT技術拿出來看填大,其實不過是人類更高效工作、更方便生活的工具與手段俏橘,用戶需求允华,本質上不過是人們高效工作或更好生活的欲望的可實現(xiàn)性延續(xù),是為了滿足人的信息生活而存在寥掐。這里所謂“可實現(xiàn)性延續(xù)”靴寂,一不小心又說成了一個IT術語,即是可以在軟件系統(tǒng)中實現(xiàn)的功能延續(xù)召耘。
概念辨析
? ? ? ? 說到“需求分析”百炬,很容易讓人聯(lián)想到《需求分析報告》,但是我這所指并不僅僅是這一步污它,還包括《需求規(guī)格》剖踊。這兩份文檔是需求分析階段中用戶需求分析、功能需求規(guī)整這兩個前后相承的分析設計步驟的階段成果性交付文檔衫贬,而生產(chǎn)出這兩份文檔的這兩個步驟亦是整個需求分析階段的兩大關鍵步驟德澈,這兩個步驟的質量高低很大程度上決定了未來實現(xiàn)所的系統(tǒng)的功能穩(wěn)定程度、與用戶需求期望的匹配程度固惯,也是軟件系統(tǒng)架構是否穩(wěn)定的一大決定性的影響因素梆造。
? ? ? ? 說到《需求分析報告》、《需求規(guī)格說明書》缝呕,很多人總以為這就是一份文檔澳窑,或者分不清這兩者的區(qū)別,其實很簡單供常,各自加上兩個字就一目了然了——《用戶需求分析報告》摊聋、《功能需求規(guī)格說明書》。
? ? ? ? 《需求分析報告》是需求分析師收集了用戶需求進行系統(tǒng)分析后所形成的最終結論性文檔栈暇,而《需求規(guī)格說明書》則是軟件設計師根據(jù)《分析報告》中所分析出的分散的功能需求麻裁,進行系統(tǒng)級的統(tǒng)一規(guī)整的產(chǎn)物,也就是說“需求分析”分析的是用戶需求,而“需求規(guī)格”規(guī)整的則是功能需求煎源∩兀《需求分析報告》是《需求規(guī)格說明書》的輸入,《需求規(guī)格說明書》是《需求分析報告》的最終輸出手销。兩者的描述內(nèi)容可能相近歇僧,但并不等價,各有側重锋拖。用戶需求側重從用戶角度出發(fā)來描述一個需求诈悍,相對而言,比較抽象化兽埃、感性化侥钳;而功能需求側重從產(chǎn)品定位、系統(tǒng)設計與實現(xiàn)的高度來考慮一個需求(對柄错,是高度舷夺,不僅僅是角度),因此會更加系統(tǒng)化售貌、理性化地來考慮需求的實現(xiàn)给猾,若能配上界面原型圖,就能更加具體趁矾、接地氣耙册。
? ? ? ? 史蒂夫.喬布斯說過“用戶永遠不知道他們自己真正想要的是什么『恋罚”详拙,此話同樣適用于軟件工程領域的需求分析工作,因為用戶對IT知識的掌握程度有限蔓同,所以并不能苛求他們能用很專業(yè)的IT術語來將一個業(yè)務需求描述得很清楚饶辙。他們對需求的描述往往會更貼近于他們的具體領域業(yè)務背景,甚至會夾帶很多所在業(yè)務領域的專業(yè)術語斑粱。他們口中所說的需求往往并不是真正的產(chǎn)品功能需求弃揽,而只是他們業(yè)務訴求的一個“外在化、形象化”的展現(xiàn)则北。用戶口中所說要實現(xiàn)的“功能”也許并不是真正能滿足他業(yè)務需求的功能矿微,只是由于他的IT知識所限,只能將描述成到這個專業(yè)深度尚揣。
? ? ? ? 所以需求分析工作一定要系統(tǒng)涌矢、客觀、冷靜快骗。需求分析人員應該盡可能地引導用戶將他們心中真實的隱性需求“吐”出來娜庇。為了達到此目的塔次,需求分析人員甚至可能還需要對目標用戶所在業(yè)務領域進行一定深度的專業(yè)理論儲備,以便盡可能地熟悉用戶關注的業(yè)務場景名秀,通過業(yè)務場景的熟識励负,來了解用戶真正的業(yè)務訴求。
需求分析報告內(nèi)容組織
? ? ? ? 講了這么多引導性內(nèi)容匕得,本文總算可以進入正題了继榆,也就是《需求分析報告》具體要做哪些工作、內(nèi)容如何整理輸出耗跛。根據(jù)上文思考裕照,需求分析報告必然以業(yè)務場景為單位進行整理,當業(yè)務場景數(shù)量開始龐大時调塌,就需要將業(yè)務場景進行分類,而分類的標準惠猿,根據(jù)筆者的經(jīng)驗羔砾,傾向于根據(jù)需求來源劃分(每處來源用一個一級標題標識),而不是根據(jù)預先設計的系統(tǒng)大功能模塊來劃分偶妖。這樣做的好處就是便于不同業(yè)務用戶進行需求跟蹤確認姜凄、以及最終的需求簽署確認。業(yè)務用戶只需要關注自己那個一級標題下需求的完整性與正確性即可趾访,而不需要從全篇文檔來檢索過濾到只屬于自己的需求态秧。
? ? ? ? 說完了業(yè)務需求的整理規(guī)范,接下來該討論《需求分析報告》的核心部分——內(nèi)容組織了扼鞋。需求分析報告一般都包括以下幾部分申鱼,也即是可以作為一級標題的內(nèi)容:產(chǎn)品目標與范圍、用戶需求(包括原始需求清單云头、用戶需求分析捐友、安全性需求、質量屬性需求)溃槐、約束條件匣砖、術語約定。
產(chǎn)品目標與范圍
? ? ? ? 簡短描述該軟件產(chǎn)品的開發(fā)目的昏滴,包括功能利益和產(chǎn)品定位目標等猴鲫,把軟件產(chǎn)品開發(fā)與企業(yè)目標或者業(yè)務策略相聯(lián)系,一般包括產(chǎn)品目標描述與業(yè)務范圍界定兩部分谣殊。前者需要明確此項目的業(yè)務期望目標拂共、產(chǎn)品定位;后者需要能明確此系統(tǒng)的用戶范圍蟹倾、功能范圍匣缘、甚至地域范圍猖闪。
業(yè)務功能性需求
? ? ? ? 用戶需求部分是此文檔的核心部分,首先包括一個用于統(tǒng)計跟蹤原始需求用的用戶需求清單肌厨,該清單維護的目的即是方便業(yè)務方跟蹤總攬所有原始需求培慌,一般以表格形式記錄,包括業(yè)務需求編號柑爸、需求來源吵护、原始需求簡短描述等內(nèi)容。
? ? ? ? 對業(yè)務需求有了總體記錄后表鳍,接下來便是詳細的業(yè)務需求分析了馅而,這也是需求分析報告交付質量高低的核心內(nèi)容。此部分內(nèi)容中譬圣,需要對每個業(yè)務需求進行細致系統(tǒng)分析瓮恭,因此一般以表格形式表述為好。每個業(yè)務需求對應一個小表格厘熟,主要包括以下幾個部分內(nèi)容屯蹦,每行描述一條:需求編號、業(yè)務需求描述绳姨、業(yè)務處理流程登澜、用戶范圍、前置條件飘庄、業(yè)務規(guī)則脑蠕、關鍵功能需求點、需求提出人跪削。最好是以表格形式來描述谴仙。
需求編號:這是用來檢索所有業(yè)務需求用的,一般是如下格式:R.BussinessDomain2.008切揭,R是《需求分析文檔》字母簡寫狞甚、BussinessDomain2用于標記來源,008則是需求順序編號廓旬。如果對word文檔操作很熟練哼审,此處編號建議自定義一個自增式編號格式,這樣方便后續(xù)插入業(yè)務需求時文檔自動編號孕豹。
業(yè)務需求描述:以文字形式來記錄業(yè)務提出的原始需求語言涩盾,盡可能細致明確但不羅嗦,多用短句對業(yè)務點進行明晰表述励背。
業(yè)務處理流程:在業(yè)務需求描述基礎上春霍,對業(yè)務期望的處理流程進行描繪,盡量抽取出重要流程節(jié)點叶眉,建議用類似流程圖的格式描述址儒。
用戶范圍:在需求分析階段芹枷,參與者不需要馬上分別出系統(tǒng)角色,可以按照實際業(yè)務角色來記錄即可莲趣。
前置條件:描述執(zhí)行此業(yè)務功能的前提條件鸳慈,有可能由此產(chǎn)生與其他系統(tǒng)集成的接口需求。
業(yè)務規(guī)則:用于描述執(zhí)行此業(yè)務功能的業(yè)務約束性條件喧伞,包括邏輯判定走芋、數(shù)據(jù)邊界值等,例如潘鲫,一個數(shù)據(jù)輸入翁逞,數(shù)據(jù)最大、最小值是多少溉仑。挖函。
主要功能需求點:此處是業(yè)務需求分析的主要交付成果,需求分析人員根據(jù)上面的“業(yè)務需求描述”內(nèi)容浊竟,并參考“業(yè)務處理流程”挪圾,初步抽取出核心功能需求點,此處需求點盡量以列表展示逐沙,句式簡潔扼要但必須語意清晰,盡可能挖潛出用戶尚未表達出的真實需求洼畅。對于需要集成業(yè)務需求的軟件系統(tǒng)吩案,此處可能會產(chǎn)生與外部軟件集成的接口需求,此接口需求將對應《需求規(guī)格》中的外部系統(tǒng)集成需求部分內(nèi)容帝簇。
需求提出人:此處記錄此業(yè)務需求的提出人徘郭,也是業(yè)務需求確認人,若后續(xù)需求蔓延丧肴,或者因開發(fā)技術性原因導致需求無法全部實現(xiàn)残揉,均跟此人溝通確認。
非功能性需求
非功能性需求包括可用性需求芋浮、可靠性需求抱环、可擴展性需求、性能需求纸巷、安全需求等內(nèi)容镇草。某些文檔中還包括硬件需求等。
這些內(nèi)容大多跟具體業(yè)務相關瘤旨,本系列文章著重軟件系統(tǒng)設計梯啤,在此就不過多細述了。
費了這么多口舌存哲,堪堪寫完需求分析因宇,需求規(guī)整還沒開始七婴,那就未完待續(xù)咯。不過行家應該知道的察滑,《需求規(guī)格說明書》核心就是Use
Case打厘。
散論
? ? ? ? 用戶需求實現(xiàn)的最終目的并不在于為討部分用戶歡心而去花大力氣實現(xiàn)某個好看花哨但不實用的功能,而在于通過此系統(tǒng)更好的滿足絕大部分用戶的業(yè)務需要杭棵,提高其業(yè)務執(zhí)行效率婚惫。注意,我這講的是“此系統(tǒng)”而不是“此功能”魂爪,因為功能永遠是局部的先舷,而系統(tǒng)則是整體的。局部功能強大所致的局部工作效率提升并不一定就能代表整個事務效率的提升滓侍。只有開發(fā)系統(tǒng)的幫助事務在各個重要節(jié)點都得到普遍效率提升蒋川,才算是真正地滿足了用戶需求,達到了業(yè)務期望撩笆。
? ? ? ? 一個一直堅持的觀點:其實捺球,軟件工程文檔的模板并不僅僅是模板,而且并非各自獨立的文檔夕冲,而是一整套相互聯(lián)系的設計說明書氮兵,是系統(tǒng)開發(fā)思路的節(jié)奏性體現(xiàn),就像剝洋蔥歹鱼,層層剝開泣栈,循序漸進,每一個步驟都馬虎不得弥姻,這類設計文檔寫到一定程度南片,設計人員就能根據(jù)當前階段文檔撰寫的流暢程度去判斷前一階段文檔交付質量的好壞。因此庭敦,可以這么說疼进,這一套文檔模板水平的高度就直接決定了軟件設計水平的高低。
? ? ? ? 寫這些文章的用意秧廉,其實很簡單伞广,軟件設計之路漫漫兮,望乞高人指點一二定血,望與同仁切磋切磋赔癌,以不至于把路走偏走絕。