Штурмуем Legacy code
4/2/11 18:10Готовлю тренинг по легаси коду. Собираю из черновиков, дёргаю куски из Майкла Физерса.
Объявил на внутренней рассылке доклад-дискуссию. Спасибо конторе, что прижала к стенке и поставила дедлайн. Теперь из этого что-нибудь, да выйдет :D
Кто готов поделиться хорошими примерами? Чтобы характерный пример - на страничку-две, и к ней ещё можно было нарисовать диаграммку классов штук на 5-10-100 :D
Нарисую сам, вы только дайте.
Сорсфорж — конечно, годная тема, но там мало близких нам предметных областей (тупого CRUD-а, то есть).
Объявил на внутренней рассылке доклад-дискуссию. Спасибо конторе, что прижала к стенке и поставила дедлайн. Теперь из этого что-нибудь, да выйдет :D
Кто готов поделиться хорошими примерами? Чтобы характерный пример - на страничку-две, и к ней ещё можно было нарисовать диаграммку классов штук на 5-10-100 :D
Нарисую сам, вы только дайте.
Сорсфорж — конечно, годная тема, но там мало близких нам предметных областей (тупого CRUD-а, то есть).
Tags:
(no subject)
4/2/11 17:37 (UTC)Это первое, что они должны усвоить )
(no subject)
4/2/11 17:44 (UTC)Это ж find usages, как и в Идее?
А дерево вызовов он таки не строит? Эта тулза ещё получше будет.
(no subject)
4/2/11 18:19 (UTC)Примитивная вещь, но почему-то до сих пор часто приходится наглядно объяснять необходимость :)
Дерево - нет вроде...но группирует красиво )
У меня есть забавный пример из собственной практики (.NET). Можешь рассказать, пусть порадуются )
Когда была молодая и горячая, под горячую же руку попался унылый легаси код, где все контролы на кодбихайнде aspx.cs были какого-то хрена public. Возмутившись аццки (это оскорбляло самые прекрасный чувства об инкапсуляции), контекстной заменой сделала из них protected.
Ну вот скажи, что оно должно было сломать ? ;)
Оказалось, у нас был кусок функционала, который тестировался раз в полгода, он использовал рефлексию и вынимал только паблик поля.
Кретинизм, конечно, там можно было без этого обойтись, но не все индусы, которые написали легаси код, мыслят концептуально так же, как и ты...
В итоге неделя разбирательств, 2 выходных отладки - и вуаля - нахожу свои прекрасные изменения 3х месячной давности..
Тут не спас бы Альт + Ф7 никак.
Мораль ? Ну прежде всего - такая, что с легаси кодом 100% уверенности быть не можеит, даже когда всё якобы очевидно )
(no subject)
4/2/11 19:03 (UTC)тренинг по legacy code — это как имитировать унаследованный код? как его править, чтобы ничего не развалилось? как восстановить архитектуру? как переписать критичные куски?
(no subject)
4/2/11 19:14 (UTC)Можно было бы назвать полнотекстовый поиск, но он не спас бы и здесь.
Как подсказываает КО, юнит тесты.
Нормальный паттерн, кстати - работать с публичными полями. Coding by convention, у нас в системе сейчас вообще всё так делается - и получается отличный код.
(no subject)
4/2/11 19:23 (UTC)Что должен уметь слушатель по окончании - у меня в плане записано. Примерно так:
Определять три-четыре вида легаси, исследовать его , безопасно менять и принимать решения, как его править для своей задачи. И нет, до архитектуры мы доходить не будем.
Не так, что "до" слушатель не умел перечисленного, а "после" вдруг стал - но дать несколько приёмов по каждому пункту.
И пункт "как писать легаси код" у меня тоже есть. Скорее как шутка, но это ж дело такое.
Нормальные цели?
(no subject)
4/2/11 20:19 (UTC)(no subject)
4/2/11 21:42 (UTC)(no subject)
4/2/11 21:43 (UTC)(no subject)
4/2/11 21:45 (UTC)Я его даже суппортил, местами :-)
(no subject)
4/2/11 22:42 (UTC)Я всего лишь к тому, что надо перепроверять всё в 2 раза больше, чем с обычным кодом. А про паттерны не надо со мной спорить, я не в состоянии.
(no subject)
4/2/11 22:46 (UTC)(no subject)
4/2/11 23:45 (UTC)что такое, например, «исследовать легаси» как навык? что является ценным результатом этой деятельности?
(no subject)
5/2/11 11:29 (UTC)* строить и читать дерево вызовов;
* считать coupling на пальцах - параметры конструктора и обращения методов к полям;
* вызывать в тестах методы с заведомо неправильными данными и смотреть, что сломается;
* "бинарный поиск" скрытого функционала через комментирование кусков кода;
* "бинарный поиск" ошибок по истории сорсконтрола;
Элементарные вещи, но люди о них не думают.
Ну и ещё один резулльтат тренинга - выплакаться о своём проекте, узнать, что ты не один... социализация!
(no subject)
5/2/11 11:38 (UTC)Я не припоминаю, чтобы кто-то осмысливал проблемы кода через:
* количество моков и partial-моков в каждом тесте;
* длину среднего сетапа теста;
* количество моков, нулов и полноценных объектов, необходимох, чтобы инстанцировать класс;
* банальный branch coverage.
А чтобы их кто-то мерял - вообще ни разу не слышал.