Python:检测从未在生产中执行的代码

问题描述 投票:6回答:3

我需要在一个庞大的遗留Python代码库中进行重构。

我常常认为“这些生产线不再在生产中执行”。

但我不确定。

有一些测试触及这些线。但我无法确定生产中是否真的没有使用过。

在这种情况下我该怎么办?

这个问题涉及生产系统的覆盖范围。这个问题与测试/ CI期间的覆盖率无关。

我不想评论这些行,因为我不想在生产系统中产生错误。

refactoring code-cleanup legacy-code
3个回答
3
投票

通常的做法是在代码行中使用日志记录。例如你有一块你认为没有使用的代码。您可以在该代码块的开头添加try catch块。在trycatch中,您可以将行添加到与您的可疑代码块相同的特定json中。

try:
    with open("block1.dat", "rb") as file:
        activity = pickle.load(file)

    curtime = datetime.datetime.now().strftime('%Y-%m-%d %H:%M:%S')
    currentact = "dt = {}; code done that: var1 = {}, 
        var2 = {}".format(curdate, var1, var2)

    activity.append(currentact)

    file = open("block1.dat", "ab")
    pickle.dump(activity, file)
    file.close()
except Exception: pass

您可以使用telegram api将代码记录到。过了一会儿,您将获得有关您的代码工作频率以及它的作用的信息。然后你监视一段时间,如果一个月没有任何反应,你可以评论该块。


2
投票

生产系统是否具有确定性?它是互动的吗?控制流量是否依赖于输入数据?您是否可以访问所有可能的输入?测试是否存在是出于某种原因还是仅仅因为?

我会小心地根据记录需要删除代码,除非我知道很少有异常情况发生。

我会按照公共代码路径尝试逐个理解代码库,以便找出可以简化的内容。在不了解您正在处理的系统的情况下,很难提供更具体的建议。


0
投票

我们使用一个简单的模式来处理这个问题:looks_like_dead_code(my_string)

这是一个记录字符串“my_string”的方法。

用法示例:

    if ext == '.jpe':
        looks_like_dead_code('2018-11-30 tguettler: looks fixed in mime_type_to_extension')

使用日期和开发人员登录不是强制执行,这只是最佳做法。

如果该行被执行,那么负责检查日志的人将与开发人员交谈。

由于我们的生产环境大致在两周内更新一次,因此您可以确定此行在过去几个月内未执行。

我喜欢这个解决方案,因为在大多数情况下它是这样的:

  1. 您想要修复错误或实现新功能
  2. 你查看代码并看到一些看起来像死代码的行。我的意思是代码没用,因为它不会再被执行了。
  3. 你没有时间去调查。你可以深入猜测这是死代码。您想要做您的实际工作(修复错误或实现新功能。请参阅步骤1)
  4. 方法looks_like_dead_code()为您提供了实际执行操作的方法,并为其他开发人员留下了注释。只需几秒钟就可以改善现状。
  5. 如果您有Tickler file System,您可以提醒自己在六个月内检查此代码。至少在我的上下文中,我可以非常肯定,如果这条线没有执行几个月,这就是死代码。
© www.soinside.com 2019 - 2024. All rights reserved.