Як довести, що програма побудована на неправильній кодовій базі?


23

Зараз я переглядаю систему, побудовану деякими розробниками, які раніше працювали на моїй роботі. Система працює досить добре з точки зору користувача, але, коли заглиблюватися в огляд коду, це зовсім безлад. Я більш ніж переконаний, що спосіб створення програми не витримає майбутніх оновлень, не кажучи вже про високе збільшення використання.

Проблема полягає в тому, що я знаю, наскільки це погано, але мій начальник цього не робить. Як я можу довести це своєму менеджеру, щоб він насправді бачив проблему і переконався зробити мінімальну триаж на поточній кодовій базі даних, а найближчим часом розпочати нову лінію розробки для наступної версії програми?


6
programmers.stackexchange.com/questions/59050/… Можливо, прислухайтеся до того, як погано виконувати "великий перепис" зазвичай закінчується з точки зору бізнесу. Це було б те, що зробив би більш "старший" програміст.
квентин-зірин

22
@qes, єдине гірше, ніж робити "великий перепис" - це паралізуючий страх перед "великим переписуванням". Коли я почав своє поточне становище, я успадкував безлад Perl CGI від двох або трьох різних програмістів, без контролю джерела, відстеження помилок або тестів. Це зайняло певну переконливість, але я отримав схвалення переписати на Ruby on Rails, зберігаючи застарілий код. Через 5 місяців інструменти стали більш зручними, і ми могли додавати нові функції через дні чи тижні замість місяців. Користувачі в захваті, і я не замислююся. "Великий перепис" вимагає грунтовного обґрунтування, а не повного уникнення.
Джейсон Льюїс

1
@JasonLewis: (Я здогадуюсь, що ви не перейшли за посиланням у попередньому коментарі?) Це здається нерекомендуваним для того, хто менше року тому описував себе як не вистачає важливих навичок, які має старший рівень, і не ' не знаю, з чого почати, починаючи новий проект.
квентин-зірин

5
@JasonLewis Я повністю з тобою згоден. Кожен раз, коли хтось запитує про перезапис програми в SE, багато людей приходять із цією ідеологією "не переписуй великі". Я думаю, що, безумовно, є багато причин цього не робити, але ви не повинні уникати цього за будь-яку ціну. Я брав участь у переписуванні програми з кодом на 100 тисяч рядків, і ми мали великий успіх, дуже схожий на те, що ви описали. Нам навіть вдалося переписати його модуль за модулем (спочатку частина інтерфейсу, потім сервер, потім решта). Через 12 місяців у нас дуже задоволена клієнтська база, і всі пишаються прийнятим рішенням.
Alex Alex

2
Це частина більш загальної проблеми: проблема попередника, що збирається отримати негайні результати за довгострокові кошти. Коли ви переймаєтесь, ви повинні пояснити, чому ви не можете підтримувати один і той же результат.
Девід Торнлі

Відповіді:


23

"Але це працює зараз" - це стандартна відповідь керівництва на законні розчарування інженерів програмного забезпечення. Перше, що я зробив би - це скласти документацію (якщо вона є) і використати її для демонстрації суперечностей між кодом і документацією.

Якщо можете, складіть вичерпний набір тестових одиниць. Запускайте їх із кожною зміною, щоб ви могли задокументувати регресії, які можна звинуватити в існуючій кодовій базі.

Нарешті, якщо ви можете залучити розробника з іншого відділу, якому ви довіряєте, знайдіть другу пару на код. Одного розробника, який каже, що "це дерьмо", легше відмовитись, ніж коли старший розробник, який вже деякий час поручає його і каже: "Ні, Джіме, він правий. Це лайно на гадюка.

Звичайно, все залежить від вашого оточення, розміру компанії тощо.

Я завжди рекомендую поглянути на Прагматичного програміста, якщо ви його ще не прочитали. Має бути не тільки читання для кожного професіонала програмного забезпечення, але він має кілька хороших пропозицій щодо роботи з керівництвом, колегами, користувачами тощо, які не розглядають інженерію програмного забезпечення як ремесло.


7
Документів немає, і код дуже непереборний, якщо ми не збираємося переробляти з нього пекло. Я досить впевнений, що мене підтримують кілька колег, тому отримання іншого розробника в дискусії може допомогти.
Кріс

@ChrisRamakers Це чудова новина (підтримка, а не відсутність документів!). Менеджерам важче (хоча і не неможливо) заперечувати / відкидати професійну думку декількох розробників. І якщо ваші прихильники довше перебували в компанії, вони можуть мати цінний досвід орієнтації у внутрішній політиці організації. Удачі!
Джейсон Льюїс

Крім того, якщо ви можете отримати деякі програми для тестування навантаження, ви можете показати, як воно може зламатися під великим навантаженням.
HLGEM

13

З точки зору керівництва, в системі немає нічого поганого, і ви просто скаржитеся, оскільки [ви просто хочете його переписати / ви не розумієте, що робили попередні інженери / ви хочете, щоб ваша робота була легкою]. Трохи солом’яної людини, але коли хтось на вершині бачить, що зараз все нормально працює, вони не хочуть бачити кризу, де ти це робиш (я впевнений, що там десь алегорія зміни клімату ...) .

У певній мірі вони мають точку. Керівництво бачить проблеми, коли випуски виходять далеко за рамки їх первісної оцінки, оцінки здаються занадто високими для роботи, яка виконується, "це неможливо при наявній нашій кодовій базі", а велика кількість помилок, що проганяють минулий рівень якості. Якщо все гарно псується, легко погладити вас по голові і сказати зробити все можливе, адже це не впливає на суть.

Що робити, залежить від вашої організації та самого програмного забезпечення. Принципово, проте, я пропоную задокументувати кожне ускладнення, яке виникає внаслідок поганого застарілого коду. Оцінюючи завдання, дайте зрозуміти керівництву, чому ви думаєте, що це займе так довго, з детальними поясненнями щодо того, які аспекти старої бази коду додають цю додаткову вартість. Коли помилки вводяться в код, укажіть причини, за якими цю помилку вдалося вставити , та як відповідальність за проблеми в старій базі коду.

Я б запропонував висловити свої занепокоєння зацікавленим сторонам таким чином, що припускає, що програмне забезпечення переросло свій оригінальний дизайн, і тепер проблематично продовжувати його вдосконалювати.


5

Існують різні інструменти, які дозволяють охопити код та переглянути код. Інструменти Google, що підходять для вашої технології, зазвичай це стандартні інструменти галузі. Я б запропонував вам скористатися цими інструментами та придумати звіт про якість коду та подати його менеджеру. Переконайтесь, що ваша критика суперечлива і неполітична.


так, я думав про обчислення середньої цикломатичної складності та використання цього в якості аргументу, але я впевнений, що це не доведе до управління справа. Але варто спробувати, thnx
ChrisR

5
@ChrisRamakers: Ніщо не може бути "доведено" менеджеру. Забудьте "доказ". Зберіть дані. Факти - це все, що у вас є. Більше фактів переконливіше. Але «доказів» немає.
С.Лотт

4

Виберіть приклад, який легко зрозуміти, де керівництво вважає, що це простий запит на зміну, але через існуючу конструкцію це набагато складніше.

Ви не хочете, щоб вони зупинялися на конкретному запиті, але переконайтеся, що ви повідомляєте їм, що таким буде будь-який запит на зміни. Ніхто не хоче, щоб його малювали в кутку з аплікацією. Розробники вірять у YAGNI, але керівництво вірить у CYA.

Пропозиції щодо тестування навантажень можуть бути хорошим підходом, але вони, можливо, не впевнені, що підвищена ступінь використання відповідає будь-якому реальному світовому потенціалу зростання (компанія не збирається подвоїтись за один рік.).

Все відносно. Вони можуть не захотіти вкладати ресурси в цей проект, коли у них є плани на більш важливі проекти, на які можна витратити свій час. Не позначайте, що не бачите великої картини.


1
Після внесення змін покажіть файл diff, який у неправильній кодовій базі торкнеться багатьох різних вихідних файлів, має "що це стосується?" елемент і т. д. Поясніть керівництву, яка частина цієї роботи, тобто час == $$, була пов'язана з поганою базою даних коду, і що зміни, що рухаються вперед, матимуть цю характеристику.
Ларрі ОБрієн

3

Коли ви говорите про те, щоб довести щось, все те, що є науковим методом, починає грати, і це означає, що якщо ви збираєтесь приймати об'єктивні стандарти вирішення того, що відповідає дійсності, ви повинні прийняти можливість того, що, розслідуючи, ці набридливі факти виявляється, не на вашому боці.

У вашому випадку я думаю, що слід довести дві речі.

По-перше, що поточна база коду є "поганою". Напевно, ви можете довести, що "професійна думка майже всіх розробників, які вивчають цей код, - це погано".

По-друге, щоб компанії було краще переписати кодову базу. Це проблема, тому що навіть якщо перший пункт правдивий, другий може не бути. Крім того, ви не знаєте достатньо, щоб визначити це. Це робота керівництва, і якщо ви хочете, щоб вони поважали ваше професійне судження щодо першого пункту, ви повинні поважати їх щодо другого.

Але вони не можуть визначитися з другим пунктом без наданої вами інформації. Вам потрібно повідомити, що вам відомо про те, як проблеми в коді вплинуть на бізнес, і що ви знаєте про те, як перезапис вплине на бізнес. Це складно, оскільки обидва передбачають передбачення майбутнього, яке має велику невизначеність.

Але ви можете спробувати констатувати проблему в бізнес-плані. Скільки додаткового часу витрачається на зміни та регресії? Що коштувало б переписати? Як швидко зростуть витрати поточної системи з часом, якщо їх не переписати? Що робити, якщо збільшується використання, яка ймовірність стихійного лиха, якщо зберігається поточний код? Ви нічого не можете знати з цього, але ви можете краще здогадатися, ніж хто-небудь інший. Надайте діапазон або щось, щоб повідомити, наскільки точно ви думаєте, що можете передбачити ці речі.

Більшість розробників не люблять підтримувати паршивий код. Ось чому може бути прикро, що код, який неможливо переписати з точки зору розробника, не варто переписувати з точки зору бізнесу.

Наприклад, навіть якщо перезапис закінчується вигідним, це може коштувати менше, ніж альтернативні витрати на витрачання грошей в іншому місці компанії. Або погана база коду може зайняти більше часу, щоб змінитись і мати більше регресій, але недостатньо, щоб зробити перезапис вигідним. Вони можуть шукати, щоб їх викупили в найближчі кілька місяців, і витратити гроші на переписування з’явиться на книги, але баггі програмне забезпечення не стане.

Спробуйте подумати про це з точки зору бізнесу, і не готуйте цифри, щоб отримати те, що вам потрібно. Велика переписка майже ніколи не є мозком з бізнес-точки зору. Якщо ви хочете довести щось, що не є безпосередньо доказовим, постарайтеся спростувати це. Якщо ви все ще намагаєтесь придумати спосіб не переписати з нуля, але нічого, що ви придумали, не має сенсу, можливо, тоді справді пора переписати з нуля. І доклавши цих зусиль, ви покажете керівництву, що ви серйозно ставитеся до представлення інтересів компанії, а не до своїх власних (ви представляєте інтерес компанії, а не свій власний, правда?).


2

Я здогадуюсь, це залежить від того, що погано в кодовій базі. Бути "Не так, як я б робив речі", не означає, що це погана база коду.

Речі, які насправді мають погану базу коду:

  • Захисні отвори

    Проблеми, які залишають вразливими сервер, додаток та / або дані. Особливо все, що несе небезпеку даних про компанію, клієнта чи клієнта. Це потрібно легко документувати.

  • Робочий Broken

    Це працює лише тому, що ви масажуєте дані та здійснюєте технічне обслуговування програми майже постійно, щоб вони працювали. Якби ви виїхали, і ніхто не брався за цю бляшанку, вона більше не працюватиме. - Документуйте, скільки часу ви витрачаєте на це. І зверніть увагу, скільки ви могли заощадити. Досить часто ці процеси є неефективними і для користувачів, і ви можете це також документувати.

  • Насправді не працює

    Схоже, це працює, але результати неправильні. Це, як правило, спричиняє проблеми внизу лінії, такі як числа не збігаються, велика кількість дефектів тощо

Що не є поганою кодовою базою (просто непогано):

  • Написано на застарілому непідтримуваному техніці. (VB6, COBOL, .net1.1 тощо)

Зверніть увагу на переваги переходу на нову технологію. Спробуйте знайти шлях міграції, який переміщається за один раз, щоб ви могли мінімізувати ризик та створити довіру користувачів та управління. Переконайтесь, що логіка працює в основному так само, як оригінал.

  • Недокументований / погано відформатований код

Це вам найлегше виправити, оскільки, як правило, ви можете додавати коментарі та виправляти форматування, не впливаючи на код. Але для цього не потрібно переписувати. Якщо ви вважаєте, що це поєднується з іншими проблемами, перше, що потрібно зробити, - це виправити це, щоб ви могли краще оцінити життєздатність коду.


1

Ви певним чином відповіли на власне запитання.

Спосіб переконати їх витрачати гроші на системі - це почекати, поки вона не буде добре працювати для користувача. Якщо ви думаєте, що він не буде масштабуватись, або зачекайте, що це станеться, або зробіть тест навантаження, щоб довести це.

Тоді проста пропозиція очищення цього масштабу коштуватиме X годин.


8
Єдина проблема полягає в тому, що якщо він несе основну відповідальність за систему, він буде звинувачуватися, коли вона більше не функціонує. "Але це працювало ще до того, як ви почали!", - скажуть вони. Саме тому я порадив проактивний підхід. Попередьте їх заздалегідь, задокументуйте питання, і тоді його дупу прикривають, коли вона зламається, і він не тільки може сказати: «Я сказав вам так своєму начальнику», але він може сказати «я сказав йому так» своєму начальникові.
Джейсон Льюїс

3
@Jason - Я бачу вашу думку, але в моєму досвіді заперечення діє вниз і "сказав йому так", що піднімаючись по ланцюгу, дуже швидко зустрінеться з "гравцем без команди" на шляху вниз.
Jonno

2
Це дуже залежить від індивідуального робочого місця, але я згоден з вами ... Я міг би це краще сформулювати ... Головним моїм пунктом було заздалегідь документування причин того, що воно вийде з ладу, аргументація питання та зберігання документації, доступної для коли це робиться ... найкращий сценарій, ви можете це виправити. У середньому, вас не накрутили, коли це виходить з ладу. Найгірше, що ви глибоко переймаєте систему та її слабкі сторони та як їх виправити достатньо, щоб вражаюче пояснити (яскраво детально), як і чому ви залишили останню посаду своєму потенційному роботодавцю, коли ви закінчилися пошуком роботи після її виходу з ладу ;-)
Джейсон Льюїс

1
@JasonLewis Якщо гравці в компанії вживають фрази на зразок I told you soтоді, це винна культура вини, а не місце, на якому ОП хотів би працювати довго. Хороший менеджер не звинувачує, хороший менеджер визнає проблеми і придумує план.
maple_shaft

@maple_shaft Я згоден. Я не мав на увазі ці слова буквально, я більше мав на увазі висвітлення всіх основ. В ідеалі, у нас би були всі добрі, підтримуючі менеджменти, аж до командного ланцюга. Однак ми часто миримося з сумлінною справою, щоб ми могли використати роботу, яку ми маємо, як кроковий камінь до потрібної нам роботи.
Джейсон Льюїс

1

Це складна ситуація, тому що, з точки зору користувача, зараз усе знаходиться на прийнятній та стабільній точці. Перш за все з нетехнічними менеджерами, на даний момент нічого не турбує, але просити переписати базу коду - це величезне рішення, яке не слід сприймати легко, особливо на думку та зусилля самої людини (себе) .

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

Ваші оцінки нових можливостей будуть високими, виправдайте ці великі цифри фактами, доказуючи, що ці речі дійсно потребуватимуть багато часу. Якщо ви не донесите це належним чином, то ваш менеджер може просто вважати вас некомпетентним, і ви, звичайно, цього не хочете. Коли він ставить під сумнів високі оцінки, то поясніть, чому ви вважаєте, що накопичений технічний борг заважає можливості швидко та дешево додавати функції до поточного програмного забезпечення. Якщо у вашого менеджера є дві клітини мозку, які потрібно розібрати, він почне розуміти дуже швидко.

Справа в тому, що ви не повинні намагатися переконати свого менеджера, а керувати своїм менеджером відповідною (і ретельно підібраною) інформацією, що він / вона може переконати себе, що переписання - прийнятний курс. Ви повинні змусити менеджера думати, що це його ідея.


1

Спочатку визначте накопичену технічну заборгованість у своїй кодовій базі. Потім погляньте на це питання та відповіді , де пояснено, як переконати керівництво погасити технічну заборгованість, перш ніж продовжувати.


0

Є причина, чому все зріле програмне забезпечення схоже на безлад:

  1. Весь безлад кодує критичну логіку, на яку спирається бізнес. Без цього нічого не працює. Кожен шматочок був необхідний для вирішення проблеми користувача.
  2. Це використання трохи застарілих технологій. Нинішні програмісти, здається, вважають, що якщо він не використовує якусь магію шаблонів, це просто безлад. Це порушений погляд. Кожен, хто запізнюється на якийсь більший проект, пройде цей етап, вивчивши всі деталі.
  3. Вимоги, які були критичні деякий час тому, вже не такі критичні. Це тому, що програмне забезпечення вже вирішило ці проблеми. Запізнившись на проект, може здатися, що програмне забезпечення складне без поважних причин - проблеми вже не існує, але складність у коді все ж є.

Цей тип ставлення змушує програмістів виправдовуватись великою технічною заборгованістю через незнання чи лінь. Завдання програміста - кодувати ділову логіку за допомогою абстракцій. Змінна специфіка повинна жити в метаданих, а не в жорсткому коді магічних чисел. По-друге, «трохи застарілі» можуть бути суб’єктивними. IMHO, "трохи застаріла" означає, що рамка / платформа все ще активно розвивається, і я маю шлях оновлення. Альтернатива "застаріла". Число 3 невиправдано. Ви щойно описали суглоб. Ніхто не відремонтував або очистив базу коду, і це прийнятно?
Джейсон Льюїс

звичайно, але який результат після того, як ви закодували ділову логіку за допомогою абстракцій ... Код виглядатиме складно. Ось таке визначення "безлад". (3) не є чітким, оскільки складність все ще потрібна; потреба мати його не зникала навіть після вирішення проблеми.
tp1
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.