'

Рефакторинг и анализ Ruby и Rails кода

Понравилась презентация – покажи это...





Слайд 0

Рефакторинг и анализ Ruby и Rails кода Андрей Вокин JetBrains


Слайд 1

Принцип 80-20 20% времени – написание нового кода 80% времени – поддержание существующего кода


Слайд 2

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


Слайд 3

Два подхода к оценке качества кода Статические инструменты: Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu Инструменты времени выполнения: Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov


Слайд 4

Статические инструменты Проверяют код без его исполнения Отсутствуют side-эффекты Просты в использовании При этом: Их достаточно сложно реализовать Много ложных срабатываний Неполное понимании «магии» Rails


Слайд 5

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


Слайд 6

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


Слайд 7

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


Слайд 8

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


Слайд 9

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


Слайд 10

Что такое цикломатическая сложность? M = E – N + 2P E - количество переходов N – количество элементов P – количество компонент связности


Слайд 11

Runtime инструменты Проверяют код, исполнив его Учитывают «магию» Rails и все тонкости Ruby При этом: Могут иметь side-эффекты Каждый тест работают до первого падения


Слайд 12

Runtime инструменты Тестирование кода RSpec, Cucumber, Autotest Оценка покрытия кода тестами RCov, SimpleCov, Heckle


Слайд 13

RCov, SimpleCov Встраиваются в запуск тестов Запоминают строки, исполненные во время работы тестов После работы создают отчет о покрытии кода тестами Понимают структуру Rails приложения (пропускают config, envoronment…)


Слайд 14

Heckle Любое логическое изменение кода, полностью покрытого тестами, должно вызывать падение теста Подход Heckle Внести изменение в код Запустить тесты Проверить, что упал как минимум один тест


Слайд 15

Интеграция инструментов оценки качества кода в RubyMine Моментальные инспекции кода Интеграция тестовых фреймворков (с графическим интерфейсом) Графическая интеграция SimpleCov


Слайд 16

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


Слайд 17

Инспекции кода в RubyMine


Слайд 18

Инспекции кода в RubyMine


Слайд 19

Если программно можно искать проблемы в коде… то можно автоматически и исправлять их


Слайд 20

Инспекции кода в RubyMine


Слайд 21

Инспекции кода в RubyMine


Слайд 22

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


Слайд 23

Инспекции кода в RubyMine


Слайд 24

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


Слайд 25

Интеграция SimpleCov в RubyMine


Слайд 26

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


Слайд 27

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


Слайд 28

Rename с RubyMine


Слайд 29

Rename с RubyMine


Слайд 30

Rename с RubyMine


Слайд 31

Резюме Используйте следующие статические инструменты для проверки вашего кода: Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu Не забывайте про тесты: Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov Попробуйте RubyMine: http://jetbrains.com/ruby


Слайд 32

Вопросы?


×

HTML:





Ссылка: