?

Log in

No account? Create an account
November 2016   01 02 03 04 05 06 07 08 09 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30
cartoon

Читай код

Posted on 2009.05.03 at 16:01

Comments:


Gaperton
gaperton at 2009-05-03 21:01 (UTC) (Link)
Сначала я пытался найти инструменты. Взял Rational Rose, натравил на "свою" подсистему, и несколько дней занимался расстановкой нескольких сотен классов на листке бумаги, чтобы получился планарный граф :). Потом игра в "пятнашки" меня достала, и я понял, что волшебной тулзы, которая поможет мне понять код не читая его, я не найду.

В моем случае практически в каждой подсистеме было в районе 5-7 центральных классов, при общем количестве измеряемом сотнями. Задача номер раз - идентифицировать эту семерку.

Для этого, надо по коду отследить основной поток данных и поток управления, как он идет по классам. Особое внимание обратить на коллбэки, и асинхронные колбэки - это надо не пропустить. Обычно это легко, последние делаются посредством одного и того же паттерна, и явно выражаются в иерархии наследования.

В процессе этого выделятся некоторые классы, в которые чаще всего попадают внешние вызовы, а уже они раздают вызовы остальным классам подсистемы. Грубо говоря, "центральные" классы обязательно учавствуют во внешнем интерфейсе подсистемы, про них знают снаружи, на них есть внешние ссылки, и им вызывают методы.

Применяется следующий анализ: на диаграмму классов наносятся вызовы, которые дергаются по каждой из ассоциаций. Это дает реальную информацию о связности системы - не просто кто с кем связан, но и кто какую часть внешнего интерфейса юзает. Выясняется, например, что из сотни публичных методов класса снаружи вызывается только 5. Это очень важно - эти 5 являются главными, остальное - второстепенно, и надо начинать анализ именно с них.

Коллбэки также наносятся на схему специальными стрелками. Этого достаточно, чтобы отследить поток данных, выделить границы подсистем, и понять функции классов. Работа кропотливая, но делается быстрее, чем кажется, и приносящая результат.

Да, еще можно расставить брекпойнты в отладчике, и смотреть, дергаются ли они в том порядке, в котором мы думаем, что они должны. Это - экспериментальная проверка гипотезы. Можно просто в отладчике походить, посмотреть - но - при данном подходе в случае большой незнакомой системы можно сойти с ума.

Еще способ - снять профайлером информацию, что вызывается из данной функции. И разобраться в тех, которые жрут больше времени - с некоторой вероятностью это и есть основной поток управления.

Вообще, я бы дал ссылку на пост, но РСДН лежит.
alll
alll at 2009-05-03 22:14 (UTC) (Link)
Лишний повод перепостить этот пост в жж. :)
Gaperton
gaperton at 2009-05-03 22:21 (UTC) (Link)
Да где ж его теперь взять, этот пост. РСДН-то лежит. Будет обидно, если он не встанет, там много хороших постов. Надо бы экспорт организовать как-то. Или поиметь архив.
alll
alll at 2009-05-03 22:31 (UTC) (Link)

Re: или поиметь архив

Previous Entry  Next Entry