如何做好軟件需求分析?

3 評論 36530 瀏覽 147 收藏 27 分鐘

編輯導語:軟件需求分析,就是把軟件計劃期間建立的軟件可行性分析求精和細化,分析各種可能的解法,并且分配給各個軟件元素。這是是軟件定義階段中的最后一步,是確定系統(tǒng)必須完成哪些工作,也就是對目標系統(tǒng)提出完整、準確、清晰、具體的要求。

一、需求分析定義

軟件需求分析也稱為系統(tǒng)需求分析或需求分析工程等,是開發(fā)人員經(jīng)過深入細致的調(diào)研和分析,準確理解用戶和項目的功能、性能、可靠性等具體要求,將用戶非形式的需求表述轉(zhuǎn)化為完整的需求定義,從而確定系統(tǒng)必須做什么的過程。

軟件開發(fā)一般包括:可行性分析、需求分析、軟件設(shè)計、軟件開發(fā)、軟件測試、軟件實施、軟件服務(wù)等步驟,需求分時軟件開發(fā)的第一步驟。

用戶需求分析是指在系統(tǒng)設(shè)計之前和設(shè)計、開發(fā)過程中對用戶需求所作的調(diào)查與分析,是系統(tǒng)設(shè)計、系統(tǒng)完善和系統(tǒng)維護的依據(jù)。

二、軟件需求分析目標

需求分析是軟件計劃階段的重要活動,也是軟件生存周期中的第一步,該階段是分析系統(tǒng)在功能上需要“實現(xiàn)什么”,而不是考慮如何去“實現(xiàn)”。

對客戶的信息化需求進行分析,將客戶不規(guī)范的、隨意的需求,轉(zhuǎn)換成規(guī)范的、嚴謹?shù)摹⒔Y(jié)構(gòu)化的需求,將客戶不正確的需求轉(zhuǎn)換成正確的需求、將客戶不切實際的需求轉(zhuǎn)換成可以實現(xiàn)的需求,將客戶不必要的需求砍掉,將客戶漏掉的需求補上。

此外,軟件的一些非功能性需求(如軟件性能、可靠性、響應(yīng)時間、可擴展性等),軟件設(shè)計的約束條件,運行時與其他軟件的關(guān)系等也是軟件需求分析的目標。

三、軟件需求分析原則

需求分析通常來講它們應(yīng)符合以下一般原則:

1. 能夠表達和理解問題的信息域

信息域反映的是用戶業(yè)務(wù)系統(tǒng)中數(shù)據(jù)的流向和對數(shù)據(jù)進行加工的處理過程,因此信息域是解決“做什么?”的關(guān)鍵因素。根據(jù)信息域描述的信息流、信息內(nèi)容和信息結(jié)構(gòu),可以較全面地(完整地)了解系統(tǒng)的功能。

2. 建立描述系統(tǒng)信息、功能和行為的模型

建立模型的過程是“由粗到精”的綜合分析的過程。通過對模型的不斷深化認識,來達到對實際問題的深刻認識。

3. 能夠?qū)λP桶匆欢ㄐ问竭M行分解

分解是為了降低問題的復雜性,增加問題的可解性和可描述性。分解可以在同一個層次上進行(橫向分解),也可以在多層次上進行(縱向分解)。

4. 分清系統(tǒng)的邏輯視圖和物理視圖

軟件需求的邏輯視圖描述的是系統(tǒng)要達到的功能和要處理的信息之間的關(guān)系,這與實現(xiàn)細節(jié)無關(guān),而物理視圖描述的是處理功能和信息結(jié)構(gòu)的實際表現(xiàn)形式,這與實現(xiàn)細節(jié)是有關(guān)的。

需求分析只研究軟件系統(tǒng)“做什么?”,而不考慮“怎樣做?”。

四、軟件需求分析內(nèi)容

需求分析的內(nèi)容是針對待開發(fā)軟件提供完整、清晰、具體的要求,確定軟件必須實現(xiàn)哪些任務(wù)。

具體分為功能性需求、非功能性需求與設(shè)計約束三個方面:

1. 功能性需求

功能性需求即軟件必須完成哪些事,必須實現(xiàn)哪些功能,以及為了向其用戶提供有用的功能所需執(zhí)行的動作。

功能性需求是軟件需求的主體,開發(fā)人員需要親自與用戶進行交流,核實用戶需求,從軟件幫助用戶完成事務(wù)的角度上充分描述外部行為,形成軟件需求規(guī)格說明書。

2. 非功能性需求

作為對功能性需求的補充,軟件需求分析的內(nèi)容中還應(yīng)該包括一些非功能需求。

主要包括軟件使用時對性能方面的要求、運行環(huán)境要求,軟件設(shè)計必須遵循的相關(guān)標準、規(guī)范、用戶界面設(shè)計的具體細節(jié)、未來可能的擴充方案等。

3. 設(shè)計約束

一般也稱做設(shè)計限制條件,通常是對一些設(shè)計或?qū)崿F(xiàn)方案的約束說明。

例如:要求待開發(fā)軟件必須使用Oracle數(shù)據(jù)庫系統(tǒng)完成數(shù)據(jù)管理功能,運行時必須基于Linux環(huán)境等。

五、軟件需求分析過程

需求分析階段的工作,可以分為四個方面:問題識別、分析與綜合、制訂規(guī)格說明、評審。

1. 問題識別

就是從系統(tǒng)角度來理解軟件,確定對所開發(fā)系統(tǒng)的綜合要求,并提出這些需求的實現(xiàn)條件,以及需求應(yīng)該達到的標準。

這些需求包括:功能需求(做什么)、性能需求(要達到什么指標)、環(huán)境需求(如機型、操作系統(tǒng)等)、可靠性需求(不發(fā)生故障的概率)、安全保密需求、用戶界面需求、資源使用需求(軟件運行是所需的內(nèi)存、CPU等)、軟件成本消耗與開發(fā)進度需求、預先估計以后系統(tǒng)可能達到的目標。

2. 分析與綜合

逐步細化所有的軟件功能,找出系統(tǒng)各元素間的聯(lián)系,接口特性和設(shè)計上的限制,分析他們是否滿足需求,剔除不合理部分,增加需要部分。

最后綜合成系統(tǒng)的解決方案,給出要開發(fā)的系統(tǒng)的詳細邏輯模型(做什么的模型)。

3. 制訂規(guī)格說明書

即編制文檔,描述需求的文檔稱為軟件需求規(guī)格說明書。請注意,需求分析階段的成果是需求規(guī)格說明書,向下一階段提交。

4. 評審

對功能的正確性,完整性和清晰性,以及其它需求給予評價。評審通過才可進行下一階段的工作,否則重新進行需求分析。

六、軟件需求評估方法

需求評估分析方法通常有:模糊聚類分析、質(zhì)量功能展開、KANO模型分析、A/B測試。其中以卡諾(KANO)模型最常用。

1. 聚類分析法

聚類分析指將物理或抽象對象的集合分組為由類似的對象組成的多個類的分析過程。它是一種重要的人類行為。

聚類是將數(shù)據(jù)分類到不同的類或者簇這樣的一個過程,所以同一個簇中的對象有很大的相似性,而不同簇間的對象有很大的相異性。

在聚類分析的時候,要根據(jù)變量的性質(zhì)選擇聚類模型。如果關(guān)鍵屬性是使用問卷收集的分類變量,一般選擇兩步聚類法,因為用戶的人口學特征和使用某產(chǎn)品行為偏好等特征一般都是分類變量。檢驗聚類變量差異性:如下

2. 質(zhì)量功能展開

是指把用戶對產(chǎn)品的需求進行多層次的演繹分析,轉(zhuǎn)化為產(chǎn)品的設(shè)計需求、工程部件特征、工藝要求、生產(chǎn)要求,用來指導產(chǎn)品設(shè)計并保證產(chǎn)品的質(zhì)量,是一種以用戶為導向的質(zhì)量管理工具。

由于該方法所使用的主要圖形就像房屋,所以它也被稱為“質(zhì)量屋”,如下圖:

3.卡諾KANO 模型

是 Noriaki Kano 博士提出的與產(chǎn)品性能有關(guān)的用戶滿意度模型,該模型能對用戶需求進行很好的識別和分類,是對用戶需求分類和優(yōu)先排序的有用工具,以分析用戶需求對用戶滿意的影響為基礎(chǔ),體現(xiàn)了產(chǎn)品性能和用戶滿意之間的非線性關(guān)系。

Noriaki Kano 將影響滿意度的因素劃分為五個類型,包括:必備需求、期望需求、魅力需求、無差異需求、反向需求。

  • 興奮(魅力)需求:用戶意想不到的,如果不提供次需求,用戶滿意度不會降低,但是提供次需求,用戶滿意度會有很大的提升;
  • 期望(意愿)需求:當提供此需求,用戶滿意度會提升,當不提供此需求,用戶滿意度會降低;
  • 基本(必備)需求:當優(yōu)化此需求,用戶滿意度不會提升,當不提供此需求,用戶滿意度會大幅下降;
  • 無差異需求:無論提供或者不提供此需求,用戶滿意度都不會有變化,而且根本不會在意;
  • 反向(逆向)需求:用戶根本沒有這個需求,提供之后用戶滿意度反而會下降。

利用KANO模型進行需求評估主要集中于對用戶需求類型的分類討論。為了便于分析可以設(shè)計相應(yīng)的調(diào)研問卷。

問卷中需要對產(chǎn)品的某項功能分別設(shè)置正向和負向兩個問題:“如果產(chǎn)品有這個功能,您覺得如何?” 、“如果產(chǎn)品的這個功能不存在,您覺得如何?”

每個問題采用態(tài)度量表的形式設(shè)計選項,即“我喜歡這樣”、“我期望這樣”、“我沒有意見”、“我可以忍受”、“我討厭這樣”,具體形式如下表:

經(jīng)過訪談?wù){(diào)研后,根據(jù)歸類矩陣,將調(diào)研問題進行歸類來確定需求的類型,KANO模型需求歸類矩形如下表:

將問題結(jié)果術(shù)語模型矩陣中,就能夠比較明確地看到,哪些用戶需求是必須有的,哪些是用戶期望的,哪些是可有可無的,哪些需求又是用戶自己不確定的。

將用戶需求進行分類,在產(chǎn)品開發(fā)時,功能優(yōu)先級的排序一般是:基本屬性>期望屬性>興奮屬性>無差異屬性,去掉可疑結(jié)果的需求和相反的需求。

4. A/B測試

是為Web或App界面或流程制作兩個或多個版本,分別讓組成成分相同(相似)的訪客群組(目標人群)隨機的訪問這些版本,收集各群組的用戶體驗數(shù)據(jù)和業(yè)務(wù)數(shù)據(jù),最后分析、評估出最好版本并且實現(xiàn)的綜合成本低,正式采用。

比較常見的案例是對網(wǎng)站注冊頁進行A/B測試,確定哪一個方案的注冊率高,更加滿足用戶的需求,實現(xiàn)的商業(yè)利益最大化。

需要注意在進行A/B測試時,每次必須只測量一個變量,多個變量測試,則無法判斷是哪個變量導致的結(jié)果;測試的環(huán)境應(yīng)當一直,例如測量時間應(yīng)一致。

因為在不同的時間段,用戶的訪問量會有變動;測量的樣本量要具有統(tǒng)計學意義,樣本流量太小時,無法體現(xiàn)在線用戶的真實行為。

七、需求分析優(yōu)先級的方法

需求優(yōu)先級的分析方法大致可以分成兩大類:定性分析方法、定量分析方法;

一類是根據(jù)分析人員的經(jīng)驗主觀地對需求進行優(yōu)先級分類,稱之為定性的分析方法,比如:四象限分析法、波士頓矩陣分析法;另一類是根據(jù)調(diào)查數(shù)據(jù),對調(diào)查數(shù)據(jù)進行分析,得出需求的優(yōu)先級分類,稱之為定量的分析方法,比如:KANO模型。

1. 四象限分析法

根據(jù)需求對于業(yè)務(wù)的影響,以及需求實現(xiàn)的緊迫程度,我們可以按照如下方式將需求歸為4個象限,這也是需求歸類的經(jīng)典4分法。四象限分析法是很常見的一種定性分析需求優(yōu)先級的方法,如下:

  • 重要且緊急的事,影響業(yè)務(wù)正常進行,需要盡快處理;
  • 不重要但緊急的事,雖然對業(yè)務(wù)影響不大,但是需要盡快處理;
  • 重要且不緊急的事,對業(yè)務(wù)影響大,但不需要短期內(nèi)就完成;
  • 不緊急且不重要的,對業(yè)務(wù)影響不大,也不需要短期內(nèi)完成。

2. 波士頓矩陣

波斯頓矩陣是由波士頓咨詢公司發(fā)明的一種方法,最早用于分析市場增長率和市場份額,現(xiàn)在也被經(jīng)常用于對需求的分析之中,波士頓矩陣由用戶價值維度和公司價值兩個維度將需求分成了四個象限:

  • 明星需求:對用戶體驗有價值,對公司戰(zhàn)略也有價值的需求。明星需求是雙贏的需求,需要優(yōu)先得到滿足,如一些促進用戶活躍、轉(zhuǎn)化的需求,具體的有,活躍度排名、優(yōu)惠提醒等功能;
  • 問題需求:對用戶體驗有價值,但對公司戰(zhàn)略和目標沒價值的需求。此類需求雖然看似對公司沒直接價值,但是提升用戶體驗有助于提升用戶的忠誠度,如一些提升用戶體驗的需求。具體的有,提供多種快捷登陸方式、提供輔助輸入功能等;
  • 金牛需求:對用戶體驗沒價值甚至會對用戶造成困擾,但是對公司戰(zhàn)略有價值的需求。公司價值的體現(xiàn),此類需求應(yīng)該盡量考慮避免對用戶造成影響。如一些運營需求等。具體的有,收集用戶信息等;
  • 瘦狗需求:對用戶體驗無價值,對公司戰(zhàn)略也無價值的需求。此類需求應(yīng)該過濾掉,例如一些偽需求。

3. 卡諾KANO 模型法

Noriaki Kano 將影響滿意度的因素劃分為五個類型,包括:必備需求、期望需求、魅力需求、無差異需求、反向需求(詳情見上文)。

八、如何確定軟件需求

經(jīng)過大量的需求調(diào)研工作之后,手上可能有客戶提出的大量的、各種各樣的需求。

這些需求有的是技術(shù)上可以實現(xiàn)的,有的是技術(shù)上不可以實現(xiàn)的;有些是管理上需要的,有的是管理上不需要的;有些是合理的,有些是不合理的,如何處理這些需求呢?

以“實現(xiàn)用戶正確的需求”為原則,對于用戶提出的需求進行嚴格的分析、甄別。

為了認清用戶的需求,先要認清用戶。在進行需求調(diào)研的時候,會跟各種各樣的人員溝通,他們的技術(shù)、只是、性格、職位、工作內(nèi)容各不相同。

但他們也有相似的地方:他們不是做軟件的,也不是分析需求的,他們永遠不會像你希望的那樣去描述需求,他們的需求是用自然語言描述的,是抽象的、概略的、隨性的。

那個這些抽象、概略、隨性的用戶需求轉(zhuǎn)化成具體、詳細、結(jié)構(gòu)化的軟件需求,是需求分析的重點,通常從以下幾點著手認清和控制需求:

1. 將抽象的需求具體化

在需求調(diào)研的時候會發(fā)現(xiàn),用戶提出自己的需求時總是不會按照你希望方式去提出來,有的人因為不知道你想要什么,只為了應(yīng)付領(lǐng)導布置的任務(wù),有的是處于比較高的職位,習慣了從宏觀的角度去講問題,所以我們在整理需求的時候要將抽象的要求具體化。

2. 將自然語言描述的需求結(jié)構(gòu)化

用戶描述需求總是非常隨意的,他們使用平常正常溝通的語言描述,這種需求的主要特點就是不嚴謹,容易有其一,這種需求不能直接讓開發(fā)者處理的,開發(fā)者需要的需求是描述明確的、精準的、沒有歧義的。

需求分析分析者作為用戶與開發(fā)者的橋梁,有義務(wù)將用戶用自然語言描述的需求結(jié)構(gòu)化。將用戶的描述轉(zhuǎn)換成更精確的語言,更接近IT人使用的語言。

3. 注意避免理解偏差

理解偏差主要是需求分析者對用戶所提的需求沒有理解到位,用戶明明想表達的是這個意思,卻被理解成了另外一個意思。

這是一個溝通問題,說的人覺得自己說的很清楚了,可偏偏雙方就是沒有真正理解對方,所以下面是我們需要注意的:

  • 提高溝通能力:多從對方的立場考慮問題,當雙方描述某件事時,要從對方的角度思考這些描述;
  • 提高溝通頻次:一方面要引導對方多說話,另一方面對不理解的或者覺得理解起來有困難的內(nèi)容,多向?qū)Ψ皆儐?,換成你的表達方式讓對方確認是不是這個意思;
  • 學習對方領(lǐng)域的知識:用戶有自己的知識領(lǐng)域,需求分析者也有自己的知識領(lǐng)域,前者滿腦子是業(yè)務(wù)術(shù)語,后者滿腦子是IT術(shù)語,有的時候兩者真難溝通。每個人的知識面不同,要想溝通順暢,兩個人的知識面重疊的地方越多越好。

4. 識別超出項目范圍的需求

用戶的需求不能是漫無邊際的,所有的需求都應(yīng)該在項目范圍之內(nèi),做需求分析的時候首先要確定好項目目標,要讓用戶知道需求邊界在什么地方。

這個項目應(yīng)該在項目啟動時雙方經(jīng)過討論達成共識,后面所有的工作都應(yīng)該圍繞這個目標展開。原則是即使在這個階段的目標實現(xiàn)了以后再設(shè)置新目標,也不要不停的修改一個目標。

5. 識別錯誤的需求

對于那些毫無邏輯性、前后矛盾或者在技術(shù)上根本無法實現(xiàn),類似這樣的統(tǒng)統(tǒng)歸為錯誤需求。

6. 識別技術(shù)上不能實現(xiàn)的需求。

當需求者面向用戶時,代表的是身后的整個研發(fā)團隊,要做好需求分析,需要對自己團隊的技術(shù)能力有非常清楚的了解,哪些事情能做/不能做,又或者可以做但是需要太大的代價等,每個團隊都有自己的技術(shù)邊界。

九、整理需求

前期做了那么多的收集工作并確定需求之后,要做好需求的整理工作。需求整理是不是簡單的將用戶所提的需求全部一條條寫下來就好了,而是一個綜合分析的的整理過程。

通過整理,使得需求更有目的性、更系統(tǒng)性、更明確、更容易理解。需求經(jīng)過整理后一般會生成需求調(diào)研報告與業(yè)務(wù)流程圖,這是后面工作的綱領(lǐng)性文件。

當完成用戶需求調(diào)查后,首先對《用戶需求說明書》進行細化,對比較復雜的用戶需求進行建模分析,以幫助軟件開發(fā)人員更好地理解需求。

十、如何做好需求自查

需求文檔不限呈現(xiàn)形式,但必須包括以下信息,如果某些信息在前期需求階段已出并且通用,比如如全站定位、用戶畫像等,可省去。

如果在需求階段無法明確某些信息可以與設(shè)計、開發(fā)等共同討論并細化需求,具體交互設(shè)計工作必須在以下信息明確后才可執(zhí)行,包括:需求基本信息(必有)、全站概況、需求概要說明(必有)、需求詳情(必有)、流程類需求詳情、展示類需求詳情、輸入類需求詳情、其他需求等。

十一、需求不明確帶來的影響

1. 項目失控甚至爛尾

在開發(fā)時間和開發(fā)費用上的失控,因為需求的不完善,導致啟動開發(fā)前無法準確預估需求的工作量和確定技術(shù)實現(xiàn)方案,走一步看一步開發(fā)過程中,發(fā)現(xiàn)需求有坑,不斷發(fā)現(xiàn)新的問題。

有時因為一個簡單的邏輯或設(shè)計不明確,在溝通明確后最終發(fā)現(xiàn)需要技術(shù)方案大調(diào)整,很多項目會變得失控甚至爛尾。

2. 技術(shù)腦補需求

假如需求不是明確的話,靠譜的技術(shù)同學,就會自己考慮邏輯和設(shè)計,就按他自己的理解和想法實現(xiàn)。

看上去省心,但一千個觀眾就一千個哈姆雷特,一旦實現(xiàn)的邏輯可能并不是產(chǎn)品期望的邏輯,到了測試環(huán)節(jié),測試同學也有自己的理解,導致又要花時間溝通統(tǒng)一意見,或浪費時間返工修改。

3. 溝通成本高

項目規(guī)模越大,參與人數(shù)越多,矛盾越凸顯。

在面對的是人數(shù)眾多的設(shè)計師,前端團隊、后端團隊、外部團隊、測試團隊等時,產(chǎn)品經(jīng)理需經(jīng)常與設(shè)計、技術(shù)和測試溝通需求邏輯,溝通的成本會很高。

4. 產(chǎn)品邏輯難以后續(xù)追溯

移動互聯(lián)網(wǎng)時代,產(chǎn)品上線迭代節(jié)奏非???,產(chǎn)品不斷的迭代更新,或是人員的交接,經(jīng)常需要回溯之前的線上邏輯,需求文檔的缺失或不完善,會導致線上邏輯不明確,甚至后續(xù)的產(chǎn)品需求設(shè)計的邏輯與線上矛盾或沖突,為項目的開發(fā)帶來麻煩。

參考資料:

  • 《軟件工程》賴均?2016?清華大學出版社
  • 《軟件需求分析實戰(zhàn)》楊長春 2020 清華大學出版社
  • 《產(chǎn)品交互設(shè)計基礎(chǔ)》蔣曉 2016 清華大學出版社
  • 《開發(fā)制作App時需求不明確,帶來哪些嚴重后果?》

 

本文由 @忻蕓 原創(chuàng)發(fā)布于人人都是產(chǎn)品經(jīng)理,未經(jīng)許可,禁止轉(zhuǎn)載

題圖來自 unsplash,基于 CC0 協(xié)議

更多精彩內(nèi)容,請關(guān)注人人都是產(chǎn)品經(jīng)理微信公眾號或下載App
評論
評論請登錄
  1. 寫的很棒,學到很多,已經(jīng)關(guān)注

    來自廣東 回復
  2. 這篇文章值得好好珍藏。

    來自廣東 回復
    1. 感謝??

      來自四川 回復