The Daily WTF 日本語
フォロー
CodeSOD:大騒ぎして、結局は何も成し遂げない
レガシーファイナンスアプリケーションには、多くの副作用があると批判されているC#メソッド、ValueAGPFundが含まれています。このメソッドは、入力パラメータと内部クラスメンバーを変更し、複数の異なる操作を実行します。また、CheckPreviousValuationIfRequiredというメソッドとも連携します。この後者のメソッドは、特定のパラメータに基づいて以前の評価データを取得および処理するように設計されています。ValueAGPFundがCheckPreviousValuationIfRequiredを呼び出し、それがValueAGPFundを呼び返すという循環依存関係から、重大な問題が発生します。さらに、CheckPreviousValuationIfRequiredのreturnステートメントに欠陥があり、null値にアクセスしようとするとNullReferenceExceptionが発生します。このエラーは、おそらく以前の評価データが存在する場合にのみValueAGPFundを再帰的に呼び出すことを意図していた本来のロジックを覆い隠しています。現在の実装では、この関数はnullを返すか、例外をスローするかのどちらかになります。これらの明白な欠陥にもかかわらず、アプリケーションは正しく機能していると報告されています。提出者は、問題のあるコードであるCheckPreviousValuationIfRequiredとそのValueAGPFundとの連携が冗長である可能性があると疑っています。しかし、予期せぬ副作用があるかどうか、またはシステムの他の部分がスローされたNullReferenceExceptionに依存しているかどうかを確認せずに削除することをためらっています。提出者は皮肉を込めて、単体テストが通常このようなリスクを軽減することを指摘しており、単体テストの欠如または不十分さを示唆しています。中心的な問題は、これらの相互依存するメソッドの複雑で潜在的に壊れたロジックにあります。