CodeSOD: Контрактное пространс... Заметка
The Daily WTF на русском

CodeSOD: Контрактное пространство

Срочный тикет сообщил о некорректном отображении пробелов в производственных данных. Майк Пи обнаружил, что проблема связана с пользовательской функцией trim в файле Strings.java. Эта самодельная функция была неэффективной и содержала ошибки, ненужно заменяя последовательности пробелов одиночными пробелами. Примечательно, что она возвращала null для строк, состоящих исключительно из пробелов, что не соответствовало предполагаемому поведению пользователя. Основная проблема заключалась в том, что разработчики придумывали требования, которые пользователи никогда не желали, что приводило к неожиданной манипуляции данными. Пользовательская функция trim также не обрабатывала различные пробельные символы выше Unicode 20. Пользователи, привыкшие к предыдущему поведению приложения, испытали панику, когда пробелы начали исчезать. Изначальное намерение, вероятно, заключалось в удалении пробелов в начале и конце строки, а не в изменении внутренних пробелов. Эта ошибка осталась незамеченной из-за истории приложения и отсутствия тестирования для таких крайних случаев. Ситуация подчеркивает опасность переизобретения существующей функциональности с помощью ошибочных пользовательских реализаций.