CodeSOD:大费周章却一无所获
一个遗留的金融应用程序包含一个名为 ValueAGPFund 的 C# 方法,该方法因存在大量副作用而受到批评。此方法会修改其输入参数和内部类成员,并执行多个不同的操作。此外,它还调用了一个名为 CheckPreviousValuationIfRequired 的方法。后者的设计目的是根据特定参数检索并处理之前的估值数据。一个显著的问题在于 ValueAGPFund 与 CheckPreviousValuationIfRequired 之间形成了循环依赖:ValueAGPFund 调用了 CheckPreviousValuationIfRequired,而后者又调用了 ValueAGPFund。此外,CheckPreviousValuationIfRequired 中的返回语句存在缺陷,导致其在尝试访问一个空值时抛出 NullReferenceException。此错误很可能掩盖了预期的逻辑,即原本意图仅在存在先前估值数据时递归调用 ValueAGPFund。当前的实现意味着该函数要么返回 null,要么抛出异常。尽管存在这些明显的缺陷,该应用程序据称仍能正常运行。提交者怀疑存在问题的代码(CheckPreviousValuationIfRequired 及其与 ValueAGPFund 的交互)可能是多余的。然而,他们犹豫是否在不确认其是否存在未预见的副作用,或系统其他部分是否依赖于该抛出的 NullReferenceException 的情况下将其移除。提交者讽刺地指出,单元测试通常可以缓解此类风险,暗示其缺失或不充分。核心问题在于这些相互依赖的方法所具有的复杂且可能已损坏的逻辑。