Monthly Archives: Червень 2012

Програмна археологія і проблема власника коду

Уявіть собі, виявляється така дисципліна програмної інженерії як археологія існує досить давно, і в 2001 спеціально по ній навіть проводили конференцію.

Ну і я, собі теж, маючи необхідність прикрутив до Vim таку лопату, яка дозволяє копати в Mercurial:

103 command! -nargs=* Blame call Blame(<f-args>)
104 function! Blame()
105     " gets zero, one or two params
106     " first param – revision to annotate (if false – don’t pass)
107     " second param – pattern to search
108     let revision = (a:0 >= 1) && a:1 ? ‘ -r ‘ . a:1 :
109     let pattern = (a:0 >= 2) && a:2 ? ‘| grep ‘. a:2 :
110
111     let command = ":!hg blame -nvud % ". revision . "| cat -n ". pattern ." | less"
112     execute command
113 endfunction

Лопата жахлива бо я на VimScript ніфіга не вмію писати. І взагалі не люблю мови в яких оператор конкатенації рядків – це крапочка. :)

Але вона працює, і дозволяє вияснити хто, коли і під яким приводом (зазвичай посилання в Jira) написав код на який я дивлюсь. Найчастіше якщо трапляється якийсь великий WTF то виявляється що це написав мій CEO ще в 2008, не пояснюючи мотивів, бо тоді й не було кому пояснювати. :) Ну, і його питати немає сенсу, не тому що субординація, чи він зайнятий, а тому, що це було дуже давно, і звісно він не пам’ятає.

Але загалом все нормально. Тільки от з’являється проблемка. Коли я хочу збільшити пов’язаність якогось модуля, доводиться робити переміщення методів. Коли я хочу щоб метод похудав на 100-200 рядочків, доводиться робити витягнення метода. Обидва рефакторинги переміщують рядки коду, і для Mercurial змінюють його власника, бо він бачить лише що я видалив одні рядки, і вставив якісь інші. Те що вони однакові він не бачить.

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

Зібравши один модуль я навіть вгорі копірайти написав, аби в разі чого люди знали що за поясненнями можна іти не тільки до мене.
І от маю дилему – привласнювати код якось невиховано, але якщо наступна моя задача знову полягатиме в перечитуванні 300-рядкового методу, то я сильно пожалію що залишив код в такому стані.

Тепер питання: а вам доводилось займатись археологією? Що за проект? Як враження? :)


Filed under: Кодерство Tagged: hg, розробка, Vim