reverse engineering большого проекта
От: mrbiggfoot  
Дата: 07.08.07 12:37
Оценка:
Здравствуйте!
Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д.
Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.

Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный
Спасибо!
Re: reverse engineering большого проекта
От: Хитрик Денис Россия RSDN
Дата: 07.08.07 12:45
Оценка:
Здравствуйте, mrbiggfoot, Вы писали:

M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д.

M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.
M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный

Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики.

UML генерить умеет Rational Rose.
А вот насчёт "кто кого зовёт": гляньте Understand for C++ здесь.
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: reverse engineering большого проекта
От: John Grey Украина  
Дата: 07.08.07 13:00
Оценка: 1 (1)
Здравствуйте, mrbiggfoot, Вы писали:

M>Здравствуйте!

M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д.
M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.

M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный

M>Спасибо!

SourceInsight — поможет сгенерить диаграмы взаимосвязи классов/компонент("кто кого зовёт"), но не больше...
Сам сталкивался с подобной проблемой(всего-то было порядка 250-300 метров некомпилённых исходников) — никакая автоматизация не помогла, пришлось основное чертить руками, а остальное заполнять по мере понимания проекта.
Re[2]: reverse engineering большого проекта
От: mrbiggfoot  
Дата: 07.08.07 13:02
Оценка:
Здравствуйте, Хитрик Денис, Вы писали:

ХД>Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики.


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

ХД>UML генерить умеет Rational Rose.

ХД>А вот насчёт "кто кого зовёт": гляньте Understand for C++ здесь.

Спасибо, обязательно посмотрю!
Re[3]: reverse engineering большого проекта
От: Хитрик Денис Россия RSDN
Дата: 07.08.07 13:11
Оценка: 29 (3)
Здравствуйте, mrbiggfoot, Вы писали:

ХД>>Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики.

M>Вопрос был поставлен не "разобраться в проекте", а "довести проект до ума"
M>При помощи такого графа я хотел избавиться от циклических зависимостей и нарушений layering'а. Поскольку проект большой, непонятно даже, за что сначала взяться. Кроме того, после "выпрямления" связей хорошо было бы проверить, что я ничего не забыл.

Довести проект до ума это значит, что у пользователя он должен работать так, как тот этого ожидает. Делает то что надо и без ошибок.
А как он там внутри разбит, уже дело десятое. ИМХО, не надо избавляться от таких зависимостей, пока не припрёт в конец.
Есть в проекте нереализованная функциональность — займитесь ею, а уже параллельно, если встретится косяк и у вас будет чёткое понимание, что ваши изменения ничего другого не порушат, исправляйте его.

Это я с таким умным видом говорю, потому что сам ловлюсь регулярно на попытках "сделать идеально" в тех местах, в которых уже сделано "достаточно хорошо" и игнорирую необходимость двигаться вперёд по задачам Как мне повезло с людьми, которые меня вовремя останавливают!
Правила нашего с вами форума.
Как правильно задавать вопросы. © 2001 by Eric S. Raymond; перевод: © 2002 Валерий Кравчук.
Re: reverse engineering большого проекта
От: _Dinosaur Россия  
Дата: 07.08.07 13:11
Оценка: 10 (1)
Здравствуйте, mrbiggfoot, Вы писали:

M>Здравствуйте!

M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д.
M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.

M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный

M>Спасибо!

загляни еще сюда
может окажется полезным...
Завидую людям, которые могут себе позволить никуда не спешить.
Re: reverse engineering большого проекта
От: kaa.python Ниоткуда РСДН профессионально мёртв и завален ватой.
Дата: 07.08.07 13:30
Оценка:
если цель именно разобраться — я бы взял Doxygen+Graphviz, и построил документацию. кто кого завет видно будет. диаграммы наследования тоже будут видны, и что очень важно, будет легко доступен код по ссылкам (если включить соответствующие настройки у Doxygen).
... << RSDN@Home 1.1.4 stable SR1 rev. 568>>
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.