簡體   English   中英

審核大型java / j2ee Web應用程序的最佳方法是什么?

[英]What's the best approach in auditing a big java/j2ee web application

我必須審核一個已經發展了幾年的大型Web Java / J2ee應用程序。 它是由其他公司編寫的,而不是我正在為之工作的公司。 在目前的狀態下,它變得難以發展和維護,新的功能很難添加,並且經常導致生產中出現的錯誤。 似乎有一些復制/粘貼代碼導致代碼重復。 當前的應用程序是某種在線購物,其中包含一些類似cms的內容。 它主要是代碼的新部分中的Struts和一些Spring,也許有些ejbs可以用來衡量。 有一些單元測試可用,但不是很多。 這些是我被告知的事情,我還沒有看到實際的代碼。

我的公司將提出重寫此應用程序部分的建議,以降低復雜性,提高質量和模塊性,並且可以在沒有回歸的情況下添加更簡單的新功能。 在進行任何通信之前,他們希望對現有代碼的質量有一些了解並評估其中有多少可以重復使用,以便不必猜測將要做什么 - 完整重寫或部分重寫。

問題是,我必須在很短的時間內(幾天)做到這一點,所以我正在努力制定一個計划,以便在如此短的時間內完成任務。 我的意思是:

  • 檢查“基本”的東西 - 例外處理,記錄
  • 檢查分層的級別(視圖,控制器,dao層)
  • 衡量單元測試的實際覆蓋范圍
  • 也許在項目上運行一些Checkstyle,Findbugs和PMD
  • ...

那么實際的問題是我應該考慮/檢查/衡量/等其他什么?

我不確定我能從中得到什么樣的數字,如果它真的意味着什么,我覺得管理層所要求的是一種錯誤的方法,所以第二個問題是:有沒有人有一個更好的主意?

我會感激任何想法,建議,評論。

編輯:我將添加兩個死代碼檢測器: UCDDCD

我有兩個與您具有類似設置的Web應用程序。 我停止使用FindBugs和Checkstyle,因為他們顯示了超過10.000個問題點。 應用程序使用JDBC級別數據訪問,JSP用於表示,以及用於請求分派的自定義框架。 幸運的是,這些低級設置允許我在中等難度下進行擴展和修復。 在為期3年的項目中,只有大約20%的原始代碼保持不變。 其他一切都需要更改,替換或刪除(最后我能夠使用FindBugs和Checkstyle)。

我們也面臨完全重寫的困境。 但是,有幾個因素反對它:

  • 不確定客戶是否會支付全部重寫費用。
  • 缺乏功能和技術文檔會導致完全重寫風險。
  • Manhours完全理解完整的應用程序太高了。 客戶希望更快地獲得所請求的更改。
  • 用戶可以自定義演示文稿和頁面行為。 似乎很難說服用戶使用新接口來處理舊功能。
  • 如果我們進行完全重寫,我們需要提供完整的文檔。 為了更新,我們只需要記錄我們的部分。
  • 如果程序有效(或多或少),很難說服管理層(自己和客戶)重寫
  • 該公司有自己的PMD規則,代碼沒有通過。 認為新部件通過測試就足夠了,這更簡單。

它歸結為你想要做的事情。

盡管有復雜性,你想重寫嗎?

  • 強調代碼錯誤。 有大量紅色的大餅圖令人信服。
  • 解釋程序屬性以及它們如何不符合企業願景。
  • 顯示超出當前要求的增強選項,並描述當前版本如何應對挑戰。
  • 采訪真實用戶。 他們可能會指出當前版本的重要問題。
  • 便宜但是很好的估算。 您可能會延遲一些成本,直到維護階段。

你不想改寫?

  • 強調成本,特別是客戶要求重新測試一切所需的工時。
  • 指出破壞功能的潛在麻煩。
  • 要求一名全職文件撰稿人。

如果您想品嘗代碼,請嘗試添加Hello World! 功能/屏幕到應用程序。 這說明了你能夠實現新事物的難度和速度。

事實上,他們不會支付全部重寫費用,因為:

  • 這是經濟衰退,你從頭開始重寫它的成本會很高

  • 他們可能會盡快出售公司

  • 管理層對軟件開發一無所知

我先說一些簡單的事實:

  • 使用工具顯示項目的SLOC
  • 按計划運行FindBugs並最終運行PMD,只是為了估計缺陷
  • 快速分析會話
  • 檢查不同的圖層
  • 查看資源是否通常是關閉的(Streams,Hibernate或JDBC連接等)
  • 查看技術是否在不適用的地方使用(EJB,Web服務等)
  • 了解它們如何處理異常和日志記錄
  • 看看是否有太多或不足夠的抽象
  • 看看是否可以添加一些基類來減少代碼重復

如果他們沒有為您提供有關它的文檔,請嘗試繪制應用程序體系結構的快速圖表。

收集一些統計數據和一些事實,撰寫報告並將其發送給公司。 他們希望最大限度地降低成本,他們會要求您避免修復未破壞的代碼。 您可以從統計數據開始,然后查看事實和一個命題,其中包含受影響/定價的代碼的時間/近似百分比。

通常遺留的Struts應用程序是維護的必備軟件。 如果它不是你工作的一部分,我會說放手吧。 如果您遇到“獨立”頁面,這些頁面不涉及許多模板並且需要進行許多更改,建議使用其他一些技術重寫它們。

我非常喜歡你的名單。 我認為你有一個很好的攻擊計划。

我將着眼於標准化Spring或EJB 3.0,但不是兩者兼而有之。

我自己沒有看過,但我想知道Michael Feathers的書“有效地使用遺留代碼”是否有任何好的想法?

更新:

也許您可以通過將它們置於自動構建和持續集成(Cruise Control,Hudson或Team City)來提供幫助。 如果你必須做任何重構,它會有所幫助。

您正專注於可維護性和可擴展性。

我想補充看重啟項目需要多長時間。 他們使用源代碼控制嗎? 他們是否有單獨的環境進行集成和用戶驗收測試? 有構建服務器嗎?

當您需要花費兩個月才能實現第一次改進時,有人需要提前管理客戶的期望。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM