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

Содержание

Слайд 2

Принцип 80-20

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

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

Слайд 3

Code that smells

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

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

Слайд 4

Два подхода к оценке качества кода

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

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

Слайд 5

Статические инструменты

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

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

Слайд 6

Reek

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

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

Слайд 7

Flog

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

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

Слайд 8

Flay

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

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

Слайд 9

Roodi

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

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

Слайд 10

Saikuro, Metric_fu

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

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

Слайд 11

Что такое цикломатическая сложность?

M = E – N + 2P
E - количество

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

Слайд 12

Runtime инструменты

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

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

Слайд 13

Runtime инструменты

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

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

Слайд 14

RCov, SimpleCov

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

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

Слайд 15

Heckle

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

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

Слайд 16

Интеграция инструментов оценки качества кода в RubyMine

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

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

Слайд 17

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

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

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

Слайд 18

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

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

Слайд 19

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

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

Слайд 20

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

то можно автоматически и исправлять

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

Слайд 21

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

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

Слайд 22

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

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

Слайд 23

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

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

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

Слайд 24

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

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

Слайд 25

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

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

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

Слайд 26

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

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

Слайд 27

Рефакторинг с RubyMine

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

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

Слайд 28

Rename с RubyMine

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

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

Слайд 29

Rename с RubyMine

Rename с RubyMine

Слайд 30

Rename с RubyMine

Rename с RubyMine

Слайд 31

Rename с RubyMine

Rename с RubyMine

Слайд 32

Резюме

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

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