Размещаю в айти юморе, хотя это на самом деле программистские ужасы. Это реально чисто для программистов пост. Мы тут договорились, что мы померяемся с другими программерами у кого легаси страшней. Сейчас это не заявка, но чисто чтобы прочувствовали. Это не самое страшное, но это то, что я нашел только за один день:
В одном действии импорта в разных местах ошибочно сделали два раза импорт одной таблицы. Не знаю это был один человек или два разных. Потом кто-то из них (или кто-то третий) таки нашел проблему. Но он не исправил или закомментил один раз, он написал процедуру чистки дублей. Написал криво. Вкупе с ошибками в процедурах импорта это давало настолько рандомные результаты, что я тоже еле разобрался в этом.
База данных импортируется больше пяти часов. Ну… логично. База большая. Лезу внутрь. Там сразу два сюрприза. Самая большая таблица всего 25к. База большая из-за того, что внутрь посохраняли картинки в 444 мегабайт. А медленно из-за того, что это уникум мало того, что для копирования каждой записи создает объект, создает запрос, выполняет запрос, закрывает запрос, уничтожает объект, так он еще для каждой записи открывает запрос select все без условий. Соответственно база в 25к записей возводится по нагрузке в квадрат. И это похоже только для того, чтобы получить доступ к списку полей, так как потом он читает и вставляет уже нормально. То есть, еще действия на ту же запись.
На каком-то этапе этот монстр программирования утомился от ошибок и предположительно пиздюлей от начальства и клиентов и стал ошибки и исключения перехватывать и подавлять. Причем таких мест много. Там ушло в отвал пару тысяч нескопированных записей, там еще пару сотен. Ошибок нет, но на выходе записей намного меньше, чем на входе. В одном месте комментарий, что в этом нужно потом разобраться. Комментарий от двенадцатого года. А возможностей для ошибок там море: Буквально на пару страниц кода – Преобразование в дату текста от клиента, веря, что клиент всегда напишет дату в строковое поле правильно и не оставит пустым. Поиск и сразу чтение без проверки нашлось ли что-то. Запись без проверки, что может же там уже есть этот уникальный идентификатор.
Вишенка на торте и самое бредовое концептуально - базам данных он похоже просто не доверяет и перегоняет данные для обработки в свои объекты и массивы. Мало того, что это вообще ничем не оправданно, так еще от процедуры к процедуре это другие объекты с разными названиями полей в стиле bpid для одного и того же. Разобраться трудно. Ему тоже. В одном месте перепутал названия куда он сохраняет объем и площадь. Сохранил накрест. Но это не исправлено и просто при передаче в следующий объект передает опять накрест и тем выравнивает. Чтобы обработать таблицу в пять тысяч записей, он насоздает объектов в количестве пять тысяч, загрузит туда пять тысяч записей. Но потом будет открывать для каждой записи отдельный запрос, как описано во втором абзаце. Посмотрел бы я как бы он обрабатывал базу в сотни тысяч записей
Конечно, программисты всегда ругают предыдущего программиста. Но я уверен, что мне точно попался просто редкий по своей природе долбоеб, даже если я не так часто работал с чужим кодом