Студенческий сайт КФУ - ex ТНУ » Учебный раздел » Учебные файлы »ПРОГРАММИРОВАНИЕ

Перепроектирование или рефакторинг кода

Тип: контрольная работа
Категория: ПРОГРАММИРОВАНИЕ
Скачать
Купить
Характеристика рефакторинга как процесса изменения структуры программы. Предпосылки его проведения, основополагающие принципы. Признаки "плохого" кода. Применение кодирования и управления исходным кодом в качестве приема "Экстремального программирования".
Краткое сожержание материала:

Размещено на

8

Размещено на

Контрольная работа

Перепроектирование или рефакторинг кода

Введение

рефакторинг экстремальный программирование

В рамках данной работы по курсу «Анализ и проектирование информационных систем» мы рассмотрим следующие вопросы - «Перепроектирование или рефакторинг кода» и «Управление исходным кодом. Коллективное владение кодом».

Целью работы будет иследовать понятия «рефакторинг» и «коллективное владение кодом». Задачи работы - выявить причины, побуждающие к использованию понятий, описать известные особенности, охарактеризовать используемые в рамках понятий методы, описать достоинства и недостатки понятий.

Объект исследования - анализ и проектирование информационных систем. Предметы исследования - рефакторинг и управление исходным кодом. Во введении содержатся ссылка на цель и задачи работы, объект и предмет исследования, а также кратко излагается назначение каждого из разделов. Работа содержит две смысловые части - реферат и развернутый ответ на исследуемый вопрос. Реферативная часть исследует теоретическое понятие «Перепроектирование или рефакторинг кода» на основе изученной литературы; развернутый ответ - предлагает авторский взгляд на вопрос «коллективного владения кодом».

Общие выводы и замечания содержатся в разделе «Заключение». Также приведен список использованных при написании работы источников.

1. Перепроектирование или рефакторинг кода

1.1 Понятие рефакторинга, причины рефакторинга

Рефакторинг (англ. refactoring) или реорганизация кода -- процесс изменения внутренней структуры программы, не затрагивающий её внешнего поведения и имеющий целью облегчить понимание её работы [1]. Мартин Фаулер в [4] приводит несколько иное определение рефакторинга: «Рефакторинг (англ. refactoring) -- изменение во внутренней структуре программного обеспечения, имеющее целью облегчить понимание его работы и упростить модификацию, не затрагивая наблюдаемого поведения». Как следует из приведенных определений, сферой применения рефакторинга является исходный код, основной целью -- упрощение будущих модификаций и облегчение понимания кода человеком.

Как правило, рефакторинг выполняется путем применения серии стандартизированных "микро-рефакторингов", каждый из которых является (обычно) незначительным изменением в исходном коде компьютерной программы, которое сохраняет поведение программного обеспечения, или, по крайней мере, не изменяет его соответствие функциональным требованиям [1].

Как уже отмечалось выше, основная цель рефакторинга заключается в облегчении понимания работы кода и упрощении будущих модификаций, но важно отметить, что рефакторинг - это не одно и то же, что и оптимизация производительности, и реинжиниринг. Оптимизация производительности -- модификация системы, имеющая целью улучшение её (системы) эффективности по некоторому набору критериев, и хотя оптимизация может и не изменять внутреннюю структуру программы, но часто усложняет и запутывает код, в отличие от рефакторинга [2]. Реинжиниринг программного обеспечения -- это процесс создания новой функциональности или устранения ошибок, путём революционного изменения, но используя уже имеющееся в эксплуатации программное обеспечение [3]. Таким образом, реинжиниринг может идти после рефакторинга, но сам по себе является переработкой кода с целью исправления ошибок и внедрения нового функционала, и не обязательно с целью упрощения понимания кода.

Отметим основные причины и предпосылки рефакторинга:

1. Рефакторинг улучшает композицию программного обеспечения.

По мере внесения в код изменений, связанных с реализацией краткосрочных целей или производимых без полного понимания организации кода, последний утрачивает свою структурированность. Регулярно проводимый рефакторинг помогает сохранять форму кода [4].

2. Рефакторинг облегчает понимание программного обеспечения.

Программист пишет код, указывающий компьютеру, что необходимо сделать, и тот в ответ делает в точности то, что ему сказано. В таком режиме суть программирования состоит в том, чтобы точно сказать, что требуется от компьютера. Пройдет некоторое время, и кому-нибудь, возможно даже автору кода, понадобится прочесть код, чтобы внести какие-то изменения. Важно понимать, что программист может потратить неделю на модификацию кода, которая заняла бы у него лишь час, будь он в состоянии разобраться в коде [4].

3. Рефакторинг помогает находить ошибки.

При проведении рефакторинга кода разработчик должен глубоко вникать в него (как же иначе проводить рефакторинг?), пытаясь понять, что код делает, и достигнутое понимание, возвращая обратно в код, т.е. в уме «переписывая» оный на свой лад. После прояснения структуры программы некоторые сделанные программистом допущения становятся настолько ясными, что он не может не увидеть ошибки [4]. (Скорее здесь имеет место не рефакторинг в целом, а процесс размышления над кодом, просмотр оного [5], как один из элементов рефакторинга [прим. автора]).

4. Рефакторинг позволяет быстрее писать программы.

В конечном счете все перечисленное сводится к одному: рефакторинг способствует ускорению разработки кода. Общеизвестно, что хороший дизайн и архитектура важны для сохранения скорости разработки программного обеспечения. Иначе время программиста будет тратиться не на добавление новых функций, а на поиск и исправление ошибок. Благодаря рефакторингу программы разрабатываются быстрее, т. к. он удерживает композицию системы от распада. С его помощью можно даже улучшить дизайн [4].

5. Рефакторинг позволяет сохранять работоспособность и терпение.

«Я часто удивлялся тому, что побуждает меня реорганизовывать код. Конечно, я могу сказать, что реорганизую код, чтобы убрать из него повторы, упростить и сделать понятным. Но что на самом деле побуждает меня к реорганизации? Эмоции. Часто я занимаюсь рефакторингом только для того, чтобы работа с кодом была менее раздражающей.» [6]

1.2 Принципы и методы рефакторинга

Кратко опишем основополагающие принципы рефакторинга, (они же три правила в [4]):

1. Применяйте рефакторинг при добавлении новой функции.

Старайтесь лучше понимать код, который надо модифицировать. Исправляйте дизайн, не способствующий легкому добавлению новой функции.

2. Применяйте рефакторинг, если требуется исправить ошибку.

При исправлении ошибок польза рефакторинга во многом заключается в том, что код становится более понятным. При проведении рефакторинга часто оказывается, что такая активная работа с кодом помогает найти в нем ошибки.

3. Применяйте рефакторинг при разборе кода.

Благодаря разбору кода знания становятся достоянием всей команды разработчиков. При этом более опытные разработчики передают свои знания менее опытным. Разборы помогают большему числу людей разобраться с большим числом аспектов крупной программной системы. Они также очень важны для написания понятного кода.

Методы рефакторинга являются техническими способами проведения оного, предназначенными для достижения определенных целей рефакторинга. Как уже отмечалось выше, в перепроектировании важна концепция малых шагов [6], требующая применения серий микрорефакторингов, а составным элементом микрорефакторинга можно считать применение метода на практике.

В рамках объема данной работы не представляется возможным охарактеризовать все возможные методы рефакторинга, поэтому кратко остановимся на наиболее используемых, приводимых в [6, 1]:

1. Изменение сигнатуры метода (Change Method Signature)

Суть изменения сигнатуры метода заключается в добавлении, изменении или удалении параметра метода. Изменив сигнатуру метода, необходимо скорректировать обращения к нему в коде всех клиентов. Это изменение может затронуть внешний интерфейс программы, кроме того, не всегда разработчику, изменяющему интерфейс, доступны все клиенты этого интерфейса, поэтому может потребоваться та или иная форма регистрации изменений интерфейса для последующей передачи их вместе с новой версией программы.

2. Инкапсуляция поля (Encapsulate field)

В случае, если у класса имеется открытое поле, необходимо сделать его закрытым и обеспечить методы доступа. После «Инкапсуляции поля» часто применяется «Перемещение метода».

3. Выделение метода (Extract Method)

Выделение метода заключается в выделении из длинного и/или требующего комментариев кода отдельных фрагментов и преобразовании их в отдельные методы, с подстановкой подходящих вызовов в местах использования. В этом случае действует правило: если фрагмент кода требует комментария о том, что он делает, то он должен быть выделен в отдельный метод. Также правило: один метод не должен занимать более чем один экран (25-50 строк, в зависимости от условий редактирования), в противном случае некоторые его фрагменты имеют самостоятельную ценность и подлежат выделению. Из анализа связей выделяемого фрагмента с окружающим контекстом делается вывод о перечне параметров нового метода и его локальных переменных.

4. Перемещение метода (Move Method)

Перемещение метода применяется по отношению к методу, который чаще обращается к другому классу, чем к тому, в котором сам располагается.

5. Замена условного оператора...

Другие файлы:

Рефакторинг с использованием шаблонов
Данная книга представляет собой результат многолетнего опыта профессионального программиста по применению шаблонов проектирования. Авторский подход к...

Чистый код. Создание, анализ и рефакторинг
Эта книга посвящена хорошему программированию. Она полна реальных примеров кода. Мы будем рассматривать код с различных направлений: сверху вниз, сниз...

Шаблоны тестирования xUnit. Рефакторинг кода тестов
В данной книге показано, как применять принципы разработки программного обеспечения, в частности шаблоны проектирования, инкапсуляцию, исключение повт...

Изучение линейных кодов
Принципы формирования линейных кодов цифровых систем передачи. Характеристика абсолютного и относительного биимпульсного кода, а также кода CMI. Выбор...

Определение пространственной ориентации объекта, маркированного QR кодом
Алгоритм обнаружения и расшифровки QR кода. Методы 3D реконструкции, стереозрение. Определение ориентации плоскости кода относительно камеры. Программ...