
=——————————————–
База даних Oracle 12.2.
Це близько 25 мільйонів рядків коду C.
Який немислимий жах! Ви не можете змінити жодного рядка коду в продукті, не порушивши 1000 тисяч існуючих тестів. Покоління програмістів працювали над цим кодом у важкі терміни і наповнювали його всілякими лайнами.
Дуже складні логічні елементи, управління пам’яттю, перемикання контексту тощо містяться разом з тисячами прапорів. Весь код наповнений загадковими макросами, які неможливо розшифрувати, не вибравши блокнот і не розширивши відповідні набори макросів вручну. Щоб дійсно зрозуміти, що робить макрос, може знадобитися день -два.
Іноді потрібно розуміти значення та ефекти 20 різних прапорів, щоб передбачити, як код поводитиметься у різних ситуаціях. Іноді теж сотні! Я не перебільшую.
Єдина причина, чому цей продукт все ще виживає і все ще працює, – це буквально мільйони тестів!
Ось як складається життя розробника бази даних Oracle:
= Почніть працювати над новою помилкою.
= Витратьте два тижні, намагаючись зрозуміти 20 різних прапорів, які взаємодіють таємничими способами, щоб викликати цей мішок.
= Додайте ще один прапор для обробки нового спеціального сценарію. Додайте ще кілька рядків коду, який перевіряє цей прапор і обходить проблемну ситуацію, уникаючи помилки.
= Надішліть зміни до тестової ферми, що складається приблизно з 100 до 200 серверів, які б компілювали код, створювали нову базу даних Oracle та запускали мільйони тестів розподіленим способом.
= Йди додому. Приходьте наступного дня і попрацюйте над чимось іншим. Тестування може тривати від 20 до 30 годин.
= Йди додому. Приходьте наступного дня та перевірте результати випробувань на фермі. У хороший день було б близько 100 невдалих тестів. У поганий день було б близько 1000 невдалих тестів. Виберіть випадково деякі з цих тестів і спробуйте зрозуміти, що пішло не так з вашими припущеннями. Можливо, потрібно розглянути ще 10 прапорів, щоб по -справжньому зрозуміти природу вади.
= Додайте ще кілька прапорів, щоб спробувати вирішити проблему. Подайте зміни ще раз для тестування. Зачекайте ще 20-30 годин.
= Промийте і повторіть ще протягом двох тижнів, поки не отримаєте загадкове заклинання комбінації прапорів.
= Нарешті одного прекрасного дня ви досягнете успіху, якщо 0 тестів не вдасться.
= Додайте ще сотню тестів для вашої нової зміни, щоб переконатися, що наступний розробник, якому випаде нещастя торкнутися цього нового фрагмента коду, ніколи не порушить ваше виправлення.
= Подати роботу на останній раунд тестування. Потім подайте його на розгляд. Сам огляд може зайняти ще від 2 тижнів до 2 місяців. Тож перейдіть до наступної помилки, над якою потрібно працювати.
= Через 2 тижні – 2 місяці, коли все буде завершено, код буде остаточно об’єднано в основну гілку.
Наведене вище є безперебільшим описом життя програміста в Oracle, який виправляє помилку. Тепер уявіть, яким жахом буде розробка нової функції. На розробку однієї невеликої функції (скажімо щось на кшталт додавання нового режиму автентифікації, наприклад підтримки автентифікації AD), потрібно від 6 місяців до року (іноді два роки!).
Той факт, що цей продукт навіть працює, – це не що інше, як диво!
Я більше не працюю в Oracle. Більше ніколи не працюватиме в Oracle!
Спочатку ця публікація була опублікована за адресою https://www.linkedin.com/pulse/how-work-oracle-database-project-smiles-horror-mykhailo-kyrychenko/.
Mykhailo Kyrychenko люб’язно дозволив нам перекласти і опублікувати цю статтю.