Refactoring vs. rewriting
Dec. 29th, 2008 12:06 pmА вот еще такой вопрос ко френдам-программистам. Допустим, вы отвечаете за какой-то, достаточно значительный кусок кода. До вас этим куском кода в течении многих лет занималось еще множество народу, с частью из которых вы даже не знакомы, а другие уж далече. Вам кажется, что код этот - наказание за все ваши грехи: он с одной стороны имеет очень сложный для понимания дизайн, с другой - в течении тех лет, что его поддерживали, в него внесли кучу изменений, которые идут поперек этого дизайна. Таким образом в нынешнем его виде вносить в него дальнейшие изменения (о которых все время просят заказчики) - чистая и незамутненная радость. В такой ситуации есть два возможных решения:
1. Либо потратить кучу времени и сил на реставрацию: понаписать тестов, сделать рефакторинг, вернуть код к жизни.
2. Либо выбросить все, и написать, с учетом имеющегося опыта, заново.
Очевидно, что начальство двумя руками за 1-й вариант: переписывание - это риск, начальство рисков не любит. Очевидно также, что будут ситуации, когда будет выбран первый вариант, а будут - когда второй. Чем бы вы руководствовались при решении о том, какой вариант выбрать?
1. Либо потратить кучу времени и сил на реставрацию: понаписать тестов, сделать рефакторинг, вернуть код к жизни.
2. Либо выбросить все, и написать, с учетом имеющегося опыта, заново.
Очевидно, что начальство двумя руками за 1-й вариант: переписывание - это риск, начальство рисков не любит. Очевидно также, что будут ситуации, когда будет выбран первый вариант, а будут - когда второй. Чем бы вы руководствовались при решении о том, какой вариант выбрать?
no subject
on 2008-12-29 11:00 am (UTC)Если серьезно, то вариант №1 - тоже риск, и немалый. Никто не сказал, что после реставрации старый дизайн вообще будет работать. Собственно, из взвешивания рисков первого и второго и следует исходить, выбирая свой путь.
Бывают ситуации, когда вариант №2, в котором новый фактически продукт приходит, по мере созревания, на место старого, оказывается менее рискованным: во все время его разработки, старая версия по крайней мере не становится хуже.
no subject
on 2008-12-29 10:31 pm (UTC)Судя по условиям задачи речь идет о достаточно большом куске кода, иначе уже бы давно выкинули и переписали. Скорее всего первый этап варианта 1 - "понаписать тестов" - уже не тривиальная задача, т.к. часть требований к коду (была) известна лишь предыдущим и недосягаемым участникам торжества. Разбиение на модули с целью рефактоить по отдельности скорее всего будет встречено активным сопротивлением со стороны такого кода.
С другой стороны, если мое первое предположение не верно и есть четкое понимание, что же код должен делать - второй вариант скорее всего дешевле первого.
Bottom line: если условия задачи ясны - предпочтительней переписать.
Если нет - не трогать и поставить заплатку.