gpt4 book ai didi

Java 应用程序——我的代码的哪些所有部分都在生产中启动?

转载 作者:搜寻专家 更新时间:2023-10-31 20:22:40 24 4
gpt4 key购买 nike

我有一个基于 Java Web 的应用程序在生产环境中运行。我需要一些方法来查看最终用户的操作实际使用了代码的所有部分。

只是为了进一步阐明我的要求。

  1. 我不想放置基于日志记录的解决方案。任何需要我放置一些日志并分析日志的解决方案都不是我正在寻找的东西。

  2. 我需要一些类似单元测试覆盖率报告器的解决方案。像 cobertura 或 emma 报告一样,在运行单元测试后,它向我展示了单元测试激发了我的所有代码部分。我需要一些能够在生产环境中监听 JVM 并告诉我代码的哪些部分在生产环境中被最终用户的操作激活的东西。

我为什么要尝试这样做?我有一个我继承的代码。这是一个很大的部分——大约 25,000 个类。我需要做的其中一项工作是砍掉应用程序中没有被过多使用的部分。如果我能向管理层表明应用程序的某些部分几乎没有被使用,我就可以从该产品中砍掉这些部分并有效地使该产品更易于管理(就像在需要每次运行的手动回归测试套件中一样)一周左右,需要几天,可以缩短)。

希望有现成的解决方案。

最佳答案

正如 Joachim Sauer 在您的问题下方的评论中所说:最直接的方法是仅使用您用于单元测试的代码覆盖工具,并使用它检测生产代码。

有一个主要问题:开销。代码覆盖率分析确实可以减慢速度,虽然知情的用户群会容忍一些暂时的性能下降,但整个事情需要保持可用。

根据我的经验,JaCoCo 相对较轻,不会造成太多开销,而 Cobertura 会造成巨大的减速。另一方面,JaCoCo 仅标记“命中或未命中”,而 Cobertura 为您提供每行命中数。这意味着 JaCoCo 只会让你找到死点,而 Cobertura 会让你找到很少命中的点。

无论您使用这两种工具中的哪一种(可能一个接一个),您最终可能会得到巨大的类白名单和类黑名单,以将覆盖率计数限制在有意义的地方,从而降低性能开销.例如,如果整个事物只有一个前端 Controller Servlet,将其包含在分析中将最大化性能开销,同时不提供任何有值(value)的信息。这可能会变成大量工作和大量应用程序部署。

识别特定子系统的瓶颈/网关并在每个子系统上打一个计数器(例如 perf4j 或什至是成熟的 Nagios)实际上可能更快,工作更少。查询是另一个用来反击的好地方。如果您怀疑应用程序的某些部分很少使用,请在那里放置几个计数器,看看会发生什么。

关于Java 应用程序——我的代码的哪些所有部分都在生产中启动?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9213368/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com