Здравствуйте!
Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д.
Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.
Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный
Спасибо!
Здравствуйте, mrbiggfoot, Вы писали:
M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д. M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы. M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный
Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики.
UML генерить умеет Rational Rose.
А вот насчёт "кто кого зовёт": гляньте Understand for C++ здесь.
Здравствуйте, mrbiggfoot, Вы писали:
M>Здравствуйте! M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д. M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.
M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный M>Спасибо!
SourceInsight — поможет сгенерить диаграмы взаимосвязи классов/компонент("кто кого зовёт"), но не больше...
Сам сталкивался с подобной проблемой(всего-то было порядка 250-300 метров некомпилённых исходников) — никакая автоматизация не помогла, пришлось основное чертить руками, а остальное заполнять по мере понимания проекта.
Здравствуйте, Хитрик Денис, Вы писали:
ХД>Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики.
Вопрос был поставлен не "разобраться в проекте", а "довести проект до ума"
При помощи такого графа я хотел избавиться от циклических зависимостей и нарушений layering'а. Поскольку проект большой, непонятно даже, за что сначала взяться. Кроме того, после "выпрямления" связей хорошо было бы проверить, что я ничего не забыл.
ХД>UML генерить умеет Rational Rose. ХД>А вот насчёт "кто кого зовёт": гляньте Understand for C++ здесь.
Здравствуйте, mrbiggfoot, Вы писали:
ХД>>Честно говоря, не представляю, какую полезную информацию вы выудите из сгенерённых автоматически да по плохому коду диаграмм. ИМХО это утопия. Ручками разбираться всё равно придётся — только так вы узнаете нюансы, на которые обратили внимание прошлые разработчики. M>Вопрос был поставлен не "разобраться в проекте", а "довести проект до ума" M>При помощи такого графа я хотел избавиться от циклических зависимостей и нарушений layering'а. Поскольку проект большой, непонятно даже, за что сначала взяться. Кроме того, после "выпрямления" связей хорошо было бы проверить, что я ничего не забыл.
Довести проект до ума это значит, что у пользователя он должен работать так, как тот этого ожидает. Делает то что надо и без ошибок.
А как он там внутри разбит, уже дело десятое. ИМХО, не надо избавляться от таких зависимостей, пока не припрёт в конец.
Есть в проекте нереализованная функциональность — займитесь ею, а уже параллельно, если встретится косяк и у вас будет чёткое понимание, что ваши изменения ничего другого не порушат, исправляйте его.
Это я с таким умным видом говорю, потому что сам ловлюсь регулярно на попытках "сделать идеально" в тех местах, в которых уже сделано "достаточно хорошо" и игнорирую необходимость двигаться вперёд по задачам Как мне повезло с людьми, которые меня вовремя останавливают!
Здравствуйте, mrbiggfoot, Вы писали:
M>Здравствуйте! M>Условие таково: есть огромный проект на C/C++, который по ходу разработки очень плохо документировался, и, что ещё хуже, довольно некачественно написан. Тут вам и циклические зависимости, и нарушение лэйеринга и т.д. M>Хочется вот что: автоматически сгенерить диаграмму классов и граф зависимостей между компонентами (каждая компонента лежит в своей директории). Т.е., грубо говоря, кто кого зовёт. Желательно в виде UML-диаграммы.
M>Подскажите пожалуйста наиболее "прямой" путь это сделать. Ответ "нарисовать руками" неправильный M>Спасибо!
если цель именно разобраться — я бы взял Doxygen+Graphviz, и построил документацию. кто кого завет видно будет. диаграммы наследования тоже будут видны, и что очень важно, будет легко доступен код по ссылкам (если включить соответствующие настройки у Doxygen).