需求、需求工程与需求工程师 — 2.需求的来源
軟件的需求是從哪里來的?可能你會毫不猶豫的回答:從客戶那里調研來的。這只回答對了一部分。簡單的、小規模的、技術含量不高的軟件功能基本上是依據客戶提出的需求完成的,而復雜的、大規模的、技術含量高的的軟件功能除去客戶提的需求外,還需要由軟件工程師根據新的理論、技術、硬件、未來發展的展望等提出來補充需求。作為一名合格的需求工程師,不但要能夠通過調研獲取客戶提出的原始需求,而且還能根據新知識、新技術為客戶的軟件提供自己設計的需求。
1.什么是原始需求、分類
所謂的“原始需求”,就是指從客戶那里獲得的尚未進行分析加工的需求,這些需求大都是從客戶視角(業務)、以客戶用語(非IT)表達的。可以將調研的原始需求歸集為三個層面:目標需求、業務需求、功能需求。
1)決策人提出的目標需求
在與企業的經營者、主管信息化的領導、信息中心的負責人等交流時,由于他們是企業導入信息系統的決策人,所以他們提出需求中有相當部分是對未來系統建造的“目標需求”。比如他們對新系統提出的目標需求可能是這樣描述的,新系統要做到:
【例1】以市場產品銷售為驅動、以制造成本控制為中心、以加工進度計劃為抓手、以質量風險控制為保障,以…等等
【例2】構建的交易平臺,信息來源清楚、判斷公正透明、不允許黑箱操作…等
可以看出此類需求的內容大都是與企業制定的經營管理、發展戰略、里程碑計劃、IT規劃等大目標相關聯的。是將“信息系統的建造”放在“企業發展規劃”的大框架中考量的。所以需求的粒度非常粗、概括,它屬于客戶用語描述的 “方向性原始需求”。
2)管理者提出的業務需求
在與企業中的各個業務部門管理者進行調研時,由于他們大都不是信息化的專家,也沒有多少使用信息系統的經驗,因此他們提出的需求大都是以自己熟知的業務為基礎的,他們提出的需求形式可能是這樣的:
【例3】 對物流的過程進行全程監控、并做到從下訂單到客戶接受簽字為止的全程數字化追蹤、查詢,并實時向客戶發出通知。
【例4】為降低產品成本,材料要進行集中采購,每次采購數量大于1000公斤時必須由公司統一采購,少于1000公斤時可以自行選擇供應商,但價格不能高于全年的平均單價…等。
可以看出這類需求已經給出了用戶的明確業務需求,非常具體,要解決什么問題、要做什么事、遵循什么標準等,只是這個需求粒度還不足以確定在系統中需要什么具體的軟件功能。
它屬于客戶用語描述的 “業務性原始需求”。
3)使用者提出的功能需求
最后一種就是直接給出系統中要實現的 “軟件功能需求”,這個需求及比較容易理解了,它具體地描述了有哪些功能、每個功能要解決什么問題,功能的原型、屬性、要符合的條件和標準等。比如
【例5】要開發一個材料采購系統,需要的功能有:材料編碼庫、客商庫、采購合同編制、合同變更、到貨驗收、出入庫記錄、材料領取…等。
【例6】要開發一個服務供應商管理系統,需要的功能有:基本信息登記、歷史業績、新用戶審批、未完成合同一覽、質量事故履歷…等。
2. 三個分類的轉換關系
最終所有的需求都要以功能需求的形式傳遞給后面的設計工程,功能需求記錄了系統要實現的要求。因此需要將目標需求和業務需求轉換為功能需求,
圖1 需求轉換關系
1)目標需求
目標需求由于比較抽象,所以第一步需要將其轉換為用“業務需求”的形式來描述,因為業務需求接近于客戶的業務,容易解讀。參見圖1(轉換1)。
2)業務需求
業務需求是用客戶的業務用語描述的,第二步要將業務需求轉換為功能需求。通過用流程圖進行具體的解讀,就可以看出來用什么功能來實現這個業務需求。流程圖上的節點,就是未來系統中的功能。參見圖1(轉換2)。
3)功能需求
從業務需求中識別出功能需求后,又可以再分為兩類:業務功能需求、系統功能需求。它們是續設計工程的輸入,設計工程中就是依據它們進行具體的功能設計。
從上述的三種原始需求的形式可以看出來,前面的1、2兩類需求并不能直接判斷系統要開發什么樣的具體功能,也就是說,目標需求和業務需求必須要落地,要能夠找出對應的“功能需求”才能在系統中實現。從原始需求的分類中可以看出,越是具體功能不清楚的目標需求、業務需求,需求工程師、軟件架構師等可發揮作用的地方就越多。
3. 總結,需求并非都是來自于客戶
到了這里我們就明白了:構建信息系統的需求并非都是從客戶那里直接獲得的,完成系統中的很多需求是由開發過程中不同崗位的軟件工程師(包括:咨詢師、需求工程師、架構師、開程序員、實施工程師等)提案的。為了更好地理解需求的來源,再按照功能實現難度將獲得的需求分為基本需求、中級需求和高級需求,參考圖2。
圖2 需求的來源
1 ) 基本的需求a
它們來自于“對客戶調研而獲得的需求”,這些是客戶的基本需求,它們以“功能需求”為主、“業務需求為輔”。它們都比較直觀,直接給出的就是要實現的功能,如【例5、例6】基本上按客戶意愿進行設計和開發,內容大部分在需求調研、需求分析階段內確定。
通常需求調研工作成果的絕大部分是這些基本的需求。以滿足這樣的需求為主開發的系統,主要影響系統操作層的用戶滿意度。
2) 中級的需求b
它們來自于“通過完善、落地業務需求而獲得的需求”,它們屬于中級需求,這類需求以“業務需求”為主,是通過對業務需求進行具體化、優化、補缺、提升的過程中產生的需求,如前面提到的【例3、例4】的需求,經過分析設計后,給出實現業務需求的功能。
中級需求是由軟件工程師和客戶共同對業務需求進行分析、理解、設計而確定的,它的正確與否極大地影響著企業中間管理層以上領導者對系統的滿意度。
3) 高級的需求C
它們主要來自于軟件工程師“根據客戶的目標需求和業務需求,結合新的設計理念、新的管理理念、新的IT技術等提出來的需求”,可以是說它們是軟件工程師“設計出來的需求”,屬于“設計需求”,比如:事找人的流程方案(智能化處理業務)、企業數據資產的應用、企業自主信息化方案、新型客戶端用硬件等。
這類需求需要軟件工程師要有足夠的專業知識和綜合架構能力,否則就難以發掘出來,如前面提到的【例1、例2】,這類需求也為完成的系統帶來了明顯的高附加價值,特別對提升企業經營者滿意度有著舉足輕重的作用。
這里要順便提一句:別不拿領導的需求當需求。因為很多經驗不足的需求工程師,他們在調研時往往只關注操作層用戶的需求(因為操作層用戶的需求容易與軟件功能相關聯),而忽略或丟掉了領導提出的需求,原因是領導提出的需求表達形式比較抽象、不易落地、或不知道如何應對,而這些需求能否被反映到系統中恰恰是決定系統設計水平高低的重要依據。
■上述三類需求獲取的難度順序為:設計需求c>完善需求b>調研需求a。
關于對“設計需求”的理解再舉一個例子,我們每個人都有智能手機,它的功能有多少是由手機用戶提出來的呢?可能很少,新功能大都是由開發商提倡、引領、推廣的,因為他們具有更高的視角、前瞻性,可以從數字化、信息化、智能化、AI、物聯網等多維度思考、綜合考量,而我們一般的個人用戶是不可能提出這樣的需求的,這就是典型的“設計需求”來源。
軟件工程師要認識到,需求工程(調研與分析)完成了,并非是需求獲取的工作全部完成,只是由客戶直接提出來的原始需求完成了,而通過分析、設計發掘高端需求的工作剛剛開始。
■本博文系列的下一篇:需求、需求工程與需求分析師 — 3. 需求工程的構成
關于需求工程的詳細說明,請參考《大話軟件工程—需求分析與軟件設計》一書。
總結
以上是生活随笔為你收集整理的需求、需求工程与需求工程师 — 2.需求的来源的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 杂项题的基本解题思路——1、文件操作与隐
- 下一篇: 杂项题的基本解题思路——2、图片隐写术