Какой лучший способ познакомиться с большой кодовой базой? [закрыто]

В дополнение к предоставлению авторизационного кода OAuth 2 (полный пользовательский поток токенов) Spring OAuth2Template от Spring Social также поддерживает предоставление пароля и предоставление учетных данных клиентов.

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

Facebook поддерживает поддержку учетных данных клиента через аутентификационный центр OAuth2Template ( ). В этом случае вы торгуете учетными данными вашего приложения (предоставленными вами через Facebook) для токена доступа. Однако имейте в виду, что полученный вами токен ограничен только для запросов, не ориентированных на пользователя.

Как правило, для большинства API Facebook требуется токен пользователя ... который вы должны получить через полный поток авторизации. Это не ограничение Spring Social ... это строгое ограничение безопасности, принятое Facebook.

73
задан Community 23 May 2017 в 12:26
поделиться

19 ответов

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

24
ответ дан Brian R. Bondy 23 May 2017 в 22:26
поделиться
  • 1
    Вы правы. reloadData делает tableView " forget" выбранные строки. Все же существует быстрое исправление для этого: просто перезагрузите определенные строки путем вызова reloadRowsAtIndexPaths:withAnimation: – Philip007 1 February 2013 в 13:04

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

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

1
ответ дан Dave Turvey 23 May 2017 в 22:26
поделиться
  • 1
    :? хорошо, извините если я имею, вводят в заблуждение тогда! Я попытался бы отправить результаты как комментарий здесь! Спасибо за совет! – Randika Vishman 19 May 2014 в 07:38

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

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

1
ответ дан dicroce 23 May 2017 в 22:26
поделиться
  • 1
    Я don' t думают, что это - проблема, tableView относится к self.tableView так или иначе. Попробуйте его, Вы изучите что-то. – phi 19 May 2014 в 03:13

Можно хотеть рассмотреть рассмотрение исходный код, перепроектирующий инструменты. Существует два инструмента, о которых я знаю:

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

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

2
ответ дан Andreas Haferburg 23 May 2017 в 22:26
поделиться
  • 1
    Обычно Вы хотите использовать config.autoload_paths в направляющих, так, чтобы это могло правильно загрузить/разгрузить файлы. – m33lky 25 April 2012 в 11:05

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

Затем смотрят на объектную модель; могла бы уже быть схема, или Вам, возможно, придется перепроектировать один (или вручную или использование инструмента, как предложил Doug). На данном этапе Вы могли также исследовать базу данных (если таковые имеются), если должен следовать за объектной моделью, но она не может, и это важно знать.

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

Наконец, сохраните некоторые примечания (я предпочитаю Wiki).

  • существующие парни могут использовать его для проверки работоспособности Ваши предположения и выручить Вас.
  • необходимо будет вернуться к нему позже.
  • следующий новый парень в команде действительно поблагодарит Вас.
2
ответ дан Robin Bennett 23 May 2017 в 22:26
поделиться

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

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

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

Удачи!

2
ответ дан unintentionally left blank 23 May 2017 в 22:26
поделиться
  • 1
    Я соглашаюсь, это обычно было бы лучшей идеей, но it' s не всегда возможный, например, если у Вас есть файл, который вновь открылся существующий класс вместо того, чтобы определить новый класс. Какие-либо предложения для того, что сделать в этом случае? – Tyler Rick 26 April 2012 в 11:28

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

, Когда у Вас есть что-то, что должно быть сделано, дайте себе узкий фокус и сделайте его.

2
ответ дан KevDog 23 May 2017 в 22:26
поделиться
  • 1
    Сделайте его частью процесса init - that' s, что я сделал, и это работает как очарование. Создайте/etc/init.d/adb, скопируйте то, что другие init задания делают и просто называют " adb start-server" и " adb kill-server" соответственно, и ссылка, что в надлежащем rc.d каталоге - я создал ссылку, названную/etc/rc.5d/S20adb. – EboMike 9 October 2012 в 11:02

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

3
ответ дан Avdi 23 May 2017 в 22:26
поделиться
  • 1
    посмотрите ниже корректного ответа! Я выполнил его без su разрешения с помощью gnac ответ. проваленный – Sijav 1 November 2013 в 23:51

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

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

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

От вершины вниз приближаются, приложение, вероятно, имеет основной цикл или основной gui, который управляет всем действием. Стоит понять основной поток управления приложения. Стоит прочитать код, чтобы дать себе широкий обзор основного потока приложения. Если это - приложение для GUI, создавая статью, которая показывает, который там экраны и как добраться от одного экрана до другого. Если это - приложение командной строки, как обработка сделана.

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

2
ответ дан Cervo 23 May 2017 в 22:26
поделиться
  • 1
    В течение многих времен, когда config.autoload_paths isn' t достаточно, как когда config.threadsafe! включен, требуя классов, которые работает отлично этот путь! – Jeremy Herrman 2 March 2013 в 06:49

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

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

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

4
ответ дан user29227 23 May 2017 в 22:26
поделиться

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

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

10
ответ дан Russell Bryant 23 May 2017 в 22:26
поделиться
  • 1
    да, это не делает работавший, но момент, я использую корень, это сразу работает. – Peter Teoh 16 May 2014 в 03:10

Соединение со строгим вращением.

, Если возможно, при прохождении через документации/кодовой базы, попытка использовать соединение со строгим вращением. Значение, два из Вас сидят вместе в течение установленного промежутка времени (скажите, 2-часовая сессия), затем Вы переключаете пар, один человек продолжит работать над той задачей в то время как другие перемещения к другой задаче с другим партнером.

В парах Вы оба возьмете часть знания, которое может затем питаться другим членам команды, когда вращение происходит. То, что хорошо об этом также, то, что, когда новая пара объединена, тот, который работал над задачей (в этом случае, исследуя код), может затем суммировать и объяснить понятия более понятным способом. В то время как время прогрессирует, все должны быть на подобном уровне понимания и надо надеяться избежать, "О, только John знает что бит кода" синдром.

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

7
ответ дан Grundlefleck 23 May 2017 в 22:26
поделиться
  • 1
    Это работало на меня. Я думал, что у меня уже был рабочий 51-android.rules набор, но я непреднамеренно включал модель ATTR, а также поставщика. Я удалил его. Кроме того, я не знал корректный способ перезагрузить правила udev. Я использовал udevadm, и adb команда устройств работала правильно. – Nick Coleman 30 September 2013 в 20:28

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

6
ответ дан Paul Nathan 23 May 2017 в 22:26
поделиться
  • 1
    Это просто doesn' t работа, I' ve даже пытался перезагрузить систему – Kirill Kulakov 2 February 2013 в 20:04

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

2
ответ дан Leigh Caldwell 23 May 2017 в 22:26
поделиться
  • 1
    Can' t upvote больше, но я сердечно второй это решение: D – Kheldar 7 September 2011 в 03:36

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

17
ответ дан 23 May 2017 в 22:26
поделиться

Это довольно зависит от того, какой ученик и какой программист Вы, но:

  • Широкий первый - Вам нужна идея объема и размера. Это могло бы включать скользящий docs/uml, если они хороши. Если это - долгосрочный проект, и Вы испытываете необходимость в полном понимании всего, я мог бы на самом деле прочитать документы правильно. Снова, , если они хороши.
  • Узкий - выбирают что-то управляемое и пытаются понять это. Получите "вкус" к коду.
  • Выбор функция - возможно другая к той Вы просто посмотрели на то, если Вы чувствуете себя уверенно и начинаете вносить некоторые небольшие изменения.
  • Выполняют итерации - оценивают, как хорошо вещи навестили, если Вы могли бы извлечь выгоду из повторения раннего шага в большей глубине.
9
ответ дан Draemon 23 May 2017 в 22:26
поделиться
  • 1
    ДА! эта работа, но мой был differenet-> ПОДСИСТЕМА ==" usb" ATTRS {idVendor} ==" 0fce" ATTRS {idProduct} ==" 6182" ENV {ID_GPHOTO2} = " 1" ENV {GPHOTO2_DRIVER} = " proprietary" ENV {ID_MEDIA_PLAYER} = " 1" РЕЖИМ =" 0666" ГРУППА =" plugdev"-> у меня есть ZR Xperia Sony и заметьте plugdev и также don' t забывают выполнять sudo сервис udev перезапуск для перезапуска целых сервисов usb! – Sijav 1 November 2013 в 23:54

(впереди бесстыдный маркетинг)

Вы следует проверить nWire . Это плагин Eclipse для навигации и визуализации больших кодовых баз. Многие наши клиенты используют его для привлечения новых разработчиков, распечатывая визуализации основных потоков.

0
ответ дан 24 November 2019 в 12:23
поделиться

У меня была похожая ситуация. Я бы сказал, что вы идете так:

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

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

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

  • Какова основная цель системы?
  • Какие основные компоненты системы затем решить эту проблему?
  • Какое взаимодействие имеет каждый из компонентов? Сделайте график, который отображает зависимости компонентов. Спросите кого-то, кто уже работает над этим. Эти компоненты должны что-то обмениваться между собой, поэтому постарайтесь также выяснить это (например, IO может возвращать объект File обратно в GUI и т. П.)
  • Как только это будет удобно, погрузиться в компонент, который является наименее зависимым среди других. Теперь изучите, как этот компонент делится на классы и как они взаимодействуют друг с другом. Таким образом, вы получите общий компонент в общей сложности
  • Перейдите к следующему наименее зависимому компоненту
  • До самого конца перейдите к основному компоненту, который обычно будет зависеть от многих других компонентов, которые вы
  • Рассматривая основной компонент, вы, возможно, обращаетесь к компонентам, которые вы исследовали ранее, поэтому не беспокойтесь, продолжайте усердно работать!

Для первой стратегии: Возьмите пример этого сайта stackoverflow, например. Изучите хранилище данных, что хранится, как хранится, какие представления эти элементы имеют в коде, как и где они представлены в пользовательском интерфейсе. Откуда они приходят и какая обработка происходит с ними, когда они возвращаются в хранилище данных.

Для второго Возьмите пример текстового процессора для примера. Какие компоненты есть? IO, UI, Page и т.п. Как они взаимодействуют друг с другом? Двигайтесь дальше, когда вы учитесь дальше.

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

2
ответ дан 24 November 2019 в 12:23
поделиться

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

1
ответ дан 24 November 2019 в 12:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: