繁体   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