Refactorings with RubyMine

699 views

Published on

0 Comments
1 Like
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total views
699
On SlideShare
0
From Embeds
0
Number of Embeds
2
Actions
Shares
0
Downloads
7
Comments
0
Likes
1
Embeds 0
No embeds

No notes for slide

Refactorings with RubyMine

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

×