欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久

打開(kāi)APP
userphoto
未登錄

開(kāi)通VIP,暢享免費電子書(shū)等14項超值服

開(kāi)通VIP
KehuiCMS文檔-: 應用 Rational 工具簡(jiǎn)化基于 J2EE 的項目第 6 部分 :早期開(kāi)發(fā) -可慧網(wǎng)絡(luò ) KehuiCMS 內容管理系統官方網(wǎng)站
應用 Rational 工具簡(jiǎn)化基于 J2EE 的項目第 6 部分 :早期開(kāi)發(fā)
文章發(fā)表:jackei  發(fā)表日期:2005-03-30  閱讀次數:138
本文是演示了在分布式的、基于J2EE 的項目中使用Rational 工具的系列文章(如下面所列)的第6部分。
645 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">第 1 部分: 項目介紹;高層次計劃第 2 部分: 風(fēng)險管理;需求管理第 3 部分: 模型創(chuàng )建和訪(fǎng)問(wèn)控制;需求分析第 4 部分: 用例細化;產(chǎn)成報告;工具和技術(shù)選擇第 5 部分: 體系架構和設計6部分: 詳細設計;早期開(kāi)發(fā);雙向工程;早期單元測試 第 7部分: 繼續開(kāi)發(fā);早期的構建;演示 第 8部分: 單元測試策略;功能測試;GUI 測試腳本 第 9部分: 系統構建和測試;缺陷跟蹤;產(chǎn)品交付 第 10部分: 項目完成;結論;未來(lái)的工作
本文中所虛構我們是一家軟件公司 Lookoff Technologies Incorporated,我們的客戶(hù) Audiophile Speaker Design, Inc. (ASDI),它雇用我們實(shí)現他們最初的 IT 需求。對于更詳細的信息,參見(jiàn)第 1 部分。
本文討論了團隊的進(jìn)展進(jìn)入了實(shí)現階段,并且因此進(jìn)入了 RUP 的構建階段。我們挑選了在 ASDI 項目的第一階段被使用的大部分技術(shù)。設計的情況相當的好,雖然在本系列的第五部分中被討論的包的結構和設計在未來(lái)的一到兩周內還將繼續的演進(jìn)。例如,包結構的部分被重新定義來(lái)反映預期的 Java 包命名習慣。
6部分快照
在第6部分演示的工具和技術(shù):
Rational Rose 企業(yè)版 — 支持雙向工程Rational Purify — 用于檢查 Java 內存的使用情況Rational Quantify — 用于了解性能瓶頸J2SE (Java 2 平臺標準版) 1.3 — Sun 的 Java 參考實(shí)現Jikes — IBM 的高速編譯器(Sun 的 Javac 的替代物)Castor — 來(lái)自于 ExoLab Group 的數據綁定框架,用于綁定 XML 到 Java ,反之亦然。
被創(chuàng )建或者更新的產(chǎn)物:
設計模型 (Rational Rose) — 隨著(zhù)代碼的發(fā)展被更新 Java 代碼 — 為 command gateway 和其他的子系統而創(chuàng )建
在能夠進(jìn)行開(kāi)發(fā)之前,我們必須在管理和團隊領(lǐng)導的層面上完成下面的事情:
建立指導方針和非正式的培訓以便工程團隊都能夠遵守相同的編碼和設計約定。 更新原有的團隊結構(在本系列的第二部分被顯示的)來(lái)反映與設計不同的實(shí)現需要。 建立開(kāi)發(fā)策略和環(huán)境,以使我們的開(kāi)發(fā)人員能夠有效的協(xié)同工作,使開(kāi)發(fā)人員可以在自己的系統部分工作而不會(huì )影響其他人,并且方便的測試他們的代碼。 適當的緊密跟蹤以確保任務(wù)能夠按計劃完成并滿(mǎn)足他們的目標。
RUP 強調在一個(gè)產(chǎn)品被構建時(shí)同級評審的重要性;我們將在后面了解更多的細節。團隊必須對同級評審的標準達成一致意見(jiàn),以避免走向兩個(gè)極端:松散的評審將帶來(lái)非常微小的價(jià)值,或者過(guò)度嚴格的評審將產(chǎn)生大量的注釋行,比如"這個(gè)被實(shí)現了,但這里我是如何實(shí)現的"的注釋。
對于我們的 Java 代碼,我們創(chuàng )建了一個(gè)基于AmbySoft Inc. Java 編碼標準的編碼標準文檔。這些標準被證明在我們進(jìn)行同級評審中是意義重大的。這些標準不僅可以幫助我們?yōu)榭蛻?hù)產(chǎn)生更加一致的和高質(zhì)量的交付系統,而且還允許我們的團隊成員更加容易的在不同的子系統(和項目)之間進(jìn)行調整。我們發(fā)現如果開(kāi)發(fā)人員們對編碼的形式和構建非常熟悉的話(huà),他們將能夠非??斓娜谌氲浇y一的團隊之中。通過(guò)避免使用模糊的命名習慣、不充分的注釋和不好的編碼風(fēng)格,開(kāi)發(fā)人員能夠創(chuàng )建出使其他開(kāi)發(fā)人員更加容易接手的代碼。
通常的情況下,工程師們都在盡力的學(xué)習被需要的技術(shù)以在業(yè)務(wù)上保持競爭力;然而,一些項目也會(huì )引入一些需要團隊培訓的新技術(shù)。我們在 ASDI 項目中并沒(méi)有處于這種情況下,因為這個(gè)項目中使用的架構和技術(shù)都是我們所熟悉的。我們在這個(gè)項目中的培訓是關(guān)于Rational 工具的使用、UML 、Java 編碼標準和J2EE 設計模式的。雖然我們在這些領(lǐng)域有著(zhù)非常好的知識背景,但是這些知識多數是在團隊領(lǐng)導的頭腦里。因此,培訓由非正式的午餐時(shí)間和被團隊領(lǐng)導發(fā)起的下午會(huì )議組成。我們發(fā)現這些維持在一個(gè)小時(shí)到半天的會(huì )議是非常成本高效的(但前提是,你必須要有具有充足知識和良好溝通能力的團隊成員)。
因為我們的話(huà)題是與整個(gè)公司相關(guān)的,因此我們鼓勵其他的技術(shù)人員參與到這些培訓會(huì )議中。我們發(fā)現有更多的技術(shù)人員參與將會(huì )引發(fā)更加有價(jià)值的思想上的交換。最其碼,我們計劃能夠讓 ASDI 項目中所有的工程師都參加的會(huì )議(不論是參與分析、設計、實(shí)現或者測試的工程師)。
團隊的結構從在系統的分析期間演變到了為滿(mǎn)足實(shí)現期間的不同需要的結構。如表 1 所示,大量時(shí)間上的約定發(fā)生了變化,并且有五個(gè)新的職位被加了進(jìn)來(lái)。
角色 分析期間實(shí)現期間
項目管理項目經(jīng)理50%25%
財會(huì )支持15%25%
質(zhì)量保證10% 25%
項目工程項目工程師50%25%
團隊領(lǐng)導/高級分析人員100%75%
工程支持,除了配置管理(CM)20% 10%
工程支持: 配置管理20%40%
支持和評審團隊10%5%
高級開(kāi)發(fā)人員100%100%
初級開(kāi)發(fā)人員100%100%
數據庫架構師25%25%
高級開(kāi)發(fā)人員(遠程)—100%
中級開(kāi)發(fā)人員(遠程)—100%
初級開(kāi)發(fā)人員(遠程)—100%
集成和測試(I&T)領(lǐng)導—50%
I&T 初級成員—100%
表 1:團隊結構的演進(jìn)
團隊結構的變化和變化背后的原因被總結如下:
項目管理減少,關(guān)注點(diǎn)放在了客戶(hù)的接口和預算的跟蹤上。 財會(huì )的支持增加,因為我們的目標是在每一個(gè)任務(wù)進(jìn)度上的更加精確和低粒度的報告。 質(zhì)量保證增加了。我們需要這個(gè)角色來(lái)確認代碼評審的進(jìn)行和工程的筆記簿被開(kāi)發(fā)人員維護等等。 項目工程增加了,高級分析人員角色加上團隊領(lǐng)導角色減少了。因此,項目工程和團隊的領(lǐng)導層(分別下降到了 25% 和 75%)被合并成了一個(gè)全職的職位。 除了配置管理之外,工程支持增加了,因為到現在為止多數的基礎架構(也就是,計算機硬件)是時(shí)候被用到了。配置管理增加了以允許集成和測試人員參與構建,同時(shí)也支持用于版本控制的配置管理的存儲。 支持和評審團隊的工作增加了,因為我們要讓他們?yōu)榇蟮膯?wèn)題把關(guān)。多數的代碼評審是通過(guò)團隊的同級評審完成的。
這些職位被增加:
高級的、中級的和初級的開(kāi)發(fā)人員,他們支持著(zhù)增加的開(kāi)發(fā)工作。這些團隊成員在總部中進(jìn)行著(zhù)遠程的開(kāi)發(fā)活動(dòng),提供“后端系統”的專(zhuān)家意見(jiàn)。(我們原計劃將項目的管理移到總部進(jìn)行,但是項目當前的安排正在很好的進(jìn)行工作,因此我們都同意繼續保持在項目中的協(xié)調方式。) 一個(gè)集成與測試的團隊有一名領(lǐng)導和一個(gè)初級的成員組成。領(lǐng)導成員起草最初的測試說(shuō)明書(shū),制定高級的測試計劃,并且指導初級成員使他能夠以生成測試數據、編寫(xiě)測試腳本和書(shū)寫(xiě)測試文檔的形式為測試提供支持。
后來(lái)我們發(fā)現,我們的團隊結構也許是太具有殺傷力了,因為我們的工具僅僅是為了實(shí)現在第一階段中的概念的驗證的。我們也許應該在沒(méi)有太大傷害的前提下調整一下系統的構建和質(zhì)量保證的正式過(guò)程,并且依然要滿(mǎn)足我們的第一階段的目標。最后,我們建立了高質(zhì)量的概念的驗證,而且比我們最初預想的為第二階段的工作提供了更多的可重用性。
一些之前的項目要求我們在共享的開(kāi)發(fā)環(huán)境下工作,并且這經(jīng)常是痛苦的源頭。工作在公共代碼之上的開(kāi)發(fā)人員經(jīng)常會(huì )打斷開(kāi)發(fā)過(guò)程中其他的軟件部分的工作。我們有時(shí)因為架構上的或者許可證上的限制被要求在一個(gè)共享的環(huán)境下工作,但是我們還是希望在每一個(gè)開(kāi)發(fā)人員的機器上擁有一個(gè)獨立的環(huán)境。我們計劃以一種正規的基礎將開(kāi)發(fā)人員的組件集成到一起。
在 ASDI 的項目中,提供獨立的開(kāi)發(fā)環(huán)境是容易的,甚至對于我們的遠程辦公也是如此。僅有的共享方面是 DB2 的數據庫,但是我們能夠為每一個(gè)開(kāi)發(fā)人員建立獨立的數據庫計劃(schema),這樣就可以去除任何的潛在的問(wèn)題。此外,我們?yōu)槲覀兊墓こ虉F隊設置每一個(gè)類(lèi)被一個(gè)單一的開(kāi)發(fā)人員所“擁有”。我們發(fā)現這非常好的減少了我們的合并與修改的工作。我們從來(lái)不相信以 CVS (Concurrent Versioning System)方式在一個(gè)源文件上實(shí)現并行開(kāi)發(fā)的哲學(xué),因為在一個(gè)方法上的改變將會(huì )帶來(lái)在其他方法上的細微但又重大的影響。我們覺(jué)得最安全的方法是將每個(gè)類(lèi)實(shí)現的責任交給單獨的團隊成員。
關(guān)于我們的特定開(kāi)發(fā)環(huán)境,我們發(fā)現 Orion6%D3%C3">應用服務(wù)器、Rational Suite DevelopmentStudio 、J2SE JDK 和 DB2 客戶(hù)端軟件能夠很容易的符合 P-III 500 和 256 M 內存的機器。Orion 驚人的小的足跡和高效的設計是他能夠在這樣低的硬件配置的機器上運行的主要因素。
基本的開(kāi)發(fā)周期在圖 1 中被顯示出來(lái)(它大量的借用了 RUP 的內容)。
6.jpg" width=420>
圖 1: 開(kāi)發(fā)周期
每一個(gè)開(kāi)發(fā)人員最初從基線(xiàn)設計說(shuō)明開(kāi)發(fā)工作。開(kāi)發(fā)的的第一個(gè)迭代包括使用Rational Rose 作為起始點(diǎn)生成代碼的框架。一系列的迭代(包括時(shí)常發(fā)生的小的構建)都是從這里開(kāi)始的。開(kāi)發(fā)人員非正式的對早期的迭代進(jìn)行單元測試,同時(shí)也與團隊的領(lǐng)導協(xié)商任何與設計的背離。小的設計變化可以通過(guò)電子郵件進(jìn)行溝通,然而重大的變化需要一對一的討論以確保變化是適當的并且不會(huì )對系統的其他方面做成負面的影響。顯然,任何對接口(甚至是公用方法)的變化要求特別細致的檢查和沖突分析。設計要定期的通過(guò)逆向工程進(jìn)行更新,合并任何的變化回到 Rose 模型中以維護系統的最新畫(huà)面。
回顧一下,我們希望我們投入更多的工作在場(chǎng)景上。如果我們的場(chǎng)景已經(jīng)演示了系統的大部分,我們就能夠在 Rose 中使用報告來(lái)顯示類(lèi)之間的詳細依靠了。這將使我們可以產(chǎn)生關(guān)于特定變化的影響的更具有根據的推測。而不是,我們必須編寫(xiě)腳本來(lái)根據被配置管理的代碼進(jìn)行文本的搜索以確定誰(shuí)正依靠著(zhù)給定類(lèi)的特定的方法。
當遇到復雜的事情和問(wèn)題時(shí),他們將被交給團隊的領(lǐng)導。通常團隊領(lǐng)導或者親自的協(xié)助解決問(wèn)題,或者讓開(kāi)發(fā)人員解決問(wèn)題,再或者使用來(lái)自其他團隊或者公司的幫助解決問(wèn)題。有時(shí),我們會(huì )遇到技術(shù)上的需要與客戶(hù)討論的問(wèn)題和后續的需求本身的更新問(wèn)題。例如,我們的一些安全方面需求的遵循JSSE64150 xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">(Java Secure Socket Extension) API 的變化。
一旦代碼被充實(shí)起來(lái),開(kāi)發(fā)人員編譯一系列的單元測試,集成與測試團隊創(chuàng )建一系列的組件測試,他們被設計用來(lái)測試性能、功能和可靠性方面的需求。在完成了代碼和單元測試之上,開(kāi)發(fā)人員要為同級評審過(guò)程(后面被描述)組裝一個(gè)評審包并等候反饋。評審過(guò)程有時(shí)會(huì )導致設計的修改,其他時(shí)候算只是簡(jiǎn)單的識別出一些 bug 或者需要增強的地方。
因為我們只是剛剛開(kāi)始實(shí)現的工作,因此我們不準備使用來(lái)自于Rational ClearQuest 的缺陷統計功能作為測量我們的進(jìn)展部分。相反,我們依靠?jì)蓚€(gè)主要的信息來(lái)源:任務(wù)報告和小的里程碑。
任務(wù)報告以每周為基礎被開(kāi)發(fā)人員提交。這些報告能夠指出最近一周的任務(wù)工作完成情況和在任務(wù)中的預算的花費情況,并且可以估計任務(wù)中剩余的工作量。任何阻礙任務(wù)進(jìn)展的障礙也會(huì )在每周的總結中被報告。
小的里程碑甚至是更加關(guān)鍵的,因為他們有時(shí)揭示了重要的問(wèn)題。團隊領(lǐng)導經(jīng)常要求小版本的構建、非正式的星期五下午的演示、代碼預演或者甚至是當場(chǎng)的代碼檢查。如果我們發(fā)現一個(gè)團隊或者團隊成員不能在時(shí)間期限內實(shí)現一個(gè)適當產(chǎn)品的里程碑,這有時(shí)意味著(zhù)存在需要幫助的問(wèn)題。
軟件工程的目標是在給定的時(shí)間和預算內產(chǎn)出高質(zhì)量的軟件。質(zhì)量的精確定義從團隊到團隊,從項目到項目會(huì )有所不同。對于工程團隊來(lái)說(shuō)質(zhì)量相關(guān)的目標包括:
容易維護的代碼 保證所有的需求被實(shí)現 可靠的操作 足夠的性能 清晰的文檔 可擴展的設計 符合時(shí)間計劃和預算
我們發(fā)現Rational 工具能夠幫助我們滿(mǎn)足這些要求中的很多。為了舉例說(shuō)明Rational 工具能夠在哪些地方幫助我們,這部分將重點(diǎn)集中在客戶(hù)接口的 command gateway部分。就像在本系列第五部分所注明的,這個(gè)網(wǎng)關(guān)是一個(gè) B2B (business-to-business)接口,這個(gè)接口允許大公司可以查詢(xún) ASDI 的零件的可用性、提交訂單、更新他們的客戶(hù)信息和查詢(xún)運輸或者帳目狀態(tài)。
command gateway 的設計經(jīng)歷了一系列的迭代,已經(jīng)成為了被顯示在本系列的第五部分成熟的設計;然而,一種情形引發(fā)了遠程的高級開(kāi)發(fā)人員得到與設計的同步。她在她自己負責的部分提出一些優(yōu)秀的想法,并且我們能夠通過(guò)雙向工程合并他們 — 也就是說(shuō),通過(guò)逆向工程她的改變合并到我們的 Rose 模型中。這種簡(jiǎn)單的設計與最新代碼變化的同步對于維護我們系統的質(zhì)量是十分重要的,因為我們的大多數事情都是圍繞著(zhù)設計模型進(jìn)行的。
command gateway 通過(guò)遠程被開(kāi)發(fā)(在總部),因為他們具有在 Java 、 XML 和 JSSE 方面的豐富的經(jīng)驗。我們在周五將最新的設計發(fā)給高級的開(kāi)發(fā)人員,并且計劃在接下來(lái)的星期通過(guò)電話(huà)會(huì )議來(lái)討論設計。然而,開(kāi)發(fā)人員那個(gè)星期五病了,并且沒(méi)有收到設計;實(shí)際上她并不知道任何我們已經(jīng)完成的進(jìn)展的信息,因為我們的最初設計并不是詳細的。在周末她在家中繼續的通過(guò)她的膝上型電腦進(jìn)行著(zhù)項目的工作,卻沒(méi)有意識到她已經(jīng)喪失了與 command gateway 設計的同步。
在接下來(lái)的電話(huà)會(huì )議中,高級的開(kāi)發(fā)人員詳細的談?wù)摿怂龑υO計的改進(jìn)、她對新技術(shù)引進(jìn)和她在整個(gè)開(kāi)發(fā)中的大的超前。這使團隊領(lǐng)導非常的驚訝,當然開(kāi)發(fā)人員聽(tīng)到了關(guān)于設計上的更新也是非常驚訝的。我們協(xié)商同意忽略最新的設計和開(kāi)發(fā)人員的工作以找到哪一種方法我們應該使用。
當我們選擇好方法之后,開(kāi)發(fā)人員的進(jìn)步是顯著(zhù)的,并且比我們以前的工作更加深思熟慮。她使用了一個(gè)開(kāi)放的產(chǎn)品Castor,這個(gè)產(chǎn)品能夠封裝 XML 數據的映射到 Java 的對象,并且她合并了一些比我們提議的方案更加好的設計決定。因此,我們同意更新設計以反映她的良好的方法。
因為她開(kāi)始于她的草稿代碼,因此我們需要返回她的設計到我們的模型中。這是相當容易完成的:我們簡(jiǎn)單的提供給開(kāi)發(fā)人員我們最新的對于 command gateway 的 *.cat 文件,并且逆向工程她的代碼成為模型。在項目的稍后部分,相似的情形逆向工程將會(huì )帶來(lái)巨大的幫助。
當我們進(jìn)行逆向工程時(shí)的第一個(gè)步驟是在 Windows 中設置 CLASSPATH 環(huán)境變量。這個(gè)環(huán)境變量的位置依賴(lài)于 Windows 的版本,但是典型的情況下你可以通過(guò)系統的控制面板找到它。(在 Windows 2000 中,查看面板的高級標簽。)如果 CLASSPATH 環(huán)境變量沒(méi)有被適當的設置,Rational Rose 在評測代碼與外部的引用類(lèi)之間的關(guān)聯(lián)時(shí)遇到麻煩,通常會(huì )導致類(lèi)分析的失敗。在我們的例子中,我們必須設置這個(gè)變量為
D:\jdk1.3.1\jre\lib\rt.jar;j:\usr\local\lib\xerces\xerces.jar; j:\usr\local\lib\castor\castor-0.9.3-xml.jar
這個(gè)值指向了核心的 J2SE 類(lèi)的運行時(shí)庫和我們用來(lái)映射 Java 對象和 XML 數據的 Castor 的 XML 綁定類(lèi)。
然后我們定義項目的說(shuō)明,在Rational Rose 中使用 Tools > Java > Project Specification 選項(彈出如圖 4 所示的對話(huà)框)。我們確認所有被發(fā)現的路徑,并且我們指出了在 Rose 中我們的代碼的根。
64>
6.gif" width=364>
圖 2: 在 Rose 中定義項目的說(shuō)明
接下來(lái),我們選擇 Tools > Java > Reverse Engineer 選項,它彈出一個(gè)對話(huà)框(如圖 3 所示)提示我們選擇將要被分析的源文件。我們選擇我們感興趣的包 — asdi 類(lèi),來(lái)引入高級開(kāi)發(fā)人員的所有代碼 — 然后點(diǎn)擊 Add Recursive 按鈕。然后我們選擇所有被列出的文件并點(diǎn)擊 Reverse 來(lái)逆向工程他們。
6.jpg" width=420>
圖 3: 在 Rose 中進(jìn)行逆向工程
在首先的幾次嘗試當中,我們意識到我們在設置我們的 CLASSPATH 環(huán)境變量時(shí)范了錯誤,導致在日值文件中出現了一些錯誤信息。(重要的是不要忽略這些錯誤,他們有時(shí)指出文件的解析完全的失敗了)。
6B>逆向工程的結果
一旦逆向工程被成功的完成,我們就能夠在我們的模型的邏輯視圖和組件視圖中發(fā)現被命名為 asdi 的包(見(jiàn)圖 4 和 5)。
6.gif" width=291>
圖 4:逆向工程產(chǎn)生的類(lèi)(邏輯視圖)
6.gif" width=359>
圖 5: 逆向工程產(chǎn)生的組件(組件視圖)
逆向工程在分析類(lèi)之間的關(guān)系上是相當有效的。當類(lèi)的變量被聲明為類(lèi)的成員變量時(shí),找到所有權關(guān)系是更加可靠的。有些關(guān)系被獲取的并不正確(例如,在我們的 Java 代碼中通過(guò)本地范圍的實(shí)例變量創(chuàng )建的關(guān)系),因此一些繼續的檢查工作是必要的。
可以理解的是 Rose 沒(méi)有為代碼創(chuàng )建圖。在上百個(gè)類(lèi)中, Rose 沒(méi)有辦法知道如何進(jìn)行邏輯的分組這些類(lèi)來(lái)適當的表示系統的架構和設計。然而,所有類(lèi)之間的關(guān)系已經(jīng)被適當的生成了,產(chǎn)生設計和組件圖是相對容易的。在圖 8 中顯示的是在逆向工程后修改的網(wǎng)關(guān)設計。
6 src="http://www.kehui.net/articleimg/5898
6: 修改了的(逆向工程了的)網(wǎng)關(guān)設計
在圖6 中顯示的設計上的主要變化是引入和 Castor 的 XML 綁定的接口。我們不必做我們自己的分析(使用 Xerces-J 或者 XML4J)來(lái)進(jìn)行 XML 消息到對象的轉換,因為 Castor 顯然提供了這種映射的能力。Talker 類(lèi)封裝了 JSSE 的功能,并且 java.util.Vector 子類(lèi)提供了進(jìn)入消息的簡(jiǎn)單管理。Vectors 通過(guò) add(...) 和 remove(0) 的調用使先進(jìn)先出(FIFO)的查詢(xún)更加容易。一般情況下我們選擇 Vector 之上的 ArrayList ,但是因為查詢(xún)必須是在線(xiàn)程之間共享的,我們同意使事情保持簡(jiǎn)單。(Vector 是同步的,但是 ArrayList 不是,它要求 Collections.synchronizedList() 被使用)
一個(gè)與新的 command gateway 方法相關(guān)的風(fēng)險是不確定的關(guān)于 Castor 的序列化 API 的性能問(wèn)題。使用經(jīng)過(guò)長(cháng)期測試的 XML 解釋器,我們知道他們的內存使用和性能在負載條件達到高峰時(shí)是足夠的。我們需要評估 Castor 產(chǎn)品以確保它能夠符合我們的系統性能的要求。
為了加速我們的這個(gè)過(guò)程,我們決定使用Rational Purify 和Rational Quantify 來(lái)觀(guān)察 Castor 的行為。這些工具允許我們精密的檢查資源的需求和運行時(shí) Castor 的行為。為了方便起見(jiàn),而不干擾實(shí)現整個(gè) JSSE 客戶(hù)端和服務(wù)器端的代碼,我們決定去掉 JSSE 的功能(在6 中的 Talker 類(lèi))來(lái)提供虛構的 XML 消息。
我們想要了解被 Castor 引擎需要的資源的水平。使用這個(gè)開(kāi)放源碼的產(chǎn)品對于我們的項目是稍微有一點(diǎn)冒險,因此我們需要確保它是仿彈的并且不是嚴重吞噬資源的。我們設計了一些通宵運行的單元測試來(lái)找出任何內存的泄漏或者穩定性的問(wèn)題。Rational Purify 當前具有 Java 內存分析的功能,因此我們決定用它試一下。
在 C 或者 C++ 項目中,我們已經(jīng)強制在組件上運行 Purify 來(lái)預防進(jìn)入產(chǎn)品代碼的內存訪(fǎng)問(wèn)的違規。使用 Java ,象讀空指針、內存泄漏和數組越界的問(wèn)題已經(jīng)不是什么問(wèn)題了;然而,Purify 依然在分析 Castor 中為我們提供了非常有用的特性。
為了運行 Purify ,我們首先必須設置參數配置以使用正確的 JDK 。除了我們選中了" Pause JVM console after exit "選項之外,我們?yōu)槲覀兊?JDK 版本使用缺省的設置,以便我們能夠在 Purify 測試被完成時(shí)看到我們的6%D3%C3">應用的任何錯誤或者結束的結果(見(jiàn)圖 7 )。
6.jpg" width=420>
圖 7: 為Rational Purify 配置 JVM
為了運行 Purify 測試,我們選擇 File > Run 并且通過(guò)瀏覽Main.class 文件設置程序名為 Main.class 。這設置了如圖 8 所示的缺省選項。我們所做的唯一改變(因為切斷的顯示,所以在這個(gè)圖中看不到)是更新命令行參數來(lái)運行 asdi.exchange.command.Main ,因此 Purify 的缺省設置是沒(méi)有包范圍的 Main 。
6.jpg" width=420>
圖 8: 運行一個(gè) Purify 的 Java 測試
有趣的是,我們第一次就遇到了類(lèi)格式的異常錯誤。在過(guò)去當我們在 JDK 1.1 和 JDK 1.3 之間遷移時(shí)我們看到過(guò)這些異常,在那里 *.class 驗證規則發(fā)生了變化。由于一些原因我們有一次遇到了這個(gè)問(wèn)題,但是僅僅是在 Purify 中遇到了這個(gè)問(wèn)題。如果我們使用 J2SE 的 javac.exe 代替 jikes.exe (IBM 的高速編譯器)來(lái)編譯 *.class 文件,問(wèn)題就消失了。Rational Purify 的分析結果在圖 9 中被顯示。
6/083
圖 9: 對于 command gateway 的 Purify 輸出
(
6/083
我們運行了這個(gè)測試幾個(gè)小時(shí)以確保它是可重復的和可預見(jiàn)的。沒(méi)有問(wèn)題被注意到,除了垃圾收集的問(wèn)題。雖然內存使用從沒(méi)蔓延,但是我們的6%D3%C3">應用在每妙秒中處理和映射 200 個(gè)命令時(shí)強制的執行了有意義的垃圾收集。在現在為止,我們沒(méi)有看到性能的問(wèn)題,因為在測試的任何一個(gè)點(diǎn)上 CPU 的負載從沒(méi)變得緊張。
Rational Quantify 一直是我們在 C 或者 C++ 項目中喜愛(ài)的工具。我們通常使用它來(lái)跟蹤性能的問(wèn)題確保沒(méi)有哪斷代碼浪費了 CPU 或者實(shí)時(shí)周期。
Quantify 在外表和配置方面類(lèi)似于 Purify ,并且 JVM 的設置以相同的方式被完成。Quantify 對于了解 Castor 是如何影響的 CPU 和時(shí)間是非常有用的,并且它可以幫助我們知道 Castor 的大量工作在哪里。圖 10 顯示了在分析我們的 command gateway 代碼時(shí) Quantify 環(huán)境的一個(gè)樣例截圖。
6/083
6.gif" width=300 border=0>
圖 10:對于 command gateway 代碼的 Quantify 輸出
(
6/083對于我們來(lái)說(shuō)有一點(diǎn)變得清楚了,就是當 Castor 運行時(shí) Xerces (Castor 的底層 XML 解釋器)使用了相當數量的 CPU 。我們顯然遇到了相同的問(wèn)題,因為我們仍然必須要解釋 XML 消息以提取內容。Quantify 使我們能夠了解到在調用棧中對于每一個(gè)部分的執行的最大和最小的時(shí)間,被派生的時(shí)間消耗和其他有用的信息。最后,我們覺(jué)得在我們的系統中包含 Castor 使合適的,因為它展示它的健壯性和一些好的特性。
單元測試是我們的開(kāi)發(fā)工作中的至關(guān)重要的部分。多數的開(kāi)發(fā)人員只是進(jìn)行一下形式上的單元測試,甚至不被要求單元測試;然而,我們發(fā)現通過(guò)正式的單元測試過(guò)程來(lái)確保一致的精確和質(zhì)量是具有巨大價(jià)值的。開(kāi)發(fā)人員通常將重點(diǎn)放在他們測試中的錯誤條件上,然而單元測試應該測試軟件的幾個(gè)方面。一些資源提供了對于團隊來(lái)說(shuō)在定義角色和單元測試規范的樣子的有用的信息被列在本文后面的開(kāi)發(fā)人員經(jīng)常定義他們自己的單元測試規范,因為這些測試是非常底層的白盒和黑盒測試,他們也是很詳細的,可以讓集成與測試團隊理解。為了在單元測試規范中強制一致的詳細程度,我們將他們包含在同級評審過(guò)程中。
我們建立了同級評審來(lái)幫助我們在
6%D3%C3">應用系統的 bug 影響生產(chǎn)環(huán)境的系統之前識別出他們,并且我們觀(guān)察到一些事情非常有趣:在評審過(guò)程中很少的 bug 被識別出來(lái)。最初這看起來(lái)顯示了一種在代碼評審價(jià)值的缺乏,因此項目工程師們并不是非常認真的檢查每一件事情。這里是他們所發(fā)現的:
同級評審的出現簡(jiǎn)潔的提升了軟件的質(zhì)量,因為開(kāi)發(fā)人員知道他們的代碼將要被仔細的審查。 以標準、指導方針、預排和更好的培訓的形式被添加的過(guò)程正減少著(zhù)影響代碼的 bug 。 正式的單元測試的增加正給開(kāi)發(fā)人員一個(gè)機會(huì )來(lái)為開(kāi)發(fā)人員自己捕捉 bug 。在早期的項目中我們沒(méi)有計劃這種額外的單元測試的工作,開(kāi)發(fā)人員感到了十分可怕的壓力并匆忙的使他們的代碼進(jìn)入集成計劃。
同級評審也通過(guò)技能和方法的交叉傳授改進(jìn)了整個(gè)團隊的能力。開(kāi)發(fā)人員通過(guò)了解其他每個(gè)人的想法建立起良好的設計模式和編碼習慣的部分。代碼的評審允許使用大量的時(shí)間對各種編碼策略進(jìn)行有價(jià)值的贊成和反對的討論;因此,通常為了學(xué)習的目的我們會(huì )盡量讓至少一個(gè)初級的開(kāi)發(fā)人員參與評審。
我們的編碼標準不僅僅是簡(jiǎn)單的針對風(fēng)格的問(wèn)題,而且也涉及到了編碼習慣、編碼實(shí)踐和性能問(wèn)題。標準在三個(gè)午餐小時(shí)被呈現給了團隊,連同的還有針對評審過(guò)程的指導方針。
評審過(guò)程的步驟如下:
在完成了代碼和單元測試之上,開(kāi)發(fā)人員創(chuàng )建一個(gè)由設計說(shuō)明、代碼、單元測試說(shuō)明和單元測試結果組成的評審包。 評審包被分發(fā)給評審人員 — 也就是根據代碼的復雜程度分發(fā)給團隊領(lǐng)導和其他的兩個(gè)開(kāi)發(fā)人員。 開(kāi)發(fā)人員為評審人員執行 1 到 3 個(gè)小時(shí)的代碼預排。 評審人員分別的評審和標注代碼,并將標注返回給開(kāi)發(fā)人員。 開(kāi)發(fā)人員查看評審人員的注釋。 開(kāi)發(fā)人員與評審人員一起執行 1 到 2 個(gè)小時(shí)的注釋預排,并為每一個(gè)注釋達成一致的行動(dòng)計劃。
最初我們存在著(zhù)對這個(gè)評審過(guò)程會(huì )花去過(guò)多時(shí)間的擔心,但是我們發(fā)現它這個(gè)過(guò)程是極有價(jià)值的,它提供了:
每個(gè)人都很好的為每一個(gè)階段進(jìn)行準備。 簡(jiǎn)單的說(shuō),代碼有很少的評審人員 — 有時(shí)僅僅是團隊領(lǐng)導。 最后的預排會(huì )議不是匆忙的,因為它提供了很多在方案上的交流、一致意見(jiàn),和沖突的討論。
我們已經(jīng)通過(guò)指導方針?shù)伜昧寺?,調整了團隊的結構和經(jīng)過(guò)深思熟慮的開(kāi)發(fā)方法,我們發(fā)現開(kāi)發(fā)(包括對設計的細化)正很好的向前進(jìn)展著(zhù)。工程團隊開(kāi)始了解了Rational Suite DevelopmentStudio 工具的威力。對于這些工具的學(xué)習曲線(xiàn)是不尋常的,但是通過(guò)這段時(shí)間我們已經(jīng)能夠很舒服的使用他們了。特別要指出的是,我們通過(guò)使用Rational Rose 的雙向工程、Rational Purify 的檢查 Java 內存使用和Rational Quantify 的代碼分析的能力獲得了很大的利益。使用這些工具,連同建立單元測試和同級評審,我們很好的達到了 ASDI 系統的質(zhì)量目標。
62>計劃未來(lái)
我們越快的使我們的團隊習慣小版本的構建,將對我們的項目越有好處。我們預期為子系統建立每星期五的構建周期,并也建立每第二個(gè)星期五進(jìn)行子系統的集成。為這些小版本的構建組成團隊是有價(jià)值的,并且對于團隊來(lái)說(shuō)也是非常好的通過(guò)讓大家看到事情被合并成為一個(gè)整體來(lái)鼓舞士氣的方法。
在接下來(lái)的幾周中將是產(chǎn)生內部和外部的早期演示的工作。為了外部的演示我們將很快的將用戶(hù)界面屏幕集成到一起。這對我們來(lái)說(shuō)也是非常好的機會(huì )來(lái)得到額外的需求反饋。
甚至是在開(kāi)發(fā)的早期階段,遠程開(kāi)發(fā)的挑戰就一直敲打著(zhù)我們,并且我們知道當我們開(kāi)始集成我們的組件和子系統時(shí)這個(gè)挑戰將會(huì )變得更加的辣手。早期的”實(shí)踐構建“需要很快的開(kāi)始以便我們能夠平滑的實(shí)現集成的過(guò)程和解決早期的問(wèn)題。
貫穿整個(gè)項目遠程開(kāi)發(fā)對于我們來(lái)說(shuō)都是一個(gè)挑戰。雖然我們以前也做過(guò)遠程開(kāi)發(fā),但是我們還沒(méi)有解決如何集成跨越分離的地理位置的團隊工作結果的問(wèn)題。我們了解到Rational 的工具不能完全的消除遠程開(kāi)發(fā)的問(wèn)題,但是他們至少能夠減輕遠程開(kāi)發(fā)的痛苦。例如,我們還不能防止高級開(kāi)發(fā)人員在 command gateway 設計方面的分歧,但是逆向工程能夠通過(guò)最少的工作幫助我們評估和集成她的變化。
為了符合我們嚴格最終期限,開(kāi)發(fā)必須以高效的步伐繼續前進(jìn)。自從我們提供給客戶(hù)軟件的架構文檔,已經(jīng)有一段時(shí)間了,客戶(hù)渴望看到一些進(jìn)展。盡快的提供集成的演示是重要的。
Scott W. Ambler 編著(zhù)。
Steven Franklin 在軟件的設計、架構和工程過(guò)程方面有非常廣泛的背景,這些經(jīng)驗通常被用到大的,分布式的信息管理和控制系統中。他從1997年開(kāi)始使用
Rational 工具,他主要的興趣在 XML 、J2EE、無(wú)線(xiàn)和軟件工程技術(shù)方面。你可以通過(guò)steve@sfranklin.net聯(lián)系 Steven.
6.gif" width=10 border=0>
作者Blog:http://blog.csdn.net/jackei/
本站僅提供存儲服務(wù),所有內容均由用戶(hù)發(fā)布,如發(fā)現有害或侵權內容,請點(diǎn)擊舉報。
打開(kāi)APP,閱讀全文并永久保存 查看更多類(lèi)似文章
猜你喜歡
類(lèi)似文章
如何管理飛揚跋扈的技術(shù)人員
iOS開(kāi)發(fā)工程師年終述職報告3篇
項目做完了,總結一下
Scrum敏捷團隊的必備技能
軟件項目經(jīng)理對團隊成員的九項要求
項目管理雜談(1):代碼評審這點(diǎn)事,元芳你怎么看
更多類(lèi)似文章 >>
生活服務(wù)
分享 收藏 導長(cháng)圖 關(guān)注 下載文章
綁定賬號成功
后續可登錄賬號暢享VIP特權!
如果VIP功能使用有故障,
可點(diǎn)擊這里聯(lián)系客服!

聯(lián)系客服

欧美性猛交XXXX免费看蜜桃,成人网18免费韩国,亚洲国产成人精品区综合,欧美日韩一区二区三区高清不卡,亚洲综合一区二区精品久久