Upgrade to Pro — share decks privately, control downloads, hide ads and more …

RailsClub 2016. Dolganov Sergey. Open-Source So...

RailsClub 2016. Dolganov Sergey. Open-Source Software. What's in a bag?

My current projects have a significant portion of legacy code and lots of gem dependencies. Time to time, I check their Gemfiles just to be puzzled about some of the gems I barely know about. Sooner or later, I will have to check those dependencies to learn if those gems are up to date and still supported — there is a chance I would need to get rid of irrelevant code, especially if it is already outdated.

The same problem arises when you need to add a new dependency to the project or choose a new gem from a myriad of alternatives. It would be great to check the amount of changes going on with the gem, its development history, its changelog and issues — on GitHub or RubyGems — and do it all at once while comparing it to alternatives.

I am going to share some interesting infographics on trends and development history of some of the most well-known Ruby projects (hanami, slim, minitest and others), will talk about the aspects of getting the metrics from the sources mentioned above, and, most of all, about several ways to classify that data. Also, of course, we are going to have a demo of the project which was born as a result of my research; it will be available as an open-source project.

Sergey Dolganov

October 22, 2016
Tweet

More Decks by Sergey Dolganov

Other Decks in Technology

Transcript

  1. Опасности стороннего кода https://robots.thoughtbot.com/to-gem-or-not-to-gem — Вы ничего не знаете о

    качестве и безопасности кода. — Вы ничего не знаете о его поддержке в дальнейшем. — Вы не знаете, сколько ресурсов потребует в работе сторонний гем. — Вам необходимо использовать гем в соответствии с его лицензией. — Вам придется мириться с его DSL/API. — Возможно, вам придется тащить слишком большой багаж.
  2. 1. На Rubygems порядка 100 000 гемов, при этом большая

    часть загрузок приходится на ~1% Проблемы open-source зависимостей
  3. 2. У Node.js, передовика open-source, дела обстоят хуже: “The average

    open source node.js project has a dependency graph more than 3 times bigger than the average ruby project!” Проблемы open-source зависимостей https://twitter.com/teabass/status/763325955486146560
  4. 1. Ruby Toolbox — альтернативы, популярность, динамика 2. RubyGems —

    информация о версиях 3. Github — сommits, issues & pulls, контрибьюторы 4. CodeClimate — качество кода 5. coveralls.io — покрытие документацией 6. Rubocop — cоответствие стилю Стандартный цикл оценки Ruby OSS-проекта
  5. — Rubygems — GitHub — Ruby Toolbox — Bestgems.org —

    Issue Stats — Dependency CI & Libraries.io — RecordNotFound.com Инструменты для подбора сторонних решений
  6. — rubocop — проверка на соответствие стилю — simplecov, coveralls,

    rcov — тестовое покрытие — yard, inch — покрытие кода документацией — Code Climate, cane/flog/flay — качество кода — Бейджики с загрузками за последний период или с пометкой об устаревании кода Инструменты для анализа кодовой базы
  7. — Наличие хорошей документации — Качественная архитектура — Наличие инструмента

    взаимодействия с потребителем/пользователем/контрибьютором — Наличие и качество тестового покрытия — Наличие Roadmap (или долгосрочных планов развития) — Количество открытых багов — Число подписчиков на mailing list Примеры метрик для оценки зрелости http://www.dmst.aueb.gr/dds/pubs/conf/2008-OSS-qmodel/html/SGSS08.htm
  8. 1. Популярность проекта 2. Качество поддержки 3. Характеристики кода 4.

    Характеристики документации Направления «созревания» open-source
  9. 1. Подвижность проекта — количество и динамика изменений в коде

    — релизы — открытые/закрытые Pulls & Issues 2. Участники проекта — сколько контрибьюторов — кто и в чем участвует — сколько загрузок Ключевые группы метрик поддерживаемости
  10. 1. Rubygems: — зависимости — релизы — ссылки на исходники,

    wiki — описание — другие метаданные из gemspec 2. Bestgems: — данные о загрузках за каждый день — данные о рейтинге по загрузкам за каждый день Данные из открытых источников (1/2)
  11. 3. Github: — pull requests (статусы, комментарии, пользователи, даты) —

    issues (статусы, комментарии, пользователи, даты) — commits за последний год — contributors — и другая интересная информация Данные из открытых источников (2/2)
  12. 1. Hanami — 46,27% 2. Sinatra — 29,47% 3. Padrino

    — 23,27% 4. Ramaze — 1,05% Рейтинг по числу коммитов
  13. — Sinatra — уровень стабилизировался с 2014 — Padrino —

    спад начиная с 2014 — Hanami — рост с 2014, пик в конце 2015 Треды по пользователям создающим Issues
  14. 1. Sinatra — 49,84% (~100 активных участников за квартал) 2.

    Hanami — 27,71% (~85) 3. Padrino — 21,6% (<35) 4. Ramaze — 0,84% Рейтинг по количеству активных участников
  15. 1. Hanami — 38,56% (~70%) 2. Padrino — 30,09% (~50%)

    3. Sinatra — 27,87% (~50%) 4. Ramaze — 0,75% Рейтинг по проценту закрытых Issues
  16. 1. Padrino — 51,75% (~60 issues за квартал) 2. Hanami

    — 23,47% (~35) 3. Sinatra — 22,08% (~30) 4. Ramaze — 3,48% Рейтинг по числу Issues
  17. — Hanami — лидер по коммитам и проценту закрытия Issues

    — Sinatra — лидер по числу вовлеченных в проект людей — Padrino — лидер по потоку Issues Предварительный итог
  18. 1. Rails — 83,76% 2. Sinatra — 8,84% 3. Hanami

    — 4,08% 4. Padrino — 2,6% Рейтинг по количеству активных участников
  19. 1. Rails — 63,85% 2. Sinatra — 35,74% 3. Padrino,

    Hanami — <1% Рейтинг по числу загрузок
  20. 1. Slim — 54,77% (~20) 2. Haml — 45,23% (~16-17)

    Рейтинг по числу fork'ов
  21. 1. Slim — 68,29% (~180) 2. Haml — 31,71% (~80)

    Рейтинг по числу «звезд» на GitHub
  22. 1. Slim — 56,72% (~50) 2. Haml — 43,28% (~40)

    Рейтинг по числу активных участников
  23. 1. Slim — 72,23% (~85%) 2. Haml — 27,77% (~20%)

    Рейтинг по проценту закрытия Pull Request'ов
  24. 1. Haml — 68,67% (~25) 2. Slim — 31,33% (~10)

    Рейтинг по числу Pull Request'ов
  25. 1. Haml — 90,65% (max — 15) 2. Slim —

    9,35% (max — 2) Рейтинг по числу старых Pull Request'ов
  26. 1. Slim — 80% (36) 2. Haml — 20% (9)

    Рейтинг по числу коммитов за год
  27. 1. Haml — 72,29% (6,260,388) 2. Slim — 27,71% (2,903,900)

    Рейтинг по числу загрузок
  28. — У обоих проектов невысокая активность разработки — Haml —

    лидер по количеству загрузок и числу реквестов — Slim — лидер по количеству участников и их вкладу Итог
  29. 1. Minitest — 57,36% (~194M загрузок за прошедший год) 2.

    Rspec — 42,64% (~175M) Рейтинг по числу загрузок
  30. 1. Minitest — 79,25% (~75 “звёзд” каждый квартал) 2. Rspec

    — 20,75% (~20) Рейтинг по числу «звезд» на GitHub
  31. 1. Rspec — 64,07% (~80 человек каждый квартал) 2. Minitest

    — 35,93% (~50) Рейтинг по количеству активных участников
  32. 1. Rspec — 60,54% (~90%) 2. Minitest — 39,46% (~65%)

    Рейтинг по проценту закрытия Pull Request'ов
  33. 1. Rspec — 78,13% (50-60 Pull Request'ов в среднем) 2.

    Minitest — 21,87% (~20) Рейтинг по количеству Pull Request'ов
  34. — Minitest — лидер по количеству загрузок и “звёзд” —

    Rspec — лидер по количеству участников и их вкладу Итог
  35. — Инструмент оценки зрелости и поддерживаемости проекта на Ruby в

    полноценном режиме — Анализ зависимостей — Агрегация с метриками по качеству кода и документации — Рекомендации проектам по шагам для роста зрелости — Поддержка Elixir, Python и других языков Дальнейшие шаги
  36. 1. Находим альтернативы на Ruby Toolbox 2. Выбираем достаточно зрелые

    проекты, тут поможет Ossert или другой способ разностороннего анализа 3. Выбираем тот, проект чей DSL ближе, не забывая про рекомендации от Thoughtbot «Зрелый» цикл оценки Ruby OSS-проекта