Рубрики
Uncategorized

Графические данные 1000 репозиториев для определения ключевых типов проектов

Что вы делаете, когда вам нужно определить набор репос, чтобы проверить некоторые большие изменения, но у вас есть тысяча на выбор? Отвечать: Разбивайте некоторые графические теории и моделируйте их. Теги с DevOps, производительностью, программированием, информатикой.

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

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

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

Эксперимент

Каждый проект использует файл под названием dev.yml Указать несколько зависимостей. Из этих зависимостей хорошая часть была установлена с использованием домочетания (компания использует только Mac Computers для разработки). Эти зависимости были ключевые точки данных, используемые в этом эксперименте.

Каждый dev.yml Файл был проанализирован для извлечения заявленных домофонов и используемых для создания этого графика.

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

Модульность

График выше довольно плотный и не очень полезен. Это может в значительной степени использовать только для того, чтобы показать, что есть много соединений (почти 200 000 между примерно 700-1000 REPOS!).

Чтобы сделать график более полезным, я применил Алгоритм модульности в сети узлов. Этот алгоритм генерирует атрибут, называемый «классом модулярности», которая является классификацией, используемой для определения общины Какой модный способ сказать: «Эти репо, плотно связаны. Другими словами, это определяет, как связано репо, — это другое репо.

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

.

Макет графика

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

Чтобы попытаться улучшить визуальные аспекты немного больше, я дополнительно применил Forceatlas 2 Алгоритм макета Чтобы попытаться дать некоторое видимость к согласованному и понятному графику. Результат позволил мне начать идентифицировать некоторые кластеры, которые вы можете увидеть ниже.

Группировка данных

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

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

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

Я экспортировал каждую из этих групп и определил их широко встречающиеся зависимости, которые я рисул. Следующий график — это то, что привело к эксперименту. Он был создан, основанный на результатах кластеризации и в сочетании с некоторыми простыми расчетами, основанными на обычно происходящих зависимостях приложений (например, 74,44% приложений, используемых OpenSSL в зависимости от зависимости, и 15,11% от того, что 74,44% использовали фантомые) Отказ График был дополнительным цветом, закодированным, чтобы показать группы, которые были маркированы на основе технологии, которая обычно произошла в этой группе (я определил этикетку технологии по опыту и опыту в системах).

Примечание: JavaScript и Goalang группы не оказались представительства здесь, но были две группы, выявленные за пределами этого эксперимента. Это пропущенное представительство было вызвано тем фактом, что эти 2 технологии не часто содержат домохозяйственные зависимости. Однако были известны группы из-за экспертизы в системе.

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

Оригинал: «https://dev.to/jules2689/graphing-1000-repositories-to-identify-key-project-types-5di6»