<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    沙漠綠洲

    ----駱駝之行

     

    轉(zhuǎn)載--J2EE項(xiàng)目執(zhí)行最佳實(shí)踐

    ????? 軟件開發(fā)并非易事,項(xiàng)目執(zhí)行本身需要許多模式和最佳實(shí)踐,從而節(jié)省寶貴時(shí)間。本文介紹了解決日常軟件項(xiàng)目執(zhí)行問題的三個(gè)最佳實(shí)踐。

    即便我們的大多數(shù)項(xiàng)目可能面臨類似的問題,我們還是缺少明確的方法來解決它們。在軟件開發(fā)的職業(yè)生涯期間,筆者使用了一些方法來解決困擾大部分開發(fā)項(xiàng)目的重復(fù)出現(xiàn)的問題,這些方法確實(shí)有助于有效地執(zhí)行項(xiàng)目。筆者在文中介紹了項(xiàng)目執(zhí)行方面的三個(gè)最佳實(shí)踐,其中幾個(gè)可以認(rèn)為是成熟的模式:

    ● 使用模板代碼;

    ● 編寫高效的開發(fā)手冊;

    ● 執(zhí)行自動(dòng)化代碼檢查。

    使用模板代碼

    示例代碼可以幫助開發(fā)人員編寫非常高效的代碼。經(jīng)常困擾軟件開發(fā)項(xiàng)目的因素有以下一些。

    技術(shù)在變化。事實(shí)證明,很難找到在新技術(shù)方面頗有經(jīng)驗(yàn)的能夠勝任的技術(shù)人員。另外,開發(fā)新手可能缺乏編寫高效代碼的經(jīng)驗(yàn)。模板代碼則為開發(fā)人員提供了良好的參考點(diǎn)(reference point),從而簡化了學(xué)習(xí)新技術(shù)的過程。

    學(xué)習(xí)及使用新技術(shù)需要時(shí)間,如果處理不當(dāng),可能會導(dǎo)致一片混亂。因此可以為開發(fā)人員提供模板代碼,作為編寫代碼所用的參考點(diǎn),從而在開發(fā)方面盡快上手,而不是迫使開發(fā)人員自己學(xué)習(xí)新技術(shù)。

    許多項(xiàng)目人手有限,而且必須在很緊迫的期限內(nèi)完成。參與項(xiàng)目的每個(gè)人都不應(yīng)該從事重復(fù)性工作。高級技術(shù)人員在設(shè)計(jì)階段也許可以幫得上,不過等到實(shí)際實(shí)施時(shí),程序員通常只能靠自己了。細(xì)小的問題可能會被忽略,到后來卻發(fā)現(xiàn)已經(jīng)造成了混亂。Javadoc有幾次遵循了標(biāo)準(zhǔn)化的格式和指導(dǎo)準(zhǔn)則?代碼有幾次遵循了明確定義的習(xí)慣方法和最佳實(shí)踐?可視化框架(visual framing)比技術(shù)書籍或者參考手冊更有效,因此,模板代碼能夠助一臂之力。

    許多軟件項(xiàng)目不但很龐大,而且分散在各地。有時(shí)候,項(xiàng)目在世界上不同地方開展。如果項(xiàng)目眼看就要完成,誰都不希望客戶驚訝地發(fā)現(xiàn)代碼沒有滿足他們的預(yù)期目標(biāo)。應(yīng)該早在開始構(gòu)造軟件之前,就將示例代碼發(fā)送給客戶評審,并且記錄反饋意見。這些示例代碼應(yīng)當(dāng)切合實(shí)際、具有代表性,而不只是“Hello World”這樣的程序。

    開發(fā)人員通常都有一大堆參考手冊、標(biāo)準(zhǔn)和框架,幫助自己順利完成項(xiàng)目。但是,即使已經(jīng)在設(shè)計(jì)當(dāng)中,編碼習(xí)慣方法也不是顯而易見的。可視化框架可以提供幫助。除非開發(fā)人員有實(shí)際的代碼示例,否則他們對于擬議項(xiàng)目的解釋可能會略有不同。一個(gè)項(xiàng)目有可能用不同方式來實(shí)現(xiàn),示例代碼可以實(shí)現(xiàn)特定的編碼習(xí)慣方法,從而提供幫助。

    為了編寫示例代碼,需要召集一隊(duì)專家(技術(shù)專家和功能專家),從待開發(fā)應(yīng)用軟件的問題領(lǐng)域確認(rèn)簡單及復(fù)雜的用例。并且基于現(xiàn)有設(shè)計(jì),請這些專家提出實(shí)現(xiàn)方法即模板。下面筆者列出了編寫這部分代碼的一些技巧:

    ● 代碼應(yīng)當(dāng)包含立即可用的構(gòu)建和部署腳本。否則,時(shí)間就會白白浪費(fèi)在構(gòu)造階段解決這些問題上。

    ● 項(xiàng)目的基本目錄結(jié)構(gòu)應(yīng)當(dāng)為開發(fā)人員備好,基本目錄結(jié)構(gòu)可能含有項(xiàng)目中使用的各種庫。

    ● 模板代碼應(yīng)當(dāng)遵循將在項(xiàng)目中使用的命名規(guī)范、編碼風(fēng)格、標(biāo)準(zhǔn)和框架。

    ● 模板代碼應(yīng)當(dāng)遵循明確定義的Javadoc模板(譬如基于Eclipse的Javadoc模板),這種模板可以讓開發(fā)人員知道如何編寫Javadoc。編寫良好的Javadoc很重要,這是因?yàn)樗鼈兺ǔJ乾F(xiàn)有代碼的維護(hù)和改進(jìn)團(tuán)隊(duì)惟一可以使用的文檔。

    ● 編程語言中明確定義的編碼習(xí)慣方法應(yīng)當(dāng)用于模板代碼,這有助于開發(fā)人員編寫高效代碼。

    ● 模板代碼應(yīng)當(dāng)定義使用框架的標(biāo)準(zhǔn)方法。對開發(fā)新手來說,在最初的構(gòu)造階段編寫針對特定框架的實(shí)現(xiàn)類可能是件困難的任務(wù)。示例代碼有助于理解這些概念。即使某個(gè)框架方面有許多文檔資料,要弄清楚如何有效編寫代碼也并不總是件易事。

    ● 模板代碼還應(yīng)當(dāng)展示如何使用JUnit或者其他測試框架編寫測試用例。

    ● 為了避免客戶最后大吃一驚,客戶的技術(shù)團(tuán)隊(duì)也應(yīng)當(dāng)檢查這些代碼,這樣他們更清楚在構(gòu)造階段結(jié)束后獲得的代碼質(zhì)量。

    ● 模板代碼應(yīng)當(dāng)包括端到端的用例,也就是從表示層到數(shù)據(jù)層。

    ● 應(yīng)當(dāng)詳細(xì)介紹模板代碼,好讓開發(fā)人員熟悉它們的細(xì)節(jié)。開發(fā)人員應(yīng)當(dāng)明白每一層需要做哪些工作,還要知道使用了(或者可以使用)哪些編碼習(xí)慣方法和最佳實(shí)踐以及原因。

    有效的開發(fā)手冊

    假設(shè)我們必須執(zhí)行一個(gè)龐大的項(xiàng)目,經(jīng)常需要30人到50人。不是所有的開發(fā)人員都掌握了要用到的技術(shù)和標(biāo)準(zhǔn)。一個(gè)項(xiàng)目可能涉及不同的技術(shù)及專有框架,它們可能用于將來的Java Enterprise Edition項(xiàng)目。如何在開發(fā)人員之間轉(zhuǎn)移這么龐大的知識量是一大難題。這里有一些事項(xiàng)需要注意:

    許多大項(xiàng)目的開發(fā)時(shí)間很長(一兩年)。一個(gè)不爭的事實(shí)是:軟件行業(yè)的人員流失率相當(dāng)高。這是基本事實(shí),也是一個(gè)挑戰(zhàn)。招聘新人可能很容易,但是轉(zhuǎn)移知識卻是項(xiàng)艱巨任務(wù),要是項(xiàng)目時(shí)間緊張,更是如此。

    一些開發(fā)人員可能不具備預(yù)期的技能水平。如今,及時(shí)找到技能嫻熟的開發(fā)人員相當(dāng)困難。如果項(xiàng)目期限很急,這些開發(fā)新手就沒有時(shí)間去學(xué)習(xí)那些厚厚的技術(shù)書籍或者參考手冊。有些人可能非常聰明、能干,會另外抽出時(shí)間去學(xué)習(xí)及運(yùn)用這些概念,但不能保證所有人都是如此。

    維護(hù)一個(gè)剛完工的軟件項(xiàng)目也是一大難題。開發(fā)周期結(jié)束后,客戶的IT團(tuán)隊(duì)可能會自己維護(hù)代碼。對這些人來說,熟悉技術(shù)架構(gòu)、對架構(gòu)進(jìn)行改動(dòng)可能是一項(xiàng)重大任務(wù)。除非轉(zhuǎn)移知識的方式有了明確規(guī)定,否則IT團(tuán)隊(duì)在一開始仔細(xì)查閱代碼和設(shè)計(jì)文檔時(shí)可能會經(jīng)常碰壁。

    開發(fā)手冊應(yīng)當(dāng)能解決上面提到的問題。那么,我們?nèi)绾尉帉懹行У拈_發(fā)手冊呢?

    以下是編寫有效的開發(fā)手冊的一些技巧:

    ● 開發(fā)手冊應(yīng)當(dāng)包含構(gòu)建開發(fā)環(huán)境所必要的所有相關(guān)信息。

    ● 語句應(yīng)當(dāng)簡潔、易讀。如果閱讀的人發(fā)現(xiàn)手冊讀起來費(fèi)解,這是編寫者而不是閱讀者的失敗。

    ● 開發(fā)手冊應(yīng)當(dāng)包含大量示例。示例可以清楚地表明手冊內(nèi)容。

    ● 請一位不熟悉項(xiàng)目中所用技術(shù)的開發(fā)人員來檢查手冊。這樣一來,如果手冊內(nèi)容讓人困惑或者含糊不清,可以在其他人使用之前寫清楚。

    ● 作為低層設(shè)計(jì)階段的一部分,手冊應(yīng)當(dāng)準(zhǔn)備好。而且在構(gòu)造階段開始時(shí),手冊可隨時(shí)供人使用。

    ● 手冊應(yīng)當(dāng)包括多少信息?如何在信息過多和信息過少之間求得平衡?開發(fā)人員不喜歡讀厚厚的手冊。但同時(shí),開發(fā)手冊中不能遺漏必要的信息,以免許多地方含糊不清。要認(rèn)真考慮開發(fā)人員的實(shí)際需求,而不是單單考慮可以提供的所有信息。在編寫手冊時(shí)應(yīng)當(dāng)使用簡單直觀、逐步漸進(jìn)的方法。

    ● 開發(fā)手冊應(yīng)當(dāng)界面直觀,而不是內(nèi)容分散、凌亂。手冊內(nèi)容的組織方式應(yīng)當(dāng)與現(xiàn)實(shí)中開發(fā)項(xiàng)目時(shí)需要閱讀信息的先后步驟一致。譬如說,在Java企業(yè)項(xiàng)目中,開發(fā)人員首先會構(gòu)建開發(fā)環(huán)境,然后開始為表示層和應(yīng)用數(shù)據(jù)層編寫代碼。手冊應(yīng)當(dāng)遵循這樣流程的步驟。

    ● 確保手冊不會讓開發(fā)人員覺得困惑。譬如說,如果開發(fā)人員在編寫Struts動(dòng)作類時(shí)需要使用特定的XDoclet標(biāo)記,他就應(yīng)當(dāng)明白項(xiàng)目中使用的標(biāo)記、意義及使用方法。如果想了解詳細(xì)信息,他總是可以參閱參考手冊。

    下面我們看一個(gè)Java企業(yè)項(xiàng)目所用的實(shí)際開發(fā)手冊是什么樣的,它應(yīng)當(dāng)包括以下細(xì)節(jié):

    ● 構(gòu)建細(xì)節(jié):每當(dāng)開發(fā)新手加入項(xiàng)目,他必須構(gòu)建開發(fā)環(huán)境,之后才能開始工作。別以為開發(fā)人員明白項(xiàng)目大大小小的細(xì)節(jié)。譬如說,要是項(xiàng)目結(jié)合使用Eclipse和Weblogic來創(chuàng)建Web應(yīng)用,開發(fā)新手甚至可能不清楚Eclipse或者Weblogic為何物。因此,構(gòu)建細(xì)節(jié)應(yīng)當(dāng)是開發(fā)手冊的第一部分。只要稍具Java基本知識的開發(fā)新手應(yīng)當(dāng)能夠很容易按手冊構(gòu)建開發(fā)環(huán)境。

    ● 表示層細(xì)節(jié):開發(fā)人員在處理用例時(shí),通常從表示層開始著手。應(yīng)當(dāng)在開發(fā)手冊中給出創(chuàng)建表示組件的特定步驟。譬如說,如果某項(xiàng)目使用Struts作為表示框架,手冊中應(yīng)當(dāng)包含定義編寫動(dòng)作類和表單類的步驟。如果項(xiàng)目使用XDoclet來創(chuàng)建struts-config.xml及其他配置文件,手冊中也應(yīng)當(dāng)包含這些步驟。還應(yīng)當(dāng)包含Java服務(wù)器頁面(JSP)方面的類似步驟。按照模型-視圖-控制器模式,JSP頁面不應(yīng)當(dāng)含有任何Java邏輯。但是對初學(xué)或者中級開發(fā)人員來說,如何使用JSP標(biāo)準(zhǔn)標(biāo)記庫(JSTL)來真正做到這點(diǎn)可能是個(gè)比較大的問題。手冊中用一些實(shí)際示例表明如何在JSP頁面中使用JSTL也有所幫助。

    ● 業(yè)務(wù)層細(xì)節(jié):業(yè)務(wù)邏輯可以用無狀態(tài)Enterprise JavaBeans組件、基于Spring的組件或者簡單的普通Java對象來編寫。手冊提供了項(xiàng)目中使用的業(yè)務(wù)組件的框架代碼以及實(shí)際示例。

    ● 數(shù)據(jù)層細(xì)節(jié):手冊為編寫Java數(shù)據(jù)庫連接性(JDBC)、Hibernate或者基于框架的其他任何數(shù)據(jù)訪問對象(DAO)提供指導(dǎo)準(zhǔn)則,然后包含項(xiàng)目中使用的步驟及最佳實(shí)踐,這最終取決于項(xiàng)目使用的持久性機(jī)制。

    ● 其他細(xì)節(jié):手冊提供了有關(guān)內(nèi)部/外部組件的信息,不管J2EE項(xiàng)目中使用哪一層。有可能包含日志、電子郵件組件、審查和安全等信息。另外,在項(xiàng)目后期階段,手冊可能包含介紹如何擴(kuò)展一些業(yè)務(wù)需求的章節(jié)。譬如說,如果使用了批處理框架,如何對其進(jìn)行擴(kuò)展獲得新的批處理等。

    自動(dòng)化代碼檢查

    代碼檢查是另一個(gè)問題。如果大批量地生成代碼,就需要不斷檢查代碼。即使可能已經(jīng)為代碼檢查定義了一套規(guī)則,還是有許多問題沒有辦法在這些規(guī)則中加以描述及限制。根據(jù)個(gè)人的能力和經(jīng)驗(yàn),每個(gè)人都有自己的代碼檢查方式。另外,有些問題很小,無法逐行檢查。如果需要檢查的代碼很多,這些小問題可能會在某個(gè)地方被忽略。如果錯(cuò)誤隱藏在集成開發(fā)環(huán)境(IDE)本身里面該怎么辦?有些工具有助于查找這些問題,用不著手動(dòng)查找。

    ● Eclipse IDE的設(shè)置

    有時(shí)候,IDE設(shè)置可以提供幫助。譬如說,可以修改Eclipse IDE里面的參數(shù)選項(xiàng)。萬一代碼出現(xiàn)了問題,可以顯示警告。圖1是在Eclipse中改變參數(shù)選項(xiàng)的示例。


    圖1 Eclipse Javadoc設(shè)置

    如果仔細(xì)看一下,就會發(fā)現(xiàn)Eclipse會在IDE本身里面顯示警告,這樣開發(fā)人員就可以改正。萬一項(xiàng)目標(biāo)準(zhǔn)很嚴(yán)格,就會顯示錯(cuò)誤,迫使開發(fā)人員改正問題。

    ● Jlint

    同樣,名為Jlint的一個(gè)工具可結(jié)合Eclipse使用,查找代碼中的細(xì)小問題。可以采用以下步驟來使用Jlint:

    首先,下載jlint插件和二進(jìn)制代碼,把二進(jìn)制代碼解壓縮到C:\lint文件。另外把插件解壓縮到Eclipse插件目錄。

    然后,運(yùn)行Eclipse, 進(jìn)入“窗口”菜單,先后選擇“參數(shù)選項(xiàng)”、Java和Jlint,把Jlint位置設(shè)為C:\jlint\jlint.exe。

    最后,用鼠標(biāo)右鍵點(diǎn)擊“資源”視圖中的Eclipse項(xiàng)目,然后選擇Jlint。工作區(qū)構(gòu)建完畢后,就會出現(xiàn)黃色的警告標(biāo)記。

    圖2 是Eclipse中有關(guān)Jlint設(shè)置的示例。


    圖2 Eclipse Jlint配置

    ● Lint4j

    如果不依靠IDE,可以使用Lint4j的Ant腳本來發(fā)現(xiàn)代碼中的問題。需要為這個(gè)腳本指定以下參數(shù):

    lint4j.dist.dir:安裝lint4j發(fā)布包的目錄

    packages:Lint4j檢查的Java軟件包

    ignorePackages: lint4j忽略的Java軟件包

    以下是Jlint的Ant構(gòu)建腳本的示例:

    < ?xml version="1.0"?>

    < project name="Lint4j" default="lint4j" basedir=".">

    < property name="lint4j.dist.dir" value="C:/tools/lint4j-0.8.2"/>

    < property name="lint4j.level" value="5"/>

    < property name="lint4j.exact" value="false"/>

    < taskdef name="lint4j" classname="com.jutils.lint4j.ant.Lint4jAntTask">

    < classpath>

    < pathelement location="${lint4j.dist.dir}/jars/lint4j.jar" />

    < /classpath>

    < /taskdef>

    < target name="lint4j" description="Run Lint4j on your source">

    < lint4j ignorePackages="" packages="com.domain.*" level="${lint4j.level}" exact="${lint4j.exact}">

    < sourcepath>

    < dirset dir=".">

    < include name="**/src" />

    < /dirset>

    < /sourcepath>

    < classpath>

    < pathelement location="C:/bea/weblogic81/server/lib/weblogic.jar" />

    < fileset dir=".">

    < include name="**/*.jar" />

    < include name="**/*.zip" />

    < /fileset>

    < fileset dir="ejblib">

    < include name="**/*.jar" />

    < /fileset>

    < fileset dir="lib">

    < include name="**/*.jar" />

    < /fileset>

    < /classpath>

    < formatters>

    < formatter type="text" />

    < formatter type="text" toFile="./target/lint4j.log"/>

    < /formatters>

    < /lint4j>

    < /target>

    < /project>

    ● Checkstyle

    代碼檢查的另一個(gè)工具是CheckStyle,它遵循Java開發(fā)高手普遍采用的重要的Java編碼準(zhǔn)則來檢查代碼。它也可以結(jié)合Ant腳本使用。CheckStyle的選項(xiàng)配置起來具有很大的靈活性,可用來支持幾乎任何編碼標(biāo)準(zhǔn)。提供的示例配置文件支持Sun的編碼規(guī)范。這個(gè)Ant腳本可以讓代碼檢查同編譯過程一起完成,以便開發(fā)人員了解這些錯(cuò)誤,并加以改正。

    結(jié)論

    軟件開發(fā)項(xiàng)目中通常面臨的問題大多數(shù)是重復(fù)出現(xiàn)的。在如今充滿競爭的世界——縮短開發(fā)時(shí)間、降低開發(fā)成本的壓力很大,所以沒有時(shí)間為每個(gè)項(xiàng)目重新設(shè)計(jì)解決方案。

    本文沒有提供解決所有軟件執(zhí)行問題的辦法,它只是向前邁出了一步。本文旨在演示了使用最佳實(shí)踐作為軟件開發(fā)的高效工具。事先知道這些軟件執(zhí)行方面的最佳實(shí)踐和模式,就可以準(zhǔn)備好解決項(xiàng)目生命周期過程中可能出現(xiàn)的任何障礙。這也讓項(xiàng)目經(jīng)理、架構(gòu)師和開發(fā)人員能夠把精力集中在“實(shí)際”的開發(fā),而不是應(yīng)對意料不到的情況。(沈建苗 編譯)

    鏈接:模板代碼的好處

    ● 開發(fā)人員獲得了開始編寫代碼的參考資料。

    ● 客戶與開發(fā)人員就代碼的預(yù)期質(zhì)量達(dá)成共識,從而避免了通常因雙方誤解而出現(xiàn)的那些問題。

    ● 開發(fā)人員擁有了開始編寫代碼的框架代碼(skeleton)。

    ● 開發(fā)人員更容易掌握框架以及將使用的任何外部API或者組件,提高了工作效率。

    ● 開發(fā)人員用不著不斷從事重復(fù)性工作。大多數(shù)最佳實(shí)踐和編碼習(xí)慣方法都擺在了他們面前,這再次可以提高工作效率。

    (計(jì)算機(jī)世界報(bào) 2006年09月25日 第37期 B29、B30)

    posted on 2006-10-05 12:22 小澗流水 閱讀(260) 評論(0)  編輯  收藏 所屬分類: 常識

    導(dǎo)航

    統(tǒng)計(jì)

    公告

    Free Counter
    Free Web

    常用鏈接

    留言簿(1)

    隨筆分類(43)

    隨筆檔案(48)

    文章檔案(1)

    收藏夾(12)

    網(wǎng)絡(luò)

    計(jì)算機(jī)圖形學(xué)

    搜索

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 久热免费在线视频| 亚洲精品高清一二区久久| 免费A级毛片无码无遮挡内射| 女人被免费视频网站| 亚洲午夜无码片在线观看影院猛| 亚洲最新视频在线观看| 亚洲欧美在线x视频| 2019中文字幕在线电影免费 | 真实国产乱子伦精品免费| 日本免费一区二区三区最新vr| 亚洲国产三级在线观看| 亚洲欧美日韩一区二区三区在线| a级毛片在线免费| 又黄又爽的视频免费看| 亚洲伦理中文字幕| 日韩精品极品视频在线观看免费| 亚洲成a人片在线观看老师| 久久久久亚洲国产| 最近免费2019中文字幕大全| 亚洲成综合人影院在院播放| 国产免费阿v精品视频网址| 亚洲国产一区视频| 韩国免费A级毛片久久| 国产成人免费a在线视频app | 亚洲AV永久无码区成人网站| 九一在线完整视频免费观看| 精品久久洲久久久久护士免费| 亚洲国产成人久久99精品| 狼群影院在线观看免费观看直播| 亚洲国产精品久久久久秋霞影院| 免费精品一区二区三区在线观看| 免费国产污网站在线观看不要卡| 日本一道本高清免费| ssswww日本免费网站片| 国产午夜亚洲精品理论片不卡 | 久久噜噜噜久久亚洲va久| 中国性猛交xxxxx免费看| 67pao强力打造67194在线午夜亚洲 | 在线综合亚洲欧洲综合网站| 又大又黄又粗又爽的免费视频| 最新亚洲成av人免费看|