軟件和需求的實(shí)踐
從猴子說(shuō)起
有這樣一個(gè)笑話:一個(gè)旅客走進(jìn)硅谷的一家寵物店,瀏覽展示的寵物。這時(shí),走進(jìn)一個(gè)顧客,對(duì)店主說(shuō):"我要買一只C猴。"店主點(diǎn)了點(diǎn)頭,走到商店一頭的獸籠邊,抓出一只猴,遞給顧客說(shuō):"總共5000美元。"顧客付完款,然后帶走了他的猴子。這位旅客非常驚訝,走到店主跟前說(shuō):"那只猴子也太貴了!"店主說(shuō):"那只猴子能用C編程,非常快,代碼緊湊高效,所以值那么多錢。"這時(shí),旅客看到了籠子中的另一只猴子,它標(biāo)價(jià)10000美元。于是又問(wèn):"那只更貴了!它能做什么?"店主回答:"哦,那是一只C++猴;它會(huì)面向?qū)ο蟮木幊?,?huì)用Visual C++,還懂得一點(diǎn)Java,是非常有用的。"旅客又逛了一會(huì)兒,發(fā)現(xiàn)了第三只猴子,它獨(dú)占一個(gè)籠子,脖子上的標(biāo)價(jià)是50000美元。旅客倒抽一口氣,問(wèn)道:"那只猴子比其他所有猴子加起來(lái)都貴!它究竟能做什么?"店主說(shuō):"我們也不知道它究竟能做什么,不過(guò)它是做項(xiàng)目顧問(wèn)出身的。"雖然這只是一個(gè)笑話,但是有一點(diǎn)是可以肯定的,項(xiàng)目管理是非常重要的,而項(xiàng)目管理的人才又是極為缺乏的。在軟件工業(yè)發(fā)達(dá)的國(guó)家,大家多少都知道點(diǎn)軟件工程規(guī)劃的重要性。在我們身邊的臺(tái)灣、印度、日本,都不乏因?qū)嵤┸浖こ潭晒Φ能浖F(tuán)體,更不用說(shuō)身為軟件大國(guó)的美國(guó),已經(jīng)從較低級(jí)的軟件實(shí)現(xiàn)擺脫出來(lái),進(jìn)入了設(shè)計(jì)和營(yíng)銷的境界。 軟件首先是一種產(chǎn)品(軟件是服務(wù)還是產(chǎn)品的問(wèn)題,向來(lái)未有定論),看看世界上制造業(yè)的發(fā)展歷程,就會(huì)發(fā)現(xiàn)一些很有意思的現(xiàn)象。在本世紀(jì)早些的年代,西方國(guó)家的制造業(yè)經(jīng)歷了規(guī)模生產(chǎn)、提高質(zhì)量等等促進(jìn)生產(chǎn)力提高的過(guò)程??墒怯捎谖鞣絿?guó)家的人力資源成本不斷的攀升,越來(lái)越難降低產(chǎn)品成本,所以西方國(guó)家又不可避免的經(jīng)歷了一次將制造業(yè)外移的過(guò)程(制造業(yè)外移的結(jié)果是成本大幅下降、國(guó)際貿(mào)易頻繁、接受制造業(yè)的國(guó)家發(fā)展了自身的制造業(yè)),而西方國(guó)家只留下?tīng)I(yíng)銷和設(shè)計(jì)的能力,掌握了產(chǎn)品生產(chǎn)的重點(diǎn)。 同樣,IT行業(yè)也在經(jīng)歷這種過(guò)程:美國(guó)將軟件外包給印度,硬件外包給臺(tái)灣。而中國(guó)的硬件也在崛起,但是在軟件行業(yè),中國(guó)和其他國(guó)家的差距還是太大了,且不說(shuō)在軟件行業(yè)中處于核心地位的操作系統(tǒng)、數(shù)據(jù)庫(kù)。即便是應(yīng)用軟件,中國(guó)的軟件水平也實(shí)在低的可憐。在國(guó)外制造業(yè)剛剛遷移進(jìn)中國(guó)的時(shí)候(改革開(kāi)放),中國(guó)的小企業(yè)家同樣沒(méi)有任何管理經(jīng)驗(yàn)、質(zhì)量意識(shí)。但是隨著制造業(yè)的發(fā)展和國(guó)外先進(jìn)思想的進(jìn)入,中國(guó)也誕生了極為出色的全球制造業(yè)巨頭。而中國(guó)的軟件行業(yè)現(xiàn)在正是處于剛剛有了一點(diǎn)管理思想,但還沒(méi)有成熟的地步。我們有理由相信,在不久的將來(lái)中國(guó)也會(huì)誕生出出色的全球性軟件企業(yè)。 憧憬歸憧憬,現(xiàn)實(shí)的問(wèn)題還是必須要考慮的。軟件這個(gè)產(chǎn)品很奇特,軟件企業(yè)的管理思想同樣很奇特。不同于現(xiàn)在企業(yè)推崇的各種管理思想,軟件企業(yè)的管理思想主要是針對(duì)項(xiàng)目的管理,確保項(xiàng)目的成功。
項(xiàng)目和需求笑話里的猴子對(duì)應(yīng)到項(xiàng)目就是指項(xiàng)目管理人員,這里要引入一個(gè)角色的概念(同樣的人可以擔(dān)任多種的角色),通常的項(xiàng)目管理角色包括:項(xiàng)目經(jīng)理、項(xiàng)目復(fù)審員、變更控制經(jīng)理、企業(yè)流程分析師、業(yè)務(wù)模型設(shè)計(jì)師、需求分析員、需求復(fù)審員、系統(tǒng)分析員…在一個(gè)成功的項(xiàng)目里,多種角色職責(zé)明確,分工合作,共同完成項(xiàng)目的設(shè)計(jì)實(shí)施。那么這?quot;猴子"在項(xiàng)目中都做了些什么呢?RUP(Rational Unified Process 瑞理統(tǒng)一過(guò)程,本文采用了眾多的RUP的思想)把一個(gè)項(xiàng)目分成10個(gè)核心工作流程(Core Workflows)和4個(gè)階段(Phases),并以核心工作流程為Y軸,階段為X軸建立起一個(gè)項(xiàng)目視圖。
本文將主要對(duì)先啟階段做介紹。在先啟階段,需求是重中之中,這里指的需求不僅僅是RUP的一個(gè)工作流程(在業(yè)務(wù)建模下),而是比較廣義的概念,包括了RUP的工作流程中的業(yè)務(wù)建模、需求、一部分的分析、測(cè)試計(jì)劃、配置和變更管理。
需求是根本由于忽略需求過(guò)程造成的項(xiàng)目返工是惡性的,大量的項(xiàng)目在需求階段就注定了它的失敗。以下是需求過(guò)程不科學(xué)的典型例子:1.開(kāi)發(fā)人員在用戶處呆了兩三天就埋頭開(kāi)發(fā);2.用戶告訴開(kāi)發(fā)人員我要開(kāi)發(fā)一個(gè)XX系統(tǒng),但是我很忙,你先開(kāi)發(fā)一個(gè)讓我看看;上面的這兩種態(tài)度都意味著項(xiàng)目的不成功,應(yīng)該說(shuō)上面的開(kāi)發(fā)人員和用戶都應(yīng)該對(duì)此負(fù)責(zé)。需求是開(kāi)發(fā)者和用戶交互的一個(gè)過(guò)程,任何一方的不投入都會(huì)導(dǎo)致項(xiàng)目的失敗。當(dāng)然,由于用戶不是專業(yè)人士,開(kāi)發(fā)者有權(quán)利告訴用戶應(yīng)該采用何種態(tài)度來(lái)對(duì)待項(xiàng)目的需求。曾經(jīng)和幾個(gè)朋友聊過(guò)他們公司開(kāi)發(fā)過(guò)的項(xiàng)目,最后得出一個(gè)結(jié)論,所有最成功的項(xiàng)目都有一個(gè)重要的特性:用戶非常的支持。 評(píng)判一個(gè)軟件項(xiàng)目成功的標(biāo)準(zhǔn)是看它是否解決了用戶的問(wèn)題,而用戶的問(wèn)題就是體現(xiàn)為用戶的需求,需求也就順理成章的成為項(xiàng)目的成功標(biāo)準(zhǔn)。而需求階段的一個(gè)不慎都有可能導(dǎo)致軟件實(shí)現(xiàn)階段的大量返工,而需求的不慎不是說(shuō)你小心就可以的,因?yàn)楹芏嘈枨笫请[性的,連用戶都不清楚自己的需求。這時(shí)候就需要一種科學(xué)的方法來(lái)幫助軟件組織實(shí)施需求過(guò)程。 需求是變化的大師說(shuō):"沒(méi)有不變的需求,世上的軟件都改動(dòng)過(guò)3次以上,唯一一個(gè)只改動(dòng)過(guò)兩次的軟件的擁有者已經(jīng)死了,死在去修改需求的路上。"目前眾多的軟件項(xiàng)目有什么樣的問(wèn)題呢?早些時(shí)候上ERP的企業(yè)在企業(yè)發(fā)展的時(shí)候發(fā)現(xiàn)原有的ERP系統(tǒng)需要改進(jìn),可是要改進(jìn)或者是更改現(xiàn)有的ERP系統(tǒng),唯一的方法就是重新開(kāi)發(fā)一個(gè)ERP系統(tǒng)。這對(duì)于企業(yè)來(lái)說(shuō)是筆不小的支出。此時(shí),落后的信息系統(tǒng)就成為制約企業(yè)發(fā)展的重要因素。是什么原因造成了這種情況呢?主要的因素是傳統(tǒng)的系統(tǒng)分析是在假定需求不變的情況下進(jìn)行的,這樣可以把企業(yè)的資源配置到最優(yōu)的程度??墒窃诂F(xiàn)代瞬息萬(wàn)變的社會(huì),一個(gè)企業(yè)固守舊有模式,勢(shì)必會(huì)在競(jìng)爭(zhēng)中處于劣勢(shì)(因此現(xiàn)在也出現(xiàn)了"組件化"的ERP,這是題外話)。既然企業(yè)的需求是變化的、不穩(wěn)定的,那么以變化的需求為基礎(chǔ)建立起來(lái)的企業(yè)信息系統(tǒng)當(dāng)然也就不穩(wěn)定了。這時(shí)候,有個(gè)問(wèn)題就產(chǎn)生了,前面我們已經(jīng)說(shuō)過(guò),需求是項(xiàng)目的根本,既然需求都是不穩(wěn)定的,那么何以建立起穩(wěn)定的企業(yè)信息系統(tǒng)呢?
要回答這個(gè)問(wèn)題,首先要比較面向過(guò)程和面向?qū)ο蟮拈_(kāi)發(fā)方法的差別,傳統(tǒng)的面向過(guò)程的開(kāi)發(fā)方法在前20年大行其道,為中國(guó)企業(yè)的信息化建設(shè)立下了汗馬功勞。之所以稱為面向過(guò)程,是因?yàn)殚_(kāi)發(fā)的焦點(diǎn)集中于過(guò)程,開(kāi)發(fā)者集中于以函數(shù)為核心的過(guò)程,例如前些年很多人試圖編寫一些通用轉(zhuǎn)賬函數(shù)來(lái)滿足銀行的需求。面向過(guò)程的開(kāi)發(fā)語(yǔ)言包括:Cobol、Pascal、C及C的變形語(yǔ)言。面向?qū)ο蟮母拍钍窃诮?0年才進(jìn)入中國(guó)的,而它的思想至今也沒(méi)有真正意義上得到普及。簡(jiǎn)單的說(shuō),面向?qū)ο缶褪敲嫦蚴澜?,世界上的任何事物都是?duì)象,因此面向?qū)ο笫呛茏匀坏乃枷?,是符合我們的思維習(xí)慣的。面向?qū)ο蟮恼Z(yǔ)言包括了Smalltalk、C++、Java,還有bbbbbb Pascal,以及剛剛誕生的C#.需求是不穩(wěn)定的,那么需求之中是不是沒(méi)有穩(wěn)定的東西呢?有的,就是對(duì)象。世界都是由對(duì)象組成的,而對(duì)象都是持久的,例如動(dòng)物、植物已經(jīng)有相當(dāng)長(zhǎng)的時(shí)間。雖然對(duì)象也在變化,動(dòng)物,植物也在不斷的進(jìn)化。但對(duì)象在一個(gè)相當(dāng)長(zhǎng)的時(shí)期內(nèi)都存在,動(dòng)植物的存在時(shí)間肯定比任何一家企業(yè)長(zhǎng)久。面向?qū)ο蟮拈_(kāi)發(fā)方法的精髓就是從企業(yè)的不穩(wěn)定需求中分析出企業(yè)的穩(wěn)定對(duì)象,以企業(yè)對(duì)象為基礎(chǔ)來(lái)組織需求、構(gòu)架系統(tǒng)。這樣得出的系統(tǒng)就會(huì)比傳統(tǒng)的系統(tǒng)要穩(wěn)定得多,因?yàn)槠髽I(yè)的模式一旦變化,只需要將穩(wěn)定的企業(yè)對(duì)象重新組織就行了。這種開(kāi)發(fā)的方法就被稱為OOAD(bbbbbb Orient Analysis & Design 面向?qū)ο蟮姆治龊驮O(shè)計(jì)),而分析出的企業(yè)對(duì)象就被稱為Common Business bbbbbb.需求是什么在RUP中定義了需求工作流程的工作目的:1.客戶和其他涉眾*在系統(tǒng)的工作內(nèi)容方面達(dá)成并保持一致。[NextPage]
2.使系統(tǒng)開(kāi)發(fā)人員能夠更清楚地了解系統(tǒng)需求。
3.定義系統(tǒng)邊界(限定)。
4.為計(jì)劃迭代的技術(shù)內(nèi)容提供基礎(chǔ)。
5.為估算開(kāi)發(fā)系統(tǒng)所需成本和時(shí)間提供基礎(chǔ)。
6.定義系統(tǒng)的用戶界面,重點(diǎn)是用戶的需要和目標(biāo)。
* 涉眾:涉眾是所有會(huì)受到項(xiàng)目結(jié)果重大影響的人。如客戶(或客戶代表) 用戶(或用戶代表) 、投資者 、股東 、生產(chǎn)經(jīng)理 、買方 、設(shè)計(jì)員 、測(cè)試員 、文檔編寫員等。
從上面的目的我們可以大致想到需求過(guò)程中要做些什么事。事實(shí)上,用簡(jiǎn)單的話來(lái)說(shuō)明需求過(guò)程,就是確定系統(tǒng)該做些什么以及該符合什么條件。話雖然簡(jiǎn)單,實(shí)現(xiàn)起來(lái)可沒(méi)有那么容易。所以科學(xué)的需求過(guò)程有一整套完整的理論、工具、方法來(lái)實(shí)現(xiàn)。就像任何企業(yè)要盈利都必須要有業(yè)務(wù)和伴隨業(yè)務(wù)的管理一樣,需求過(guò)程也分為需求分析過(guò)程和需求管理過(guò)程。企業(yè)的業(yè)務(wù)是盈利性的,需求分析過(guò)程在項(xiàng)目中也是產(chǎn)出型的;企業(yè)要保證業(yè)務(wù)的開(kāi)展就必須要有管理,而需求分析過(guò)程也同樣離不開(kāi)需求管理。小企業(yè)沒(méi)有成為體系的管理方法,企業(yè)規(guī)模小的時(shí)候還能夠?qū)Ω?,可是企業(yè)一大,各種問(wèn)題都接踵而來(lái),管理上的不足直接導(dǎo)致了業(yè)務(wù)開(kāi)展的低效性。同樣,需求管理的不足可能可以應(yīng)付小型的軟件項(xiàng)目,可是對(duì)于大型的項(xiàng)目,管理的不足就會(huì)暴露出來(lái),而直接的后果就是項(xiàng)目的失敗。
插句題外話,很多人認(rèn)為需求管理的目的是為了控制需求過(guò)程,這是沒(méi)有錯(cuò),但是在RUP的思想中,更重要的思想是迭代*.迭代的目的是為了發(fā)展,為了進(jìn)化,為了完善。所以RUP中的軟件生命周期是分為多個(gè)迭代周期的。 * 迭代:迭代包括產(chǎn)生產(chǎn)品發(fā)布(穩(wěn)定、可執(zhí)行的產(chǎn)品版本)的全部開(kāi)發(fā)活動(dòng)和要使用該發(fā)布必需的所有其他外圍元素。所以,在某種程度上,開(kāi)發(fā)迭代是一次完整地經(jīng)過(guò)所有工作流程的過(guò)程:(至少包括)需求工作流程、分析設(shè)計(jì)工作流程、實(shí)施工作流程和測(cè)試工作流程。實(shí)質(zhì)上,它類似小型的瀑布式項(xiàng)目。
需求分析過(guò)程主要做的事情無(wú)非就是獲取涉眾對(duì)系統(tǒng)的要求,可是需求是多變的,而你不可能告訴客戶等到他們把一切都固定下來(lái)再開(kāi)發(fā)軟件。所以需求管理過(guò)程做的事情就是保證需求變更的可管理性。
需求的層次《軟件需求》一書(shū)中有對(duì)需求層次的詳細(xì)定義:軟件需求包括三個(gè)不同的層次——業(yè)務(wù)需求、用戶需求和功能需求——也包括非功能需求。業(yè)務(wù)需求(business requirement)反映了組織機(jī)構(gòu)或客戶對(duì)系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求,它們?cè)陧?xiàng)目視圖與范圍文檔中予以說(shuō)明。用戶需求(user requirement) 文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用用例(use case)文檔或方案腳本(scenario)說(shuō)明中予以說(shuō)明。功能需求(functional requirement)定義了開(kāi)發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。所謂特性(feature)是指邏輯上相關(guān)的功能需求的集合,給用戶提供處理能力并滿足業(yè)務(wù)需求。
對(duì)應(yīng)到RUP的工作流程,業(yè)務(wù)需求其實(shí)是RUP的業(yè)務(wù)建模流程(Business Modeling),在這個(gè)流程中,參與者主要是業(yè)務(wù)流程分析員(Business-Process Analyst)。主要的目的是對(duì)企業(yè)目前的業(yè)務(wù)流程進(jìn)行評(píng)估,并根據(jù)要進(jìn)行的項(xiàng)目,確定進(jìn)行何種程度的業(yè)務(wù)建模(你要做一個(gè)ERP項(xiàng)目就意味著你必須優(yōu)化業(yè)務(wù)流程,而上一個(gè)部門級(jí)MIS項(xiàng)目就沒(méi)有必要用牛刀了)。然后你會(huì)得到一個(gè)叫做業(yè)務(wù)前景(Business Vision)的東西,其實(shí)就是項(xiàng)目成功后會(huì)是個(gè)什么樣子,并在涉眾范圍內(nèi)達(dá)成一致。業(yè)務(wù)需求層次需要投入的精力視具體項(xiàng)目而定,而業(yè)務(wù)需求的確定對(duì)之后的用戶需求和功能需求起了限定作用,業(yè)務(wù)需求就是需求過(guò)程的憲法,任何需求不得與之相違背。
到了用戶需求層次上(RUP的需求工作流程),重心就轉(zhuǎn)移到如何收集用戶的需求上,即確定角色和角色的用例,需求分析是很難的,因?yàn)楹芏嘈枨笫请[性的,很難獲取,更難保證需求完整,而需求又是易變的。一般來(lái)說(shuō),在過(guò)去作需求分析的時(shí)候,更多依靠的是閱讀企業(yè)的文件,但是企業(yè)的文件往往有局限性,例如落后于當(dāng)前的業(yè)務(wù),不夠明確,依賴于管理水平的高低,所以后來(lái)獲取需求的方法逐漸傾向組織訪談會(huì)(Interview)。
功能需求依賴于用戶需求,可以說(shuō)是用戶需求在系統(tǒng)上的一個(gè)映射(Mapping)。開(kāi)發(fā)者思考的角度從用戶轉(zhuǎn)移到開(kāi)發(fā)者。在這個(gè)層次上,為用戶做一個(gè)軟件原型是一個(gè)很不錯(cuò)的主意。直到現(xiàn)在,用戶對(duì)軟件還是沒(méi)有一個(gè)實(shí)實(shí)在在的概念,如果你給用戶一個(gè)原型,用戶就會(huì)說(shuō),"哦,我的XX系統(tǒng)原來(lái)就是這樣的。"這就避免了用戶在軟件開(kāi)發(fā)完成后才看到軟件所帶來(lái)的一些風(fēng)險(xiǎn)。是否有必要采用快速原型開(kāi)發(fā)法和原型應(yīng)開(kāi)發(fā)到何種地步取決于具體的項(xiàng)目,很多時(shí)候,用一些非正規(guī)的方法來(lái)生成原型:如果你要開(kāi)發(fā)一個(gè)WEB系統(tǒng),讓你的美工做幾個(gè)頁(yè)面給用戶看看,如果你做一個(gè)C/S系統(tǒng),做一個(gè)界面給用戶,都已經(jīng)足夠用了,甚至你完全可以在黑板上畫一畫你將來(lái)的軟件的面貌都可以。用戶大都是比較友善的,不要把問(wèn)題想的過(guò)于復(fù)雜。 需求的標(biāo)準(zhǔn)討論軟件需求的文章有很多,對(duì)于需求的標(biāo)準(zhǔn)也不盡相同,但是在思想上是相同,都是為了保證項(xiàng)目的順利進(jìn)行。這里我總結(jié)一些比較通用的標(biāo)準(zhǔn),可能并不完善,但你只要能保證做到這幾點(diǎn),你的項(xiàng)目就不容易失?。好鞔_(bbbbb)、完整(Complete)、一致(Consistent)、可測(cè)試(Testable),此外還有其他的概念,如可跟蹤、可修改等等。
明確:目前大多數(shù)的需求分析采用的仍然是自然語(yǔ)言(因?yàn)槿绻捎眯问交Z(yǔ)言的話,和用戶的溝通將成為一個(gè)大問(wèn)題,這意味著客戶在開(kāi)發(fā)軟件之前必須先進(jìn)行形式化語(yǔ)言培訓(xùn),這是不現(xiàn)實(shí)的)。自然語(yǔ)言對(duì)需求分析最大的弊病就是它的二義性。所以我們不得不對(duì)需求分析中采用的語(yǔ)言做某些限制。例如盡量采用主語(yǔ)+動(dòng)作的簡(jiǎn)單表達(dá)方式。說(shuō)白了,需求分析中的描述讓人看上去像是剛學(xué)習(xí)寫作的小孩子就對(duì)了,千萬(wàn)不要采用疑問(wèn)句、修飾這些華麗的表達(dá)方式。
除了語(yǔ)言的二義性之外,注意不要使用行話,就是計(jì)算機(jī)術(shù)語(yǔ)。需求分析最重要的是和用戶溝通,可是用戶多半不是計(jì)算機(jī)的專業(yè)人士,如果在需求分析中使用了行話,就會(huì)造成用戶理解上的困難。
打個(gè)比方,如果你要做一個(gè)銀行的信用卡系統(tǒng),你就可以這樣描述軟件需求:銀行的卡部管理信用卡,每張信用卡只屬于一個(gè)帳戶。信用卡有卡號(hào)、余額。一張信用卡有多筆的交易記錄。
完整:再也沒(méi)有什么比軟件開(kāi)發(fā)接近完成時(shí)才發(fā)現(xiàn)遺漏了一項(xiàng)需求更糟的事情了。需求的完整性是非常非常重要的,想象一下遺漏需求而不得不返工,這簡(jiǎn)直就是惡夢(mèng)??墒橇钊诉z憾的是,需求的遺漏是很經(jīng)常發(fā)生的事情,不僅僅是你的問(wèn)題,更多的問(wèn)題發(fā)生在用戶那里,他們不知道該做些什么。要做到需求的完整性是很艱難的一件事情,它涉及到需求分析過(guò)程的各方各面,貫穿了整個(gè)過(guò)程,從最初的計(jì)劃制定到最后的需求評(píng)審。
一致:一致性也是一個(gè)比較大的概念,很難用幾句話講清楚。簡(jiǎn)單的來(lái)說(shuō),就是用戶需求必須和業(yè)務(wù)需求一致,功能需求必須和用戶需求一致。嚴(yán)格的遵守不同層次間的一致性關(guān)系,就可以保證最后開(kāi)發(fā)出來(lái)的軟件系統(tǒng)不會(huì)偏離最初的實(shí)現(xiàn)目標(biāo)。在實(shí)現(xiàn)過(guò)程中,我們還必須把一致性關(guān)系細(xì)化。比如說(shuō)用戶需求不能超出先前指定的范圍。
可測(cè)試:大家覺(jué)得一個(gè)項(xiàng)目的測(cè)試從什么時(shí)候開(kāi)始呢?有人說(shuō)從編碼完成后開(kāi)始。更清楚一點(diǎn)的說(shuō)是編碼的時(shí)候同時(shí)進(jìn)行單元測(cè)試,編碼完成后進(jìn)行系統(tǒng)測(cè)試。這些都沒(méi)有錯(cuò)。但是實(shí)際上測(cè)試是從需求分析過(guò)程就開(kāi)始了。需求分析是測(cè)試計(jì)劃的輸入和參照。這就要求需求分析是可測(cè)試的。什么是可測(cè)試呢?quot;我們要用新的系統(tǒng)完成報(bào)表自動(dòng)化處理",你覺(jué)得這個(gè)需求是可測(cè)試的嗎?當(dāng)然不是,報(bào)表包括哪些?自動(dòng)化處理的標(biāo)準(zhǔn)是什么?這些在需求中都沒(méi)有說(shuō)明。因此這項(xiàng)需求是無(wú)法測(cè)試的,就是不具有可測(cè)試性。說(shuō)到這里,大家可能就會(huì)明白之前的需求的幾項(xiàng)標(biāo)準(zhǔn)都是為了保證需求的可測(cè)試性的。事實(shí)就是這樣,只有系統(tǒng)的所有需求是可以被測(cè)試的,才能夠保證軟件始終圍繞著用戶的需要,保證軟件系統(tǒng)是成功的。
有這樣一個(gè)笑話:一個(gè)旅客走進(jìn)硅谷的一家寵物店,瀏覽展示的寵物。這時(shí),走進(jìn)一個(gè)顧客,對(duì)店主說(shuō):"我要買一只C猴。"店主點(diǎn)了點(diǎn)頭,走到商店一頭的獸籠邊,抓出一只猴,遞給顧客說(shuō):"總共5000美元。"顧客付完款,然后帶走了他的猴子。這位旅客非常驚訝,走到店主跟前說(shuō):"那只猴子也太貴了!"店主說(shuō):"那只猴子能用C編程,非常快,代碼緊湊高效,所以值那么多錢。"這時(shí),旅客看到了籠子中的另一只猴子,它標(biāo)價(jià)10000美元。于是又問(wèn):"那只更貴了!它能做什么?"店主回答:"哦,那是一只C++猴;它會(huì)面向?qū)ο蟮木幊?,?huì)用Visual C++,還懂得一點(diǎn)Java,是非常有用的。"旅客又逛了一會(huì)兒,發(fā)現(xiàn)了第三只猴子,它獨(dú)占一個(gè)籠子,脖子上的標(biāo)價(jià)是50000美元。旅客倒抽一口氣,問(wèn)道:"那只猴子比其他所有猴子加起來(lái)都貴!它究竟能做什么?"店主說(shuō):"我們也不知道它究竟能做什么,不過(guò)它是做項(xiàng)目顧問(wèn)出身的。"雖然這只是一個(gè)笑話,但是有一點(diǎn)是可以肯定的,項(xiàng)目管理是非常重要的,而項(xiàng)目管理的人才又是極為缺乏的。在軟件工業(yè)發(fā)達(dá)的國(guó)家,大家多少都知道點(diǎn)軟件工程規(guī)劃的重要性。在我們身邊的臺(tái)灣、印度、日本,都不乏因?qū)嵤┸浖こ潭晒Φ能浖F(tuán)體,更不用說(shuō)身為軟件大國(guó)的美國(guó),已經(jīng)從較低級(jí)的軟件實(shí)現(xiàn)擺脫出來(lái),進(jìn)入了設(shè)計(jì)和營(yíng)銷的境界。 軟件首先是一種產(chǎn)品(軟件是服務(wù)還是產(chǎn)品的問(wèn)題,向來(lái)未有定論),看看世界上制造業(yè)的發(fā)展歷程,就會(huì)發(fā)現(xiàn)一些很有意思的現(xiàn)象。在本世紀(jì)早些的年代,西方國(guó)家的制造業(yè)經(jīng)歷了規(guī)模生產(chǎn)、提高質(zhì)量等等促進(jìn)生產(chǎn)力提高的過(guò)程??墒怯捎谖鞣絿?guó)家的人力資源成本不斷的攀升,越來(lái)越難降低產(chǎn)品成本,所以西方國(guó)家又不可避免的經(jīng)歷了一次將制造業(yè)外移的過(guò)程(制造業(yè)外移的結(jié)果是成本大幅下降、國(guó)際貿(mào)易頻繁、接受制造業(yè)的國(guó)家發(fā)展了自身的制造業(yè)),而西方國(guó)家只留下?tīng)I(yíng)銷和設(shè)計(jì)的能力,掌握了產(chǎn)品生產(chǎn)的重點(diǎn)。 同樣,IT行業(yè)也在經(jīng)歷這種過(guò)程:美國(guó)將軟件外包給印度,硬件外包給臺(tái)灣。而中國(guó)的硬件也在崛起,但是在軟件行業(yè),中國(guó)和其他國(guó)家的差距還是太大了,且不說(shuō)在軟件行業(yè)中處于核心地位的操作系統(tǒng)、數(shù)據(jù)庫(kù)。即便是應(yīng)用軟件,中國(guó)的軟件水平也實(shí)在低的可憐。在國(guó)外制造業(yè)剛剛遷移進(jìn)中國(guó)的時(shí)候(改革開(kāi)放),中國(guó)的小企業(yè)家同樣沒(méi)有任何管理經(jīng)驗(yàn)、質(zhì)量意識(shí)。但是隨著制造業(yè)的發(fā)展和國(guó)外先進(jìn)思想的進(jìn)入,中國(guó)也誕生了極為出色的全球制造業(yè)巨頭。而中國(guó)的軟件行業(yè)現(xiàn)在正是處于剛剛有了一點(diǎn)管理思想,但還沒(méi)有成熟的地步。我們有理由相信,在不久的將來(lái)中國(guó)也會(huì)誕生出出色的全球性軟件企業(yè)。 憧憬歸憧憬,現(xiàn)實(shí)的問(wèn)題還是必須要考慮的。軟件這個(gè)產(chǎn)品很奇特,軟件企業(yè)的管理思想同樣很奇特。不同于現(xiàn)在企業(yè)推崇的各種管理思想,軟件企業(yè)的管理思想主要是針對(duì)項(xiàng)目的管理,確保項(xiàng)目的成功。
項(xiàng)目和需求笑話里的猴子對(duì)應(yīng)到項(xiàng)目就是指項(xiàng)目管理人員,這里要引入一個(gè)角色的概念(同樣的人可以擔(dān)任多種的角色),通常的項(xiàng)目管理角色包括:項(xiàng)目經(jīng)理、項(xiàng)目復(fù)審員、變更控制經(jīng)理、企業(yè)流程分析師、業(yè)務(wù)模型設(shè)計(jì)師、需求分析員、需求復(fù)審員、系統(tǒng)分析員…在一個(gè)成功的項(xiàng)目里,多種角色職責(zé)明確,分工合作,共同完成項(xiàng)目的設(shè)計(jì)實(shí)施。那么這?quot;猴子"在項(xiàng)目中都做了些什么呢?RUP(Rational Unified Process 瑞理統(tǒng)一過(guò)程,本文采用了眾多的RUP的思想)把一個(gè)項(xiàng)目分成10個(gè)核心工作流程(Core Workflows)和4個(gè)階段(Phases),并以核心工作流程為Y軸,階段為X軸建立起一個(gè)項(xiàng)目視圖。
本文將主要對(duì)先啟階段做介紹。在先啟階段,需求是重中之中,這里指的需求不僅僅是RUP的一個(gè)工作流程(在業(yè)務(wù)建模下),而是比較廣義的概念,包括了RUP的工作流程中的業(yè)務(wù)建模、需求、一部分的分析、測(cè)試計(jì)劃、配置和變更管理。
需求是根本由于忽略需求過(guò)程造成的項(xiàng)目返工是惡性的,大量的項(xiàng)目在需求階段就注定了它的失敗。以下是需求過(guò)程不科學(xué)的典型例子:1.開(kāi)發(fā)人員在用戶處呆了兩三天就埋頭開(kāi)發(fā);2.用戶告訴開(kāi)發(fā)人員我要開(kāi)發(fā)一個(gè)XX系統(tǒng),但是我很忙,你先開(kāi)發(fā)一個(gè)讓我看看;上面的這兩種態(tài)度都意味著項(xiàng)目的不成功,應(yīng)該說(shuō)上面的開(kāi)發(fā)人員和用戶都應(yīng)該對(duì)此負(fù)責(zé)。需求是開(kāi)發(fā)者和用戶交互的一個(gè)過(guò)程,任何一方的不投入都會(huì)導(dǎo)致項(xiàng)目的失敗。當(dāng)然,由于用戶不是專業(yè)人士,開(kāi)發(fā)者有權(quán)利告訴用戶應(yīng)該采用何種態(tài)度來(lái)對(duì)待項(xiàng)目的需求。曾經(jīng)和幾個(gè)朋友聊過(guò)他們公司開(kāi)發(fā)過(guò)的項(xiàng)目,最后得出一個(gè)結(jié)論,所有最成功的項(xiàng)目都有一個(gè)重要的特性:用戶非常的支持。 評(píng)判一個(gè)軟件項(xiàng)目成功的標(biāo)準(zhǔn)是看它是否解決了用戶的問(wèn)題,而用戶的問(wèn)題就是體現(xiàn)為用戶的需求,需求也就順理成章的成為項(xiàng)目的成功標(biāo)準(zhǔn)。而需求階段的一個(gè)不慎都有可能導(dǎo)致軟件實(shí)現(xiàn)階段的大量返工,而需求的不慎不是說(shuō)你小心就可以的,因?yàn)楹芏嘈枨笫请[性的,連用戶都不清楚自己的需求。這時(shí)候就需要一種科學(xué)的方法來(lái)幫助軟件組織實(shí)施需求過(guò)程。 需求是變化的大師說(shuō):"沒(méi)有不變的需求,世上的軟件都改動(dòng)過(guò)3次以上,唯一一個(gè)只改動(dòng)過(guò)兩次的軟件的擁有者已經(jīng)死了,死在去修改需求的路上。"目前眾多的軟件項(xiàng)目有什么樣的問(wèn)題呢?早些時(shí)候上ERP的企業(yè)在企業(yè)發(fā)展的時(shí)候發(fā)現(xiàn)原有的ERP系統(tǒng)需要改進(jìn),可是要改進(jìn)或者是更改現(xiàn)有的ERP系統(tǒng),唯一的方法就是重新開(kāi)發(fā)一個(gè)ERP系統(tǒng)。這對(duì)于企業(yè)來(lái)說(shuō)是筆不小的支出。此時(shí),落后的信息系統(tǒng)就成為制約企業(yè)發(fā)展的重要因素。是什么原因造成了這種情況呢?主要的因素是傳統(tǒng)的系統(tǒng)分析是在假定需求不變的情況下進(jìn)行的,這樣可以把企業(yè)的資源配置到最優(yōu)的程度??墒窃诂F(xiàn)代瞬息萬(wàn)變的社會(huì),一個(gè)企業(yè)固守舊有模式,勢(shì)必會(huì)在競(jìng)爭(zhēng)中處于劣勢(shì)(因此現(xiàn)在也出現(xiàn)了"組件化"的ERP,這是題外話)。既然企業(yè)的需求是變化的、不穩(wěn)定的,那么以變化的需求為基礎(chǔ)建立起來(lái)的企業(yè)信息系統(tǒng)當(dāng)然也就不穩(wěn)定了。這時(shí)候,有個(gè)問(wèn)題就產(chǎn)生了,前面我們已經(jīng)說(shuō)過(guò),需求是項(xiàng)目的根本,既然需求都是不穩(wěn)定的,那么何以建立起穩(wěn)定的企業(yè)信息系統(tǒng)呢?
要回答這個(gè)問(wèn)題,首先要比較面向過(guò)程和面向?qū)ο蟮拈_(kāi)發(fā)方法的差別,傳統(tǒng)的面向過(guò)程的開(kāi)發(fā)方法在前20年大行其道,為中國(guó)企業(yè)的信息化建設(shè)立下了汗馬功勞。之所以稱為面向過(guò)程,是因?yàn)殚_(kāi)發(fā)的焦點(diǎn)集中于過(guò)程,開(kāi)發(fā)者集中于以函數(shù)為核心的過(guò)程,例如前些年很多人試圖編寫一些通用轉(zhuǎn)賬函數(shù)來(lái)滿足銀行的需求。面向過(guò)程的開(kāi)發(fā)語(yǔ)言包括:Cobol、Pascal、C及C的變形語(yǔ)言。面向?qū)ο蟮母拍钍窃诮?0年才進(jìn)入中國(guó)的,而它的思想至今也沒(méi)有真正意義上得到普及。簡(jiǎn)單的說(shuō),面向?qū)ο缶褪敲嫦蚴澜?,世界上的任何事物都是?duì)象,因此面向?qū)ο笫呛茏匀坏乃枷?,是符合我們的思維習(xí)慣的。面向?qū)ο蟮恼Z(yǔ)言包括了Smalltalk、C++、Java,還有bbbbbb Pascal,以及剛剛誕生的C#.需求是不穩(wěn)定的,那么需求之中是不是沒(méi)有穩(wěn)定的東西呢?有的,就是對(duì)象。世界都是由對(duì)象組成的,而對(duì)象都是持久的,例如動(dòng)物、植物已經(jīng)有相當(dāng)長(zhǎng)的時(shí)間。雖然對(duì)象也在變化,動(dòng)物,植物也在不斷的進(jìn)化。但對(duì)象在一個(gè)相當(dāng)長(zhǎng)的時(shí)期內(nèi)都存在,動(dòng)植物的存在時(shí)間肯定比任何一家企業(yè)長(zhǎng)久。面向?qū)ο蟮拈_(kāi)發(fā)方法的精髓就是從企業(yè)的不穩(wěn)定需求中分析出企業(yè)的穩(wěn)定對(duì)象,以企業(yè)對(duì)象為基礎(chǔ)來(lái)組織需求、構(gòu)架系統(tǒng)。這樣得出的系統(tǒng)就會(huì)比傳統(tǒng)的系統(tǒng)要穩(wěn)定得多,因?yàn)槠髽I(yè)的模式一旦變化,只需要將穩(wěn)定的企業(yè)對(duì)象重新組織就行了。這種開(kāi)發(fā)的方法就被稱為OOAD(bbbbbb Orient Analysis & Design 面向?qū)ο蟮姆治龊驮O(shè)計(jì)),而分析出的企業(yè)對(duì)象就被稱為Common Business bbbbbb.需求是什么在RUP中定義了需求工作流程的工作目的:1.客戶和其他涉眾*在系統(tǒng)的工作內(nèi)容方面達(dá)成并保持一致。[NextPage]
2.使系統(tǒng)開(kāi)發(fā)人員能夠更清楚地了解系統(tǒng)需求。
3.定義系統(tǒng)邊界(限定)。
4.為計(jì)劃迭代的技術(shù)內(nèi)容提供基礎(chǔ)。
5.為估算開(kāi)發(fā)系統(tǒng)所需成本和時(shí)間提供基礎(chǔ)。
6.定義系統(tǒng)的用戶界面,重點(diǎn)是用戶的需要和目標(biāo)。
* 涉眾:涉眾是所有會(huì)受到項(xiàng)目結(jié)果重大影響的人。如客戶(或客戶代表) 用戶(或用戶代表) 、投資者 、股東 、生產(chǎn)經(jīng)理 、買方 、設(shè)計(jì)員 、測(cè)試員 、文檔編寫員等。
從上面的目的我們可以大致想到需求過(guò)程中要做些什么事。事實(shí)上,用簡(jiǎn)單的話來(lái)說(shuō)明需求過(guò)程,就是確定系統(tǒng)該做些什么以及該符合什么條件。話雖然簡(jiǎn)單,實(shí)現(xiàn)起來(lái)可沒(méi)有那么容易。所以科學(xué)的需求過(guò)程有一整套完整的理論、工具、方法來(lái)實(shí)現(xiàn)。就像任何企業(yè)要盈利都必須要有業(yè)務(wù)和伴隨業(yè)務(wù)的管理一樣,需求過(guò)程也分為需求分析過(guò)程和需求管理過(guò)程。企業(yè)的業(yè)務(wù)是盈利性的,需求分析過(guò)程在項(xiàng)目中也是產(chǎn)出型的;企業(yè)要保證業(yè)務(wù)的開(kāi)展就必須要有管理,而需求分析過(guò)程也同樣離不開(kāi)需求管理。小企業(yè)沒(méi)有成為體系的管理方法,企業(yè)規(guī)模小的時(shí)候還能夠?qū)Ω?,可是企業(yè)一大,各種問(wèn)題都接踵而來(lái),管理上的不足直接導(dǎo)致了業(yè)務(wù)開(kāi)展的低效性。同樣,需求管理的不足可能可以應(yīng)付小型的軟件項(xiàng)目,可是對(duì)于大型的項(xiàng)目,管理的不足就會(huì)暴露出來(lái),而直接的后果就是項(xiàng)目的失敗。
插句題外話,很多人認(rèn)為需求管理的目的是為了控制需求過(guò)程,這是沒(méi)有錯(cuò),但是在RUP的思想中,更重要的思想是迭代*.迭代的目的是為了發(fā)展,為了進(jìn)化,為了完善。所以RUP中的軟件生命周期是分為多個(gè)迭代周期的。 * 迭代:迭代包括產(chǎn)生產(chǎn)品發(fā)布(穩(wěn)定、可執(zhí)行的產(chǎn)品版本)的全部開(kāi)發(fā)活動(dòng)和要使用該發(fā)布必需的所有其他外圍元素。所以,在某種程度上,開(kāi)發(fā)迭代是一次完整地經(jīng)過(guò)所有工作流程的過(guò)程:(至少包括)需求工作流程、分析設(shè)計(jì)工作流程、實(shí)施工作流程和測(cè)試工作流程。實(shí)質(zhì)上,它類似小型的瀑布式項(xiàng)目。
需求分析過(guò)程主要做的事情無(wú)非就是獲取涉眾對(duì)系統(tǒng)的要求,可是需求是多變的,而你不可能告訴客戶等到他們把一切都固定下來(lái)再開(kāi)發(fā)軟件。所以需求管理過(guò)程做的事情就是保證需求變更的可管理性。
需求的層次《軟件需求》一書(shū)中有對(duì)需求層次的詳細(xì)定義:軟件需求包括三個(gè)不同的層次——業(yè)務(wù)需求、用戶需求和功能需求——也包括非功能需求。業(yè)務(wù)需求(business requirement)反映了組織機(jī)構(gòu)或客戶對(duì)系統(tǒng)、產(chǎn)品高層次的目標(biāo)要求,它們?cè)陧?xiàng)目視圖與范圍文檔中予以說(shuō)明。用戶需求(user requirement) 文檔描述了用戶使用產(chǎn)品必須要完成的任務(wù),這在使用用例(use case)文檔或方案腳本(scenario)說(shuō)明中予以說(shuō)明。功能需求(functional requirement)定義了開(kāi)發(fā)人員必須實(shí)現(xiàn)的軟件功能,使得用戶能完成他們的任務(wù),從而滿足了業(yè)務(wù)需求。所謂特性(feature)是指邏輯上相關(guān)的功能需求的集合,給用戶提供處理能力并滿足業(yè)務(wù)需求。
對(duì)應(yīng)到RUP的工作流程,業(yè)務(wù)需求其實(shí)是RUP的業(yè)務(wù)建模流程(Business Modeling),在這個(gè)流程中,參與者主要是業(yè)務(wù)流程分析員(Business-Process Analyst)。主要的目的是對(duì)企業(yè)目前的業(yè)務(wù)流程進(jìn)行評(píng)估,并根據(jù)要進(jìn)行的項(xiàng)目,確定進(jìn)行何種程度的業(yè)務(wù)建模(你要做一個(gè)ERP項(xiàng)目就意味著你必須優(yōu)化業(yè)務(wù)流程,而上一個(gè)部門級(jí)MIS項(xiàng)目就沒(méi)有必要用牛刀了)。然后你會(huì)得到一個(gè)叫做業(yè)務(wù)前景(Business Vision)的東西,其實(shí)就是項(xiàng)目成功后會(huì)是個(gè)什么樣子,并在涉眾范圍內(nèi)達(dá)成一致。業(yè)務(wù)需求層次需要投入的精力視具體項(xiàng)目而定,而業(yè)務(wù)需求的確定對(duì)之后的用戶需求和功能需求起了限定作用,業(yè)務(wù)需求就是需求過(guò)程的憲法,任何需求不得與之相違背。
到了用戶需求層次上(RUP的需求工作流程),重心就轉(zhuǎn)移到如何收集用戶的需求上,即確定角色和角色的用例,需求分析是很難的,因?yàn)楹芏嘈枨笫请[性的,很難獲取,更難保證需求完整,而需求又是易變的。一般來(lái)說(shuō),在過(guò)去作需求分析的時(shí)候,更多依靠的是閱讀企業(yè)的文件,但是企業(yè)的文件往往有局限性,例如落后于當(dāng)前的業(yè)務(wù),不夠明確,依賴于管理水平的高低,所以后來(lái)獲取需求的方法逐漸傾向組織訪談會(huì)(Interview)。
功能需求依賴于用戶需求,可以說(shuō)是用戶需求在系統(tǒng)上的一個(gè)映射(Mapping)。開(kāi)發(fā)者思考的角度從用戶轉(zhuǎn)移到開(kāi)發(fā)者。在這個(gè)層次上,為用戶做一個(gè)軟件原型是一個(gè)很不錯(cuò)的主意。直到現(xiàn)在,用戶對(duì)軟件還是沒(méi)有一個(gè)實(shí)實(shí)在在的概念,如果你給用戶一個(gè)原型,用戶就會(huì)說(shuō),"哦,我的XX系統(tǒng)原來(lái)就是這樣的。"這就避免了用戶在軟件開(kāi)發(fā)完成后才看到軟件所帶來(lái)的一些風(fēng)險(xiǎn)。是否有必要采用快速原型開(kāi)發(fā)法和原型應(yīng)開(kāi)發(fā)到何種地步取決于具體的項(xiàng)目,很多時(shí)候,用一些非正規(guī)的方法來(lái)生成原型:如果你要開(kāi)發(fā)一個(gè)WEB系統(tǒng),讓你的美工做幾個(gè)頁(yè)面給用戶看看,如果你做一個(gè)C/S系統(tǒng),做一個(gè)界面給用戶,都已經(jīng)足夠用了,甚至你完全可以在黑板上畫一畫你將來(lái)的軟件的面貌都可以。用戶大都是比較友善的,不要把問(wèn)題想的過(guò)于復(fù)雜。 需求的標(biāo)準(zhǔn)討論軟件需求的文章有很多,對(duì)于需求的標(biāo)準(zhǔn)也不盡相同,但是在思想上是相同,都是為了保證項(xiàng)目的順利進(jìn)行。這里我總結(jié)一些比較通用的標(biāo)準(zhǔn),可能并不完善,但你只要能保證做到這幾點(diǎn),你的項(xiàng)目就不容易失?。好鞔_(bbbbb)、完整(Complete)、一致(Consistent)、可測(cè)試(Testable),此外還有其他的概念,如可跟蹤、可修改等等。
明確:目前大多數(shù)的需求分析采用的仍然是自然語(yǔ)言(因?yàn)槿绻捎眯问交Z(yǔ)言的話,和用戶的溝通將成為一個(gè)大問(wèn)題,這意味著客戶在開(kāi)發(fā)軟件之前必須先進(jìn)行形式化語(yǔ)言培訓(xùn),這是不現(xiàn)實(shí)的)。自然語(yǔ)言對(duì)需求分析最大的弊病就是它的二義性。所以我們不得不對(duì)需求分析中采用的語(yǔ)言做某些限制。例如盡量采用主語(yǔ)+動(dòng)作的簡(jiǎn)單表達(dá)方式。說(shuō)白了,需求分析中的描述讓人看上去像是剛學(xué)習(xí)寫作的小孩子就對(duì)了,千萬(wàn)不要采用疑問(wèn)句、修飾這些華麗的表達(dá)方式。
除了語(yǔ)言的二義性之外,注意不要使用行話,就是計(jì)算機(jī)術(shù)語(yǔ)。需求分析最重要的是和用戶溝通,可是用戶多半不是計(jì)算機(jī)的專業(yè)人士,如果在需求分析中使用了行話,就會(huì)造成用戶理解上的困難。
打個(gè)比方,如果你要做一個(gè)銀行的信用卡系統(tǒng),你就可以這樣描述軟件需求:銀行的卡部管理信用卡,每張信用卡只屬于一個(gè)帳戶。信用卡有卡號(hào)、余額。一張信用卡有多筆的交易記錄。
完整:再也沒(méi)有什么比軟件開(kāi)發(fā)接近完成時(shí)才發(fā)現(xiàn)遺漏了一項(xiàng)需求更糟的事情了。需求的完整性是非常非常重要的,想象一下遺漏需求而不得不返工,這簡(jiǎn)直就是惡夢(mèng)??墒橇钊诉z憾的是,需求的遺漏是很經(jīng)常發(fā)生的事情,不僅僅是你的問(wèn)題,更多的問(wèn)題發(fā)生在用戶那里,他們不知道該做些什么。要做到需求的完整性是很艱難的一件事情,它涉及到需求分析過(guò)程的各方各面,貫穿了整個(gè)過(guò)程,從最初的計(jì)劃制定到最后的需求評(píng)審。
一致:一致性也是一個(gè)比較大的概念,很難用幾句話講清楚。簡(jiǎn)單的來(lái)說(shuō),就是用戶需求必須和業(yè)務(wù)需求一致,功能需求必須和用戶需求一致。嚴(yán)格的遵守不同層次間的一致性關(guān)系,就可以保證最后開(kāi)發(fā)出來(lái)的軟件系統(tǒng)不會(huì)偏離最初的實(shí)現(xiàn)目標(biāo)。在實(shí)現(xiàn)過(guò)程中,我們還必須把一致性關(guān)系細(xì)化。比如說(shuō)用戶需求不能超出先前指定的范圍。
可測(cè)試:大家覺(jué)得一個(gè)項(xiàng)目的測(cè)試從什么時(shí)候開(kāi)始呢?有人說(shuō)從編碼完成后開(kāi)始。更清楚一點(diǎn)的說(shuō)是編碼的時(shí)候同時(shí)進(jìn)行單元測(cè)試,編碼完成后進(jìn)行系統(tǒng)測(cè)試。這些都沒(méi)有錯(cuò)。但是實(shí)際上測(cè)試是從需求分析過(guò)程就開(kāi)始了。需求分析是測(cè)試計(jì)劃的輸入和參照。這就要求需求分析是可測(cè)試的。什么是可測(cè)試呢?quot;我們要用新的系統(tǒng)完成報(bào)表自動(dòng)化處理",你覺(jué)得這個(gè)需求是可測(cè)試的嗎?當(dāng)然不是,報(bào)表包括哪些?自動(dòng)化處理的標(biāo)準(zhǔn)是什么?這些在需求中都沒(méi)有說(shuō)明。因此這項(xiàng)需求是無(wú)法測(cè)試的,就是不具有可測(cè)試性。說(shuō)到這里,大家可能就會(huì)明白之前的需求的幾項(xiàng)標(biāo)準(zhǔn)都是為了保證需求的可測(cè)試性的。事實(shí)就是這樣,只有系統(tǒng)的所有需求是可以被測(cè)試的,才能夠保證軟件始終圍繞著用戶的需要,保證軟件系統(tǒng)是成功的。
本文標(biāo)簽:軟件和需求的實(shí)踐
* 由于無(wú)法獲得聯(lián)系方式等原因,本網(wǎng)使用的文字及圖片的作品報(bào)酬未能及時(shí)支付,在此深表歉意,請(qǐng)《軟件和需求的實(shí)踐》相關(guān)權(quán)利人與機(jī)電之家網(wǎng)取得聯(lián)系。










