Как понять существующие проекты - PullRequest
16 голосов
/ 20 мая 2010

Я - стажер-разработчик и пишу .NET-приложения уже около года. Большая часть моей работы заключалась в создании новых приложений (в основном веб-приложений) с нуля, и мне был предоставлен более или менее полный контроль над дизайном программного обеспечения.

Тем не менее, как опытный разработчик, это был большой опыт, и моя уверенность в том, что выбранные мной подходы являются минимальными, минимальна. В идеале я хотел бы сотрудничать с более опытными разработчиками (я считаю, что это лучшее, что я узнал), однако в компании, в которой я работаю, разработчики, как правило, работают изолированно (большой позор для меня).

Недавно я решил, что хорошим способом узнать больше о том, как опытные разработчики подходят к своему дизайну, может быть изучение некоторых проектов с открытым исходным кодом. Я оказался немного ошеломлен проектами, на которые смотрел. С моим уровнем опыта было трудно понять код, с которым я столкнулся.

Мой вопрос слегка размыт. Как разработчики подходят к задаче понимания нового среднего и крупного проекта. Я обнаружил, что поливал много кода и изо всех сил пытался разглядеть лес за деревьями. В любое время я чувствовал, что могу понять небольшую часть системы, но не вижу, как все это сходится. У других такое же чувство? Если да, то какие вы подходите к пониманию проекта? Есть ли у вас какие-либо другие советы о том, как выучить лучшие практики дизайна?

Любой совет будет очень признателен. Спасибо.

Ответы [ 5 ]

10 голосов
/ 20 мая 2010

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

  • Прочитайте исходный код, его преимущество в том, что он всегда актуален. Это также самая сложная задача, но это возможно.
  • Прочитайте модульные тесты, если они доступны, они часто показывают предполагаемое использование для класса, библиотеки или инфраструктуры.
  • Рефакторинг части исходного кода. В то время как вы улучшаете качество исходного кода, вы улучшаете свое понимание кода, или я должен сказать, что вы можете улучшить исходный код, только если точно знаете, что он делает.
  • Отладка приложения, пошаговое выполнение программы при использовании отладчика.
  • Используйте такой инструмент, как NDepends, JDepends, Lattix, Visual Studio и т. Д., Для обратного проектирования архитектуры или дизайна приложения и используйте его в качестве отправной точки.
  • Прочитайте документацию. Подойдет любая документация, которая позволит вам понять приложение (пользовательская документация, проектная документация или документация по архитектуре).
  • Общение с первоначальными разработчиками, как сказал Бруно, также будет хорошим вариантом.
7 голосов
/ 20 апреля 2016

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

1-й шаг - попытайтесь понять цель проекта (сначала обзор, затем на низком уровне), если возможно, воспользуйтесь помощью тестера.

2-й шаг - прежде чем приступить к написанию кода, постарайтесь разработать проект на вашем понимании на очень высоком уровне (не тратьте много времени на это, просто на очень высоком уровне).

3-ий шаг - выполнить проект и увидеть ход его выполнения, который даст вам больше ясности в понимании функционального дизайна.

4-й шаг - посмотрите структуру проекта, он даст очень общее представление об архитектуре, такой как три уровня, два уровня и т. Д.

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

6-й шаг - Обратите внимание на ваше понимание для дальнейшего использования.

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

ура!

2 голосов
/ 05 ноября 2014

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

  1. Создать ER-диаграмму базы данных (если это реляционная база данных)
  2. Создание реляционного листа ER со всеми связями выложенных таблиц (здесь SQL-запрос http://blog.sqlauthority.com/2006/11/01/sql-server-query-to-display-foreign-key-relationships-and-name-of-the-constraint-for-each-table-in-database/)
  3. Используйте приведенный выше лист для создания представлений, чтобы логически сгруппировать таблицы и просмотреть результаты. Это помогает понять схему и данные, стоящие за приложением
  4. Схема для размещения уровней и компонентов в проекте
  5. Диаграмма последовательности и диаграммы потоков данных для понимания потока
  6. Для вышеперечисленного вам необходимо отладить приложение, используя инструмент, подобный Visual Studio
  7. Диаграмма классов и справочные карты методов, позволяющие найти и отследить цепочку в коде (можно использовать такие инструменты, как Resharper)
  8. Функциональные характеристики (или написать собственную историю проекта) и диаграммы вариантов использования (для понимания бизнес-требований)
  9. Измените небольшую часть, чтобы лучше понять код
  10. Поговорите с разработчиками, сообществом или бизнесом
2 голосов
/ 20 мая 2010

Вы всегда должны искать лучший путь. Это, по сути, то, где вы ведете себя, чтобы стать лучше. Всегда спрашивать «должен быть лучший путь» - это хорошо, но не позволяйте ему парализовать вас. Установите время, чтобы что-то попробовать, если вы никуда не денетесь, бросьте это, идите другим путем.

Что меняется, так это люди, которым вы доверяете, люди, от которых вы можете поделиться идеями, и сообщества, к которым вы можете обратиться. Я делаю это все время с коротким списком людей, которые работали со мной раньше, лучше, чем я, в тех областях, которые, как я знаю, я отстой, и не против сказать мне «нет, плохо, вы должны это сделать (другая идея )». Тот шаг, который вы уже сделали, разместив что-то здесь: -)

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

Вы упомянули, что люди очень одиноки ... это очень плохо, потому что развитие чего-либо требует, чтобы много людей разговаривали друг с другом. Я хотел бы предложить спросить, можете ли вы соединить программу с одним из них, который много знает о системе. Если этот человек оправдывается или говорит, что «они не могут» найти кого-то, кто это сделает.

2 голосов
/ 20 мая 2010

Связь

Я обычно просил бы разработчика дать мне обзор проекта или любого интересующего меня модуля проекта. Пока что я не нашел ничего лучше, чем общение с вовлеченными разработчиками. существующая кодовая база. Они могут не только дать вам обзор проекта и кода, но также порекомендовать любую доступную документацию (например, диаграммы классов), на которую стоит обратить внимание.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...