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

Презентация:



Advertisements
Похожие презентации
Автотестирование и самотестирование Теория программирования, лекция первая.
Advertisements

Автоматизированное тестирование. Процесс верификации программного обеспечения, при котором основные функции и шаги теста, такие как запуск, инициализация,
БЭСТ Дизайнер проектов Введение Концепции Основные понятия.
Project M Cache Version 5 Промышленная разработка Web приложений и Управление проектом.
TestMaker – система тестового контроля знаний Разработка специализированных систем проверки знаний студентов одно из наиболее актуальных направлений развития.
Конверсия, определяемая правилами. О конвертации данных с помощью продуктов с открытым кодом Алексей Коренев. ЭПАМ Системз Дмитрий Хусаинов. ЭПАМ Системз.
Министерство образования Республики Беларусь Белорусский государственный университет Управляющие структуры языков программирования.
Учебный курс Объектно-ориентированный анализ и программирование Лекция 4 Трансформация логической модели в программный код Лекции читает кандидат технических.
SoapUI Содержание лекции Зачем нужен SoapUI? Основные возможности Тестовый проект – Students Использование SoapUI для анализа WSDL Создание заглушек.
Автоматизация тестирования Web-приложений 2007 г. Липский Павел Николаевич.
Общие процедуры. Модульный принцип построения проекта Visual Basic Автор: Сергиенко Е.В. Учитель информатики МОУ СОШ 5.
На основании курса Тестирования программных продуктов Терехов А. А. Слайд 1 Анализ стандартных методов тестирования. Применимость к разработке игр. Шишенин.
Лекция 1 MVC (Model-View-Controller) - это конструкционный шаблон, который описывает способ построения структуры приложения, сферы ответственности и взаимодействие.
Ekaterina B. Egorkina,© VEELTECH.RU Построение страницы с интерактивным отчетом Простейшая страница с отображением данных в табличном виде. Построение.
Структурный подход к разработке алгоритмов Презентация разработана преподавателем Шутилиной Л.А.
Название системы - iTest Текущая версия Официальный сайт - Лицензия -GPL v2 Компоненты системы iTestServer серверная.
Лекция 7. Структура языка С/С++. Операторы ветвления: условный оператор if. Полное ветвление. Неполное ветвление. Оператор множественного выбора switch.
Ekaterina B. Egorkina,© VEELTECH.RU Построение страницы с интерактивным отчетом Простейшая страница с отображением данных в табличном виде. Построение.
Языки и методы программирования Преподаватель – доцент каф. ИТиМПИ Кузнецова Е.М. Лекция 7.
Рефакторинг Забота о коде Андрей Скляревский.NET Developer, Murano Software
Транксрипт:

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Rename с RubyMine

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

Вопросы?