程序員開發大型應用程序的技巧

發表于:2012-04-27來源:InfoQ作者:Choudary Kothapalli點擊數: 標簽:程序員開發
如你是一名Java開發者,正在開發和維護包含2000個類并使用了很多框架的應用程序。你要如何理解這些代碼呢?在典型的Java企業項目小組中,大部分能夠幫你的高級工程師看起來都很忙,文檔也很少。你需要盡快交付成果,并向項目組證明自己的能力。你會如何處理這

  如你是一名Java開發者,正在開發和維護包含2000個類并使用了很多框架的應用程序。你要如何理解這些代碼呢?在典型的Java企業項目小組中,大部分能夠幫你的高級工程師看起來都很忙,文檔也很少。你需要盡快交付成果,并向項目組證明自己的能力。你會如何處理這種狀況呢?這篇文章為開始開發新項目的Java開發者提供了一些建議。

  1. 不要試圖一下子搞懂整個項目

  仔細考慮一下,為什么你會想要先理解項目代碼呢?大部分情況是有人要求你修復一個bug,或者增強系統已有功能。你要做的第一件事情不是理解整個項目的架構。當對項目進行維護時,這樣做(理解整個項目架構)可能會對你造成巨大的壓力。

  即便是有10年編程經驗的Java開發者,也無法理解項目的核心工作機制,盡管他們可能已經在這個項目工作超過一年(假設他們并非最初的開發人員)。比如,對于認證機制或事務管理機制還是缺乏確切的認識。

  他們是怎么做的呢?他們對于自己負責的部分非常了解,并且能夠交付價值給小組。每天的交付價值遠比了解一些以后還不確定有沒有的東西重要的多。

  2. 關注于盡快交付價值

  那我是要打消你對于理解項目架構的熱情嗎?完全不是。我只是要求你盡早地交付價值,一旦你開始一個項目,搭建了開發環境,你就不應該花一兩周時間才交付內容,無論它的規模大小如何。假如你是一位有經驗的程序員,卻兩周都沒有任何交付,你的經理怎么會知道你是真的在工作,還是在看新聞呢?。

  所以交付能夠將事情變得簡單。不要認為在做有價值的交付前,你必須理解整個項目。這是完全錯誤的。加一段javascript的驗證代碼對業務就很有價值,經理能夠通過你的交付對你更加信任。這樣能夠向上級領導證明你的貢獻以及員工價值。

  日復一日,在不斷修復bug及增強功能之后,你就能夠慢慢開始理解項目架構。不要低估對系統方方面面理解時需要花費的時間?;?到4天理解認證機制,2到3天理解事務管理。這些都是依靠之前的相似項目的經歷,但關鍵還是要花時間才能透徹的理解。要在日常工作中擠出時間,不要向經理要求特定的時間來做這些。

  找找項目是否有一些有效維護的單元測試用例。有效的單元測試用例是理解大型項目代碼很好的途徑。單元測試能夠幫助你理解代碼片段,包括一個單元的外部接口(單元如何被調用以及返回內容)及其內部實現(調試單元測試比調試整個實際用例簡單許多)。

  你如果能夠很好的理解一些內容,那么就寫些筆記,或者畫些類圖、時序圖、數據模型圖等,以便你或日后其他的開發者可以進行維護。

  3. 維護大型項目所必須的技能

  你能從事當前的工作,必然已經具有良好的java技術。我們來談談能夠讓你在新項目中良好表現的其他技能。大部分時間里,你在項目中的任務是修復bug和增強功能。

  有兩項很重要的技能能夠在你維護大型項目代碼起到幫助。

  3.1 能夠迅速發現需要的類

  在任何維護活動中,無論是修復bug或增強功能,第一件事情就是識別出當前修復或增強的用例中調用的類。當你定位到需要修復或增強的類/方法,就已經完工了一半。

  3.2 能夠分析變更的影響

  當你在完成必要的修改或增強工作后,最重要的就是要確認你的修改沒有破壞代碼的其他部分。你要用你的java技術及對其他框架的理解找出變更可能影響的部分。下面兩個簡單的例子詳細描述了最后提及的情況:

  當類A的equals()方法變更后,調用保存A實例的List的contains()方法時就會受到影響。若Java知識不夠,就很難考慮到這樣的影響。

  在web項目中,我們假設“user id”保存在session中。新加入的程序員可能在“user id”中加入一些信息來修復bug,但是卻不知道那會影響到 與“user id”關聯的用例。

  因此,既要深入了解Java語言,又要深入了解你在應用中使用的框架,這樣才能分析出一個改變的影響。

  當你提高了如上兩個技能,盡管你對項目不是非常了解,但大部分的維護任務會變得簡單很多。如果你想要修復一個bug,就會定位并修復這個bug,并且保證變更不會破壞項目的其他部分。如果你想要增強或加入特性,基本上你只需要模仿現有的特性,使用類似的設計。

  在一個在線銀行項目中,為什么“查看賬戶摘要”和“查看交易歷史”的設計要有巨大的差別呢?如果你理解了“查看賬戶摘要”的設計,完全可以模仿開發出“查看交易歷史”的功能。

  就修復bug和增強來說,你不必完全理解所有2000個類的工作內容和代碼驅動系統運行的原理。只要有上面的技能,你就能很快定位需要修改的代碼,使用良好的java和框架技能修復,保證變更不會破壞項目的其他部分,然后交付,盡管你可能只知道一小部分項目的設計。

  4. 使用工具找到所需變更內容以及變更產生的影響

  繼續我們盡快交付的主題,你應該尋找工具作為輔助,只需要對項目又很少理解,就能幫助你盡快實施交付。

  4.1 迅速發現所需變更內容的工具

  無論是修復bug還是增強系統,首先你都要找到該用例調用且需要修改的類及方法?;旧嫌袃煞N方式理解用例的工作方式,靜態代碼分析和運行時分析。

  源碼分析統計會掃描所有代碼并且展現類之間的關系。市場上有很多工具。比如:Architexa、AgileJ、UModel、Poseidon等。

  所有靜態代碼分析工具的缺點在于,它們無法確切展現 用例中類或方法的運行時調用情況。因此Java新加入了一些特性,如回調機制(callback patterns)。比方說,靜態分析工具無法推斷出當前頁面提交按鈕被點擊時,會調用哪個Servlet。

  運行時分析工具能夠展現類和方法在用例運行時的狀態。這樣的工具包括:MaintainJ、Diver、jSonde、Java Call Tracer等。這些工具可以捕獲運行時的堆棧狀態,并以此為用例生成序列圖和類圖。

原文轉自:http://www.anti-gravitydesign.com

国产97人人超碰caoprom_尤物国产在线一区手机播放_精品国产一区二区三_色天使久久综合给合久久97