Скачать презентацию
Идет загрузка презентации. Пожалуйста, подождите
Презентация была опубликована 11 лет назад пользователемwww.devconf.ru
1 Рефакторинг и анализ Ruby и Rails кода Андрей Вокин JetBrains
2 Принцип % времени – написание нового кода 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 Не требуют отдельного запуска – работают на лету
18 Инспекции кода в RubyMine
20 Если программно можно искать проблемы в коде… то можно автоматически и исправлять их
21 Инспекции кода в RubyMine
23 Интеграция тестовых фреймворков в RubyMine Графический интерфейс Симуляция autotest Навигация по стэктрейсу Отлаживание тестов
24 Инспекции кода в RubyMine
25 Интеграция SimpleCov в RubyMine Отображение покрытия в Project Tree View Возможность переключения между разными прогонами
26 Интеграция SimpleCov в RubyMine
27 Рефакторинг с RubyMine Рефакторинги «понимают» Rails Можно откатить результат рефакторинга, минуя контроллер версий
28 Rename с RubyMine Rename локальной или глобальной переменной – это просто! Как насчет переименования Rails модели?
29 Rename с RubyMine
32 Резюме Используйте следующие статические инструменты для проверки вашего кода: Reek, Flay, Flog, Roodi, Saikuro, Metrics_fu Не забывайте про тесты: Heckle, RSpec, Cucumber, Autotest, RCov, SimpleCov Попробуйте RubyMine:
33 Вопросы?
Еще похожие презентации в нашем архиве:
© 2024 MyShared Inc.
All rights reserved.