Open-Source Software.Что в мешке?
RAILS CLUB 2016
Sergey Dolganov, Evil Martians
Опасности стороннего кода
https://robots.thoughtbot.com/to-gem-or-not-to-gem
— Вы ничего не знаете о качестве и безопасности кода.
— Вы ничего не знаете о его поддержке в дальнейшем.
— Вы не знаете, сколько ресурсов потребует в работе
сторонний гем.
— Вам необходимо использовать гем в соответствии с его
лицензией.
— Вам придется мириться с его DSL/API.
— Возможно, вам придется тащить слишком большой
багаж.
1. На Rubygems порядка 100 000 гемов, при этом большая
часть загрузок приходится на ~1%
Проблемы open-source зависимостей
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
1. Ruby Toolbox — альтернативы, популярность, динамика
2. RubyGems — информация о версиях
3. Github — сommits, issues & pulls, контрибьюторы
4. CodeClimate — качество кода
5. coveralls.io — покрытие документацией
6. Rubocop — cоответствие стилю
Стандартный цикл оценки Ruby OSS-проекта
— Rubygems
— GitHub
— Ruby Toolbox
— Bestgems.org
— Issue Stats
— Dependency CI & Libraries.io
— RecordNotFound.com
Инструменты для подборасторонних решений
— rubocop — проверка на соответствие стилю
— simplecov, coveralls, rcov — тестовое покрытие
— yard, inch — покрытие кода документацией
— Code Climate, cane/flog/flay — качество кода
— Бейджики с загрузками за последний период или с
пометкой об устаревании кода
Инструменты для анализакодовой базы
Open-Source Maturity Model
https://en.wikipedia.org/wiki/OpenSource_Maturity_Model
— Наличие хорошей документации
— Качественная архитектура
— Наличие инструмента взаимодействия с
потребителем/пользователем/контрибьютором
— Наличие и качество тестового покрытия
— Наличие Roadmap (или долгосрочных планов развития)
— Количество открытых багов
— Число подписчиков на mailing list
Примеры метрикдля оценки зрелости
http://www.dmst.aueb.gr/dds/pubs/conf/2008-OSS-qmodel/html/SGSS08.htm
1. Популярность проекта
2. Качество поддержки
3. Характеристики кода
4. Характеристики документации
Направления «созревания»open-source
1. Подвижность проекта
— количество и динамика изменений в коде
— релизы
— открытые/закрытые Pulls & Issues
2. Участники проекта
— сколько контрибьюторов
— кто и в чем участвует
— сколько загрузок
Ключевые группы метрик поддерживаемости
1. Rubygems:
— зависимости
— релизы
— ссылки на исходники, wiki
— описание
— другие метаданные из gemspec
2. Bestgems:
— данные о загрузках за каждый день
— данные о рейтинге по загрузкам за каждый день
Данные из открытых источников (1/2)
3. Github:
— pull requests (статусы, комментарии, пользователи,
даты)
— issues (статусы, комментарии, пользователи, даты)
— commits за последний год
— contributors
— и другая интересная информация
Данные из открытых источников (2/2)
Open-Source Software Certification Service
Ossert
Hanami vs Sinatra, Padrino, Ramaze…
и Rails
Отчет
1. Hanami — 46,27%
2. Sinatra — 29,47%
3. Padrino — 23,27%
4. Ramaze — 1,05%
Рейтинг по числу коммитов
— Sinatra — уровень стабилизировался с 2014
— Padrino — спад начиная с 2014
— Hanami — рост с 2014, пик в конце 2015
Треды по пользователямсоздающим Issues
1. Sinatra — 49,84% (~100 активных участников за квартал)
2. Hanami — 27,71% (~85)
3. Padrino — 21,6% (<35)
4. Ramaze — 0,84%
Рейтинг по количествуактивных участников
1. Hanami — 38,56% (~70%)
2. Padrino — 30,09% (~50%)
3. Sinatra — 27,87% (~50%)
4. Ramaze — 0,75%
Рейтинг по процентузакрытых Issues
1. Padrino — 51,75% (~60 issues за квартал)
2. Hanami — 23,47% (~35)
3. Sinatra — 22,08% (~30)
4. Ramaze — 3,48%
Рейтинг по числу Issues
— Hanami — лидер по коммитам и проценту закрытия Issues
— Sinatra — лидер по числу вовлеченных в проект людей
— Padrino — лидер по потоку Issues
Предварительный итог
1. Rails — 83,76%
2. Sinatra — 8,84%
3. Hanami — 4,08%
4. Padrino — 2,6%
Рейтинг по количествуактивных участников
1. Rails — 63,85%
2. Sinatra — 35,74%
3. Padrino, Hanami — <1%
Рейтинг по числу загрузок
Slim vs Haml
Отчет
1. Slim — 54,77% (~20)
2. Haml — 45,23% (~16-17)
Рейтинг по числу fork'ов
1. Slim — 68,29% (~180)
2. Haml — 31,71% (~80)
Рейтинг по числу «звезд» на GitHub
1. Slim — 55,94% (~180)
2. Haml — 44,06% (~80)
Рейтинг по числуактивных участников
1. Slim — 72,23% (~85%)
2. Haml — 27,77% (~20%)
Рейтинг по процентузакрытия Pull Request'ов
1. Haml — 68,67% (~25)
2. Slim — 31,33% (~10)
Рейтинг по числу Pull Request'ов
1. Haml — 90,65% (max — 15)
2. Slim — 9,35% (max — 2)
Рейтинг по числустарых Pull Request'ов
1. Slim — 80% (36)
2. Haml — 20% (9)
Рейтинг по числукоммитов за год
1. Haml — 72,29% (6,260,388)
2. Slim — 27,71% (2,903,900)
Рейтинг по числу загрузок
— У обоих проектов невысокая активность разработки
— Haml — лидер по количеству загрузок и числу реквестов
— Slim — лидер по количеству участников и их вкладу
Итог
Rspec vs Minitest
Отчет
1. Minitest — 57,36% (~194M загрузок за прошедший год)
2. Rspec — 42,64% (~175M)
Рейтинг по числу загрузок
1. Minitest — 79,25% (~75 “звёзд” каждый квартал)
2. Rspec — 20,75% (~20)
Рейтинг по числу «звезд» на GitHub
1. Rspec — 64,07% (~80 человек каждый квартал)
2. Minitest — 35,93% (~50)
Рейтинг по количествуактивных участников
1. Rspec — 60,54% (~90%)
2. Minitest — 39,46% (~65%)
Рейтинг по процентузакрытия Pull Request'ов
1. Rspec — 78,13% (50-60 Pull Request'ов в среднем)
2. Minitest — 21,87% (~20)
Рейтинг по количествуPull Request'ов
— Minitest — лидер по количеству загрузок и “звёзд”
— Rspec — лидер по количеству участников и их вкладу
Итог
Ossert
ossert.evilmartians.io/gon
Ossert
ossert.evilmartians.io/gon
— Инструмент оценки зрелости и поддерживаемости
проекта на Ruby в полноценном режиме
— Анализ зависимостей
— Агрегация с метриками по качеству кода и документации
— Рекомендации проектам по шагам для роста зрелости
— Поддержка Elixir, Python и других языков
Дальнейшие шаги
1. Находим альтернативы на Ruby Toolbox
2. Выбираем достаточно зрелые проекты, тут поможет
Ossert или другой способ разностороннего анализа
3. Выбираем тот, проект чей DSL ближе, не забывая про
рекомендации он Thoughtbot
«Зрелый» цикл оценкиRuby OSS-проекта
Присоединяйтесь!
github.com/ossert/ossert
github.com/ossert/ossert-web
@ss_dolganov
@evilmartians
Top Related