本文為學(xué)習(xí)筆記
目錄
基本概念與軟件需求概述
定義
通俗定義
待開發(fā)軟件產(chǎn)品的目標(biāo)用戶對該產(chǎn)品的功能,性能,設(shè)計(jì)約束和其他方面的期望和要求
其他經(jīng)典定義
- Rational: (正在構(gòu)建的)系統(tǒng)必須符合的條件或具備的功能
- Merlin Dorfman 和 Richard H. Thayer :
用戶解決某一問題或達(dá)到某一目標(biāo)所需的軟件功能局蚀。
系統(tǒng)或系統(tǒng)構(gòu)件為了滿足合同彻桃、規(guī)約、標(biāo)準(zhǔn)或其他正式實(shí)行的文檔而必須滿足或具備的軟件功能澎媒。
定義剖析
- 需求與問題緊密相關(guān),關(guān)注用戶的期望,要求和需要
- 軟件需求服務(wù)于目標(biāo)用戶(軟件最終用戶搞乏、用戶方負(fù)責(zé)人、用戶代表)戒努,必須是用戶所需的
- 不是所有方面的要求都是軟件需求请敦,軟件需求必需對用戶有價值和意義
- 軟件需求表現(xiàn)形式
- 功能性需求:eg. 通過ISBN號查詢圖書
- 非功能性需求:性能、安全、外觀等
- 限制條件:技術(shù)冬三、平臺等
作用與解決的問題
作用
在用戶意圖與軟件設(shè)計(jì)中架起橋梁匀油,將現(xiàn)實(shí)元素轉(zhuǎn)化為軟件元素
理解需求: (當(dāng)前系統(tǒng))-->(物理模型)-->(邏輯模型)
表達(dá)需求: (目標(biāo)系統(tǒng))<--(物理模型)<--(邏輯模型)
任務(wù)
借助當(dāng)前系統(tǒng)的邏輯模型導(dǎo)出目標(biāo)系統(tǒng)的邏輯模型,解決目標(biāo)系統(tǒng)的 “做什么” 的問題勾笆。
需求捕獲在需求分析過程的位置
可行性研究 (需求獲取) (需求分析) (系統(tǒng)模型) (需求文檔)
(需求描述) (有效性驗(yàn)證) (需求文檔)
(用戶需求與系統(tǒng)需求) (需求文檔)
- 需求捕獲為需求分析提供原材料
- 需求捕獲的有效性和完整性直接影響需求分析的產(chǎn)出質(zhì)量
- 需求捕獲活動出現(xiàn)大的誤差將是方向性的重大錯誤5醒痢!窝爪!
獲取軟件需求
重要性
- 軟件開發(fā)的基礎(chǔ)和前提 (有明確需求才能有針對的開發(fā))
- 制定軟件開發(fā)計(jì)劃的基礎(chǔ)(知道做什么 -> 確定工作了 -> 制定計(jì)劃)
- 最終目標(biāo)軟件系統(tǒng)驗(yàn)收的標(biāo)準(zhǔn) (基于明確需求進(jìn)行驗(yàn)收)
復(fù)雜性
(ps. -> 之后的內(nèi)容為個人的理解)
- 系統(tǒng)復(fù)雜和龐大 (如何得到需求并描述清楚) -> 聽描述人員說需求,自己理需求,列提綱畫流程圖確定理解?
- 片面 不完全 (如何保證得到所有的軟件需求) -> 與目標(biāo)用戶多次確認(rèn),思考業(yè)務(wù)流,看看是否能走通
- 模糊,不準(zhǔn)確(如何保證把需求說清楚和準(zhǔn)確) -> 與開發(fā)人員多次有效溝通,確定自己全面理解了需求,再圖文結(jié)合準(zhǔn)確表達(dá)
- 歧義,不一致(如何保證所描述的需求是不矛盾的) -> 自己檢查文檔是否有沖突的地方,與客戶和開發(fā)人員結(jié)合確定需求不沖突
- 及時性(當(dāng)需求變更時弛车,如何讓相關(guān)人員都知道需求已經(jīng)變更) -> 溝通用戶與開發(fā), 要有有效的通知溝通方式,有書面文檔記錄
- 軟件需求變動帶來的影響 (波動性(橫向)/放大性(縱向))
如何應(yīng)對需求的復(fù)雜性
- 過程和規(guī)范
- 需求過程
- 瀑布式: 強(qiáng)調(diào)系統(tǒng)開發(fā)過程需有完整的規(guī)劃、分析蒲每、設(shè)計(jì)、測試及文件等管理與控制
- 迭代: 每次只設(shè)計(jì)和實(shí)現(xiàn)這個產(chǎn)品的一部分,逐步實(shí)現(xiàn)系統(tǒng)
- 螺旋: 定義最重要的功能贫奠,實(shí)現(xiàn)它唤崭,然后聽取客戶的意見谢肾,之后再進(jìn)入到下一個階段芦疏。如此不斷輪回重復(fù)
- 敏捷: 作為一個整體工作酸茴; 按短迭代周期工作柒桑; 每次迭代交付一些成果魁淳;關(guān)注業(yè)務(wù)優(yōu)先級; 檢查與調(diào)整昆稿。
- 規(guī)范:文檔模板
- 需求過程
- 技術(shù)層面-方法溉潭、技術(shù)和工具
- 方法:結(jié)構(gòu)化分析(細(xì)化分解問題馋贤、化繁為簡)畏陕、OO
- 技術(shù):抽象惠毁、建模鞠绰、原型、數(shù)據(jù)流圖……
- 工具:UML屿笼、Rose刁卜、Visio、MindManager例朱、Excel洒嗤、CC……
- 管理層面-需求管理配置庫
- 對需求分析中, 人渔隶、活動和產(chǎn)品進(jìn)行管理间唉,使之可追溯
優(yōu)秀需求具有的特性
- 完整性
- 正確性
- 可行性
- 必要性
- 劃分優(yōu)先級
- 無二義性
- 可驗(yàn)證性
軟件需求捕獲過程
過程及結(jié)果
過程
[理解問題域與目標(biāo)] [需求捕獲準(zhǔn)備] [需求交流] [整理需求文檔] [需求捕獲收尾]
成果
- 前景文檔(項(xiàng)目視圖)
- 用戶問題與目標(biāo)定義
- 用戶需求采集文檔
- 功能性需求
- 非功能性需求
- 限制條件
需求捕獲時點(diǎn)
- 軟件產(chǎn)品研發(fā)啟動階段:需求捕獲來自用戶問題域(*)
- 軟件產(chǎn)品優(yōu)化提升階段:需求捕獲來自軟件研發(fā)各環(huán)節(jié)的反饋
- 用戶需求從來都不會凍結(jié),需求捕獲工作始終持續(xù)
理解問題域和目標(biāo)
問題域: 問題 + 問題場景
- 當(dāng)前用戶真正面臨的問題是什么被冒?
- 當(dāng)前用戶問題發(fā)生的場景是什么?
- 除非你已經(jīng)理解它蝗锥,否則不要修改它
- 定義問題的方法:魚骨圖玛追、直方圖
- 魚骨圖:是一種發(fā)現(xiàn)問題“根本原因”的方法; 分為問題性,原因性,對策性
- 直方圖:是一種對數(shù)據(jù)分布情況的圖形表示痊剖,是一種二維統(tǒng)計(jì)圖表陆馁,它的兩個坐標(biāo)分別是統(tǒng)計(jì)樣本和該樣本對應(yīng)的某個屬性的度量
目標(biāo)
用戶期待達(dá)到的效果
- 問題域與目標(biāo)與用戶達(dá)成共識(項(xiàng)目章程叮贩、合同)
- 一切項(xiàng)目需求始于問題佛析,需求以問題或目標(biāo)為核心來展開收集
- 軟件需求是對“問題”以軟件的方式進(jìn)行求解的過程寸莫,即軟件做什么或具備什么屬性能解決問題
軟件需求捕獲準(zhǔn)備
- 基礎(chǔ)儲備
- 掌握基本業(yè)務(wù)術(shù)語(交流語言)
- 掌握行業(yè)基礎(chǔ)業(yè)務(wù)系統(tǒng)(如CTAIS)-基礎(chǔ)業(yè)務(wù)知識
- 以軟件為學(xué)習(xí)支持桃纯,熟練掌握軟件業(yè)務(wù)操作進(jìn)而理解掌握業(yè)務(wù)
- 了解用戶業(yè)務(wù)范圍和業(yè)務(wù)系統(tǒng)現(xiàn)狀
- 文檔考古态坦、實(shí)地觀摩伞梯、用戶學(xué)徒
- 交流準(zhǔn)備
- 針對問題域的項(xiàng)目視圖和需求調(diào)研提綱
- 需求團(tuán)隊(duì)
- 兩個意識
- 用戶站位意識谜诫,站在用戶的角度來看待和思考問題
- 傾聽的意識(輔助積極詢問猜绣、引導(dǎo)和反饋)
需求團(tuán)隊(duì)
團(tuán)隊(duì)組成
- 具有編程背景的人,以獲得描述所要求的準(zhǔn)確性和精度
- 熟悉系統(tǒng)業(yè)務(wù)規(guī)則的人
- 了解系統(tǒng)具有決策權(quán)的人(能夠決定放棄和保留)
- 如何應(yīng)用的人(熟知在實(shí)際中如何使用系統(tǒng)的人)
人員素質(zhì)
- 知識豐富
- 盡職盡責(zé)牺陶,堅(jiān)定不移掰伸,態(tài)度積極
- 出色的溝通能力狮鸭,不卑不亢
- 尊重他人的觀點(diǎn)
- 豐富的判斷力和一個實(shí)用可行的方法
調(diào)研準(zhǔn)備
切入點(diǎn)
[相鄰系統(tǒng)] (系統(tǒng)參與者有哪些) --> [業(yè)務(wù)事件](系統(tǒng)為參與者提供哪些服務(wù)) --> [業(yè)務(wù)用例](每個服務(wù)的處理環(huán)節(jié)業(yè)務(wù)規(guī)則如何規(guī)定)
概念
- 業(yè)務(wù)上下范圍:由用戶關(guān)注的問題域圈定
- 相鄰系統(tǒng):為待建系統(tǒng)提供數(shù)據(jù)和服務(wù)的系統(tǒng),可能是人惯退、組織或其他軟件
- 業(yè)務(wù)事件:外部的服務(wù)請求(如在ATM執(zhí)行轉(zhuǎn)帳請求)从藤,面向用戶的
- 業(yè)務(wù)用例:響應(yīng)業(yè)務(wù)事件的一系列執(zhí)行步驟
方法
- 通過數(shù)據(jù)流關(guān)系找到相鄰系統(tǒng)夷野,定義業(yè)務(wù)事件和業(yè)務(wù)實(shí)體(DFD)
- 絕大多數(shù)的應(yīng)用系統(tǒng)本質(zhì)上一個信息處理系統(tǒng)骑丸,系統(tǒng)的功能主要與數(shù)據(jù)處理相關(guān)
- 相鄰系統(tǒng)是數(shù)據(jù)的生產(chǎn)者或者消費(fèi)者
- 每個數(shù)據(jù)狀態(tài)的變化可能與一個業(yè)務(wù)事件相關(guān)鳖孤,用”無事件”來發(fā)現(xiàn)例外或遺漏事件
- 通過業(yè)務(wù)事件定義業(yè)務(wù)用例
- 找到業(yè)務(wù)事件的真正起源,考察業(yè)務(wù)用例平匈,定義需求邊界
- 在業(yè)務(wù)用例中挖掘需求
提綱
系統(tǒng)的用戶對象是誰?
用戶的組織架構(gòu)增炭?
每個用戶和相鄰系統(tǒng)觸發(fā)的業(yè)務(wù)事件?
每個業(yè)務(wù)事件處理流程输玷?相關(guān)業(yè)務(wù)實(shí)體數(shù)據(jù)
系統(tǒng)與現(xiàn)有其他的關(guān)系?(數(shù)據(jù)交換机久、業(yè)務(wù)協(xié)同)
系統(tǒng)的數(shù)據(jù)存儲要求赔嚎?
需求的非功能需求(安全侠畔、性能等)?
系統(tǒng)的約束與限制沉馆?
……
準(zhǔn)備需求調(diào)研文檔模板-需求調(diào)研內(nèi)容的結(jié)構(gòu)化
需求采集文檔關(guān)鍵項(xiàng)目
業(yè)務(wù)事件:與誰有關(guān)揖盘?
描述:業(yè)務(wù)意義是什么兽狭?
理由:解決什么問題箕慧?
來源:誰提出的,用于需求追溯
驗(yàn)收標(biāo)準(zhǔn):明確具體茴恰,可能量化颠焦,與需求描述有關(guān)
沖突:需求關(guān)聯(lián)關(guān)系
優(yōu)先級:開發(fā)計(jì)劃依據(jù)
以上項(xiàng)目均與問題域相關(guān)
用戶交流
- 交流對象選擇
- 面談對象與需求涉眾相關(guān),需求涉眾是需求源泉
- 面談對象中要求有能對需求做最終確定的人
- 面談對象的組成:典型用戶代表往枣、業(yè)務(wù)專家和需求仲裁者
- 關(guān)注的問題-達(dá)成共識
- 待建系統(tǒng)所有的相鄰系統(tǒng)是否完整伐庭?
- 所有相鄰系統(tǒng)觸發(fā)的業(yè)務(wù)事件是否完整?
- 業(yè)務(wù)事件對應(yīng)業(yè)務(wù)用例是否正確分冈?
- 確定需求邊界
- 交流方式
- 面談或會議是最有效的方式圾另,注意傾聽,使用輔助工具加強(qiáng)理解
- 實(shí)地參觀和實(shí)踐(用戶學(xué)徒)雕沉,體驗(yàn)業(yè)務(wù)場景
- 電話交流,適用于對需求的部分細(xì)節(jié)的交流和確認(rèn)
用戶交流之面談和會議
- 循序漸進(jìn)
- 首先關(guān)心一般性尤溜、整體性問題梢睛,然后再討論細(xì)節(jié)問題藏畅,(相鄰系統(tǒng)-業(yè)務(wù)事件-業(yè)務(wù)用例)
- 客觀力奋、公正猿挚、主動、積極
- 不應(yīng)限制用戶在回答問題過程中自由發(fā)揮八秃,理解用戶的思維過程
- 充分溝通纳本,要和用戶打成一片淑玫,進(jìn)行充分的合作土涝,建立起良好的合作關(guān)系
- 如果發(fā)現(xiàn)多個軟件需求相互矛盾冀泻,要能找到仲裁人,或者決策人
- 總結(jié)
- 問題匯總后應(yīng)能反映軟件或其子系統(tǒng)的全貌
- 能覆蓋用戶對目標(biāo)軟件或其子系統(tǒng)在功能、行為仆抵、性能諸方面要求金吗。
- 及時反饋交流文檔
區(qū)分客戶需要和客戶需求
- 客戶需要(Needs)
- 一種原始的宵呛、割裂的信息
- 一般以問題解決方案的方式提交需求
- 信息→(Elicit抽出)→客戶需要
- 形式:會議紀(jì)要、客戶文檔、調(diào)研報(bào)告礁竞、E-Mail
- 客戶需求(Requirements)
- 一種文檔化的综看、完整的忠寻、自洽的信息
- 通過用戶描述(user story)反映《客戶(用戶)需求說明書》
- 句式:作為(用戶類型),我們希望可以(能力)以便(業(yè)務(wù)價值)倡蝙。
例:作為購書者胆建,我們希望可以通過ISBN號碼找到一本書凉驻,以便更快速地找到正確的書
- 從客戶需要中抽象出真正的原始需求
- 通過客戶表面需求理解更深層次需求(去技術(shù)化)
引導(dǎo)用戶
- 需求交流比較高的層次涝登,被動轉(zhuǎn)主動咽笼,顧問的角色
- 需求范圍的引導(dǎo):在問題域涉及的業(yè)務(wù)上下文范圍內(nèi)
- 業(yè)務(wù)定義的引導(dǎo):需求復(fù)用杨伙、其他行業(yè)或應(yīng)用經(jīng)驗(yàn)
- 業(yè)務(wù)啟發(fā)的引導(dǎo):需求復(fù)用遮斥、其他行業(yè)或應(yīng)用經(jīng)驗(yàn)
- 通過原型形式化或啟發(fā)用戶需求(*)
- 要求具備一定的抽象能力,將不同應(yīng)用領(lǐng)域的共性總結(jié)出來
- 注意溝通表達(dá)方式帆精,尊重用戶较屿,不可先入為主
捕獲系統(tǒng)劃分的派生需求
- 考慮用戶問題域的復(fù)雜性,對問題域進(jìn)行分解子問題域簡化問題的有效方法实幕,從軟件構(gòu)造層次吝镣,劃分為多個子系統(tǒng)
- 需求捕獲分別形成系統(tǒng)級需求或子系統(tǒng)需求
- 關(guān)注派生需求
- 子系統(tǒng)需求:子需求必須滿足,未必對用戶有價值的需求
- 子系統(tǒng)之間接口需求:子需求為完成整體工作昆庇,需要與其他子系統(tǒng)通信的需求
- 派生需求更多是由系統(tǒng)規(guī)劃設(shè)計(jì)產(chǎn)生的末贾,用戶關(guān)心的是系統(tǒng)業(yè)務(wù)需求價值
創(chuàng)建整理需求采集文檔
- 由于語言描述的多義性,促進(jìn)需求溝通達(dá)成共識的唯一途徑將需求文檔化
- 需求采集參照文檔模板使用用戶理解業(yè)務(wù)語言來描述整吆,盡可能去技術(shù)化拱撵,技術(shù)要素作為限制條件處理
- 需求采集文檔的作用將用戶需求規(guī)范化,開發(fā)出用戶和需求分析設(shè)計(jì)人員都能理解的文檔表蝙。
開發(fā)客戶看得懂的需求
- 客戶看不懂的: 功能, 產(chǎn)品結(jié)構(gòu),技術(shù)語言
- 客戶看得懂的:
- 界面拴测、報(bào)告
- 用戶手冊、使用說明書
- “串聯(lián)故事”府蛇、“活動描述”(用例)
- 業(yè)務(wù)語言
需求捕獲收尾
- 用戶的問題域和目標(biāo)可能隨時變化調(diào)整集索,需求捕獲一直持續(xù)
- 以合同工作說明書的內(nèi)容作為需求捕獲是否完成基準(zhǔn):90%確定
- 重點(diǎn)審查用戶優(yōu)先級比較高的需求(全部覆蓋)
- 所有的需求是否在問題域范圍之內(nèi)
- 所有的需求能否支持解決用戶問題,達(dá)到用戶目標(biāo)
- 有何風(fēng)險
- 需求捕獲評審
- 用戶方負(fù)責(zé)人汇跨、項(xiàng)目組確認(rèn)
- 產(chǎn)出物
- 用戶需求用例說明書务荆,供需求分析階段建模使用
- 建立用戶需求基線
需求捕獲總結(jié)
- 面向問題和用戶,而不是面向技術(shù)
- 主要是做什么穷遂,而不是怎么做
- 考慮需求涉眾函匕,對用戶群進(jìn)行分類
- 同時考慮功能需求和非功能需求
- 討論例外情況,把客戶的假設(shè)解釋清楚
- 需求文檔化蚪黑,設(shè)置優(yōu)先級
- 需求驗(yàn)收標(biāo)準(zhǔn)量化
- 及時反饋
- 注意控制需求范圍
- 合作才能成功
實(shí)例演練
需求能力提升
- 技術(shù)工作的熏陶
- 技術(shù)視野和業(yè)務(wù)視野同樣重要
- 掌握需求分析建模方法盅惜、工具中剩、模板
- 分析方法:
- DFD, Data Flow Diagram數(shù)據(jù)流程圖,Data Functional Diagram數(shù)據(jù)功能圖
- SC, 系統(tǒng)結(jié)構(gòu)圖
- 建模方法:UC,DM,……
- 工具:UML、MindManager…….
- 積累一套有效的需求文檔模板
- 分析方法:
- 培養(yǎng)溝通表達(dá)能力
- 要充滿熱情和興趣地鉆研行業(yè)領(lǐng)域知識
- 需求能力通過行業(yè)領(lǐng)域知識才能體現(xiàn)價值
- 僅僅掌握需求方法論是不夠的抒寂,不能落地