軟件和需求的實踐(2)

字號:

煮雞蛋的啟示
    有個英國人學(xué)煮雞蛋,開始,他把雞蛋放到開水里煮時總會炸裂。他為此想了各種方法,并找到了一個解決方案:在雞蛋上打個孔。但在雞蛋上打孔帶來了另一個問題:孔打小了,雞蛋還會裂;孔打大了,蛋清會在它凝固以前流出來。于是,這個英國人給一批雞蛋分別打了各種不同孔徑的洞,并記錄下每個雞蛋孔徑的大小。通過這一方法,他找到了一個最合適的大小──既避免了炸裂,又保證蛋清不會流出來。這時,雖然煮雞蛋炸裂的問題解決了,但這個英國人仍然不知道煮多長時間才能把雞蛋煮熟。為了解決這個問題,他又開始嘗試煮不同時間的結(jié)果,并從中找出的時間長度。最后,他終于找到了一個放之四海而皆準(zhǔn)的煮雞蛋的方法。這個案例對很多中國人來說是個可笑的例子。因為聰明的中國人早就知道把雞蛋放在水中與之一起加熱至雞蛋浮起來就可以了。 從煮雞蛋這樣一個小小的事件上,中國人和英國人體現(xiàn)了兩種完全不同的思維習(xí)慣──中國人憑借他的聰明直奔結(jié)果,而英國人卻仔細(xì)地把每一個過程細(xì)化到最簡單,然后按部就班地執(zhí)行。(管理軟件的發(fā)展之路 洪奇)
    聰明的中國人雖然擁有四大發(fā)明,但是對于現(xiàn)代的管理思想,中國人一直沒有領(lǐng)會到真諦所在。無論是哪一種的管理方法,過程能力都是特別重要的,雖然生產(chǎn)一件產(chǎn)品的相關(guān)人員有千千萬萬,但是生產(chǎn)出來的產(chǎn)品卻只有一種。這種能力并不是從天上掉下來的,是通過制定極為詳盡的生產(chǎn)過程規(guī)定得到的。在中國接受了ISO的思想之后,這種能力也在國內(nèi)的制造業(yè)中逐漸體現(xiàn)出來。但是在軟件行業(yè)中,擁有這種過程能力的軟件組織仍然是少的可憐,大多數(shù)的軟件組織奉行的還是一種在八九十年代的個人英雄主義,開發(fā)軟件單靠個人的力量,能力強(qiáng)的程序員能夠成功的完成軟件,能力差的則失敗。大多數(shù)的軟件組織中,少數(shù)人掌握著代碼,他們就是一切,如果他們因為私人原因離開所在的組織,手上的代碼則是他們的資本,原有的組織將受到沉重的打擊。 中國人熱衷于結(jié)果,2001年的熱點在CMM上,現(xiàn)在還很難說CMM中是不是有一定的泡沫存在,但是可以肯定的一點是,CMM之進(jìn)入中國軟件組織為中國軟件工業(yè)的發(fā)展開創(chuàng)了一個新的時代。中國的軟件工業(yè)將逐漸擺脫原來的作坊式開發(fā),進(jìn)入軟件工業(yè)時代。之所以用軟件工業(yè)而不用軟件產(chǎn)業(yè)的原因是希望軟件產(chǎn)品能夠像工業(yè)革命那樣進(jìn)入大規(guī)模生產(chǎn),降低價格的時代。
    可惜,軟件畢竟不同于工業(yè)產(chǎn)品,在工業(yè)化生產(chǎn)的過程中,質(zhì)量檢測的一個方法是在產(chǎn)品出廠前設(shè)置質(zhì)量檢測,通過質(zhì)量檢測的出廠,否則回收。這種方法無法適用于軟件。后來,質(zhì)量檢測逐漸傾向于生產(chǎn)過程,在過程中監(jiān)測產(chǎn)品質(zhì)量。這種方法比起前一種方法進(jìn)步了很多,但是它需要對生產(chǎn)全過程進(jìn)行追蹤。這種方法的思想正是軟件過程的質(zhì)量保證的精髓所在。
    在《軟件工程》一書中,作者把軟件工程分成三層,最底層是軟件過程,上一層是軟件方法,層是CASE工具。軟件過程中充滿了各種各樣的方法論,從需求到最后的維護(hù)。要在自己軟件組織中應(yīng)用所有的方法是不可能的。所以你如果看完軟件工程的文章后有一種要在明天就實現(xiàn)現(xiàn)代化的沖動的話,打消那種念頭,從零做起。
    需求過程
    需求過程是軟件過程的一個很重要的部分。軟件項目中百分之四十至百分之六十的問題都是在需求分析階段埋下的"禍根"(Leffingwell 1997)。我在自己的身邊也做過一次小范圍的調(diào)查,結(jié)果顯示成功的項目都離不開成功的需求(一個重要的標(biāo)志是用戶的支持)。
    需求過程,也有叫做需求工程和需求階段的,包括了需求開發(fā)和需求管理,他們所涉及到的具體工作流如圖所示:
    需求分析的這個過程,我們可以稱它為需求工程,也有叫做需求過程和需求階段的。需求工程包括了需求開發(fā)和需求管理,他們所涉及到的具體工作流如上圖標(biāo)明的那樣。
    需求過程和CMM
    軟件工程協(xié)會 (SEI Software Engineering Institude) 的能力成熟度模型 (CMM Capability Maturity Model) 提供了一種的軟件過程成熟度基準(zhǔn)。CMM 已經(jīng)成為了許多領(lǐng)域內(nèi)的流行工具,用于評估一個組織的軟件過程的成熟程度。(更詳細(xì)的定義和說明請參看《CMM白皮書》)。
    CMM中和需求有關(guān)系的是第2級(可重復(fù)級)中對需求管理的要求和第3級(已定義級)中對需求跟蹤能力的要求。必須指出的是,CMM只是規(guī)定成熟的軟件組織應(yīng)該達(dá)到的關(guān)鍵能力,是一種改進(jìn)軟件過程的策略,對具體的方法并沒有做限制規(guī)定。所以CMM中沒有涉及到需求開發(fā)的內(nèi)容。
    需求過程和軟件生命周期模型
    任何軟件都是從最模糊的概念開始的:為某個公司設(shè)計辦公的流程處理;設(shè)計一種商務(wù)信函打印系統(tǒng)并投放市場。這個概念是不清晰的,但卻是層的業(yè)務(wù)需求的原型。這個概念都會伴隨著一個目的,例如在一個"銀行押匯系統(tǒng)" 的目的是提高工作的效率。這個目的將會成為系統(tǒng)的核心思想,系統(tǒng)成敗的評判標(biāo)準(zhǔn)。99年政府部門上了大量的OA系統(tǒng),學(xué)過一點Lotus Notes的人都發(fā)了財(IBM更不用說了),但是更普遍的情況是,許多的政府部門原有的處理模式并沒有變化,反而又加上了自動化處理的一套流程。提高工作效率的初衷卻導(dǎo)致了完全不同的結(jié)果。這樣的軟件究竟是不是成功的呢?