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

2022-09-03 14:53:18

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

我的公司将提出重写此应用程序部分内容的提议,以降低复杂性,提高质量和模块化,并有可能在没有回归的情况下添加更简单的新功能。在进行任何提交之前,他们希望对现有代码的质量有某种程度的了解,并评估其中有多少可以重用,以便对必须完成的工作进行更多的猜测 - 完全重写或部分重写。

问题是我必须在很短的时间内(几天)完成这项工作,所以我正试图制定一个计划在这么短的时间内可以做些什么。我所想的是:

  • 查看“基本”事物 - 异常处理,日志记录
  • 查看分层级别(视图、控制器、dao 层)
  • 测量单元测试的实际覆盖率
  • 也许在项目上运行一些Checkstyle,Findbugs和PMD
  • ...

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

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

我将不胜感激任何想法,建议,对此发表评论。

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


答案 1

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

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

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

它归结为你实际上想做的事情。

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

  • 把重点放在代码错误上。带有大量红色的大型饼图令人信服。
  • 解释程序属性以及它们如何不符合公司愿景。
  • 显示超出当前要求的增强功能选项,并描述当前版本如何无法应对挑战。
  • 与真实用户进行访谈。他们可能会指出当前版本的重要问题。
  • 便宜,但一个好的估计。您可能会将一些成本推迟到维护阶段。

你不想重写吗?

  • 强调成本,特别是客户重新测试一切所需的工时。
  • 指出破坏功能的潜在麻烦。
  • 要求全职文档编写人员。

如果你想品尝代码,试着添加Hello World!功能/屏幕到应用程序。这说明了你实施新事物的难度和速度。


答案 2

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

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

  • 他们可能试图尽快出售公司

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

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

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

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

收集一些统计数据和一些事实,写一份报告并发送给公司。他们希望最大限度地降低成本,他们会要求您避免修复未损坏的代码。您从统计数据开始,然后是事实和命题,其中包含受影响的代码/定价的时间/近似百分比。

通常,遗留的Struts应用程序是一个皮塔饼来维护,已经做到了。如果这不是你工作的一部分,我会说让它去吧。如果您遇到不涉及许多模板并且受到许多更改的“独立”页面,请建议使用其他一些技术重写它们。


推荐