我需要在一个庞大的遗留Python代码库中进行重构。
我常常认为“这些生产线不再在生产中执行”。
但我不确定。
有一些测试触及这些线。但我无法确定生产中是否真的没有使用过。
在这种情况下我该怎么办?
这个问题涉及生产系统的覆盖范围。这个问题与测试/ CI期间的覆盖率无关。
我不想评论这些行,因为我不想在生产系统中产生错误。
通常的做法是在代码行中使用日志记录。例如你有一块你认为没有使用的代码。您可以在该代码块的开头添加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将代码记录到。过了一会儿,您将获得有关您的代码工作频率以及它的作用的信息。然后你监视一段时间,如果一个月没有任何反应,你可以评论该块。
生产系统是否具有确定性?它是互动的吗?控制流量是否依赖于输入数据?您是否可以访问所有可能的输入?测试是否存在是出于某种原因还是仅仅因为?
我会小心地根据记录需要删除代码,除非我知道很少有异常情况发生。
我会按照公共代码路径尝试逐个理解代码库,以便找出可以简化的内容。在不了解您正在处理的系统的情况下,很难提供更具体的建议。
我们使用一个简单的模式来处理这个问题: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')
使用日期和开发人员登录不是强制执行,这只是最佳做法。
如果该行被执行,那么负责检查日志的人将与开发人员交谈。
由于我们的生产环境大致在两周内更新一次,因此您可以确定此行在过去几个月内未执行。
我喜欢这个解决方案,因为在大多数情况下它是这样的: