The Daily WTF на русском
Подписаться
CodeSOD: Делать много, чтобы ничего не добиться
В устаревшем финансовом приложении есть метод на C#, ValueAGPFund, который критикуют за многочисленные побочные эффекты. Этот метод изменяет входные параметры и внутренние члены класса, выполняя несколько различных операций. Он также взаимодействует с методом CheckPreviousValuationIfRequired. Последний метод предназначен для получения и обработки данных предыдущей оценки на основе конкретных параметров.Серьезная проблема возникает из-за циклической зависимости, когда ValueAGPFund вызывает CheckPreviousValuationIfRequired, который, в свою очередь, вызывает ValueAGPFund. Кроме того, оператор return в CheckPreviousValuationIfRequired имеет ошибку, приводящую к NullReferenceException при попытке доступа к нулевому значению. Эта ошибка, вероятно, скрывает предполагаемую логику, которая, предположительно, заключалась в рекурсивном вызове ValueAGPFund только при наличии данных предыдущей оценки. Текущая реализация означает, что эта функция либо возвращает null, либо выдает исключение.Несмотря на эти очевидные недостатки, приложение, как сообщается, работает корректно. Отправитель предполагает, что проблемный код, CheckPreviousValuationIfRequired и его взаимодействие с ValueAGPFund, может быть избыточным. Однако он не решается удалить его, не убедившись, есть ли у него какие-либо непредвиденные побочные эффекты или полагаются ли другие части системы на выброшенное исключение NullReferenceException. Отправитель саркастически отмечает, что модульные тесты обычно смягчают такие риски, подразумевая их отсутствие или неадекватность. Основная проблема заключается в сложной и потенциально ошибочной логике этих взаимозависимых методов.