什么是需求 需求是產品必須完成的事以及必須具備的品質。
功能性需求
功能性需求是產品必須完成的那些事,要求一定的功能和品質。
例子:培訓機構的班主任可以給所在班級學員打考勤
非功能性需求
非功能性需求是產品必須具備的屬性或品質。諸如觀感、可用性、安全性和法律限制等。
例子: 平臺用戶數為5萬人,每天登錄用戶數為10000左右,網絡的帶寬為100M帶寬。在工作時間根據資料名稱條件進行搜索,可以在3秒內得到搜索結果。
這類需求通常在產品的功能確定之后(但并非總是如此)。也就是說,一旦知道了產品要做的事情,就可以確定它的行為方式,它需要具備什么品質以及它的響應速度、可用性、可讀性和安全性。
限制條件
限制條件是全局性的需求。它們可以是對項目本身的限制,或是對產品最終設計的限制。
例子:南京平臺必須在2010年開學的第一學期上線
客戶是在說,如果顧客不能在給定的時間前使用該產品,那么它就沒有什么用了。其效果是,需求分析師必須對需求進行限制,只包括那些在最后期限前能夠提供最大價值的需求。
需求分析的重要性
背景:馮大勇吃魚時嗓子被魚刺卡住了。現在正坐在椅子上候診。
大夫:(在桌上拿起一份掛號單,大聲的喊)馮大勇!
馮大勇:(病怏怏的樣子,邊走邊咳嗽)我是。
大夫:怎么了?(低頭整理手中的資料,自言自語,并打手勢,示意馮大勇坐下)
馮大勇:我...(咳嗽)...我今天...(咳嗽)
大夫:不用說了,我知道了。(從桌子下面拿出一個大盒子,放在桌子上)我看你適合吃這種藥。這是本院獨家開創的哮喘新藥“咽喉糖漿”,療程短,見效快,一個療程吃3盒,平均每天只需花費3塊錢。給你先開6盒吧!(邊說邊開藥方)
馮大勇非常驚訝地瞪大眼睛并止不住地彎腰大聲咳嗽,以至于把魚刺都咳出來了。馮大勇從口里掏出一條巨型魚刺,遞給醫生。醫生見到魚刺先是吃驚,而后又非常尷尬。
醫生不了解病人的需求就用藥,是草菅人命;銷售員不了解客戶的需求就進行推銷,不僅自己要徒勞無功地浪費很多口舌,更重要的是完不成銷售的目標。給客戶 推銷軟件產品,也相當于醫生給病人治病,應當首先充分、全面地了解客戶的需求所在、期望所在,然后才能帶給他一個完美的解決方案。
需求分析沒有做好的后果一般會有下列現象:
1、浪費時間和資源來滿足用戶并不需要的需求(過度實現一些功能);
2、開發出來的產品技術上先進,但不滿足用戶需求;
3、總是需要比較長的時間來達成對產品設計的共識;
4、在產品設計,開發和測試工作中對于用戶需求的解釋不一致;
5、員工會厭倦因需求不斷被重新解釋而導致的返工;
6、未說明的或不正確的需求會導致員工與用戶間的不滿;
7、不穩定的產品,用戶的不滿意對我們未來的市場造成損失;
8、浪費時間,增加成本,使得在一些投標的項目中不能低價;
1、如果你在編碼的時候發現某幾行有誤,那么改掉這幾行就行了。而如果在編碼階段發現需求有誤,那么你很可能需要改變所有代碼來適應新的需求
2、在需求階段消除問題的代價最小,而如果需求問題等到產品發布出去后才發現的話,那修復的成本就會N倍的增加。
3、穩定的需求是軟件開發的關鍵。有了穩定的需求,軟件開發工作可能從結構設計到詳細設計到代碼到測試都會平穩順利的進行。
為什么要做需求分析
1、“決策性”--要不要做這個產品,通過對市場需求的分析來決策項目是否需要立項;
2、“方向性”--良好的需求分析可以對項目人員明確方向,讓項目成員知道下面應該如何實施;
3、“策略性”--既然知道了為什么要做需求分析,就需要了解什么是需求分析,及如何做。需求分析并不是簡單的對與錯,比如說做一個產品,“做技術最先進的軟件,還是做最好賣的軟件”,這個需求有錯嗎,沒有,只能說需要從不同的地方去考慮,去定位。
如何進行需求分析 “ 需求分析”不代表“用戶要求什么就是什么”也不代表“我們能做什么就做什么”,做為需求人員,在進行需求分析的時候,首先應該明白用戶的需求,然后再加上 自己的分析處理過程,知道哪些我們現在能做,哪些我們做不了,哪些我們咬咬牙齒能做,需求人員在做需求分析的時候不能一味的成為客戶的傳話筒,要有自己的 分析。
一般可以從三個方面去考慮:
1、功能需求--產品應該完成哪些功能,即向用戶提供的功能,一般來說這個都是比較硬性的標準;
2、非功能性需求--用戶可能不能明確告訴你的一些需求,比如說性能達到什么要求,可靠性方面,響應時間,擴展性,性能方面等,這塊的內容并不 是說用戶需要,而是說不知道需要做成什么樣的,我們不能不做,做了只會對自己受益。要不然等到后期用戶使用感覺這慢,那不爽,那倒霉的還是是自己;
3、限制條件--在需求分析中需要考慮一些條件約束,規則等,比如客戶的約束,行業的約束,法律的約束以及自己的約束等,這些都需要在需求分析考慮清楚,要不然做出一款白人狂毆黑人的游戲給黑人玩,那就慘了……
測試需求分析的步驟
1 、 熟悉需求背景及商業目標:
a) 了解清楚項目發起的原因,是為了解決用戶的什么問題。
b) 當前的解決方案是不是最優的,為什么會這樣做?
2 、業務模型法:
a) 考慮本項目與外部系統的交互,劃分系統邊界(除了本項目的需求中要求做的事情,其他的都可以是外部系統,本系統和外部系統之間的交互就是系統的邊界),可以參考系統分析說明書。
b) 確定測試范圍和關注點。系統的邊界是測試的重點,特別需要關注邊界交互時的數據交互。
3 、業務場景法:
a) 考慮用例的調用者;考慮每一個用例提供的服務是供哪些外部用例或者系統調用,找出所有的調用者。調用的前提、約束都要考慮。每一個調用都可以考慮成一個大的業務流程。(一般和外部有交互的用例出錯的概率比較大,需要重點關注)
b) 考慮系統內部各個用例之間的交互,形成內部業務流程圖。需要分析每個用例之間的約束關系、執行條件,組織出各種業務流程圖。
4 、功能分解法
a). 業務功能:與用戶實際業務直接相關的功能 或細節。
b). 輔助功能:輔助完成業務功能的一些功能或者是細節,比如,設置過濾條件。
c). 數據約束:功能的細節,主要是用于控制在執行功能時,數據的顯示范圍、數據之間的關系等。
d). 易用性需求:功能的細節,產品中必須提供了,便于功能操作使用的一些細節,比如快捷鍵就是典型的易用性需求。
e). 編輯約束:功能的細節,在功能執行時,對輸入數據項目的一些約束性條件,比如只能輸入數字。
f). 參數需求:功能的細節,在功能中,需要根據參數設置不同,進行不同處理的細節。
g). 權限需求:功能的細節,這里的權限是指在功能的執行過程,根據根據不同的權限進行不同處理的,不包括直接限制某個功能的權限。
一個有趣的例子 某日,老師在課堂上想考考學生們的智商,就問一個男孩:“樹上有十只鳥,開槍打死一只,還剩幾只?”
男孩反問:“是無聲槍么?”
“不是。”
“槍聲有多大?”
“80~100分貝。”
“那就是說會震的耳朵疼?”
“是。”
“在這個城市里打鳥犯不犯法?”
'不犯。“
“您確定那只鳥真的被打死啦?”
“確定。”老師已經不耐煩了,“拜托,你告訴我還剩幾只就行了,OK?”
“OK。鳥里有沒有聾子?”
“沒有。”
“有沒有關在籠子里的?”
“沒有。”
“邊上還有沒有其他的樹,樹上還有沒有其他鳥?”
“沒有。”
“方圓十里呢?”
“就這么一棵樹!”
“有沒有殘疾或餓的飛不動的鳥?”
“沒有,都身體倍棒。”
“算不算懷孕肚子里的小鳥?”
“都是公的。”
“都不可能懷孕?”
“………,決不可能。”
“打鳥的人眼里有沒有花?保證是十只?”
“沒有花,就十只。”
老師腦門上的汗已經流下來了,下課鈴響起,但男孩仍繼續問:“有沒有傻的不怕死的?”
“都怕死。”
“有沒有因為情侶被打中,自己留下來的?”
“笨蛋,之前不是說都是公的嘛!”
“同志可不可以啊!”
“…………,性取向都很正常!”
“會不會一槍打死兩只?”
“不會。”
“一槍打死三只呢?”
“不會。”
“四只呢?”
“更不會!”
“五只呢?”
“絕對不會!!!”
“那六只總有可能吧?”
“除非你他媽的是豬生的才有可能!”
“…好吧,那么所有的鳥都可以自由活動么?”
“完全可以。”
“它們受到驚嚇起飛時會不會驚慌失措而互相撞上?”
“不會,每只鳥都裝有衛星導航系統,而且可以自動飛行。”
“恩,如果您的回答沒有騙人,”學生滿懷信心的回答,“打死的鳥要是掛在樹上沒掉下來,那么就剩一只,如果掉下來,就一只不剩。”
老師當即倒!
舉例說明如何進行測試需求分析 先看一段關于日志文件的需求描述如下:“軟件要將所有的訪問者都要記錄下來,對每次訪問要記錄訪問開始時間、訪問結束時間、訪問者的IP地址這三個信息作為一條日志記錄。要求以天為單位每天生成一個訪問記錄日志文件。
在這段需求描述中,我們首先要想象自己是日志模塊的開發者,根據這段需求描述,是否能夠開發出日志模塊來呢?日志文件要記錄的信息內容上面都提到了:訪問開始時間、結束時間、IP地址。乍一看好像可以根據這個需求描述進行開發。
但仔細來分析一下這段需求的話,就會發現并不是想象的那樣樂觀。先找出需求中涉及的三個顯性元素:
1、訪問者
2、訪問記錄
3、日志文件
首先對訪問者和訪問記錄這兩個元素進行分析,先看訪問者有那些屬性,除了描述中提及的訪問時間和IP地址外,訪問者還有那些屬性呢?顯然訪問者 的訪問內容是最重要的屬性,僅記錄訪問時間和訪問者的IP地址是否足夠呢,從日志能分析出什么有用的信息呢?從時間信息上最多只能看出那段時間訪問的人數 較多,得到用戶的時間分布規律,但很難對用戶的行為有深入的分析,只有知道訪問者在訪問那些內容才能得到更有價值的信息。象Web服務器軟件要記錄下訪問 的URL信息以便知道訪問者訪問的內容,所以訪問記錄中遺漏了關于訪問內容的信息。
從訪問記錄這個元素來分析,訪問記錄主要屬性是記錄格式,每條記錄是以什么格式來記錄呢?沒有描述出來。有經驗的開發者就知道日志記錄格式是一 個很重要的問題,因為日志記錄的分析一般是需要使用專門的分析軟件或者寫專門的分析程序來分析的。如何設計合理的記錄格式來利用已有的日志分析軟件來進行 分析是首要考慮的問題。
再對日志文件這個元素進行分析,先看看日志文件有那些屬性,首先日志文件具有文件名,還有存放位置,文件格式,文件內容、文件創建時間、文件大小、文件權限等屬性。
需求描述中提到了每天要生成一個日志文件,從文件創建時間屬性來看,每天有24小時,到底從什么時候開始創建文件,從0點開始還是從幾點開始,沒有描述出來。
---從文件名屬性來看,如何命名日志文件,需求中也沒有提及。從存放位置屬性來看,日志文件存放在什么地方也沒有說明。是不是所有的日志文件都存放在應用程序同一子目錄下?
---從文件格式屬性來看,首先日志文件是以文本方式存儲還是以二進制格式存儲?再者,文件的內容是以何種格式記錄,每條訪問記錄間如何分隔,是以回車換行作為分隔還是以其他字符作為分隔?都沒有描述。
---從文件內容屬性來分析,除了存放上述描述的內容外,是否還可以保存其他內容,如果不能保存其他內容的話,需求描述中應該加上一句”日志文件中只能存儲訪問記錄信息,不得儲存其他記錄信息“。
---從文件大小屬性來分析,日志文件的大小有沒有限制?如果某天處于訪問高峰期,訪問特別多,是否需要將日志文件分拆成多個是一個需要考慮的問題。
---從文件權限屬性來分析,日志文件是否機器上的所有用戶都可以訪問還是只有特定的用戶可以訪問?文件是否需要設置權限是一個需要考慮的問題。
所以在對上述需求描述進行分析后,你會發現需求描述中有很多的問題沒有描述清楚。也許有人會有疑問,如果將所有上面說到的問題都描述出來的話會 不會工作量太大了?僅從需求分析的角度來講,需求規格描述得較細的話確實會增大很多工作量,但從整個開發過程來看,需求描述完整的話,后續階段的開發產生 歧義和遺漏的可能性就很小,實際上后續階段節約的時間會大大超過需求所多花的時間。
測試人員在需求階段應做哪些工作
1)首先,測試用例和測試工作本身是不斷完善的,在開發過程的初期,可以認為是需求階段,或者沒有規范需求工作的設計階段。如果有一個比較明確的需求文檔,可以在這個階段檢查完了需求文檔以后開始設計測試用例。這里,對于需求文檔的檢查主要是兩個方面:
---檢查需求文檔描述的正確性,測試人員要對于真實的系統所涉及的業務非常熟悉,比如一個簡單的財務軟件,那么測試人員本身就要對會計工作熟 悉,財務制度熟悉,在檢查需求文檔的時候不要迷信所謂的”都是用戶真實的需求“,這里存在兩個問題,一是用戶是否真的能正確地描述自己的需求,二是需求人 員是否真的能正確地理解需求。另外,還有一個用戶的需求是否符合行業規范的問題,如果不符合,那么是否要確認--這里存在一個隱患,用戶可能會在開發的后 期突然要求他們自己要走行業規范,讓你的需求變動,所以要事先明確好。
---檢查需求文檔描述的準確性。主要是考慮文檔中是否存在描述的模糊的地方,對于自己不清楚的問題一定要明確。這個時候是要保證需求的可測試性--我的意思是說保證需求是可以完全為測試工作服務的。
2)那么在檢查完了需求之后,就可以開始設計測試用例了,在這個階段因為沒有開始設計工作,所以對于測試用例的考慮不能僅僅從界面出發,而應該從業務角度出發,從實際業務出發來設計測試用例。
當然,這個階段所設計的測試用例是不夠完善的,只能涵蓋某些內容,但是我認為這些用例不僅僅全部都是功能測試用例,而且在整個項目中都將有效。 。
3)不過,當缺少需求文檔時,那就要發揮測試人員自己的能動性了,要主動的工作,而不是被動的等待。要自己嘗試著去熟悉實際業務,要盡量通過自己所能想到的方法來開展工作。