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