對商業用戶來講,他們後面是成百上千個供應商,前面是成千上萬個消費顧客。怎樣利用軟件管理錯綜複雜的供應商和消費顧客,如何作好精細到一個小小調料包的進、銷、調、存的商品流通工做,這些都是商業企業須要信息管理系統的理由。軟件開發的意義也就在於此。而弄清商業用戶如此複雜需求的真面目,正是軟件開發成功的關鍵所在。
經理:「咱們要創建一套完整的商業管理軟件系統,包括商品的進、銷、調、存管理,是總部-門店的連鎖經營模式。經過通訊手段門店自動定貨,供應商自動結算,賣場經過掃條碼實現銷售,管理人員可以隨時查詢門店商品銷售和庫存狀況。另外,咱們也得爲政府部門提供關於商品營運的報告。」
分析員:「我已經明白這個項目的大致結構框架,這很是重要,但在制定計劃以前,咱們必須收集一些需求。」
經理以爲奇怪:「我不是剛告訴你個人需求了嗎?」
分析員:「實際上,您只說明瞭整個項目的概念和目標。這些高層次的業務需求不足以提供開發的內容和時間。我須要與實際將要使用系統的業務人員進行討論,而後才能真正明白達到業務目標所需功能和用戶要求,瞭解清楚後,才能夠發現哪些是現有組件便可實現的,哪些是須要開發的,這樣可節省不少時間。」
經理:「業務人員都在招商。他們很是忙,沒有時間與大家詳細討論各類細節。你能不能說明一下大家現有的系統?」
分析員儘可能解釋從用戶處收集需求的合理性:「若是咱們只是憑空猜測用戶的要求,結果不會使人滿意。咱們只是軟件開發人員,而不是採購專家、營運專家或是財務專家,咱們並不真正明白您這個企業內部運營須要作些什麼。我曾經嘗試過,未真正明白這些問題就開始編碼,結果沒有人對產品滿意。」
經理堅持道:「行了,行了,咱們沒有那麼多的時間。讓我來告訴您咱們的需求。實際上我也很忙。請立刻開始開發,並隨時將大家的進展狀況告訴我。」
風險躲在需求的迷霧以後
以上咱們看到的是某客戶項目經理與系統開發小組的分析人員討論業務需求。在項目開發中,全部的項目風險承擔者都對需求分析階段備感興趣。這裏所指的風險承擔者包括客戶方面的項目負責人和用戶,開發方面的需求分析人員和項目管理者。這部分工做作獲得位,能開發出很優秀的軟件產品,同時也會令客戶滿意。若處理很差,則會致使誤解、挫折、障礙以及潛在的質量和業務價值上的威脅。所以可見——需求分析奠基了軟件工程和項目管理的基礎。
撥開需求分析的迷霧
像這樣的對話常常出如今軟件開發的過程當中。客戶項目經理的需求對分析人員來說,像「霧裏看花」般模糊並令開發者感到困惑。那麼,咱們就撥開霧影,分析一下需求的具體內容:
·業務需求——反映了組織機構或客戶對系統、產品高層次的目標要求,一般在項目定義與範圍文檔中予以說明。
·用戶需求——描述了用戶使用產品必需要完成的任務,這在使用實例或方案腳本中予以說明。
·功能需求——定義了開發人員必須實現的軟件功能,使用戶利用系統可以完成他們的任務,從而知足了業務需求。
·非功能性的需求——描述了系統展示給用戶的行爲和執行的操做等,它包括產品必須聽從的標準、規範和約束,操做界面的具體細節和構造上的限制。
·需求分析報告——報告所說明的功能需求充分描述了軟件系統所應具備的外部行爲。「需求分析報告」在開發、測試、質量保證、項目管理以及相關項目功能中起着重要做用。
前面提到的客戶項目經理一般闡明產品的高層次概念和主要業務內容,爲後繼工做創建了一個指導性的框架。其餘任何說明都應遵循「業務需求」的規定,然而「業務需求」並不能爲開發人員提供開發所需的許多細節說明。
下一層次需求——用戶需求,必須從使用產品的用戶處收集。所以,這些用戶構成了另外一種軟件客戶,他們清楚要使用該產品完成什麼任務和一些非功能性的特性需求。例如:程序的易用性、健壯性和可靠性,而這些特性將會使用戶很好地接受具備該特色的軟件產品。
經理層有時試圖代替實際用戶說話,但一般他們沒法準確說明「用戶需求」。用戶需求來自產品的真正使用者,必須讓實際用戶參與到收集需求的過程當中。若是不這樣作,產品極可能會因缺少足夠的信息而遺留很多隱患。
在實際需求分析過程當中,以上兩種客戶可能都以爲沒有時間與需求分析人員討論,有時客戶還但願分析人員無須討論和編寫需求說明就能說出用戶的需求。除非遇到的需求極爲簡單;不然不能這樣作。若是您的組織但願軟件成功,那麼必需要花上數天時間來消除需求中模糊不清的地方和一些使開發者感到困惑的方面。
優秀的軟件產品創建在優秀的需求基礎之上,而優秀的需求源於客戶與開發人員之間有效的交流和合做。只有雙方參與者都明白本身須要什麼、成功的合做須要什麼時,才能創建起一種良好的合做關係。
因爲項目的壓力與日俱增,全部項目風險承擔者有着一個共同目標,那就是你們都想開發出一個既能實現商業價值又能知足用戶要求,還能使開發者感到知足的優秀軟件產品。
客戶的需求觀
客戶與開發人員交流須要好的方法。下面建議20條法則,客戶和開發人員能夠經過評審如下內容並達成共識。若是遇到分歧,將經過協商達成對各自義務的相互理解,以便減小之後的磨擦(如一方要求而另外一方不肯意或不可以知足要求)。
一、 分析人員要使用符合客戶語言習慣的表達
需求討論集中於業務需求和任務,所以要使用術語。客戶應將有關術語(例如:採價、印花商品等採購術語)教給分析人員,而客戶不必定要懂得計算機行業的術語。
二、分析人員要了解客戶的業務及目標
只有分析人員更好地瞭解客戶的業務,才能使產品更好地知足須要。這將有助於開發人員設計出真正知足客戶須要並達到指望的優秀軟件。爲幫助開發和分析人員,客戶能夠考慮邀請他們觀察本身的工做流程。若是是切換新系統,那麼開發和分析人員應使用一下目前的舊系統,有利於他們明白目前系統是怎樣工做的,其流程狀況以及可供改進之處。s 三、 分析人員必須編寫軟件需求報告
分析人員應將從客戶那裏得到的全部信息進行整理,以區分業務需求及規範、功能需求、質量目標、解決方法和其餘信息。經過這些分析,客戶就能獲得一份「需求分析報告」,此份報告使開發人員和客戶之間針對要開發的產品內容達成協議。報告應以一種客戶認爲易於翻閱和理解的方式組織編寫。客戶要評審此報告,以確保報告內容準確完整地表達其需求。一份高質量的「需求分析報告」有助於開發人員開發出真正須要的產品。
四、 要求獲得需求工做結果的解釋說明
分析人員可能採用了多種圖表做爲文字性「需求分析報告」的補充說明,由於工做圖表能很清晰地描述出系統行爲的某些方面,因此報告中各類圖表有着極高的價值;雖然它們不太難於理解,可是客戶可能對此並不熟悉,所以客戶能夠要求分析人員解釋說明每一個圖表的做用、符號的意義和需求開發工做的結果,以及怎樣檢查圖表有無錯誤及不一致等。
五、 開發人員要尊重客戶的意見
若是用戶與開發人員之間不能相互理解,那關於需求的討論將會有障礙。共同合做能使你們「兼聽則明」。參與需求開發過程的客戶有權要求開發人員尊重他們並珍惜他們爲項目成功所付出的時間,一樣,客戶也應對開發人員爲項目成功這一共同目標所作出的努力表示尊重。
六、 開發人員要對需求及產品實施提出建議和解決方案
一般客戶所說的「需求」已是一種實際可行的實施方案,分析人員應盡力從這些解決方法中瞭解真正的業務需求,同時還應找出已有系統與當前業務不符之處,以確保產品不會無效或低效;在完全弄清業務領域內的事情後,分析人員就能提出至關好的改進方法,有經驗且有創造力的分析人員還能提出增長一些用戶沒有發現的頗有價值的系統特性。
七、 描述產品使用特性
客戶能夠要求分析人員在實現功能需求的同時還注意軟件的易用性,由於這些易用特性或質量屬性能使客戶更準確、高效地完成任務。例如:客戶有時要求產品要「界面友好」或「健壯」或「高效率」,但對於開發人員來說,太主觀了並沒有實用價值。正確的作法是,分析人員經過詢問和調查瞭解客戶所要的「友好、健壯、高效所包含的具體特性,具體分析哪些特性對哪些特性有負面影響,在性能代價和所提出解決方案的預期利益之間作出權衡,以確保作出合理的取捨。
八、 容許重用已有的軟件組件
需求一般有必定靈活性,分析人員可能發現已有的某個軟件組件與客戶描述的需求很相符,在這種狀況下,分析人員應提供一些修改需求的選擇以便開發人員可以下降新系統的開發成本和節省時間,而沒必要嚴格按原有的需求說明開發。因此說,若是想在產品中使用一些已有的商業經常使用組件,而它們並不徹底適合您所需的特性,這時必定程度上的需求靈活性就顯得極爲重要了。
九、 要求對變動的代價提供真實可靠的評估
有時,人們面臨更好、也更昂貴的方案時,會作出不一樣的選擇。而這時,對需求變動的影響進行評估從而對業務決策提供幫助,是十分必要的。因此,客戶有權利要求開發人員經過分析給出一個真實可信的評估,包括影響、成本和得失等。開發人員不能因爲不想實施變動而隨意誇大評估成本。
十、 得到知足客戶功能和質量要求的系統
每一個人都但願項目成功,但這不只要求客戶要清晰地告知開發人員關於系統「作什麼」所需的全部信息,並且還要求開發人員能經過交流了解清楚取捨與限制,必定要明確說明您的假設和潛在的指望,不然,開發人員開發出的產品極可能沒法讓您滿意。
十一、 給分析人員講解您的業務
分析人員要依靠客戶講解業務概念及術語,但客戶不能期望分析人員會成爲該領域的專家,而只能讓他們明白您的問題和目標;不要指望分析人員能把握客戶業務的細微潛在之處,他們可能不知道那些對於客戶來講理所固然的「常識」。
十二、 抽出時間清楚地說明並完善需求
客戶很忙,但不管如何客戶有必要抽出時間參與「頭腦高峯會議」的討論,接受採訪或其餘獲取需求的活動。有些分析人員可能先明白了您的觀點,而事後發現還須要您的講解,這時請耐心對待一些需求和需求的精化工做過程當中的反覆,由於它是人們交流中很天然的現象,況且這對軟件產品的成功極爲重要。
1三、 準確而詳細地說明需求
編寫一份清晰、準確的需求文檔是很困難的。因爲處理細節問題不但煩人並且耗時,所以很容易留下模糊不清的需求。可是在開發過程當中,必須解決這種模糊性和不許確性,而客戶偏偏是爲解決這些問題做出決定的最佳人選,不然,就只好靠開發人員去正確猜想了。
在需求分析中暫時加上「待定」標誌是個方法。用該標誌可指明哪些是須要進一步討論、分析或增長信息的地方,有時也可能由於某個特殊需求難以解決或沒有人願意處理它而標註上「待定」。客戶要儘可能將每項需求的內容都闡述清楚,以便分析人員能準確地將它們寫進「軟件需求報告」中去。若是客戶一時不能準確表達,一般就要求用原型技術,經過原型開發,客戶能夠同開發人員一塊兒反覆修改,不斷完善需求定義。
1四、 及時做出決定
分析人員會要求客戶做出一些選擇和決定,這些決定包括來自多個用戶提出的處理方法或在質量特性衝突和信息準確度中選擇折衷方案等。有權做出決定的客戶必須積極地對待這一切,儘快作處理,作決定,由於開發人員一般只有等客戶作出決定才能行動,而這種等待會延誤項目的進展。
1五、 尊重開發人員的需求可行性及成本評估
全部的軟件功能都有其成本。客戶所但願的某些產品特性可能在技術上行不通,或者實現它要付出極高的代價,而某些需求試圖達到在操做環境中不可能達到的性能,或試圖獲得一些根本得不到的數據。開發人員會對此做出負面的評價,客戶應該尊重他們的意見。
1六、 劃分需求的優先級
絕大多數項目沒有足夠的時間或資源實現功能性的每一個細節。決定哪些特性是必要的,哪些是重要的,是需求開發的主要部分,這隻能由客戶負責設定需求優先級,由於開發者不可能按照客戶的觀點決定需求優先級;開發人員將爲您肯定優先級提供有關每一個需求的花費和風險的信息。
在時間和資源限制下,關於所需特性可否完成或完成多少應尊重開發人員的意見。儘管沒有人願意看到本身所但願的需求在項目中未被實現,但畢竟是要面對現實,業務決策有時不得不依據優先級來縮小項目範圍或延長工期,或增長資源,或在質量上尋找折衷。
1七、 評審需求文檔和原型
客戶評審需求文檔,是給分析人員帶來反饋信息的一個機會。若是客戶認爲編寫的「需求分析報告」不夠準確,就有必要儘早告知分析人員併爲改進提供建議。
更好的辦法是先爲產品開發一個原型。這樣客戶就能提供更有價值的反饋信息給開發人員,使他們更好地理解您的需求;原型並不是是一個實際應用產品,但開發人員能將其轉化、擴充成功能齊全的系統。
1八、 需求變動要當即聯繫
不斷的需求變動,會給在預約計劃內完成的質量產品帶來嚴重的不利影響。變動是不可避免的,但在開發週期中,變動越在晚期出現,其影響越大;變動不只會致使代價極高的返工,並且工期將被延誤,特別是在大致結構已完成後又須要增長新特性時。因此,一旦客戶發現須要變動需求時,請當即通知分析人員。
1九、 遵守開發小組處理需求變動的過程
爲將變動帶來的負面影響減小到最低限度,全部參與者必須遵守項目變動控制過程。這要求不放棄全部提出的變動,對每項要求的變動進行分析、綜合考慮,最後作出合適的決策,以肯定應將哪些變動引入項目中。
20、 尊重開發人員採用的需求分析過程
軟件開發中最具挑戰性的莫過於收集需求並肯定其正確性,分析人員採用的方法有其合理性。也許客戶認爲收集需求的過程不太划算,但請相信花在需求開發上的時間是很是有價值的;若是您理解並支持分析人員爲收集、編寫需求文檔和確保其質量所採用的技術,那麼整個過程將會更爲順利。
「需求確認」意味着什麼
在「需求分析報告」上簽字確認,一般被認爲是客戶贊成需求分析的標誌行爲,然而實際操做中,客戶每每把「簽字」看做是毫無心義的事情。「他們要我在需求文檔的最後一行下面簽名,因而我就簽了,不然這些開發人員不開始編碼。」
這種態度將帶來麻煩,譬如客戶想更改需求或對產品不滿時就會說:「不錯,我是在需求分析報告上籤了字,但我並無時間去讀完全部的內容,我是相信大家的,是大家非讓我簽字的。」
一樣問題也會發生在僅把「簽字確認」看做是完成任務的分析人員身上,一旦有需求變動出現,他便指着「需求分析報告」說:「您已經在需求上簽字了,因此這些就是咱們所開發的,若是您想要別的什麼,您應早些告訴咱們。」
這兩種態度都是不對的。由於不可能在項目的早期就瞭解全部的需求,並且毫無疑問地需求將會出現變動,在「需求分析報告」上簽字確認是終止需求分析過程的正確方法,因此咱們必須明白簽字意味着什麼。
對「需求分析報告」的簽名是創建在一個需求協議的基線上,所以咱們對簽名應該這樣理解:「我贊成這份需求文檔表述了咱們對項目軟件需求的瞭解,進一步的變動可在此基線上經過項目定義的變動過程來進行。我知道變動可能會使咱們從新協商成本、資源和項目階段任務等事宜。」對需求分析達成必定的共識會使雙方易於忍受未來的摩擦,這些摩擦來源於項目的改進和需求的偏差或市場和業務的新要求等。
需求確認將迷霧撥散,顯現需求的真面目,給初步的需求開發工做畫上了雙方都明確的句號,並有助於造成一個持續良好的客戶與開發人員的關係,爲項目的成功奠基了堅實的基礎。 框架