SlideShare uma empresa Scribd logo
1 de 33
Рефакторинг и анализ
  Ruby и Rails кода
       Андрей Вокин
         JetBrains
Принцип 80-20

        • 20% времени – написание
          нового кода
        • 80% времени – поддержание
          существующего кода
Code that smells

•   Runtime errors
•   Runtime warnings
•   Неиспользуемый код
•   Дублированный код
•   Большие и сложные методы
•   Нарушение code-style соглашений
•   Нарушение паттернов фреймворка
Два подхода к оценке качества кода

• Статические инструменты:
      Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu

• Инструменты времени выполнения:
      Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov
Статические инструменты

• Проверяют код без его исполнения
• Отсутствуют side-эффекты
• Просты в использовании

При этом:
• Их достаточно сложно реализовать
• Много ложных срабатываний
• Неполное понимании «магии» Rails
Reek

• Имена классов, методов, переменных, модулей
• Использование instance_of?, kind_of?, is_a? вместо
  полиморфизма
• Дублированный код
• Большие классы, методы
• Большое количество параметров метода
• Вложенные итераторы
Flog

• Присваивания
• Ветвления
• Вызовы

• Балловая система
• На методы с наибольшим количеством баллов стоит взглянуть
  повнимательнее
Flay

• Ищет дублирование кода
• Анализирует структуру
• Игнорирует разницу в наименовании переменных, констант и
  пробелах

• Фрагменты кода, указанные Flay - кандидаты на рефакторинг
Roodi

•   Присваивание в условиях
•   Блоки case без использования else
•   Большие модули, классы и методы
•   Неправильные имена модулей, классов и методов
•   Цикломатическая сложность
Saikuro, Metric_fu

• Saikuro
       Цикломатическая сложность

• Metric_fu
       Создает отчет по результатам работы Saikuro, Flay, Flog,
       Reek, Roodi
Что такое цикломатическая сложность?

•   M = E – N + 2P
•   E - количество переходов
•   N – количество элементов
•   P – количество компонент
    связности
Runtime инструменты

• Проверяют код, исполнив его
• Учитывают «магию» Rails и все тонкости Ruby

При этом:
• Могут иметь side-эффекты
• Каждый тест работают до первого падения
Runtime инструменты

• Тестирование кода
      RSpec, Cucumber, Autotest

• Оценка покрытия кода тестами
      RCov, SimpleCov, Heckle
RCov, SimpleCov

• Встраиваются в запуск тестов
• Запоминают строки, исполненные во время работы тестов
• После работы создают отчет о покрытии кода тестами

• Понимают структуру Rails приложения (пропускают config,
  envoronment…)
Heckle

• Любое логическое изменение кода, полностью покрытого
  тестами, должно вызывать падение теста

Подход Heckle
• Внести изменение в код
• Запустить тесты
• Проверить, что упал как минимум один тест
Интеграция инструментов оценки качества
             кода в RubyMine

Моментальные инспекции кода

Интеграция тестовых фреймворков (с графическим интерфейсом)

Графическая интеграция SimpleCov
Инспекции кода в RubyMine

• Учитывают межфайловое взаимодействие
• Понимают DSL Rails
• Не требуют отдельного запуска – работают на лету
Инспекции кода в RubyMine
Инспекции кода в RubyMine
Если программно можно искать проблемы в коде…




    то можно автоматически и исправлять их
Инспекции кода в RubyMine
Инспекции кода в RubyMine
Интеграция тестовых фреймворков в
                    RubyMine

•   Графический интерфейс
•   Симуляция autotest
•   Навигация по стэктрейсу
•   Отлаживание тестов
Инспекции кода в RubyMine
Интеграция SimpleCov в RubyMine

• Отображение покрытия в Project Tree View
• Возможность переключения между разными прогонами
Интеграция SimpleCov в RubyMine
Рефакторинг с RubyMine

• Рефакторинги «понимают» Rails
• Можно откатить результат рефакторинга, минуя контроллер
  версий
Rename с RubyMine

• Rename локальной или глобальной переменной – это просто!
• Как насчет переименования Rails модели?
Rename с RubyMine
Rename с RubyMine
Rename с RubyMine
Резюме

• Используйте следующие статические инструменты для
  проверки вашего кода:
      Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu

• Не забывайте про тесты:
       Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov

• Попробуйте RubyMine:
      http://jetbrains.com/ruby
Вопросы?

Mais conteúdo relacionado

Mais procurados

Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxPlatonov Sergey
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...Iosif Itkin
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияSQALab
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст примененияNikita Baksalyar
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPAlexander Lisachenko
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For DummiesAndrey Subbota
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык goDaniel Podolsky
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Alexey Zinoviev
 
Аспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовАспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовCOMAQA.BY
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)ngrebnev
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодRoman Grebennikov
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...Омские ИТ-субботники
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотомRoman Grebennikov
 
использование Ci на практике
использование Ci на практикеиспользование Ci на практике
использование Ci на практикеCapitanBLood
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08Computer Science Club
 
C# Desktop. Занятие 14.
C# Desktop. Занятие 14.C# Desktop. Занятие 14.
C# Desktop. Занятие 14.Igor Shkulipa
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Sergey Ryabenko
 

Mais procurados (20)

Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на LinuxПавел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
Павел Беликов, Опыт мигрирования крупного проекта с Windows-only на Linux
 
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
TMPA-2013 Petrenko Pakulin: Technical Solutions and Non-Technical Challenges ...
 
Github Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестированияGithub Flow. Тестировщики против тестирования
Github Flow. Тестировщики против тестирования
 
TypeScript
TypeScriptTypeScript
TypeScript
 
Rust: история языка и контекст применения
Rust: история языка и контекст примененияRust: история языка и контекст применения
Rust: история языка и контекст применения
 
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOPВнедрение аспектов в PHP с помощью библиотеки GO! AOP
Внедрение аспектов в PHP с помощью библиотеки GO! AOP
 
Debbug Rails Application For Dummies
Debbug Rails Application For DummiesDebbug Rails Application For Dummies
Debbug Rails Application For Dummies
 
неприятная правда про язык go
неприятная правда про язык goнеприятная правда про язык go
неприятная правда про язык go
 
Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8Keynote on JavaDay Omsk 2014 about new features in Java 8
Keynote on JavaDay Omsk 2014 about new features in Java 8
 
Аспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторовАспектно ориентированное программирование для Java автоматизаторов
Аспектно ориентированное программирование для Java автоматизаторов
 
Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)Cтатический анализ кода (на примере DDD-фреймворка)
Cтатический анализ кода (на примере DDD-фреймворка)
 
Akka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный кодAkka: как я перестал бояться и полюбил асинхронный код
Akka: как я перестал бояться и полюбил асинхронный код
 
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
2014-02-01 02 Дмитрий Малиновский. Почему нужно читать исходный код инстру...
 
Scala performance под капотом
Scala performance под капотомScala performance под капотом
Scala performance под капотом
 
TeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualizationTeaVM: dead code elimination and devirtualization
TeaVM: dead code elimination and devirtualization
 
использование Ci на практике
использование Ci на практикеиспользование Ci на практике
использование Ci на практике
 
Aop
AopAop
Aop
 
20100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture0820100321 virtualization igotti_lecture08
20100321 virtualization igotti_lecture08
 
C# Desktop. Занятие 14.
C# Desktop. Занятие 14.C# Desktop. Занятие 14.
C# Desktop. Занятие 14.
 
Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.Юнит тестирование в Web. Как получать пользу и удовольствие.
Юнит тестирование в Web. Как получать пользу и удовольствие.
 

Destaque

Cпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложенияCпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложения7bits
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRailsPavel Gabriel
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубистаKir Shatrov
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016zykin-ilya
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Vitalii Tytskyi
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложенийAndrey Sitnik
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)guest40e031
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsYaroslav Markin
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"railsclub
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Andrey Listochkin
 

Destaque (20)

Rails for dummies
Rails for dummiesRails for dummies
Rails for dummies
 
Cпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложенияCпецкурс 2014, занятие 7. Web-приложения
Cпецкурс 2014, занятие 7. Web-приложения
 
10 reasons I love RubyOnRails
10 reasons I love RubyOnRails10 reasons I love RubyOnRails
10 reasons I love RubyOnRails
 
Фронтенд для рубиста
Фронтенд для рубистаФронтенд для рубиста
Фронтенд для рубиста
 
Assets Pipeline
Assets PipelineAssets Pipeline
Assets Pipeline
 
R18n
R18nR18n
R18n
 
RSpec. Part 2
RSpec. Part 2RSpec. Part 2
RSpec. Part 2
 
Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016Deploy.rb, Ilya Zykin, Rails club2016
Deploy.rb, Ilya Zykin, Rails club2016
 
RSpec. Part 3
RSpec. Part 3RSpec. Part 3
RSpec. Part 3
 
Rails Concerns
Rails ConcernsRails Concerns
Rails Concerns
 
Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.Призма24 - Маркетплейсы.
Призма24 - Маркетплейсы.
 
I18n ruby-приложений
I18n ruby-приложенийI18n ruby-приложений
I18n ruby-приложений
 
развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)развертывание среды Rails (антон веснин, Locum Ru)
развертывание среды Rails (антон веснин, Locum Ru)
 
Как сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on RailsКак сделать контрибут в Ruby on Rails
Как сделать контрибут в Ruby on Rails
 
Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"Александр Тищенко - "Антикризисная презентация"
Александр Тищенко - "Антикризисная презентация"
 
Ruby on Rails for noobs
Ruby on Rails for noobsRuby on Rails for noobs
Ruby on Rails for noobs
 
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The BeastAlexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
Alexander Dymo - IT Jam 2009 - Ruby: Beaty Or The Beast
 
RSpec. Part 1
RSpec. Part 1RSpec. Part 1
RSpec. Part 1
 
Когда технологий много - iForum 2013
Когда технологий много - iForum 2013Когда технологий много - iForum 2013
Когда технологий много - iForum 2013
 
Why does code style matter?
Why does code style matter?Why does code style matter?
Why does code style matter?
 

Semelhante a Refactorings with RubyMine

Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на RailsAndrei Kaleshka
 
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...Innovecs
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практикеDenis Tuchin
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаAleksandr Makhomet
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)Alexander Gornik
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionNikita Lipsky
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»SpbDotNet Community
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиSQALab
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестовОмские ИТ-субботники
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовOlesya_V
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Constantin Kichinsky
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииCEE-SEC(R)
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС 2ГИС Технологии
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полнойОмские ИТ-субботники
 

Semelhante a Refactorings with RubyMine (20)

Корпоративное приложение на Rails
Корпоративное приложение на RailsКорпоративное приложение на Rails
Корпоративное приложение на Rails
 
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
Improvement of PHP code quality (by Alexander Makhomet) - Web Back-End Tech H...
 
Лучшие практики на практике
Лучшие практики на практикеЛучшие практики на практике
Лучшие практики на практике
 
18.08.2012 meta ruby
18.08.2012 meta ruby18.08.2012 meta ruby
18.08.2012 meta ruby
 
Roslyn Code Analysis
Roslyn Code AnalysisRoslyn Code Analysis
Roslyn Code Analysis
 
Повышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кодаПовышаем и следим за качеством PHP кода
Повышаем и следим за качеством PHP кода
 
разработка бизнес приложений (8)
разработка бизнес приложений (8)разработка бизнес приложений (8)
разработка бизнес приложений (8)
 
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference EditionJVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
JVM: краткий курс общей анатомии, JPoint 2016 Conference Edition
 
Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»Павел Федотовский «Документация REST API c использованием Swagger»
Павел Федотовский «Документация REST API c использованием Swagger»
 
Первые страницы на Ruby on Rails
Первые страницы на Ruby on Rails Первые страницы на Ruby on Rails
Первые страницы на Ruby on Rails
 
Sivko
SivkoSivko
Sivko
 
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
CodeFest 2012. Сидельников А. — Опыт создания DSL на Ruby. Где применить, как...
 
Архитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной областиАрхитектура автоматизированных тестов: представление предметной области
Архитектура автоматизированных тестов: представление предметной области
 
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
2016-01-16 02 Екатерина Боброва. Архитектура автоматизированных тестов
 
Team workflow
Team workflowTeam workflow
Team workflow
 
Кирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектовКирилл Комлев. О реализации continuous integration для web проектов
Кирилл Комлев. О реализации continuous integration для web проектов
 
Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!Ruby On Rails: Web-разработка по-другому!
Ruby On Rails: Web-разработка по-другому!
 
Повышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документацииПовышение качества тестов и автоматическая валидация REST API документации
Повышение качества тестов и автоматическая валидация REST API документации
 
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС «Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
«Путь от монолита на PHP к микросервисам на Scala» – Денис Иванов, 2ГИС
 
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
2014-10-04 02 Владислав Безверхий. Mocha - покрой frontend по полной
 

Refactorings with RubyMine

  • 1. Рефакторинг и анализ Ruby и Rails кода Андрей Вокин JetBrains
  • 2. Принцип 80-20 • 20% времени – написание нового кода • 80% времени – поддержание существующего кода
  • 3. Code that smells • Runtime errors • Runtime warnings • Неиспользуемый код • Дублированный код • Большие и сложные методы • Нарушение code-style соглашений • Нарушение паттернов фреймворка
  • 4. Два подхода к оценке качества кода • Статические инструменты: Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu • Инструменты времени выполнения: Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov
  • 5. Статические инструменты • Проверяют код без его исполнения • Отсутствуют side-эффекты • Просты в использовании При этом: • Их достаточно сложно реализовать • Много ложных срабатываний • Неполное понимании «магии» Rails
  • 6. Reek • Имена классов, методов, переменных, модулей • Использование instance_of?, kind_of?, is_a? вместо полиморфизма • Дублированный код • Большие классы, методы • Большое количество параметров метода • Вложенные итераторы
  • 7. Flog • Присваивания • Ветвления • Вызовы • Балловая система • На методы с наибольшим количеством баллов стоит взглянуть повнимательнее
  • 8. Flay • Ищет дублирование кода • Анализирует структуру • Игнорирует разницу в наименовании переменных, констант и пробелах • Фрагменты кода, указанные Flay - кандидаты на рефакторинг
  • 9. Roodi • Присваивание в условиях • Блоки case без использования else • Большие модули, классы и методы • Неправильные имена модулей, классов и методов • Цикломатическая сложность
  • 10. Saikuro, Metric_fu • Saikuro Цикломатическая сложность • Metric_fu Создает отчет по результатам работы Saikuro, Flay, Flog, Reek, Roodi
  • 11. Что такое цикломатическая сложность? • M = E – N + 2P • E - количество переходов • N – количество элементов • P – количество компонент связности
  • 12. Runtime инструменты • Проверяют код, исполнив его • Учитывают «магию» Rails и все тонкости Ruby При этом: • Могут иметь side-эффекты • Каждый тест работают до первого падения
  • 13. Runtime инструменты • Тестирование кода RSpec, Cucumber, Autotest • Оценка покрытия кода тестами RCov, SimpleCov, Heckle
  • 14. RCov, SimpleCov • Встраиваются в запуск тестов • Запоминают строки, исполненные во время работы тестов • После работы создают отчет о покрытии кода тестами • Понимают структуру Rails приложения (пропускают config, envoronment…)
  • 15. Heckle • Любое логическое изменение кода, полностью покрытого тестами, должно вызывать падение теста Подход Heckle • Внести изменение в код • Запустить тесты • Проверить, что упал как минимум один тест
  • 16. Интеграция инструментов оценки качества кода в RubyMine Моментальные инспекции кода Интеграция тестовых фреймворков (с графическим интерфейсом) Графическая интеграция SimpleCov
  • 17. Инспекции кода в RubyMine • Учитывают межфайловое взаимодействие • Понимают DSL Rails • Не требуют отдельного запуска – работают на лету
  • 20. Если программно можно искать проблемы в коде… то можно автоматически и исправлять их
  • 23. Интеграция тестовых фреймворков в RubyMine • Графический интерфейс • Симуляция autotest • Навигация по стэктрейсу • Отлаживание тестов
  • 25. Интеграция SimpleCov в RubyMine • Отображение покрытия в Project Tree View • Возможность переключения между разными прогонами
  • 27. Рефакторинг с RubyMine • Рефакторинги «понимают» Rails • Можно откатить результат рефакторинга, минуя контроллер версий
  • 28. Rename с RubyMine • Rename локальной или глобальной переменной – это просто! • Как насчет переименования Rails модели?
  • 32. Резюме • Используйте следующие статические инструменты для проверки вашего кода: Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu • Не забывайте про тесты: Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov • Попробуйте RubyMine: http://jetbrains.com/ruby