LINUX.ORG.RU
решено ФорумTalks

Не работайте в Oracle

 ,


1

2

Наткнулся тут на интересный тред HackerNews, странно что на ЛОР ещё не приносили:

Q: What's the largest amount of bad code you have ever seen work?
A: Oracle Database 12.2.

Here is how the life of an Oracle Database developer is:

  • Start working on a new bug.
  • Spend two weeks trying to understand the 20 different flags that interact in mysterious ways to cause this bag.
  • Add one more flag to handle the new special scenario. Add a few more lines of code that checks this flag and works around the problematic situation and avoids the bug.
  • Submit the changes to a test farm consisting of about 100 to 200 servers that would compile the code, build a new Oracle DB, and run the millions of tests in a distributed fashion.
  • Go home. Come the next day and work on something else. The tests can take 20 hours to 30 hours to complete.
  • Go home. Come the next day and check your farm test results. On a good day, there would be about 100 failing tests. On a bad day, there would be about 1000 failing tests. Pick some of these tests randomly and try to understand what went wrong with your assumptions. Maybe there are some 10 more flags to consider to truly understand the nature of the bug.
  • Add a few more flags in an attempt to fix the issue. Submit the changes again for testing. Wait another 20 to 30 hours.
  • Rinse and repeat for another two weeks until you get the mysterious incantation of the combination of flags right.
  • Finally one fine day you would succeed with 0 tests failing.
  • Add a hundred more tests for your new change to ensure that the next developer who has the misfortune of touching this new piece of code never ends up breaking your fix.
  • Submit the work for one final round of testing. Then submit it for review. The review itself may take another 2 weeks to 2 months. So now move on to the next bug to work on.
  • After 2 weeks to 2 months, when everything is complete, the code would be finally merged into the main branch.


А с каким говнокодом приходилось работать вам?

например с OCI (oracle call interface) лет 10-15 назад подтверждаю было стремно смотреть на их изменения в api

quester ()

Хороший аргумент в пользу test-driven development :)

question4 ★★★★★ ()
Ответ на: комментарий от quester

мне лет восемь назад приходилось работать с ораклом. и таки кроме кривого интерфейса у них в библиотеке ещё и память утекала и были разнообразные баги.

а на сообщения об ошибках в их софте их пресс-секретарь заявила, что, мол, нечего копаться в нашем коде - это харассмент реверс-инжиниринг и нарушение копираста. та ещё конторка.

Iron_Bug ★★★★ ()
Ответ на: комментарий от Iron_Bug

ну да я помню как пара dba бегали постоянно с криками shared pool по поводу известных багов в oracle которые те закрывали месяцами хоть и за бабло

quester ()
Ответ на: комментарий от Iron_Bug

видя этот мега api легко получить представление о внутреннем качестве этого продукта

quester ()

А в чем говнокод-то? Коду 40 лет почти. Скорее проблема в инфраструктуре, которая не позволяет параллелить задачи сборки и тестирования. 200 серверов для сборки и тестирования как-то маловато для такой большой системы.

xpahos ★★★★★ ()

Обычный процесс в крупном проекте. Я бы добавил, что 0 упавших тестов - это недостижимая утопия, потому что эти 77 тестов падают всегда, те 36 - на этой версии, а вон те 13 - это плавающие падения, которые никто не может воспроизвести...

Deleted ()

Не буду. Спасибо за предупреждение.

heilkitty ★★ ()

А с каким говнокодом приходилось работать вам?

В любой большой конторе код такого качества.

Линукс тоже таким был лет 15 назад, но его вытянули. Это потому что горящих дедлайнов и эффективных манагеров нет.

mv ★★★★★ ()

Это нормальное состояние любой крупной кодовой базы над которой работали тысячи разработчиков в течение десятков лет. И тут проблема зачастую не в криворукости, каждый отдельно взятый программист может быть высококвалифицированным специалистом. Проблема возникает от того, что никакой архитектор и никакой разработчик не может охватить и понять всю систему. Через какое-то время на стыке модулей появляются проблемы, которые в силу того, что переписывать не разрешат менеджеры и сроки, аккуратно прикрывают костылями. Потом костыли необходимо подпирать другими костылями. И дальше это распространяется по всей кодовой базе как снежный ком.

И я на своем опыте уже многократно убедился, что любая красивая и стройная система через 5-10 лет начинает превращаться в то самое ненавидимое всеми легаси.

Tweaker ★★★★ ()
Ответ на: комментарий от xpahos

А в чем говнокод-то?

А ты правда не понял? Вот, цитирую:

20 different flags that interact in mysterious ways

Rinse and repeat for another two weeks until you get the mysterious incantation of the combination of flags right.

А вот это - закон размножения говнокода:

Add one more flag to handle the new special scenario

А что заставило тебя предположить это:

проблема в инфраструктуре, которая не позволяет параллелить задачи сборки и тестирования.

?

tailgunner ★★★★★ ()
Ответ на: комментарий от Tweaker

И я на своем опыте уже многократно убедился, что любая красивая и стройная система через 5-10 лет начинает превращаться в то самое ненавидимое всеми легаси.

Поэтому придуманы умные слова вроде «рефакторинг» и «технический долг».

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Поэтому придуманы умные слова вроде «рефакторинг»

Эти слова придуманы для того, чтобы никто никогда не понял, что они значат, и чем именно заняты сотня-тысяча лбов.

lenin386 ★★★ ()
Последнее исправление: lenin386 (всего исправлений: 1)
Ответ на: комментарий от lenin386

и чем именно заняты сотня-тысяча лбов

В хедпосте написано, чем они заняты. Но ты не читатель, я понимаю.

tailgunner ★★★★★ ()

Не работайте в тыртырпрайзе

На самом деле так.

Lev ()

Это не совсем правильная постановка вопроса, имхо.

Да, реальность такова.

Но это плата за то, что у тебя есть проект, который живёт сорок лет подряд на одной развивающейся кодовой базе.

Посмотрим, как У ВАС получится крутиться через сорок лет.

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

Но это плата за то, что у тебя есть проект, который живёт сорок лет подряд на одной развивающейся кодовой базе.

А есть пруфы, что за много лет проект неизбежно становится вот таким, как в хедпосте? Например, Solaris лет примерно столько, сколько Oracle, но таких анекдотов про него я лично не слышал.

tailgunner ★★★★★ ()

Участвовал я лет двадцать назад в одном проекте: отвечал на архитектуру и разработку нового набора фич в одной библиотеке. Багфиксами всей либы занималась команда индусов, вот там я насмотрелся всякого…

Типичный модус операнди:

  • Убедиться, что код на определенном наборе данных выдает неверный результат.
  • Добавить ветвление с проверкой на эти условия.
  • Написать решение этого конкретного частного случая.
  • Убедиться, что проблема «решена».
  • Хвалить себя из каждого утюга.

Когда моей команде просто пришлось для добавления фич почистить авгиевы конюшни и отрефакторить часть кода, либа полегчала вдвое. Патч, выносящий из затронутой нами части либы 80% кода, был на ревью три месяца, проходя все тесты с первого дня. Нужно рассказывать, кого материли во всех филиалах по всему миру всё это время, и куда потом заткнули языки, когда код приняли в основное дерево, а поток багрепортов значительно сократился?

baka-kun ★★★★★ ()
Ответ на: комментарий от tailgunner

Ну только Solaris стремительно умирает, а Oracle Database - это дефолтная база данных в ынтерпрайзах. А дефолтной она стала благодаря агрессивному маркетингу и релизам, полным фичей (у Джоеля был когда-то блогпост про это, но потом этот сайт сломался). Релизы, полные фичей - это значит, кто-то там наяривает кнутом девелоперов, чтобы к часу Ч запилили X хайповых фичей, во что бы то ни стало. Есть ли пруфы, что с таким подходом за много лет проект может не стать свалкой мусора?

stevejobs ★★★☆☆ ()

The tests can take 20 hours to 30 hours to complete.

По нашим меркам, это очень быстро.

У нас тестирование зачастую растягивается на недели и месяцы.

А с каким говнокодом приходилось работать вам?

С самым разнообразным. Он повсюду. Такова жизнь.

Open Source - это просто образец качества.

dimss ★★★★★ ()
Ответ на: комментарий от stevejobs

Ну только Solaris стремительно умирает

Ну только никаких технических причин для этого нет.

агрессивному маркетингу

Я думал, мы не об этом. Хотя... наверное, ты уже всегда. будешь об этом

tailgunner ★★★★★ ()
Ответ на: комментарий от stevejobs

это ты типа объяснил, почему покупают оракель? а откатов не существует, это только в грязной рашке так?

TooPar ()
Ответ на: комментарий от dimss

У нас тестирование зачастую растягивается на недели и месяцы.

Автоматически прогоняемые тесты идут месяцами? Имитаторы VHDL-моделей процессоров?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

А вот это - закон размножения говнокода:

Я написал знакомым, которые работают в Orcale. Говорят, что чувак сильно приукрашивает.

А что заставило тебя предположить это:

Флаги - не флаги. Тесты должно работать 30-60 минут максимум. А дальше сколько бы ни было флагов их всегда будет легко поправить.

xpahos ★★★★★ ()
Ответ на: комментарий от xpahos

Я написал знакомым, которые работают в Orcale. Говорят, что чувак сильно приукрашивает.

Приукрашивает? Ничего себе. Т.е. на самом деле всё обстоит еще хуже?

Флаги - не флаги. Тесты должно работать 30-60 минут максимум.

Я, конечно, не настоящий QA, но даже я понимаю некоторые простые вещи: что тесты должны отлавливать ошибки (а не работать быстро), что объем тестов зависит от объема и сложности тестируемого продукта, что тесты имеют тенденцию накапливаться со временем (представь, сколько регрессионных тестов накопилось за 35 лет). Так что нет, тесты никому не должны «работать за 60 минут максимум».

сколько бы ни было флагов их всегда будет легко поправить.

Ага, ага. Грубо говоря, по тесту на каждую комбинацию флагов (на каждой платформе) - какая ерунда. Ну и, если всё-таки прочитать хедпост, никто не «правит флаги» - просто их количество увеличивают.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Автоматические могут идти неделями, потому что вовлечен не только софт, но и железо. В прошлом проекте стандартный QA cycle занимал две недели.

Но самое главное, что далеко не все автоматизируемо в принципе. Иногда ждешь инфу с полей месяцами.

dimss ★★★★★ ()
Ответ на: комментарий от dimss

Автоматические могут идти неделями, потому что вовлечен не только софт, но и железо.

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

не все автоматизируемо в принципе. Иногда ждешь инфу с полей месяцами.

Понятно. Но в хедпосте речь об автоматизированных тестах, если я правильно понял.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от tailgunner

Чтобы автоматизированные тесты шли аж неделями - это железо должно быть феноменально медленным (или требовать ручной раобты)

Железо не такое уж и медленное, но переконфигурация всего и вся требует времени. Нормальный пользователь это делает редко, при тестах же все время меняется конфигурация.

Кроме этого, требуется убедиться в надежной работе длительное время в каждом режиме.

Но в хедпосте речь об автоматизированных тестах, если я правильно понял.

Думаю, не только о них. Потому что разработчику вообще не так важно, как они там тестируют. Главное, чтобы быстро и корректно. А в нашем деле (встраиваемые и сетевые технологии) быстро и корректно почти не бывает :)

dimss ★★★★★ ()
Ответ на: комментарий от dimss

Железо не такое уж и медленное, но переконфигурация всего и вся требует времени.

Опять же, если оно не переконфигурируется вручную (или даже роботами), я таки не понимаю, откуда месяцы.

Но в хедпосте речь об автоматизированных тестах, если я правильно понял.

Думаю, не только о них.

Ну, судя по «test farm» и миллионам тестов, это именно автоматические тесты.

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

Опять же, если оно не переконфигурируется вручную (или даже роботами), я таки не понимаю, откуда месяцы.

Простой отвлеченный пример: сколько времени занимает загрузка компа? Нормального человека это мало волнует. А если тебе надо его перезагрузить 1000 раз, то это ощутимо. Кроме того, надо убедиться, что комп не зависнет хотя бы час после загрузки.

Ну, судя по «test farm» и миллионам тестов, это именно автоматические тесты.

Да. Но упор делается на то, что тесты идут очень долго по ощущениям автора. Я же о том, что всё относительно, и что долго для него, то совсем не долго для нас :)

dimss ★★★★★ ()
Ответ на: комментарий от tailgunner

Приукрашивает? Ничего себе. Т.е. на самом деле всё обстоит еще хуже?

Я тебе передаю слова человека изнутри. Склонен ему верить.

Так что нет, тесты никому не должны «работать за 60 минут максимум».

И будешь потом двое суток ждать коммита. С «зеленым транком» задолбаешься ждать прохождения тестов.

Ну и, если всё-таки прочитать хедпост, никто не «правит флаги» - просто их количество увеличивают.

Опять же, люди говорят что далеко все не так.

xpahos ★★★★★ ()
Ответ на: комментарий от stevejobs

Ты так говоришь, будто у соляриса мало фич. Если про другие коммерческие юниксы ничего не слышно, то в солярис завозили smf, dtrace, containers/zones, zfs и т.п. Причем зачастую до хайпа, который возникал когда подобное появлялось в других системах. Даже всякая хрень типа https://www.serverwatch.com/img/then.jpg

Пока был жив opensolaris там с каждой версией впиливалось куча реально нужного и полезного.

pawnhearts ★★★★ ()
Ответ на: комментарий от dimss

Простой отвлеченный пример: сколько времени занимает загрузка компа?

30 сек.

А если тебе надо его перезагрузить 1000 раз, то это ощутимо.

30000сек - примерно 8 часов.

Кроме того, надо убедиться, что комп не зависнет хотя бы час после загрузки.

Вот теперь более-менее понятно.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)
Ответ на: комментарий от xpahos

Приукрашивает? Ничего себе. Т.е. на самом деле всё обстоит еще хуже?

Я тебе передаю слова человека изнутри. Склонен ему верить

Тогда интересно, какой там ад на самом деле.

Так что нет, тесты никому не должны «работать за 60 минут максимум».

И будешь потом двое суток ждать коммита.

Это если придерживаться странной практики прогона всех тестов на каждом коммите. Все тесты разумно прогонять при мерже.

С «зеленым транком» задолбаешься ждать прохождения тестов.

А при наличии монолитного продукта и политики «зеленого транка» другого выхода просто нет.

Ну и, если всё-таки прочитать хедпост, никто не «правит флаги» - просто их количество увеличивают.

Опять же, люди говорят что далеко все не так.

Люди (по твоим же словам) говорят, что в посте всё приукрашено (не преувеличено, а приукрашено). Или ты таки хотел сказать «преувеличено»?

tailgunner ★★★★★ ()
Ответ на: комментарий от tailgunner

никаких технических причин для этого нет.

ну они же не опенсорс пилят ради искусства, а выполняют желания бизнеса

мне тоже это не нравится. Пару лет назад очень хотел в Оракл (хоть кем, хоть джуниор тестировщиком, лишь бы в JDK), а сейчас уже не очень хочу. Это вопросы только и исключительно про бабло, какими бы отвратительно мерзкими ни были способы его получения - и именно такими мерзкими они и являются

надо понимать, что Оракл - это компания про продажу коробочных решений. Теперь вот про облака, но даже облака у них со вкусом коробки. Это влияет на всё. Например, долгими годами Java не приносила им бабла за продажу коробок, и посмотри что из-за этого они делают с Java

stevejobs ★★★☆☆ ()
Ответ на: комментарий от tailgunner

Грубо говоря, по тесту на каждую комбинацию флагов (на каждой платформе) - какая ерунда.

В JDK если честно запустить всю основную матрицу конфигураций, тесты будут проходить наверное, больше месяца. А если честно протестировать вообще всё-всё, то это будет делаться до конца жизни Вселенной, кто-то считал (найду ссылку - скину) =)

В том же HotSpot тесты организованы по tiers. Начиная с обычных smoke-тестов и заканчивая достаточно серьезными тестами. А ведь кроме юнит-тестов есть и перфоманс-тестирование, и стресс-тестирование - это трата времени по определению.

Поэтому есть некое искусство внести ченж так, чтобы понять, какие участки системы оно затронет, и по-нормальному тестировать только их, а на остальные забить «авось обойдётся»

Собственно, это понимание взаимосвязи различных частей жабы друг на друга и скрытых взаимных эффектов и есть один из основных критериев разницы между специалистом и мимо проходящим человеком

stevejobs ★★★☆☆ ()
Ответ на: комментарий от stevejobs

никаких технических причин для этого нет.

ну они же не опенсорс пилят ради искусства, а выполняют желания бизнеса

Они пилят опенсорс для бизнеса. Как Linux.

надо понимать, что Оракл - это компания про продажу коробочных решений

Не вижу, как коробка с Оракелом отличается от коробки с Солярисом, и, даже если она отличается, почему это имеет значение.

В JDK если честно запустить всю основную матрицу конфигураций, тесты будут проходить наверное, больше месяца.

Как в Оракел Ынтерпрайз ДБ.

tailgunner ★★★★★ ()

А с каким говнокодом приходилось работать вам?

С говнокодом сходного уровня. Так будет в любом более-менее крупном проекте по следующим причинам:

  1. Два джуниора по цене одного сеньора будут намного быстрее клепать фичи (и плодить баги).
  2. На качество кода наплевать всем, кто с кодом не работает (да и большинству разрабочиков, скажем чество, тоже плевать). К черту качество, задавим поток багов потоком фичей!
  3. Немного смягчаем пункт 2 тестами: unit или integrational — не важно. Заодно это немного смягчит эффект от повышенной волатильности текучки кадров: снижается шанс фатального бага от джуниора-который-пилит-core-фичу-в-первые-недели-работы.

Современная индустрия разработки ПО выбирает «дешево и побыстрее» — зачем тратить время на качество, если можно втюхать «уникальный продукт» лоху-инвестору или непосредственному покупателю? В любом случае, качество кода — это мифическая метрика, которая волнует только сеньоров, а джунам и тем более продактам и маркетингу глубоко фиолетово, что и как происходит внутри. Более того, затраты на качество не окупаются в отличие от затрат на маркетинг.

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

kawaii_neko ★★★ ()
Ответ на: комментарий от tailgunner

Тогда интересно, какой там ад на самом деле.

Ты хочешь интерпретировать мои слова, переданные от другого человека для того, чтобы подтвердить полуанонимный пост с HN? Если тебе так выгодней, то да. У них все плохо, скоро все развалится от 1000 флага :)

xpahos ★★★★★ ()
Ответ на: комментарий от tailgunner

Они пилят опенсорс для бизнеса. Как Linux.

важно: сейчас скажу собственное мнение, а не мнение работодателя и не позицию Oracle

похоже, в Oracle плохо относятся к опенсорсу и с радостью выкинули бы его вообще везде где можно.

RedHat - это про оказание поддержки для разработанного ими опенсорса. У Оракла бизнес прямо противоположный - вначале они продавали проприетарные продукты, коробки с ними. Потом они перешли на продажу software-as-a-service. Если у этих сервисов/коробок не будет публичного исходника, и их не нужно будет поддерживать - это для них отлично.

почему так решил? Ну, множество всяких интервью с Ларри, который последовательно тонко намекал, что бизнес-модель RedHat - нежизнеспособная. Отзывы друзей, которые там работали и уволились - увоилились в момент покупки Сана Ораклом, уволились в ближайшие годы, уволились совсем недавно...

Попробовал погуглить по словам «larry ellison red hat business model», но там тонна всяких статей, это нужно потратить кучу времени, чтобы притащить тебе пруфы. Вот есть цитата из верха поиска (это 2006 год - год, когда Oracle скопипастили себе Oracle Linux):

I don’t think Oracle and IBM want to create a second Microsoft in Red Hat. But you can’t – because Red Hat doesn’t own anything, they own nothing. They couldn’t [become the next Microsoft], they own nothing. [...]

We make more money selling software-as-a-service than we make just selling software. I’d much rather be in the monthly service charge business, I’ve said this repeatedly. [At present] a huge percentage of our sales are done in the last week of the quarter: all of that goes away, it’s a much better business model.[...]

On the one hand, people say open source and software-as-a-service are really hot – on the other hand, all they look at is our new licence sales. It’s the kind of absurdity that you find in the world at times.

All I care about is that we keep growing our profits every year. We have a five-year plan to grow our profits at 20 per cent a year. Last year we overshot, we grew at 28 per cent. This year we will grow at 20. We’re growing our profits very, very rapidly.

вся эта их риторика выглядит как-то... мерзко

например, Java не укладывается в этот подход, но слить по-быстрому они её не могут, слишком много на неё завязано. Когда можно что-то слить, они это делают - например, в этом году на мороз отправилась Java EE, уволили команду Java Mission Control и отдали поддержку двум индусам, и т.п. Всё остальное, пришедшее от Sun, они тоже посливали. IBM-RedHat им поставила пару палок в колёса в этих чудных начинаниях, и возможно, падающее знамя перехватят они

тот же GraalVM, для начала, делается не в Oracle, а в Oracle Labs - отдельной структуре с историей ещё из Sun. И даже GraalVM - это коробка с проприетарными закрытыми исходниками. Есть Community Edition, но план в том, чтобы продавать Enterprise Edition, на которую даже цен на сайте нет - нужно звонить продажникам и узнавать стоимость.

как это ложится на Solaris? Это ты мне расскажи, я совершенно не в теме. Есть предположение, что закрытая проприетарная коробочная солярка продавалась не так чтобы очень хорошо, а делать вокруг неё второй RedHat не входит в их планы никаким образом.

отдельный вопрос, что делать во всём этом мне. Я сделал ставку не на тех людей и не на то направления развития, и очень раскаиваюсь. Похоже, придётся изучать C# и устраиваться менеджером влажной уборки помещений в MS :(

stevejobs ★★★☆☆ ()
Последнее исправление: stevejobs (всего исправлений: 2)
Ответ на: комментарий от xpahos

Ты хочешь интерпретировать мои слова, переданные от другого человека

Естественно, я хочу их интерпретировать. Я думал, ты именно для этого их и написал.

скоро все развалится от 1000 флага :)

Скорее остановится в развитии.

tailgunner ★★★★★ ()
Последнее исправление: tailgunner (всего исправлений: 1)

И что теперь делать? Как там дела к качеством кода у pgsql?

crutch_master ★★★★★ ()
Закрыто добавление комментариев для недавно зарегистрированных пользователей (со score < 50)