引言
大多數(shù)軟件項目都是失敗的。事實上,Standish group 的報告顯示 80% 多的項目是不成功的,原因是超出了預(yù)算、未能按時完成、遺漏功能或者因為一個項目中同時出現(xiàn)了這些問題中的其中幾個。此外,30% 的軟件項目執(zhí)行得很糟糕以至于半途而廢。根據(jù)我們的經(jīng)驗,使用現(xiàn)代技術(shù)(例如 Java、J2EE、XML 以及 Web 服務(wù))的軟件項目都逃不出這個規(guī)則。
本文概述了軟件開發(fā)項目的佳實踐。一些業(yè)界泰斗,如 Scott Ambler、Martin Fowler、Steve McConnell 和 Karl Wiegers,已經(jīng)在因特網(wǎng)上寫了許多這樣的佳實踐,本文也引用了這些佳實踐。另請參閱本文末尾的相關(guān)信息部分。附帶的文章軟件開發(fā)項目實施指南描述了有助于提高項目成功率的十條重要的因素。
佳實踐項目
1. 開發(fā)流程(Development process)-為手頭的項目選擇適當(dāng)?shù)拈_發(fā)生命周期流程很重要(CMMI三級自定義過程大的一個裁剪項),因為其他的所有活動都是從這個流程派生出來的,F(xiàn)代的軟件開發(fā)項目多數(shù)都是在瀑布式流程的基礎(chǔ)上采用某種螺旋式方法。有幾種方法可供選擇,包括 Rational 統(tǒng)程(Rational Unified Process,RUP)、IBM® Global Services 方法(IBM® Global Services Method)以及極端編程(eXtreme Programming,XP)。(還要改進(jìn)型的瀑布模型,增量等相關(guān)模型可以供選擇)流程當(dāng)然比根本沒有要好,但在多數(shù)情況下流程的執(zhí)行情況要比使用的是什么流程更重要。以上列舉的常用方法都包含關(guān)于如何執(zhí)行流程的指南和構(gòu)件模板。此外,RUP 還有一系列描述使用 RUP 的佳實踐的書 [1][2][3][4],即便不選用 RUP,這些書也是獲得佳實踐的極好來源。給 RUP 加插件也是可以的。請為基于 WebSphere® J2EE 的項目下載 WebSphere 插件。(RUP是很好的一套增量迭代的開發(fā)方法,RUP方法論可以更好的應(yīng)當(dāng)變化和體現(xiàn)架構(gòu)設(shè)計在開發(fā)過程中的主導(dǎo)作用,但真正用好并不容易)
2.需求-收集需求需求達(dá)成一致是項目成功的基礎(chǔ)。這并不一定意味著需要在建立好體系結(jié)構(gòu)、完成設(shè)計和編碼工作之前確定所有的需求,但對于開發(fā)小組來說明白需要構(gòu)建什么是很重要的。質(zhì)量需求分兩種:功能性的和非功能性的。一種記錄功能性需求的好方法是使用用例(Use Case)。注意:用例被用于非面向?qū)ο蟮捻椖俊rmour 和 Miller 著有一本關(guān)于用例主題的權(quán)威著作 [5]。非功能性需求描述應(yīng)用程序的性能和系統(tǒng)特性。收集非功能性需求很重要,因為他們對應(yīng)用程序體系結(jié)構(gòu)、設(shè)計以及性能都會產(chǎn)生重要影響。請參閱 ConstruxWeb 站點(diǎn)上的 非功能性需求清單。(非功能性需求和功能性需求一樣重要,對于新產(chǎn)品的非功能性需求的前期收集是具有難度的,更多要借鑒其它產(chǎn)品相關(guān)經(jīng)驗。需求開發(fā)可以采用結(jié)構(gòu)化分析方法,也可以采用用例分析方法。架構(gòu)設(shè)計也應(yīng)該針對系統(tǒng)的功能性需求和非功能性需求分別進(jìn)行設(shè)計)
3.體系結(jié)構(gòu) - 為您的應(yīng)用程序選擇合適的體系結(jié)構(gòu)是關(guān)鍵。有好幾次 IBM 被要求復(fù)查出問題的項目,結(jié)果發(fā)現(xiàn)開發(fā)小組沒有應(yīng)用知名的業(yè)界體系結(jié)構(gòu)佳實踐。與 IBM 聯(lián)系是避免這類問題的好方法。我們的顧問可以與您的開發(fā)小組并肩工作以確保項目沿正確的軌道開始。經(jīng)過實驗證明可靠的實踐稱為模式,有經(jīng)典的 Gang of Four [6] 模式、Java 模式 [7],也有 EJB 設(shè)計模式 [8]。Sun 公司與此相應(yīng)的是核心 J2EE 模式(Core J2EE Pattern)目錄 [9]。IBM 也發(fā)布過一些佳實踐和參考應(yīng)用程序體系結(jié)構(gòu) [10]。引言中說過許多項目都是失敗的。通過對這些失敗的項目的研究提出了反模式這個概念。這些反模式是很有價值的,因為它們針對哪里出了問題以及為什么會出問題提供了有用的信息。
4. 設(shè)計-即使有了好的體系結(jié)構(gòu),也可能設(shè)計不好。許多應(yīng)用程序不是設(shè)計得過于復(fù)雜是設(shè)計得過于簡單。這有兩個基本原則 “盡量簡單”和 信息隱藏。對于許多項目來說,使用 UML 進(jìn)行面向?qū)ο蟮姆治雠c設(shè)計(Object-Oriented Analysis and Design)很重要。有關(guān) UML 的書有很多,但我們推薦 UML User Guide [11]和 Applying UML and Patterns [12]。重用是面向?qū)ο蟮暮苡星巴镜囊粋方面,重用經(jīng)常會因為需要額外的工作來創(chuàng)建可重用資產(chǎn)而變得無法實現(xiàn)。代碼重用是重用的一種形式,當(dāng)然也有其他一些能夠提高效率的重用種類。(Applying UML and Patterns 這本書結(jié)合了模式,RUP很多佳實踐和例子在里面,確實值得推薦)
5. WebSphere 應(yīng)用程序設(shè)計 - IBM 擁有關(guān)于 WebSphere 系列產(chǎn)品的佳實踐和設(shè)計模式的廣泛知識。每個項目都是不同的,我們的顧問有豐富的經(jīng)驗來幫助您。即使您只聘請我們的顧問很短一段時間,這種投資回報(ROI)也是很大的,因為您可以在以后的項目中節(jié)省開銷。我們的專家也發(fā)表過大量有關(guān)這類知識的文章,包括高性能 Web 站點(diǎn)注意事項和自主計算指南。