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

