Как понять существующие проекты

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

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

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

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

Любые советы будут очень оценены. Спасибо.

Ответ 1

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

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

Ответ 2

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

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

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

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

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

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

6-й шаг. Обратите внимание на ваше понимание для будущих ссылок.

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

Ура!

Ответ 3

Связь

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

Ответ 4

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

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

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

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

Ответ 5

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

  • Создайте ER-диаграмму базы данных (если это реляционная база данных)
  • Создайте реляционный лист 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/)
  • Используйте приведенный выше лист для создания представлений для логической группировки таблиц и просмотра результатов. Это помогает понять схему и данные, лежащие в основе приложения.
  • Диаграмма для выкладки уровней и компонентов в проекте
  • Диаграмма последовательности и диаграммы потоков данных для понимания потока
  • Для вышесказанного вам нужно отладить приложение с помощью инструмента, такого как visual studio
  • Диаграмма классов и справочные карты методов для undersand цепи в коде (могут использовать инструменты, такие как Resharper)
  • Функциональные спецификации (или написать собственную историю проекта) и диаграммы использования (чтобы понять бизнес-требования)
  • Восстановите небольшую часть, чтобы лучше понять код.
  • Поговорите с разработчиками или сообществом или бизнесом.

Ответ 6

1) Документация (если есть) 2) Тщательно просматривая код 3) Потяните запрос от других 4) Модульные тесты 5) Поговорите с коллегами и отлаживайте как можно больше различных потоков