作為一名從事應(yīng)用軟件開發(fā)很多年頭的IT老兵,從個人編程、開發(fā)小軟件,到組織開發(fā)大大小小的各類應(yīng)用系統(tǒng),從最傳統(tǒng)的瀑布模型開始入門,在實踐中又接觸、使用過不少的軟件工程模型、開發(fā)過程方法、組織級成熟度模型、管理體系等等,近幾年敏捷開發(fā)又成為熱門??各種各樣的新鮮名詞和套路也是應(yīng)接不暇?! ?/span>
面對層出不窮的新生事物,回顧自己多年來的開發(fā)經(jīng)歷,發(fā)現(xiàn)很多東西確實在不斷變化著,而有些東西其實并沒有發(fā)生根本的改變,而且各自有各自的適用場合。現(xiàn)將有關(guān)的觀點歸納如下,拋磚引玉,與大家探討:
1、不變的是工程過程,變化的是管理過程
在所有的軟件開發(fā)活動中,各種活動可以被歸為兩大類,一類是工程類活動,一類是管理類活動。這是借用了美國項目管理學(xué)會(PMI)在PMBOK中的概念。工程類活動是指那些直接制造產(chǎn)品的活動,這類活動是受到產(chǎn)品生產(chǎn)工藝約束的,是產(chǎn)品制造中的“硬邏輯”,最典型的就是蓋樓必須先打地基。管理類活動則是指其他那些輔助性活動,是用來保障工程類活動高效實施的,可以根據(jù)各方面因素的實際條件而靈活掌握的,是生產(chǎn)過程當(dāng)中的“軟邏輯”,比如施工工期和資源如何安排、是三人干兩個月還是兩人干三個月等等。
按照類似的概念,在軟件開發(fā)當(dāng)中也存在著這樣兩種不同的活動——具有硬邏輯特征的軟件工程活動和具有軟邏輯特征的軟件開發(fā)管理活動。仔細(xì)推敲就會發(fā)現(xiàn),雖然現(xiàn)在各種開發(fā)方法名目繁多,但其核心的工程過程并沒有發(fā)生變化——就是最基本的瀑布式軟件工程過程:
2、需求、設(shè)計、編碼、測試、發(fā)布
無論是那種開發(fā)方法,無論開發(fā)的是大型軟件還是一個小功能,無論開發(fā)項目組人數(shù)多與少,上述這個過程都是始終有效的,這個就是應(yīng)用軟件開發(fā)中的“硬邏輯”。但是,圍繞這樣一個工程過程,在具體實施過程的管理方式上,卻可以是千差萬別:
l按照上述這個工程過程,一步一個腳印的穩(wěn)步前行,就是常說的“瀑布式”方法(瀑布式工程過程并不等同于瀑布式管理過程,不能混為一談,必須加以區(qū)分);
l先根據(jù)粗略的需求快速實現(xiàn)一個原型系統(tǒng),然后在此基礎(chǔ)上進(jìn)一步導(dǎo)出正式的需求,再嚴(yán)格按照上述的工程過程實現(xiàn),就是所謂的“原型法”;
l將整體需求分成許多個部分,反復(fù)使用上述工程過程,每一次只實現(xiàn)一部分目標(biāo)功能,使之能夠快速投入使用,從而形成“快速迭代”;
l在互聯(lián)網(wǎng)速度的推動下,進(jìn)一步細(xì)分需求,并極力促成技術(shù)、業(yè)務(wù)等相關(guān)人員的密切溝通,進(jìn)一步加速迭代,縮短開發(fā)周期,大幅提升應(yīng)用開發(fā)的響應(yīng)速度,這就是“敏捷”;
因此,縱觀這些年來軟件開發(fā)方法的變化,軟件產(chǎn)品的制造工藝并沒有發(fā)生根本性改變,更多的變化則是在制造過程的組織管理方式上不斷尋求新的出路,以適應(yīng)不斷提高的快速響應(yīng)的要求。
既然不同的是管理方式,那么不同的開發(fā)管理模式下,開發(fā)過程的組織方式自然也就應(yīng)該有所不同。如果采用傳統(tǒng)的瀑布式開發(fā)管理過程,那么軟件工廠的管理方式可能較為合適,而如果采用敏捷方法,那么軟件工作室的組織方式也許更適應(yīng)(請參見《軟件工廠、軟件作坊、軟件工作室》一文)。
這里順便說一下對CMMI的看法。作為一個組織級的、系統(tǒng)化的模型,是許多專家的經(jīng)驗教訓(xùn)的結(jié)晶,具有非常高的參加價值。在這個模型中試圖把各方面相關(guān)工作的實質(zhì)、必須的關(guān)鍵點都識別出來并建立起有機(jī)的聯(lián)系。但是它并沒有給出在某個實際環(huán)境中的具體操