« Поставить закладку » « Сделать стартовой »

« Форумы » « Блоги » « Статьи » « Новости » « Файлы » « Realcoding IRC » « Site map » « Поиск »


Главная Главная
Анонсы Анонсы
Форумы Форумы
Каталог Каталог
Поиск Поиск
Опросы Опросы
Книжный магазин Книжный магазин
Реклама на сайте
Публикации Публикации
Партнеры Партнеры
Карта Карта сайта
Рассылки Рассылки
RSS экспорт
Настройки Настройки
О нас пишут О нас пишут
Контакты Контакты
Гостевая книга Гостевая книга



ПнВтСрЧтПтСбВс
          1 2
3 4 5 6 7 8 9
10 11 12 13 14 15 16
17 18 19 20 21 22 23
24 25 26 27 28 29 30
    Популярное
Функция UpdateWindow

Как предотвратить превращение хранилища данных в свалку мусора

Delphi 2007 (часть II - строковые функции)

Точка

Создание подклассов

Структура библиотеки

ПРИЛОЖЕНИЕ 2. Основные типы сообщений Windows

Обзор Windows 7 build 6574

Видеопотоки. Протоколы

Функция EnableWindow




    Архив файлов



    Сообщества

    Документация

    Кто на сайте
Вы не зарегистрированы.
Имя:

Пароль:

Запомнить

Регистрация позволит Вам пользоваться дополнительными сервисами.
Сейчас на сайте:
Гостей: 230
Пользователей: 0

Статьи:: Интернет технологии :: Технология JAVA :: Обзор средств автоматизированного рефакторинга в Java IDE



отправить ссылку другу версия для печати  Обсудить на форуме

Обзор средств автоматизированного рефакторинга в Java IDE

# Цель
# 2 Коротко о рефакторинге
# 3 Автоматизированный рефакторинг
# 4 Общие сведения обо всех Java IDE, поддерживающих рефакторинг
# 5 Ситуация на рынке Java IDE
# 6 Рефакторинг в Intellij Idea

* 6.1 Code Inspection и автоматизированный рефакторинг
* 6.2 Плагины

# 7 Рефакторинг в Eclipse
# 8 Рефакторинг в Sun NetBeans

* 8.1 Project Jackpot

# 9 Выводы
# 10 Приложение 1. Сравнительная таблица методов рефакторинга для языка Java
# 11 Приложение 2. Использованная литература и ресурсы, упоминаемые в статье



Цель

В этой статье я хочу коротко описать текущее положение дел с рефакторингом в современных Java IDE. Материал не преследует образовательных целей как в области рефакторинга как такового, так и XP (extreme programming) и написания тестов (JUnit etc). В статье описывается состояние рефакторинга вообще в Java IDE и приводятся особенности его реализации для 3-х наиболее популярных.

Коротко о рефакторинге

«Рефакторинг – процесс изменения внутренней структуры ПО с целью облегчения понимания ее структуры и упрощения дальнейшей модификации без изменения внешнего поведения.» Это определение взято из книги, положившей начало современному представлению об этом процессе – «Рефакторинг - Улучшение существуещего кода» Мартина Фаулера (Refactoring: Improving the Design of Existing Code by Martin Fowler, Addison Wesley 1999)[1]. Кроме того, рефакторинг может применяться не только к исходному коду на каком либо языке программирования, но также к описательным языкам, если не теряется результат их обработки[2].
 
Сам процесс рефакторинга появился задолго до выхода в свет книги и стал ответом на необходимость поддерживать большие объемы кода коллективами программистов в адекватном состоянии качества.
 
Всем известно, что каждый программист пишет программу в своем, привычном для него стиле, отличающимся от стиля коллег, а также от канонического стиля, предложенного авторами языка. Стиль может выражаться в именовании, использовании тех или иных конструкций, типизации и т.д. На это можно не обращать внимания до тех пор, пока его код не берется поддерживать другой программист. Когда же это происходит, зачастую, многие просто переписывают заново уже работающий код, мотивируя следующим образом:  «он был ужасен, к тому же я его плохо понимал».
 
Кроме того, существует проблема «неповоротливости» – чем больше программа, тем сложнее вносить в нее принципиальные изменения и тем сложнее прогнозировать последствия этих изменений. Из этого вытекает увеличение времени на модификацию программы. Менеджеру чрезвычайно сложно объяснить, почему аналогичный объем работы полгода назад выполнялся за неделю, а сейчас - за 2. Все из-за того, что после написания в код вносится некоторое количество изменений, вследствие чего он теряет начальную простоту, элегантность и ясность.
 
Эти проблемы программисты пытались решить общими способами – путем модификации структуры программы без изменения ее функциональности. Например, переименовывали методы в соответствие с общей политикой, меняли видимость и расположение классов и т.д. Все это теперь называется методами рефакторинга.
 
Инструментарий рефакторинга описывается как множество методов, каждый из которых характеризуется именем, областью применения и механизмом преобразования. Каждое такое преобразование имеет небольшой размер и четкую логику реализации, что сводит к минимуму возникновение ошибок вследствие его выполнения.

Автоматизированный рефакторинг

Изучив статьи о рефакторинге или даже прочитав книгу Фаулера, можно сделать вывод о том что, наконец, найдено решение вышеназванных проблем. Но, начав использование принципов рефакторинга на практике, программист замечает, что на его плечи легла еще одна ноша – рефакторинг тоже требует времени и внимательности!!! Причем, применяя методы рефакторинга на отдельном участке кода, и не применяя на остальных, программист дополнительно запутывает код. Либо, поменяв интерфейс класса, получает множество ошибок в других частях, модулях программы. Разные методы требуют разного времени на их применение, особенно это касается интерфейсов класса.
 
Поэтому, вскоре, появились разнообразные средства, позволяющие автоматизировать процесс рефакторинга.
 
Это были либо Java среды разработки, либо плагины к ним. Это вызвано тем, что реализация рефакторинга базируется на семантическом представлении программы. К тому же рефакторинг тесно переплетен с написанием кода. Все современные IDE, независимо от компилятора (или же используя его API), имеют представление о коде для подсветки синтаксиса и таких функций, как автодополнение.
 
Следовательно, не составило особого труда, добавить визуальных помощников, реализующие основные методы рефакторинга.

Общие сведения обо всех Java IDE, поддерживающих рефакторинг

В данный момент, IDE практически все крупных производителей имеют в своем арсенале базовый набор методов рефакторинга. Как правило, они предлагаю его с помощью пункта главного меню Refactoring, а также, с помощью контекстных меню и «горячих» клавиш.
 
Многие среды, поддерживающие рефакторинг, предлагают методы контроля над проводимыми изменениями, такие как «Предварительный просмотр» и «Атомарная отмена операции».
 
Предварительный просмотр позволяет программисту убедиться в том, что IDE правильно интерпретирует полученные от программиста инструкции, а также в том, что выполняемые им действия приводят к желаемому результату.
 
Атомарная отмена операции незаменима в том случае, если изменения вносятся сразу в нескольких участках кода. В случае отмены, программист может вернуть код к исходному состоянию за один раз.
 
Практически во всех интегрированных средах реализован рефакторинг для языка Java. Наиболее распространенными классами автоматизированных методов являются следующие:
·        Изменение имени и физической организации кода - переименование полей, переменных, классов, интерфейсов, перенос пакетов и классов;
·        Изменение логической организации кода на уровне класса – преобразование класса вложенный<->верхнего уровня, преобразование класс<->интерфейс, перемещение методов в подкласс или суперкласс;
·        Изменение кода внутри класса – перемещение переменных из методов в класс, преобразование участка кода в метод.
 
В таблице 1 содержится информация о том, в каком объеме реализованы вышеназванные методы в перечисленных в статье средах разработки.
 
Кроме этого, сюда нельзя не добавить возможность безопасного удаления классов, методов, полей.
 
Некоторые IDE предлагают безопасное изменение интерфейсов классов не только для Java, но и для сопутствующих технологий, таких как JSP, например, при перемещении класса, меняется его полное имя в JSP скриптлете или в описательном файле Apache Struts.
 
После выхода Java SE 5 и появления нового упрощенного синтаксиса, появилась потребность перевода кода, написанного для предыдущих версий языка на использование новых конструкций.

Ситуация на рынке Java IDE

Сейчас на рынке Java IDE сложилась очень интересная ситуация. Некоторое время назад производители инструментария выяснили, что продажа средств разработки по огромным ценам, во-первых, не приносит ожидаемой прибыли, а во-вторых, отталкивает разработчиков от других продуктов компании (родные среды наилучшим образом поддерживают другие разработки компаний).
 
Руководствуясь этими соображениями, в разное время, в последние 5 лет, такие компании как Sun, IBM, Oracle решили сделать бесплатные версии своих IDE – как дополнение (Sun) или замещение существующих (JDeveloper). Кроме был предоставлен исходный код продуктов и предприняты шаги по привлечению сторонних разработчиков, помогающих совершенствовать эти среды.
 
Так были образованы сообщества NetBeans.org, Eclipse Foundation. В них состоят как штатные, fulltime разработчики, так и энтузиасты, которые являются также, глашатаями и пропагандистами как самих IDE так и других продуктов компании. А компании теперь зарабатывают на консультационных услугах, платной поддержке.
 
Лишь 2 игрока рынка продают свои продукты – JetBrains и Borland, но последняя недавно заявила о продаже своего IDE бизнеса, причем это коснется не только Java среды, но и всех остальных.
 
Налицо наличие системного кризиса в бизнесе, построенном на продаже языковых сред программирования. Среди его причин снижение покупательской активности в этом сегменте рынка и перетекание потребителей на бесплатные среды (которые явились результатом агрессивной политики компаний по продвижению своих продуктов).
 
И так, рынок Java IDE с поддержкой рефакторинга представляют следующие игроки:
·        Eclipse Foundation с Eclipse 3.1.2;
·        JetBrains с IntelliJ Idea 5.1;
·        Sun с NetBeans 5.0;
·        Oracle с JDeveloper 10.1.3;
·        Borland с JBuilder 2006.
 
Сторонними разработчиками предлагаются несколько плагинов для вышеперечисленных средств, причем большинство из них могут интегрироваться не с одной, а со многими средами.
 
Вот некоторые из них:
·        RefactorIt;
·        JFactor;
·        JRefactory.
 
Сегодня разработчик Java совершенно бесплатно получает мощную IDE с возможностями рефакторинга и, при необходимости, может расширить их с помощью плагинов.

Рефакторинг в Intellij Idea

Эта IDE[3], отличается от остальных необычной для интегрированной среды компоновкой. Продуктовая линейка состоит из одной версии. В нее входит сама среда, обладающая самыми развитыми возможностями в области семантического анализа, а также набор плагинов, расширяющих ее функциональность в интеграции с фреймворками, серверами приложений и т.д. В последнее время значительно увеличилось количество плагинов сторонних производителей – как бесплатных, так и платных.
 
На уровне среды реализовано большинство общих методов рефакторинга для Java кода (см. таблицу 1). Также, поддерживается рефакторинг для JSP страниц, CSS файлов, JavaScript, HTML файлов.

Code Inspection и автоматизированный рефакторинг

В IntelliJ IDEA существует функция, отсутствующая в других IDE, а именно – Code Inspection (если не принимать в расчет связку с рефакторингом, нечто похожее интегрировано и в Eclipse - Dea). Основное назначение ее – автоматический анализ программы на предмет типичных или неприемлемых по разным причинам ошибочных приемов программирования.
 
Например, по технологиям:
 
·        Java SE: использование в Java SE 5 проекте конструкций из более ранних версии – цикл по всем элементам коллекции с помощью итератора и полного синтаксиса цикла, явное оборачивание/разворачивание элементарных типов, не параметризированное использование классов коллекций;
·        Java ME: использование Object[].length в условии цикла, инициализаторы массива большого размера;
·        Java EE: неправильное использование тегов и атрибутов в HTML и CSS.
 
После анализа программного кода пользователь, для некоторых inspection может выполнить предопределенные действия, например, использовать новый, упрощенный формат цикла в Java SE 5. Причем, преобразования среда выполнит сама – удалит переменную итератора, создаст переменную экземпляра коллекции и преобразует формат цикла.

Плагины

Наряду с базовыми возможностями IDE существуют плагины сторонних разработчиков. Например, Sixth & Red River Software предлагает целую линейку плагинов:
 
·        Refactor-J – дополняет существующие возможности такими как разделение классов, преобразования циклов – разделение и объединение, изменение входящих и исходящих параметров методов;
·        Refactor-X – добавляет поддержку рефакторинга XML кода – преобразование тег—атрибут, оборачивание—разворачивание тегов и удаление тегов и атрибутов.
 
Кроме них компания предлагает еще 2 очень интересных продукта – это Inspection-JS – code inspection для JavaScript и MetricsReloaded для измерения качества кода в числах (LOC, SLOC для Java, JSP, XML и HTML и другие).
 
Комбинирование code inspection с элементами рефакторинга дает в руки профессионалу невиданную раннее власть над большими объемами кода. Теперь существует возможность автоматизировано находить объекты применения некоторых методов рефакторинга, не прибегая к просматриванию кода.

Рефакторинг в Eclipse

Eclipse[4][5] представляет собой базовую платформу с набором плагинов. Эта платформа вообще не привязана ни к какому языку программирования.
 
В версии 3.0 было положено начало отделению средств обработки исходного кода от Java Development Tools (JDT), в который входили средства поддержки рефакторинга.
 
В рамках этого были выделены 2 плагина, отвечающих за независимую от языка поддержку рефакторинга:
·        org.eclipse.ltk.core.refactoring – отвечает за бизнес-логику рефакторинга;
·        org.eclipse.ltk.ui.refactoring – реализация пользовательского интерфейса.
 
В базовой поставке Eclipse существуют стандартные для Java IDE средства рефакторинга, представленные в меню Refactoring в Java Perspective. Они реализуют соответствующие методы применительно к Java.
 
Кроме классических методов стоит отметить “Infer generic Type Arguments”, позволяющий определить параметры для классов-шаблонов.
 
Поддержка остальных языков и технологий (например, JSP), реализована в соответствующих наборах плагинов:
·        WTP – Web Tools Project, представляющий набор плагинов для web разработки;
·        CDT – C++ Development Tools, набор плагинов для C++ разработки;
и т.д.
 
Так, например, в версии 1.5 Web Tools Project, планируемой к выпуску одновременно с Eclipse 3.2, планируется реализовать следующие методы рефакторинга:
·        Rename, Delete, Move применительно к классу с реализацией изменений в JSF и JSP станицах, использующих этот класс;
·        Rename, Delete применительно к JSP, JSF странице;
·        Rename, Delete применительно к методу или свойству Managed Bean с реализацией изменений в JSF странице.
 
В целом, проект Eclipse предлагает как базовую поддержку рефакторинга независимо от языка, так и довольно качественную поддержку для Java (см. таблицу 1). Для Java EE существует неполная реализация базовых методов, которая вскоре (с выходом Web Tools Project 1.5) будет существенно дополнена.

Рефакторинг в Sun NetBeans

Sun NetBeans[6] предоставляет базовые, стандартные возможности рефакторинга Java (см. таблицу 1).
 
Кроме того, при рефакторинге классов EJB, применяется система ограничений на применение методов рефакторинга, позволяющая сохранить целостность и корректность EJB, например, нельзя переименовывать обязательные для них методы, такие как ejbCreate.
 
Область применения методов рефакторинга для классов включает как Java классы, так и J2EE дескрипторы, но, к сожалению, не включает JSP страницы.

Project Jackpot

В среднесрочной перспективе ожидается существенное усиление позиций NetBeans в области автоматизированного рефакторинга за счет реализации долго разрабатываемого проекта Sun под названием Jackpot[7]. Суть проекта состоит в том, чтобы предоставить разработчику инструмент, сочетающий рефакторинг и rules engine. С его помощью можно будет инспектировать и, по необходимости, преобразовывать код с сохранением его корректности и работоспособности.
 
Инструмент должен выйти в виде бета версии к Java One 2006 и в виде релиза – осенью 2006 года, одновременно с NetBeans 6.0 и Java SE 6.

Выводы

На данный момент наиболее развитой, с точки зрения рефакторинга и анализа кода, является IntelliJ Idea, которая удерживает пальму первенства на протяжении нескольких лет с ее гибкими функциями code inspection и рефакторинга. Этого стоит ожидать от IDE, ориентированной на разработчика, предпочитающего кодирование.
 
За ней следует Eclipse, обладающая большим потенциалом, как платформа для многоязыковой разработки, большим дисциплинированным сообществом разработчиков. Поддержка рефакторинга организована на базовом уровне и легко может быть реализована для других языков, также легко могут быть добавлены новые методы рефакторинга. Реализация для Java обеспечена на приемлемом уровне.
 
За ними следуют остальные IDE, в которых реализованы базовые возможности рефакторинга, подкрепляемые с помощью плагинов сторонних производителей (зачастую, платных).
 
Существенный прорыв в этой области может состояться с выходом Jackpot для NetBeans, который, возможно будет портирован на другие IDE платформы и, возможно будет поддерживать другие языки программирования.

Приложение 1. Сравнительная таблица методов рефакторинга для языка Java

 

Метод
IntelliJ IDEA
Eclipse
Sun NetBeans
Rename
Shift+F6
Alt+Shift+R
Alt+Shift+R
Extract method
Ctlr+Alt+M
Alt+Shift+M
Ctrl+Shift+M
Change method parameters
Ctrl+F6
Alt+Shift+C
+
Encapsulate fields
+
+
+
Pull up
+
+
+
Pull down
+
+
+
Move Class
F6
Alt+Shift+V
Alt+Shift+V
Move inner to output level
+
+
+
Convert Anonymous Class to Inner
+
+
+
Extract interface
+
+
+
Extract superclass
+
 
+
Use supertype where possible
+
+
+
Safely delete
Alt+Delete
+
+
Make static
+
 
 
Convert to instance method
+
 
 
Copy
F5
 
 
Replace Method Code Duplicates
+
 
 
Introduce variable
Crtl+Alt+V
Alt+Shift+L
 
Introduce field
Ctrl+Alt+F
 
 
Introduce constant
Ctrl+Alt+C
+
 
Introduce parameter
Ctrl+Alt+P
+
 
Replace inheritance with delegation
+
 
 
Inline
Ctrl+Alt+N
Alt+Shift+I
 
Replace temp with query
+
 
 
Replace constructor with factory method
+
+
 
Generify template classes
+
+
 
Migrate packages
+
 
 

Приложение 2. Использованная литература и ресурсы, упоминаемые в статье

1.     Refactoring: Improving the Design of Existing Code by Martin Fowler, Kent Beck, John Brant, William Opdyke, Don Roberts, Addison-Wesley, 1999.

Источник: http://docs.javatech.info/




Рубрика: Технология JAVA




Подгрузка через AJAX HTML-кода, содержащег....

AJAX

При разработке CMS S.Builder наша команда активно использовала AJAX. Теперь вот решили поделиться накопленным опытом. Начнем с этого хабратопика. Не буду здесь затрагивать различные фреймворки и библиотеки. Свой код всегда роднее. Для работы с AJAX-ом в S.Builder написана библиотека sbAJAX. Можете качать и пользоваться :). В этом файле есть функция sbEvalJS. Для тех, кто не знает, объясню. При подгрузке через AJAX и вставке на страницу HTML-кода, содержащего JavaScript, JavaScript выполняться не будет или полезут баги. Эта функция как раз решает поставленную задачу.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Обзор нового релиза самой мощной Ajax библ....

AJAX

Хотя наш обзор немного запоздал, оригинальный Dojo 1.2 вышел в релизной версии ещё 6-го октября, но сейчас мы наверстаем упущенное. И так, Dojo Toolkit — это самая мощная и гибкая ajax-библиотека из всех, что есть на рынке, она активно развивается и имеет большое комьюнити. Кстати, это самое комьюнити, совместно с компанией Sitepen, имеет ещё несколько проектов, среди которых и Cometd и некоторые другие, не менее интересные, о которых мы скоро вам расскажем. Сегодня же все внимание на флагманский продукт — Dojo 1.2.


Подробнее... | Рубрика: AJAX | Добавлено: 19.11.2008

Firebug 1.3 и 1.4 alpha — что нового и инт....

Вебмастеру

Если вы профессиональный веб-разработчик и постоянно имеете дело с разработкой и отладкой сложных AJAX приложений, то наверняка знаете и используете Firebug — плагин для браузера Firefox, предназначенный для отладки и исследования веб-приложений. Текущая его версия, 1.2х достаточно стабильная и функциональна, чтобы помочь в 99% проблем, которые могут возникнуть при разработке. Но и этот инструмент не лишён если не недостатков, то некоторых фич, которые могли бы облегчить работу. И даже идеальный инструмент можно сделать ещё более идеальным, как бы это не звучало.


Подробнее... | Рубрика: Вебмастеру | Добавлено: 19.11.2008

Остальные статьи:

Релиз Microsoft Silverlight 2.0. Что новог...
XML документация в C#
Курсоры в MySQL 5
Microsoft опубликовала подробности о сесси...
Microsoft делится подробностями о том, что...
Тестируем новый javascript от нового брауз...
MySQL Query Cache
Использование провайдеров компиляции в As...
Чего мы ждем от C# 4.0
Delphi 2009 и C++Builder 2009
Джоэл Спольски и Джеф Этвуд запустили новы...
Поиск кода Google /* что нового? */
10 jQuery скриптов для улучшения интерфейс...
Генераторы отчетов FastReport 4 и QuickRep...
День программиста — набор стерeотипов
Индусские програмисты
Вышел Django 1.0
Портативная версия Google Chrome Portable
Исходные коды .Net Frameword 3.5 SP1 для о...
Пишем правильный online WYSIWYG-редактор


Цитата дня (все,добавить):

Портал фрилансеров

работа на дому


    Рубрикатор

Программирование

C/С++
Обучение
Windows API
XAML
Моделирование
Паттерны
Visual Basic 7 .NET
WxWidgets
Функции WinApi
Функции С++
Разработка под Mac OS
Eiffel
Visual Studio 2008
UI дизайн
Алгоритмы
Конкурсные статьи
Turbo Pascal
Visual Studio
CASE-средства
Visual Studio 2005
Без VCL
Delphi
Тех. документация
Тестирование
Software Testing
ООП
TCP/IP
Google Android
Windows Installer
.NET Framework
Драйвера
C# C Sharp
Справка
Проектирование
Информ. системы
Visual Basic
Assembler
Оптимизация кода
Gtk+
Компоненты
Реинжиниринг
Управление проектами
Extreeme programming
Lotus Notes
Алгебраическое проектирование


Интернет технологии

PHP
Perl
ASP
WAP
Cookies
SSI
CGI
Web Servers
VB Script
DNS
CSS
XML
Html
Java Script
Java2ME
Firewall
Flash
.htaccess
Apache
VRML
Протоколы
Поисковые системы
Технология JAVA
Учебник по PHP
Учебник по JavaScript
Учебник по XML
Java Q&A
AJAX
DHTML
XHTML
Dreamweaver
Web 2.0
Python
Вебмастеру
Cisco
Ruby on Rails
Silverlight

Базы данных

Access
InterBase
MySQL
Oracle
ADO .NET
Основы SQL
Учебник по Access 2002
MS
Microsoft FoxPro
Доступ к данным
XML в MS SQL Server 2000
ODBC и MyODBC
Обучение
Caché
DB2
PostgresSQL
Sybase
Теория
Хранилища данных
Безопасность
Реляционные данные
MySQL и mSQL

Остальное:

Разное
Обзоры книг
Безопасность
Графика и дизайн
Юмор
Linux
Фракталы
Microsoft Axapta
Многоядерность
Сети
Microsoft Office
Работа
MS-DOS
Криптография
Графика и игроделание
Новости SDK
Системы защиты
Учебник по AutoCad
CVS
Windows XP
Windows Server 2003
Windows Vista
Windows 7
Мероприятия