修复库代码中的错误,还是放弃它们?

Ian*_*oyd 12 language-agnostic api

假设我在代码库中有一个函数,其中有一个错误,我在代码库中发现了一个错误:

class Physics
{
    public static Float CalculateDistance(float initialDistance, float initialSpeed, float acceleration, float time)
    {
        //d = d0 + v0t + 1/2*at^2
        return initialDistance + (initialSpeed*time)+ (acceleration*Power(time, 2));
    }
}
Run Code Online (Sandbox Code Playgroud)

注意:示例和语言是假设的

我无法保证修复此代码不会破坏某人.

可以想象,有些人依赖于此代码中的错误,并且修复它可能会导致他们遇到错误(我无法想到可能发生的实际方法;也许这与他们构建查找有关距离表,或者如果距离是错误的值而不是他们的预期,他们可能只是抛出异常

我应该创建第二个功能:

class Physics
{
    public static Float CalculateDistance2(float initialDistance, float initialSpeed, float acceleration, float time) { ... }

    //Deprecated - do not use. Use CalculateDistance2
    public static Float CalculateDistance(float initialDistance, float initialSpeed, float acceleration, float time) { ... }
}
Run Code Online (Sandbox Code Playgroud)

在没有正式弃用代码的语言中,我是否只相信每个人都要切换到CalculateDistance2

它也很糟糕,因为现在理想命名的函数(CalculateDistance)永远会丢失一个可能没有人需要的遗留函数,并且不想使用它.

我应该修复错误,还是放弃它们?

也可以看看

Ken*_*ick 2

我曾经与一些 MFC 代码进行了几天的斗争,这些代码的行为方式完全出乎意料。当我最终发现这是 Microsoft 提供的库中的错误时,我检查了知识库。它被记录为(大约)“这是我们在 2 个操作系统版本前发现的一个已知错误。我们没有修复它,因为有人可能依赖它”。

我有点生气...

我想说你应该弃用它。如果您要升级代码所依赖的库,则应该使用新库测试代码。如果它是遗留代码,那么它就存在一个已知的配置。为您的用户提供建议并继续前进......