Кодирование Практики: Каковы Ваши мысли о 1,7 миллионах проектов LOC? [закрытый]

7
задан 6 revs, 5 users 50%user34537 17 March 2019 в 02:28
поделиться

7 ответов

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

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

«Зависимости между диаграммами подсистем» также могут указывать на беспорядочные области (типа «Угу? Почему эта часть структуры персистентности зависит от пользовательского интерфейса?!?»), Которые необходимо очистить. Лучше всего, если вы сможете найти способ автоматизировать создание этих диаграмм. Graphviz может стать вашим другом.

7
ответ дан 6 December 2019 в 10:50
поделиться

Какие практики у вас есть при разработке и поддержании проектов этого размера?

Разделить и завоевать, таким образом, не имеющий монолитного проекта этого размера.

6
ответ дан 6 December 2019 в 10:50
поделиться

Какую практику вы применяете при разработке и сопровождении проектов такого размера?

Ну, это когда вы эволюционируете от разработчика к архитектору.

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

3
ответ дан 6 December 2019 в 10:50
поделиться

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

2
ответ дан 6 December 2019 в 10:50
поделиться

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

0
ответ дан 6 December 2019 в 10:50
поделиться

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

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

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

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

0
ответ дан 6 December 2019 в 10:50
поделиться

В данный момент только NTFS поддерживает пробивание отверстий. Исторически это было проблемой в большинстве файловых систем. POSIX, насколько мне известно, не определяет интерфейс ОС для пробивания дыр, поэтому ни одна из стандартных файловых систем Linux не имеет его поддержки. NetApp поддерживает пробивание отверстий через Windows в файловой системе WAFL . Есть хорошее сообщение в блоге об этом здесь .

Для вашей проблемы, как указали другие, единственным решением является перемещение файлов, не содержащих блоков, содержащих нули. Да, это будет медленно. Или напишите расширение для вашей файловой системы в Linux, которое сделает это, и отправьте исправление хорошим сотрудникам в группе ядра Linux.;)

Изменить: Похоже, XFS поддерживает пробивание отверстий. Проверьте этот поток .

Другим действительно искаженным вариантом может быть использование отладчика файловой системы для обхода и пробивания дыр во всех косвенных блоках, которые указывают на обнуление блоков в файле (возможно, вы можете создать сценарий). Затем запустите fsck, который исправит все связанные счетчики блоков, соберет все потерянные блоки (обнуленные блоки) и поместит их в потерянный + найденный каталог (их можно удалить, чтобы освободить место) и исправит другие свойства в файловой системе. Страшно, да?


Отказ от ответственности: делайте это на свой страх и риск. Я не несу ответственности за потерю данных. ;)

-121--2827397-

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

AudioSession.Category = AudioSessionCategory.MediaPlayback;

Когда приложение завершит воспроизведение, чтобы восстановить исходное значение:

AudioSession.Category = AudioSessionCategory.SoloAmbientSound;

Полный образец:

http://github.com/migueldeicaza/monotouch-samples/tree/master/StreamingAudio/

-121--1513805-

Какие у вас есть практики при разработке и обслуживании проектов такого размера?

Существует много школ мыслей для управления крупными программными проектами, и, очевидно, это во многом зависит от типа проекта:

  • Финансируемая разработка программного обеспечения (которая может охватывать некоторые проекты с открытым исходным кодом, в которых участвует корпорация, думаю Eclipse),
  • «хоббистская» разработка программного обеспечения, которая была крайне успешной (подумайте, Linux).

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

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

Но все они будут, как правило, использовать те же «тактические» практики, чтобы справиться со сложностью. Я предлагаю вам прочитать это введение в Joel Test , чтобы получить представление о некоторых полезных/необходимых практиках.

0
ответ дан 6 December 2019 в 10:50
поделиться
Другие вопросы по тегам:

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