當(dāng)你開(kāi)始著手組織一個(gè)企業(yè)級(jí)Java項(xiàng)目的時(shí)候,就如同開(kāi)始同時(shí)輪回地扔好幾個(gè)魔術(shù)小球: 業(yè)主關(guān)系處理、持續(xù)而漫長(zhǎng)的設(shè)計(jì)開(kāi)發(fā)過(guò)程,以及保持健全與完整性,等等。每一個(gè)“小球”都會(huì)帶來(lái)其固有的風(fēng)險(xiǎn),有些顯而易見(jiàn),有些則不易發(fā)現(xiàn)。盡管如此,所有這些風(fēng)險(xiǎn)都是完全可以避免的。本文作者Humphrey Sheil分析了威脅到企業(yè)級(jí)Java項(xiàng)目成功的10大風(fēng)險(xiǎn), 并一一列出了風(fēng)險(xiǎn)規(guī)避的策略方法。
在過(guò)去這段時(shí)期里,我擔(dān)任過(guò)程序員、高級(jí)設(shè)計(jì)師以及架構(gòu)設(shè)計(jì)師等工作,見(jiàn)識(shí)過(guò)很優(yōu)秀的企業(yè)級(jí)Java項(xiàng)目,也見(jiàn)識(shí)過(guò)不好的,甚至很"丑陋"的項(xiàng)目。有時(shí)候我會(huì)自己?jiǎn)栕约?,為什么一個(gè)項(xiàng)目可以取得成功,而另一個(gè)卻走向失???很難定義出某種規(guī)則或標(biāo)準(zhǔn)來(lái)表明各個(gè)不同的項(xiàng)目應(yīng)該如何成功,J2EE項(xiàng)目也并不例外。但與此相反的是,我們可以從各個(gè)角度和層次上去考察項(xiàng)目失敗的原因,如果很好地避開(kāi)了這些風(fēng)險(xiǎn),項(xiàng)目就可以取得成功。在本文中,我將提出排名前10位的企業(yè)級(jí)Java項(xiàng)目風(fēng)險(xiǎn),供讀者參考。
在各種各樣的風(fēng)險(xiǎn)中,有些風(fēng)險(xiǎn)只是延緩了項(xiàng)目的進(jìn)度,有些帶來(lái)了一些不必要的工作,而另一些則會(huì)把成功的可能性徹底地消除。不過(guò),如果預(yù)先有了足夠的準(zhǔn)備和清醒的認(rèn)識(shí),那么并沒(méi)有不可避免的事情。這好比如果你是一名旅行者,你清楚地知道前面的道路在什么方向,做了充分的準(zhǔn)備,又有一位清楚知道哪里有危險(xiǎn)的向?qū)?,這樣就會(huì)比較順利地到達(dá)自己的目的地。
本文采用了以下結(jié)構(gòu)來(lái)描述風(fēng)險(xiǎn):
風(fēng)險(xiǎn)名稱:風(fēng)險(xiǎn)的標(biāo)題(使用粗體)
項(xiàng)目階段:在哪個(gè)項(xiàng)目階段會(huì)發(fā)生風(fēng)險(xiǎn)情況
影響階段:會(huì)影響到以后的哪些階段
癥狀: 風(fēng)險(xiǎn)產(chǎn)生時(shí)的癥狀
規(guī)避方案:如何規(guī)避風(fēng)險(xiǎn)或者把其對(duì)項(xiàng)目的影響降低到最小程度
備注: 風(fēng)險(xiǎn)相關(guān)的補(bǔ)充說(shuō)明和提示
通過(guò)對(duì)企業(yè)級(jí)Java項(xiàng)目的仔細(xì)考察,本文將J2EE項(xiàng)目過(guò)程分解為以下幾個(gè)階段:
提供商選擇: 在開(kāi)始你的J2EE項(xiàng)目之前,要選擇最合適的提供商,從應(yīng)用服務(wù)器到開(kāi)發(fā)工具組合,一直至工作期間享用的咖啡的廠商。
設(shè)計(jì): 在遵照一系列嚴(yán)格的規(guī)范和軟件工程方法的前提下,可以開(kāi)始進(jìn)行足夠充分的設(shè)計(jì),然后再很自然地進(jìn)入開(kāi)發(fā)階段。在開(kāi)發(fā)之前,要周全地考慮好正在做什么,以及如何往下做的問(wèn)題。另外,我使用了一些設(shè)計(jì)模板來(lái)確信在進(jìn)入開(kāi)發(fā)之前,已經(jīng)想到了所有的問(wèn)題和可能的解決方案。但是,我有時(shí)也在該階段做一些編碼,有時(shí)候這樣做可以回答一些問(wèn)題,有效地判斷出性能上和模塊劃分上的問(wèn)題。
開(kāi)發(fā): 也就是程序開(kāi)發(fā)階段,選擇一些好的開(kāi)發(fā)工具,進(jìn)行精良的設(shè)計(jì)等等,在這個(gè)階段將顯示其優(yōu)越性,并且可以給開(kāi)發(fā)帶來(lái)很大的幫助。
穩(wěn)定性/負(fù)載測(cè)試:在該階段,系統(tǒng)架構(gòu)師和項(xiàng)目經(jīng)理應(yīng)該凍結(jié)住產(chǎn)品特性,并把焦點(diǎn)放在質(zhì)量以及產(chǎn)品參數(shù)(允許的并發(fā)用戶數(shù)量,故障恢復(fù)情況,等等)上。質(zhì)量和性能在該階段應(yīng)得到足夠的重視。當(dāng)然,最好應(yīng)該避免在前階段寫(xiě)出不良的運(yùn)行緩慢的代碼而到本階段來(lái)作很多的修改。
成熟期:這不是一個(gè)真正的項(xiàng)目階段,而是一個(gè)固定的準(zhǔn)備階段。過(guò)去潛伏的錯(cuò)誤(來(lái)自于糟糕的設(shè)計(jì)和開(kāi)發(fā)、錯(cuò)誤的廠商選擇)可能出現(xiàn)并影響你的系統(tǒng)。
風(fēng)險(xiǎn)1:沒(méi)有真正理解 Java, EJB, 和J2EE
這個(gè)問(wèn)題可以分解為3個(gè)部分,以便于分析。
描述: 沒(méi)有真正理解Java
項(xiàng)目階段:開(kāi)發(fā)
影響階段:設(shè)計(jì)、穩(wěn)定性測(cè)試、成熟期
對(duì)系統(tǒng)性能的影響:可維護(hù)性、可擴(kuò)展性、性能
癥狀:
重復(fù)開(kāi)發(fā)了JDK核