一、需求的分類
需求分析是構(gòu)建軟件系統(tǒng)的一個(gè)重要過(guò)程。一般,把需求類型分成三個(gè)類型:
1、業(yè)務(wù)需求(business requirement)反映了組織機(jī)構(gòu)或客戶對(duì)系統(tǒng)、產(chǎn)品高層次的目的要求,它們?cè)陧?xiàng)目視圖與范圍文檔中予以說(shuō)明。
2、用戶需求(user requirement) 文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用實(shí)例文檔或方案腳本說(shuō)明中予以說(shuō)明。
3、功能需求(functional requirement)定義了開(kāi)發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。
業(yè)務(wù)需求和用戶需求是軟件需求分析的基礎(chǔ),也是軟件構(gòu)建的前提。系統(tǒng)分析員通過(guò)對(duì)業(yè)務(wù)需求和用戶需求的分解,將其轉(zhuǎn)換成克一形式化描述的軟件功能需求。開(kāi)發(fā)軟件系統(tǒng)最為困難的部分,就是準(zhǔn)確說(shuō)明開(kāi)發(fā)什么。這就需要在開(kāi)發(fā)的過(guò)程中不斷的與用戶進(jìn)行交流與探討,使系統(tǒng)更加詳盡,準(zhǔn)確到位。這就需要確定用戶是否需要這樣的產(chǎn)品類型以及獲取每個(gè)用戶類的需求。
二、需求的質(zhì)量分解
一般情況下,采用如下的手段描述軟件需求的質(zhì)量:
正確性:所有需求必須是正確的、合理的、滿足任務(wù)書(shū)要求的。
必要性:所有需求必須是為完成指定任務(wù)所必需的。
可行性:在指定的環(huán)境和條件下,所有的需求必須是可行的。
完備性:為完成指定任務(wù),這些需求是完備的、無(wú)遺漏的。
一致性:所有需求相互之間沒(méi)有矛盾,是一致的。
非退化:任一需求的引入都不會(huì)導(dǎo)致軟件性能的退化。
無(wú)歧義:任一需求的陳述都是確定的、不會(huì)導(dǎo)致多義性的。
可驗(yàn)證:任一需求都是可以測(cè)試、可以驗(yàn)證的。
可追蹤:人以需求都可以追蹤到項(xiàng)目的任務(wù)書(shū)或規(guī)格說(shuō)明的需求。
三、需求的隱含質(zhì)量要求
除了這些可以量化的質(zhì)量標(biāo)準(zhǔn),還有一些需求的標(biāo)準(zhǔn)是隱含的。這些要求及時(shí)客戶沒(méi)有提出來(lái),在實(shí)現(xiàn)的時(shí)候也應(yīng)該考慮到,否則,可能導(dǎo)致項(xiàng)目的失敗。
操作方便:每一個(gè)客戶都會(huì)有操作方面的要求,只是具體的表現(xiàn)方式不一樣。一般,客戶在開(kāi)始的時(shí)候?qū)Σ僮骱茈y對(duì)操作有很具體的考慮,他會(huì)想當(dāng)然個(gè)認(rèn)為新的軟件系統(tǒng)會(huì)和他以前所熟悉的某一個(gè)系統(tǒng)類似。而事實(shí)并非如此。當(dāng)他發(fā)現(xiàn)新的軟件系統(tǒng)不方便使用的時(shí)候,就會(huì)提出修改的建議。有的時(shí)候,這種修改對(duì)軟件系統(tǒng)的影響是災(zāi)難性的。
可以保證操作質(zhì)量:一般,系統(tǒng)分析員會(huì)認(rèn)為客戶應(yīng)該勾畫出系統(tǒng)運(yùn)行過(guò)程中可能發(fā)現(xiàn)的重要風(fēng)險(xiǎn),然后在系統(tǒng)實(shí)現(xiàn)的時(shí)候予以考慮。然而,在溝通的過(guò)程中,客戶認(rèn)為的重要的風(fēng)險(xiǎn)會(huì)和系統(tǒng)分析員所理解的有所不同,而被忽略的一部分,往往是很基本的那部分,因?yàn)閷?duì)于客戶而言,這些內(nèi)容應(yīng)該是顯而易見(jiàn)的;而系統(tǒng)分析員一把并不了解這些事實(shí)。例如,在一個(gè)管理保險(xiǎn)公司客戶的系統(tǒng)里面,修改職業(yè)是需要嚴(yán)格審核的,如果系統(tǒng)分析員以前接觸的業(yè)務(wù)以電子商務(wù)居多,他可能自然而然的認(rèn)為客戶修改職業(yè)僅僅是一個(gè)一般性的變更。
四、客戶對(duì)需求的影響
目前很多系統(tǒng)分析員在進(jìn)行需求分析的時(shí)候,把主要精力放在了解客戶的業(yè)務(wù)流程,并試圖將其用形式化的手段描述。而事實(shí)上,這樣了解到的客戶需求往往是不完整的,甚至具有很大的片面性。除了隱含需求的定義比較困難以外,客戶本身也是影響需求質(zhì)量的一個(gè)重要因素。
1、客戶有不同的需要。一些客戶知道他們需要什么,而另外一些人知道他們不需要什么。一些客戶希望進(jìn)行詳細(xì)討論,而另外一些客戶則滿足于模糊的承諾。
2、客戶有不同的個(gè)性。
3、客戶和供應(yīng)商之間有著不同的通信方式。一些人非常熟悉產(chǎn)品以及生產(chǎn)廠商,而另外一些人則可能素未謀面,僅僅通過(guò)信件往來(lái)和幾個(gè)匆忙的電話與生產(chǎn)廠商溝通。
4、客戶也經(jīng)常是矛盾的。事實(shí)上,很少有客戶能夠明確的知道怎樣的一個(gè)系統(tǒng)對(duì)自己是最有益處的,他們往往在集中方案之間徘徊,于是經(jīng)常產(chǎn)生需求的變動(dòng)。生產(chǎn)廠商經(jīng)常陷入客戶自己的矛盾之中。
客戶的負(fù)面影響可能對(duì)于能夠在預(yù)算內(nèi)按時(shí)完成項(xiàng)目產(chǎn)生很大的影響。盡管客戶需要對(duì)需求的質(zhì)量負(fù)責(zé)任,但是,當(dāng)一個(gè)軟件項(xiàng)目因?yàn)榭蛻羰孪葲](méi)有預(yù)料到的情況而導(dǎo)致失敗的時(shí)候,即使客戶不會(huì)追究開(kāi)發(fā)方的責(zé)任,就軟件項(xiàng)目本身而言,也已經(jīng)是失敗的。
五、目前控制需求質(zhì)量的手段
目前,項(xiàng)目經(jīng)理和系統(tǒng)分析員主要通過(guò)聽(tīng)證、評(píng)審、確認(rèn)等手段控制軟件需求的質(zhì)量。
聽(tīng)證:主要是指通過(guò)正式或者非正式的渠道召開(kāi)有關(guān)人員的會(huì)議,聽(tīng)求大家對(duì)新的軟件系統(tǒng)的要求和意見(jiàn)。
評(píng)審:組織有關(guān)的專家對(duì)軟件需求進(jìn)行評(píng)價(jià),指出目前的需求由那些不合理的地方,以及修改的意見(jiàn)等。評(píng)審一般發(fā)生在初步的軟件需求已經(jīng)形成以后。
確認(rèn):開(kāi)發(fā)方將整理過(guò)的需求分析說(shuō)明書(shū)交給客戶確認(rèn)。如果客戶認(rèn)可該需求分析說(shuō)明書(shū),就形成正式的需求分析文檔,并作為一個(gè)重要基線管理。
這些需求控制手段可以提高軟件需求的質(zhì)量,但是仍然無(wú)法保證需求是可用的。因?yàn)椋?
1、聽(tīng)證會(huì)的參與者并不一定代表使用者的真實(shí)意圖。實(shí)踐中經(jīng)常遇到這樣的情況。即使他是目標(biāo)軟件的最主要使用者,他也經(jīng)常會(huì)遺忘一些他覺(jué)得是很基本的,而事實(shí)上對(duì)于軟件系統(tǒng)是很重要的細(xì)節(jié)。
2、參與評(píng)審的專家并不一定對(duì)軟件的最終質(zhì)量負(fù)責(zé),因此,他可能把工作的重點(diǎn)放在發(fā)現(xiàn)需求中的問(wèn)題,而不是確認(rèn)需求是否可行。
3、客戶確認(rèn)只代表客戶對(duì)需求負(fù)責(zé)人,不代表客戶承認(rèn)需求的質(zhì)量。如果因?yàn)樾枨蟮馁|(zhì)量導(dǎo)致軟將項(xiàng)目無(wú)法進(jìn)展,客戶只能承擔(dān)經(jīng)濟(jì)上的責(zé)任,而項(xiàng)目小組并不能因此緩解軟件項(xiàng)目陷入的尷尬。
六、用逆向溝通改善需求的質(zhì)量
逆向溝通,就是在需求調(diào)研的過(guò)程中,除了了解客戶的情況,同時(shí),向客戶提出一些建議,供客戶參考。
一般認(rèn)為,客戶在其所在的領(lǐng)域具有比較資深的經(jīng)歷,因此需要嚴(yán)格遵守客戶的意見(jiàn)。事實(shí)上,客戶雖然在其所在的領(lǐng)域內(nèi)很資深,但是,他們的角度是單純的業(yè)務(wù)流程,而不是從實(shí)現(xiàn)信息技術(shù)角度構(gòu)件的業(yè)務(wù)流程。因此,系統(tǒng)分析員要充分的說(shuō)明對(duì)于實(shí)現(xiàn)一個(gè)業(yè)務(wù)系統(tǒng)而言,現(xiàn)有的業(yè)務(wù)流程應(yīng)該做如何的剪裁,以及需要注意哪些要點(diǎn)。
雖然,逆向溝通不能完全保證需求的質(zhì)量,有效的逆向溝通可以大大減少因?yàn)閷?duì)業(yè)務(wù)流程的理解不一致而造成的需求質(zhì)量的下降。
七、逆向溝通的主要要點(diǎn)
1、所提出的業(yè)務(wù)需求是否符合行業(yè)的規(guī)范。
不同的行業(yè)對(duì)于業(yè)務(wù)流程有一定的規(guī)范,例如財(cái)務(wù),審計(jì),工程設(shè)計(jì),都具有一定的行業(yè)規(guī)范,這些規(guī)范一方面是對(duì)行業(yè)行為的一種約束,同時(shí),也是行業(yè)內(nèi)經(jīng)驗(yàn)的歸納和總結(jié)。例如,審計(jì)準(zhǔn)則不但約束了審計(jì)過(guò)程中的不規(guī)范行為,同時(shí)也保護(hù)了注冊(cè)會(huì)計(jì)師的利益。部分企業(yè)由于所處的狀況的不同,沒(méi)有完全遵守行業(yè)規(guī)范,這造成了需求變更的隱患。系統(tǒng)分析員在探討業(yè)務(wù)流程的過(guò)程中,應(yīng)該留一客戶的業(yè)務(wù)流程是否符合行業(yè)規(guī)范,如果有不符合的地方,應(yīng)該進(jìn)行適當(dāng)?shù)囊龑?dǎo)。即使客戶目前實(shí)施行業(yè)規(guī)范有難度,也應(yīng)該注意其理由,以預(yù)測(cè)其業(yè)務(wù)流程變更的可能性。
2、展望系統(tǒng)發(fā)展環(huán)境,留有適當(dāng)?shù)臄U(kuò)展接口。
每個(gè)行業(yè)的發(fā)展趨勢(shì)應(yīng)該有一定的規(guī)律可遵循。企業(yè)本身的發(fā)展變化是引起需求變更的最主要因素,因此,提前預(yù)測(cè)行業(yè)的發(fā)展趨勢(shì)對(duì)于軟件預(yù)留一定的發(fā)展接口是很重要的。
客戶沒(méi)有預(yù)料到行業(yè)的變化趨勢(shì),一方面,可能參與軟件需求的客戶代表并不是關(guān)注行業(yè)和企業(yè)發(fā)展趨勢(shì)的人員;另一方面,客戶關(guān)注需求的程度可能和系統(tǒng)實(shí)現(xiàn)人員不同,有些客戶會(huì)很自然接受的變化,會(huì)對(duì)系統(tǒng)有很重大的影響,相反,一些客戶認(rèn)為很重大的變化,可能對(duì)系統(tǒng)的影響是很小的。
3、探索適合于信息化的工作流程。
客戶有的時(shí)候會(huì)提出對(duì)信息系統(tǒng)的要求,但是,客戶所提到的要求,是在他的理解中,信息系統(tǒng)應(yīng)該具有的樣子。系統(tǒng)分析員應(yīng)該深入挖掘這些要求背后的隱含目標(biāo),以便設(shè)計(jì)最適合客戶,也最有利于實(shí)現(xiàn)的系統(tǒng)框架。例如,為了控制員工的工作時(shí)間,客戶可能要求在軟件限時(shí)使用?墒牵軌?qū)崿F(xiàn)控制員工工作時(shí)間的手段有很多,而且,客戶提到的并不一定是最適合、最有效的方式。
4、合理使用批處理方式。
對(duì)于一些規(guī)模不大的系統(tǒng),集中處理(批處理)的方式是合適的?墒牵绻到y(tǒng)的規(guī)模很大,涉及的交易很多,而且對(duì)交易的實(shí)時(shí)性要求很高,集中的批量處理不是一個(gè)很好的方法。是否使用批處理方式,要根據(jù)業(yè)務(wù)需求的類型,系統(tǒng)的容量,以及以后的發(fā)展趨勢(shì)決定。
5、留有操作痕跡
一個(gè)數(shù)據(jù)的產(chǎn)生,應(yīng)該有一定的來(lái)由,不應(yīng)該有沒(méi)有根源的數(shù)據(jù)。
保留操作痕跡可能造成數(shù)據(jù)空間的急劇增加,但是,對(duì)于一些重要的數(shù)據(jù),必須做到操作可以追溯。追溯的內(nèi)容根據(jù)操作的重要程度有所不同,一般可能包括以下內(nèi)容:操作人員,操作時(shí)間,操作以前的狀況,操作以后的狀況,操作所通過(guò)的模塊,操作的機(jī)器信息。
6、操作可以恢復(fù)
對(duì)于錯(cuò)誤的操作,可以恢復(fù)到操作以前的狀況;謴(fù)過(guò)程作為一個(gè)重要的操作,應(yīng)該留有痕跡。也就是說(shuō),業(yè)務(wù)數(shù)據(jù)恢復(fù)到了操作以前的狀況,但是系統(tǒng)必須紀(jì)錄前一次操作和本次逆向操作的有關(guān)信息,以備核查。同時(shí),逆操作應(yīng)該比操作本身具有更高的授權(quán)級(jí)別和操作限制。
7、重要流程有校驗(yàn)的功能
所謂重要流程,指對(duì)下一步操作有重要影響的流程,或者無(wú)法回溯的流程。例如,發(fā)送客戶對(duì)賬單,對(duì)賬單發(fā)到客戶手里以前還可以重新打印已修復(fù)一些錯(cuò)誤,但是,如果已經(jīng)發(fā)給客戶,即使可以修復(fù),也會(huì)產(chǎn)生一定的不良影響。因此,在這些流程上應(yīng)該進(jìn)行比較細(xì)致的校驗(yàn)。校驗(yàn)可以采用自動(dòng)校驗(yàn),前提是有比較可靠的校驗(yàn)算法,否則,通過(guò)有經(jīng)驗(yàn)的操作員進(jìn)行校驗(yàn)是比較有效的方式。另外,一旦發(fā)現(xiàn)校驗(yàn)失敗的案例,必須把這些案例作為重要的時(shí)間進(jìn)行核查,以找到原因,糾正以前的校驗(yàn)算法。
八、逆向溝通的實(shí)現(xiàn)條件
1、熟悉業(yè)務(wù)流程的業(yè)務(wù)邏輯分析師
系統(tǒng)分析員熟悉業(yè)務(wù)流程是實(shí)現(xiàn)逆向溝通的前提。在進(jìn)入一個(gè)新的領(lǐng)域以前,系統(tǒng)分析員必須花費(fèi)大量的經(jīng)歷,了解這個(gè)行業(yè)的狀況,行業(yè)的發(fā)展趨勢(shì),行業(yè)內(nèi)企業(yè)的運(yùn)作模式,行業(yè)的目標(biāo)企業(yè)在這個(gè)行業(yè)所處的地位等信息。這些信息會(huì)為以后分析客戶的需求,了解需求的質(zhì)量,分析需求的合理性打下很好的基礎(chǔ)。
2、工作由被動(dòng)轉(zhuǎn)變?yōu)橹鲃?dòng)
如果認(rèn)為提出一個(gè)完整的需求是客戶的責(zé)任,那么一切逆向溝通都會(huì)被認(rèn)為是沒(méi)有必要的。如前所述,雖然客戶對(duì)需求的質(zhì)量負(fù)有最終的責(zé)任,但是,系統(tǒng)分析員的積極溝通,將會(huì)提高需求的質(zhì)量,減少項(xiàng)目擱淺的可能性。另外,有很多責(zé)任是無(wú)法具體定位為客戶的責(zé)任還是項(xiàng)目組的責(zé)任。因此,采用積極的手段,確保項(xiàng)目的成功是系統(tǒng)分析員應(yīng)該采用的態(tài)度。
綜述
良好的需求分析是軟件成功的基礎(chǔ)。以上是作者對(duì)需求分析工作實(shí)踐的一次小結(jié)以及綜合性的思考,是對(duì)需求分析本身所做的一次分析。在此基礎(chǔ)上,作者提出了逆向溝通的設(shè)想,即系統(tǒng)分析員主動(dòng)進(jìn)行溝通,提出指導(dǎo)性意見(jiàn)。當(dāng)軟件融合了客戶和系統(tǒng)分析員雙方智慧,其質(zhì)量將會(huì)進(jìn)一步得以提高。
|