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