良好的需求分析是軟件成功的基礎(chǔ),當(dāng)軟件融合了客戶和系統(tǒng)分析員雙方智慧,其質(zhì)量將會進(jìn)一步得以提高。
一、需求的分類
需求分析是構(gòu)建軟件系統(tǒng)的一個重要過程。一般,把需求類型分成三個類型:
1、業(yè)務(wù)需求(business requirement)反映了組織機(jī)構(gòu)或客戶對系統(tǒng)、產(chǎn)品高層次的目的要求,它們在項目視圖與范圍文檔中予以說明。
2、用戶需求(user requirement) 文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用實例文檔或方案腳本說明中予以說明。
3、功能需求(functional requirement)定義了開發(fā)人員必須實現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。
業(yè)務(wù)需求和用戶需求是軟件需求分析的基礎(chǔ),也是軟件構(gòu)建的前提。系統(tǒng)分析員通過對業(yè)務(wù)需求和用戶需求的分解,將其轉(zhuǎn)換成克一形式化描述的軟件功能需求。開發(fā)軟件系統(tǒng)最為困難的部分,就是準(zhǔn)確說明開發(fā)什么。這就需要在開發(fā)的過程中不斷的與用戶進(jìn)行交流與探討,使系統(tǒng)更加詳盡,準(zhǔn)確到位。這就需要確定用戶是否需要這樣的產(chǎn)品類型以及獲取每個用戶類的需求。
二、需求的質(zhì)量分解
一般情況下,采用如下的手段描述軟件需求的質(zhì)量:
正確性:所有需求必須是正確的、合理的、滿足任務(wù)書要求的。
必要性:所有需求必須是為完成指定任務(wù)所必需的。
可行性:在指定的環(huán)境和條件下,所有的需求必須是可行的。
完備性:為完成指定任務(wù),這些需求是完備的、無遺漏的。
一致性:所有需求相互之間沒有矛盾,是一致的。
非退化:任一需求的引入都不會導(dǎo)致軟件性能的退化。
無歧義:任一需求的陳述都是確定的、不會導(dǎo)致多義性的。
可驗證:任一需求都是可以測試、可以驗證的。
可追蹤:人以需求都可以追蹤到項目的任務(wù)書或規(guī)格說明的需求。
三、客戶對需求的影響
目前很多系統(tǒng)分析員在進(jìn)行需求分析的時候,把主要精力放在了解客戶的業(yè)務(wù)流程,并試圖將其用形式化的手段描述。而事實上,這樣了解到的客戶需求往往是不完整的,甚至具有很大的片面性。除了隱含需求的定義比較困難以外,客戶本身也是影響需求質(zhì)量的一個重要因素。
1、客戶有不同的需要。一些客戶知道他們需要什么,而另外一些人知道他們不需要什么。一些客戶希望進(jìn)行詳細(xì)討論,而另外一些客戶則滿足于模糊的承諾。
2、客戶有不同的個性。
3、客戶和供應(yīng)商之間有著不同的通信方式。一些人非常熟悉產(chǎn)品以及生產(chǎn)廠商,而另外一些人則可能素未謀面,僅僅通過信件往來和幾個匆忙的電話與生產(chǎn)廠商溝通。
4、客戶也經(jīng)常是矛盾的。事實上,很少有客戶能夠明確的知道怎樣的一個系統(tǒng)對自己是最有益處的,他們往往在集中方案之間徘徊,于是經(jīng)常產(chǎn)生需求的變動。生產(chǎn)廠商經(jīng)常陷入客戶自己的矛盾之中。
客戶的負(fù)面影響可能對于能夠在預(yù)算內(nèi)按時完成項目產(chǎn)生很大的影響。盡管客戶需要對需求的質(zhì)量負(fù)責(zé)任,但是,當(dāng)一個軟件項目因為客戶事先沒有預(yù)料到的情況而導(dǎo)致失敗的時候,即使客戶不會追究開發(fā)方的責(zé)任,就軟件項目本身而言,也已經(jīng)是失敗的。
四、需求的隱含質(zhì)量要求
除了這些可以量化的質(zhì)量標(biāo)準(zhǔn),還有一些需求的標(biāo)準(zhǔn)是隱含的。這些要求及時客戶沒有提出來,在實現(xiàn)的時候也應(yīng)該考慮到,否則,可能導(dǎo)致項目的失敗。
操作方便:每一個客戶都會有操作方面的要求,只是具體的表現(xiàn)方式不一樣。一般,客戶在開始的時候?qū)Σ僮骱茈y對操作有很具體的考慮