Курсовая работа. Рефакторинг ПО
.pdfМетоды: введение заданного по умолчанию значения; введение общего формата; введение ограничения столбца; добавление поисковой таблицы; замена кодового обозначения типа флажками свойств; осуществление стратегии консолидированных ключей; перемещение данных; преобразование столбца в не допускающий NULL-значения; применение стандартного типа; применение стандартных кодовых обозначений; уничтожение значения, заданного по умолчанию; уничтожение ограничения столбца; уничтожение столбца, не допускающего NULL-значений.
Рефакторинг ссылочной целостности
Изменения, направленные на поддержание ссылочной целостности в базе данных.
Методы: введение каскадного удаления; введение программного удаления; введение триггера для накопления исторических данных; введение физического удаления; добавление ограничения внешнего ключа; добавление триггера для вычисляемого столбца; уничтожение ограничения внешнего ключа.
Рефакторинг архитектуры
Изменения, направленные на улучшение взаимодействия внешних программ с базой данных.
Методы: введение вычислительного метода; введение индекса; введение таблицы только для чтения; добавление зеркальной таблицы; добавление метода чтения; добавление методов CRUD; замена метода (методов) представлением; замена представления методом (методами); инкапсуляция таблицы в представление; использование официально заданного источника данных; перенос метода в базу данных; перенос метода из базы данных.
Рефакторинг методов
Методы рефакторинга кода, применимые к триггерам и хранимым процедурам.
Когда проводить рефакторинг
Выделяются некоторые общие недостатки баз данных, наличие которых может сигнализировать о необходимости рефакторинга.
21
Многоцелевые столбцы, т.е. столбцы, которые используются для хранения разнородных данных;
Многоцелевые таблицы, т.е. таблицы, в которых хранится информация о разных типах сущностей;
Избыточные данные;
Таблицы со слишком большим количеством столбцов;
Таблицы со слишком большим количеством строк;
Многозначные столбцы, т.е. столбцы, внутри которых в различных позициях представлено несколько разных фрагментов информации;
Боязнь вносить изменения в схему базы данных из-за возможных нарушений в работе приложений.
Переходный период
Переходный период при рефакторинге - это период времени, в течение которого осуществляется поддержка как первоначальной версии схемы базы данных, так и версии новой. Его введение необходимо для того, чтобы предоставить разработчикам время для внесения необходимых изменений в приложения, работающие с базой данных.
Пример рефакторинга базы данных
Как пример рефакторинга базы данных можно привести операцию переименования столбца в существующей таблице.
Таблица Employee, хранящая данные о сотрудниках фирмы, содержит столбец zarplata, который было решено переименовать в salary, чтобы обеспечить единообразное именование объектов в базе данных, т.е. в качестве имён использовать исключительно английские слова. Для этого
22
необходимо сделать следующее: добавить в таблицу столбец salary и скопировать в него данные из столбца zarplata, ввести триггер, который будет синхронизировать данные между двумя столбцами в течение переходного периода, а по прошествии данного периода удалить триггер и первоначальный столбец.
Средства автоматизации рефакторинга
Технические критерии для инструментов рефакторинга:
Базы данных программы;
Деревья синтаксического разбора;
Точность.
Практические критерии для инструментов рефакторинга:
Скорость;
Отмена модификаций;
Интеграция с другими инструментами.
Рефакторинг в Visual Studio
В Microsoft Visual Studio издавна реализована прекрасная поддержка плагинов, с помощью которых можно расширять ее возможности. В частности, существует множество плагинов, как платных, так и бесплатных, дополняющих и улучшающих стандартный набор инструментов рефакторинга в студии.
Visual Assist X
Visual Assist X - плагин, разработанный фирмой Whole Tomato Inc.
Плагин поддерживает три языка программирования - C++, C# и VB.NET и работает практически во всех версиях студии, начиная c Visual C++ 6.0
23
Набор средств рефакторинга, предлагаемых Visual Assist X, является общим для всех языков и включает аналоги стандартных инструментов
"Rename", "Extract Method", "Encapsulate Field", новые инструменты "Change Signature", "AddMethod", "Add Similar Member" и "Document Method". Для разработчиков С++ так же доступны функции "Create Declaration", "Create Implementation" и "Move Implementation to Source File".
Инструменты рефакторинга Visual Assist X работают существенно быстрее стандартных. Их интерфейс все так же основан на использовании модальных диалогов, однако он во многом более эргономичен. Например, при вызове функции "Rename" показывается один диалог, а не два - предпросмотр совмещен с вводом нового имени. Функция "Change Signature" позволяет изменять сигнатуру метода произвольным образом, что гораздо удобнее, чем тыкать мышкой по списку параметров в стандартных диалогах
"Remove Parameter" и "Reorder Parameters".
Visual Assist реализует удобный способ быстрого вызова инструментов рефакторинга - достаточно навести мышкой на выделенный текст или любой идентификатор, как рядом с курсором мыши появляется иконка, при нажатии на которую открывается меню со списком доступных для выбранного участка кода методов рефакторинга.
Рефакторинг в Visual Assist является кросс-проектным, причем даже в тех случаях, когда проекты написаны на разных языках. Шаблоны генерируемого при рефакторинге кода настраиваются в настройках. Команда UNDO позволяет отменить изменения, внесенные в код при рефакторинге, причем все изменения отменяются скопом, "в один клик".
24
Refactor!
Компания Developer Express, разработчик небезызвестного плагина CodeRush, разработала целый набор плагинов для рефакторинга - три бесплатных плагина Refactor! для C++, Visual Basic и ASP.NET и один платный - Refactor! Pro, поддерживающий восемь языков C#, Visual Basic, C++, ASP.NET, XAML, XML, HTML, JavaScript. Плагины способны работать в VS2002-VS2008. Платная версия реализует в общей сложности около 150 инструментов рефакторинга, функциональность бесплатных плагинов несколько более скромная - 15 инструментов для С++, 36 для VB, 28 для
ASP.NET.
Так же как Visual Assist, Refactor! показывает иконку, открывающий меню со списком доступных, для выбранного участка кода, методов рефакторинга. Однако, интерфейс инструментов рефакторинга в Refactor! отличается принципиально - он является бездиалоговым, интерактивным и анимированным. Достаточно выбрать в списке методов рефакторинга требуемый, как Refactor! отобразит всплывающую подсказку с инструкциями какие клавиши нажимать и покажет каким образом при этом будет изменен код. Когда требуется вводить текст, например, новое название переменной, пользователь делает это прямо в редакторе студии - Refactor! автоматически изменяет все ссылки на эту переменную в коде программы.
Сравнительное тестирование бесплатной и платной версии Refactor! для С++ показало, что бесплатная версия не только обладает меньшим количеством функций, но и работает как-то менее уверенно. В процессе работы очень часто для выбранных участков кода не было доступно никаких инструментов рефакторинга, даже тривиального Rename. В платной версии такого не наблюдалось.
25
JustCode!
Плагин JustCode!, разработанный фирмой Omnicore, представляет из себя альтернативу ReSharper и Refactor! Плагин поддерживает VS2003 и VS2005, языки C#, J#, VB.NET, ASP.Net, JavaScript и HTML.
Набор операций рефакторинга, доступных в плагине, не слишком велик
- "Rename", "Inline variable", "Extract Method", автоматическое создание конструктора и преобразование переменной-члена класса в свойство.
Интерфейс JustCode! схож с интерфейсом Refactor!, правда в нем поменьше анимации. Точно так же набор доступных инструментов рефакторинга зависит от текущего контекста. Диалоговых окон нет, все операции рефакторинга можно проводить используя исключительно клавиатуру.
К плюсам плагина относится кросс-проектность и кросс-языковость рефакторинга. К минусам - неполноценная реализация команды отмены операции рефакторинга - каждое изменение в коде нужно отменять отдельным вызовом UNDO.
Скорость работы плагина вполне на уровне, никаких особых "тормозов" в работу студии он не вносит. Однако бездиалоговый интерфейс в JustCode! пока отлажен не так четко, как в Refactor!, к нему приходится приноравливаться.
26
ReSharper
ReSharper - плагин, разработанный фирмой JetBrains, предназначенный для разработчиков, использующих C# и VB.NET и предоставляющий огромный набор разнообразных полезных функций, в число которых входят и средства рефакторинга.
Так же как Visual Assist и Refactor!, ReSharper умеет показывать контекстно-зависимое меню со списком инструментов рефакторинга, доступных для выбранного участка кода. Для вызова меню используется комбинация клавиш Ctrl+Shift+R. Это удобно - вызов любого инструмента рефакторинга всегда выполняется с помощью одной и той же комбинации клавиш.
Инструменты рефакторинга в ReSharper имеют диалоговый интерфейс, однако диалоги немодальные. Немного напрягает отсутствие возможности предварительного просмотра в некоторых диалогах. Впрочем, внесенные изменения при необходимости легко отменить - одна команда UNDO отменяет всю проведенную операцию рефакторинга целиком.
Всего доступно 34 метода рефакторинга, включая такие как "Move Type to Another File", "Inline variable", "Copy Type" и "Extract Superclass".
Реализованы они на хорошем уровне, пользоваться ими удобно.
Помимо собственно средств рефакторинга, ReSharper предоставляет огромный набор так называемых контекстных действий (context actions). Фактически - это мелкие операции по преобразованию кода, находящегося в позиции курсора. Например изменить область видимости текущего метода или конвертировать цикл foreach в цикл for. Для вызова списка доступных в текущем контексте действий достаточно нажать Alt+Enter или щелкнуть по значку лампочки, появляющемуся в начале строки.
27
CodeIt.Once
Плагин CodeIt.Once разработан фирмой Submain и предназначен исключительно для проведения рефакторинга. Поддерживает языки C# и VB.NET, способен работать с VS2003 и VS2005.
Codeit.Once реализует 14 инструментов рефакторинга. Несколько неожиданным является их интерфейс, установленный по умолчанию - многошаговые визарды (wizards), прямо скажем, не самый быстрый вариант интерфейса. К счастью, режим использования визардов можно отключить в настройках, после чего интерфейс становится диалоговым, напоминающим Visual Assist. Диалоги весьма компактны, удобны в работе и имеют функцию предпросмотра.
Скорость и качество работы методов рефакторинга в Codeit.Once не вызывают нареканий. Команда Undo реализована грамотно - отменяет в коде сразу все изменения, внесенные при выполнении операции рефакторинга.
28
Список используемой литературы
Книги
1.Фаулер М., Бек К., Брант Д., Робертс Д., Апдайк У. «Рефакторинг: улучшение существующего кода»
2.Скотт В. Эмблер, Прамодкумар Дж. Садаладж «Рефакторинг баз данных: эволюционное проектирование»
3.Джошуа Кериевски «Рефакторинг с использованием шаблонов»
4.Скотт В. Эмблер, Прамодкумар Дж. Садаладж Рефакторинг баз данных: эволюционное проектирование
Интернет-ресурсы
1.Wikipedia.org
2.Habrahabr.ru
29