↓
 ↑
Регистрация
Имя/email

Пароль

 
Войти при помощи
Marlagram
16 ноября 2018
Aa Aa
В очередной раз думаю думу о развитии софта в старых космооперах. Включая клинические случаи уровня Расширенных Star Wars с многотысячелетним легаси-кодом.
На этот раз читая Безумие и успех кода Oracle Database, простынка оттуда:
...
Сегодня он состоит из сложных «кусков» кода, отвечающих за логику, управление памятью, переключение контекстов и многое другое; они связаны друг с другом при помощи тысяч различных флагов. Весь код связан между собой загадочным макросом, который невозможно расшифровать, не прибегая к помощи тетради, в которую приходится записывать, чем занимаются релевантные части макроса. В итоге, у разработчика может уйти день или два только на то, чтобы разобраться, чем же в действительности занимается макрос.

Для того, чтобы предсказать поведение кода в том или ином случае, приходится разбираться и запоминать, какие значения и последствия могут иметь 20 (а то и сотня) флагов. Ситуацию ухудшает тот факт, что различные разработчики использовали свои собственные типы, которые по своей сути представляли собой одно и то же (например, int32) — и едва ли кто-то рискнет тронуть подобное легаси (можно точно сказать, что это имело место быть в кодовой базе Oracle 8i).

Возникает вопрос: каким же образом при всем этом Oracle Database до сих пор удается держаться на ногах? Секрет — в миллионах тестов. Их полное выполнение может занимать от 20 до 30 часов (при этом выполняются они распределенно на тестовом кластере из 100-200 серверов).

В команде, которая работала над продуктом в конце 90-ых и придерживалась идей TDD (test-driven development), бытовало следующее мнение: «автоматизированные тесты означают то, что вы не обязаны писать код, который можно будет понять – вместо этого за вас должны думать тесты». В дальнейшем разработчики были вынуждены придерживаться заложенных ими принципами, и теперь мы на практике наблюдаем, чем обернулась эта идея в долгосрочной перспективе — со всеми ее плюсами и минусами.

Сегодня процесс исправления нового бага в Oracle Database занимает от нескольких недель до нескольких месяцев. Сначала разработчику приходится тратить несколько дней только на то, чтобы разобраться с нужными ему флагами (загадочное взаимодействие которых и вызывает баг), после чего ему зачастую приходится добавлять свой собственный флаг, который будет отвечать за обработку конкретного сценария, вызывавшего баг.

Затем он отправляет код на тестирование, и на следующий день спокойно переключается на другую задачу, ожидая, пока тестовый кластер соберет новую сборку Oracle DB и прогонит на ней все тесты. Если разработчику повезло, «покраснеет» примерно 100 тестов; если нет (и этот вариант случается чаще) — около 1000, и ему придется проверять, какое из его предположений о работе существующего кода оказалось неверным; вполне возможно, что он обнаружит, что ему требуется изучить еще десяток различных флагов, которые неочевидным образом принимали участие в работе кода, который он изменил.

Этот процесс ему придется повторять в течении пары недель, прежде чем ему наконец не улыбнется удача и все тесты наконец-то пройдут. После чего он сам должен будет написать несколько десятков тестов — для того, чтобы убедиться, что разработчик, который потревожит его код в будущем, не поломает его «фикс». Затем доработки отправятся на ревью, которое может занимать от нескольких недель до пары месяцев, после чего баг наконец-то будет смержен в главную рабочую ветку.

В силу того, что на сборку СУБД и выполнение тестов уходит не менее суток, ожидается, что каждый разработчик работает одновременно над 2-3 багами и переключается между ними, пока ждет результатов тестирования.

Если вы подумали, что жизнь разработчиков, добавляющих в СУБД новый функционал, легче – то это вы зря. Добавление даже небольшой новой фичи вроде нового режима аутентификации может занимать от 6 месяцев до года, в особо запущенных случаях — до двух лет.

В описанном случае, TDD позволяет не рассыпаться «спагетти»-коду, в котором уже крайне сложно что-то понять, и иметь на выходе рабочий продукт. При этом, издержки продолжают расти, и качество нового кода часто оставляет желать лучшего. Над СУБД работает не только команда разработчиков из США, но и команда из Индии, поэтому некоторые разработчики Oracle по сложившейся традиции сваливают вину за качество кода на них. Другие с ними не согласны, и основываясь на changelog заявляют, что качество кода не зависит от географии команды, и плохой код периодически «прилетает» от обеих команд. По-настоящему серьезная проблема для продукта — это разработчики, которые воспринимают проект как «вход в индустрию», и работают над СУБД не дольше 1-2 года; за это время существенно разобраться в тонкостях работы проекта невозможно.
...

В применении к космооперам с явным наличием ИИ, включая сильные, а так же "альтернативными" ветками развития компьютеров подобная тенденция тоже применима, но вызывает не "кризис сложности", а (сразу) "кризис утраты контроля" с куда более стремительным переходом к "конкурентно-генетической методике", кхем, развития.
Мне даже иногда кажется, что необходимой диетой для техносферы Старой Республики являются автономно развившиеся до достаточно высокого уровня цивилизации - чей "свежий" софтверно-интеллектуальный продукт и кадровый потенциал растрачиваются на затыкание дыр и повышение конкурентоспособности всей техносферы. Причём (конечно в зависимости от продолжительности жизни нового вида, численности, мощности экономики и объёма наработанного интеллектуального продукта) всё это переваривание происходит достаточно быстро - за 1-3 поколения, максимум за 500 лет, в среднем за 150-250...

Отдельно перечитал The Untold Story of NotPetya, the Most Devastating Cyberattack in History. С учётом того, что аналоги Møller-Maersk в ДДГ есть, и отличаются довольно высокой устойчивостью и, по некоторым данным, очень серьёзной автономией/автаркией/вертикальной интеграцией/разработкой внутри компании/etc (включая собственные сети передачи данных, по паре упоминаний)... Прямо-таки напрашивается вбитая в общественное бессознательное привычка не строить (по возможности) полностью интегрированных решений - потому что все, кто делал "как у нас сейчас" сколлапсировали, не выдержав игры в долгую...

#Хабр #StarWars
16 ноября 2018
5 комментариев
Мда уж. )))
А что такое "конкурентно-генетическая методика"? А то, я может не так понял, и это не имитация эыолюции.

Мне так видится, что у настолько старой цивилизации будет больше одного метода разработки, с их недостатками и достоинствами. И выбор программы будет ещё тем квестом. И скорее всего будут конторы, специализирующиеся на советах по выбору софта. Причем, дух в этих конторах будет близок к духу современных английских юридических фирм.
То есть, наследственное дело, необходимость помнить программы тысячелетней давности (потому что обязательно попадется клиент, которому только такая и подойдет), и т.д..
Блин, чем больше думаю, тем больше сходств у этих профессий. Даже необходимость учитывать особенности законодательств ЗВ в разных областях галактики туда же. ))

П.С. Мне нравятся как эти ваши посты заставляют задуматься и пересобрать картину мира. )))
Asteroid
А что такое "конкурентно-генетическая методика"? А то, я может не так понял, и это не имитация эыолюции.

Это, скорее, классическая селекция поверх эволюции :-)
Marlagram
Asteroid

Тут можно вспомнить и Фама Ньювена, и Кошу Шумила.
Marlagram
Но кто проводит селекцию галактического масштаба? Или я неправильно понял, и речь идёт не о конкуренции разных программ, а о конкуренции разных версий одной программы?
Asteroid
Речь идёт скорее о селекции специализированных ИИ, которые создают ещё более ограниченные ИИ, которые в свою очередь являются версиями "программы". И всё - чёрные ящики. А пары воздействие-ответ, похоже, достаточно нетривиальны...
ПОИСК
ФАНФИКОВ











Закрыть
Закрыть
Закрыть