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

时间:2009-06-21 12:25:31

标签: java java-ee audit

我必须审核一个已经发展过几个的大型Web Java / J2ee应用程序 年份。它是由其他公司编写的,而不是我正在为之工作的公司。在 它现在的状态变得难以发展和维持,新的 功能很难添加,并经常导致有时出现的错误 生产。似乎有一些复制/粘贴代码导致代码重复。 当前的应用程序是某种在线购物,其中包含一些类似cms的内容。 它主要是Struts和一些Spring代码的新部分,也许是一些ejbs 好的措施。有一些单元测试可用,但不是很多。 这些是我被告知的事情,我还没有看到实际的代码。

我的公司将提出重写此应用程序部分的建议,以减少 复杂性,提高质量和模块化,并使添加更容易 没有回归的新功能。 在做任何交流之前,他们希望得到一些赞赏 现有代码的质量,并按顺序评估其中有多少可以重复使用 不仅要猜测将要做什么 - 完全重写或部分 重写。

问题是,我必须在很短的时间内(几天)这样做,所以我 试图制定一个可以在如此短的时间内完成的计划。我的意思是:

  • 查看“基本”事项 - 例外处理,记录
  • 查看分层级别(视图,控制器,dao层)
  • 测量单元测试的实际覆盖范围
  • 可能在项目上运行一些Checkstyle,Findbugs和PMD
  • ...

所以实际的问题是我应该考虑其他什么/检查/测量/等等?

我不确定我可以从中得到什么样的数字,如果它真的意味着什么 有些事情,我觉得管理层提出的问题是错误的 方法,所以第二个问题是:有没有人有更好的想法?

我会感激任何想法,建议,评论。

编辑:我将添加两个死代码检测器:UCDDCD

4 个答案:

答案 0 :(得分:8)

我有两个与你有类似设置的网络应用程序。我停止使用FindBugs和Checkstyle,因为他们显示了超过10.000个问题点。应用程序使用JDBC级别数据访问,JSP用于表示,以及用于请求分派的自定义框架。幸运的是,这些低级设置允许我在中等难度下进行扩展和修复。在为期3年的项目中,只有大约20%的原始代码保持不变。其他所有东西都需要更改,替换或删除(最后我能够使用FindBugs和Checkstyle)。

我们也面临完全重写的困境。但是,有几个因素反对它:

  • 不确定客户是否会支付全部重写费用。
  • 缺乏功能和技术文档会导致完全重写风险。
  • Manhours完全理解完整的应用程序太高了。客户希望尽快得到所要求的更改。
  • 定制演示文稿和页面行为的用户。似乎很难说服用户为旧功能使用新界面。
  • 如果我们进行完全重写,我们需要提供完整的文档。如需更新,我们只需要记录我们的部分。
  • 如果程序有效(或多或少),很难说服管理层(自己和客户)重写
  • 公司有自己的PMD规则,代码没有通过。认为新零件通过测试就足够了。

归结为你想要做的事情。

你想重写,尽管很复杂吗?

  • 强调代码错误。带有大量红色的大饼图令人信服。
  • 解释程序属性以及它们如何不符合企业愿景。
  • 显示超出当前要求的增强选项,并描述当前版本如何应对挑战。
  • 采访真实用户。他们可能会指出当前版本的重要问题。
  • 便宜但是很好的估算。您可能会将一些费用延迟到维护阶段。

您不想重写?

  • 强调成本,尤其是客户要求重新测试所有内容的工时。
  • 指出破坏功能的潜在麻烦。
  • 要求一名全职文件撰稿人。

如果您想品尝代码,请尝试添加Hello World!功能/屏幕到应用程序。这说明你可以用多少努力和多快的速度来实现新事物。

答案 1 :(得分:3)

事实上,他们不会支付全部重写费用,因为:

  • 这是经济衰退,你从头开始重写的成本会很高

  • 他们可能会尽快出售公司

  • 管理层对软件开发一无所知

我首先会谈到一些简单的事实:

  • 使用工具显示项目的SLOC
  • 按计划运行FindBugs并最终运行PMD,只是为了估计缺陷
  • 快速分析会话
  • 检查不同的图层
  • 查看资源是否通常是关闭的(Streams,Hibernate或JDBC连接等)
  • 查看技术是否在不适用的地方使用(EJB,Web服务等)
  • 了解它们如何处理异常和记录
  • 查看是否有太多或不足够的抽象
  • 查看是否可以添加一些基类以减少代码重复

尝试绘制应用程序架构的快速图表,如果它们没有为您提供相关文档。

收集一些统计数据和一些事实,撰写报告并将其发送给公司。他们希望最大限度地降低成本,他们会要求您避免修复未破坏的代码。您可以从统计数据开始,然后查看事实和具有时间/大致代码影响/定价百分比的命题。

通常,传统的Struts应用程序是必须维护的。如果它不是你工作的一部分,我会说放手吧。如果您遇到“独立”页面,这些页面不涉及许多模板并且需要进行许多更改,建议使用其他一些技术重写它们。

答案 2 :(得分:2)

我非常喜欢你的名单。我认为你有一个很好的攻击计划。

我着眼于标准化Spring或EJB 3.0,但不是两者都标准化。

我自己没看过,但我想知道Michael Feathers的书"Working Effectively With Legacy Code"是否有任何好主意?

更新:

也许您可以通过将它们置于自动构建和持续集成(Cruise Control,Hudson或Team City)来提供帮助。如果你必须做任何重构,它会有所帮助。

答案 3 :(得分:2)

您正专注于可维护性和可扩展性,这是现场的。

我想补充看重启项目需要多长时间。他们使用源代码控制吗?他们是否有单独的环境进行集成和用户验收测试?是否有构建服务器?

当您需要花费两个月才能实现第一次改进时,有人需要提前管理客户的期望。