Повторное использование кода - Code reuse

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

Обзор

Для этого случая повторное использование кода практикуется с первых дней программирование. Программисты всегда повторно использовали разделы кода, шаблоны, функции и процедуры. Однако повторное использование программного обеспечения как признанная область исследований в программной инженерии восходит к 1968 году, когда Дуглас Макилрой из Bell Laboratories предложила основывать индустрию программного обеспечения на повторно используемых компонентах.

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

Повторное использование кода может предполагать создание отдельно поддерживаемой версии повторно используемых активов. Хотя код является наиболее распространенным ресурсом, выбираемым для повторного использования, другие активы, созданные в ходе цикла разработки, могут предлагать возможности для повторного использования: программные компоненты, комплекты тестов, проекты, документация и т. Д.[3]

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

Для нового написанного кода, чтобы использовать часть существующего кода, своего рода интерфейс, или средства связи, должны быть определены. Обычно они включают "вызов" или использование подпрограмма, объект, учебный класс, или же прототип. В организациях такая практика формализована и стандартизирована доменная инженерия, также известный как линейка программных продуктов инженерия.

Общая практика использования предыдущей версии существующей программы в качестве отправной точки для следующей версии также является формой повторного использования кода.

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

Многие исследователи работали над тем, чтобы сделать повторное использование более быстрым, простым, систематическим и неотъемлемой частью обычного процесса программирования. Это некоторые из основных целей изобретения объектно-ориентированного программирования, который стал одной из наиболее распространенных форм формализованного повторного использования. Несколько более позднее изобретение общее программирование.

Другой, более новый способ - использовать программное обеспечение "генераторы ", программы, которые могут создавать новые программы определенного типа на основе набора параметров, выбираемых пользователями. Области изучения таких систем: генеративное программирование и метапрограммирование.

Типы повторного использования

Что касается мотивации и движущих факторов, повторное использование может быть:

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

Повторное использование можно разделить на следующие категории:

  • Внутреннее повторное использование - команда повторно использует свои собственные компоненты. Это может быть бизнес-решение, так как команда может захотеть управлять компонентом, критически важным для проекта.
  • Внешнее повторное использование - команда может выбрать лицензию на сторонний компонент. Лицензирование стороннего компонента обычно стоит команде от 1 до 20 процентов от стоимости внутренней разработки.[4] Команда также должна учитывать время, необходимое для поиска, изучения и интеграции компонента.

Что касается формы или структуры повторного использования, код может быть:[5]

  • Ссылка - клиентский код содержит ссылку на повторно используемый код, поэтому у них разные жизненные циклы и могут быть разные версии.
  • Разветвленный - клиентский код содержит локальную или частную копию повторно используемого кода, и, таким образом, они разделяют один жизненный цикл и одну версию.

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

Систематический

Систематическое повторное использование программного обеспечения - это стратегия повышения производительности и качества индустрии программного обеспечения. Несмотря на простоту концепции, успешная реализация повторного использования программного обеспечения на практике затруднена. Причина этого заключается в зависимости повторного использования программного обеспечения от контекста, в котором оно реализовано. Некоторые проблемные вопросы, которые необходимо решить в связи с систематическим повторным использованием программного обеспечения:[6]

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

Примеры

Программные библиотеки

Очень распространенный пример повторного использования кода - это метод использования библиотека программного обеспечения. Многие общие операции, такие как преобразование информации из разных широко известных форматов, доступ к внешнему хранилищу, взаимодействие с внешними программами или манипулирование информацией (числами, словами, именами, местоположениями, датами и т. Д.), Необходимы множеству различных программы. Авторы новых программ могут использовать код в программной библиотеке для выполнения этих задач вместо того, чтобы «заново изобретать колесо», написав полностью новый код непосредственно в программе для выполнения операции. Реализации библиотек часто имеют преимущество в том, что они хорошо протестированы и охватывают необычные или загадочные случаи. К недостаткам можно отнести невозможность настройки деталей, которые могут повлиять на производительность или желаемый результат, а также время и стоимость приобретения, изучения и настройки библиотеки.[7]

Шаблоны проектирования

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

Каркасы

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

Функция высшего порядка

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

Ретрокомпьютинг

Ретрокомпьютинг включает повторное использование кода просто потому, что ретро-программы выполняются на старых компьютерах, или эмуляторы для них.

Компьютерная безопасность

В компьютерная безопасность Повторное использование кода используется как метод эксплойта программного обеспечения.[8]Когда злоумышленник не может напрямую ввести код для изменения потока управления программы, например, при наличии средств защиты от внедрения кода, таких как W ^ X, он или она может перенаправить поток управления на кодовые последовательности, существующие в памяти.

Примеры атак с повторным использованием кода: возврат к libc атака, возвратно-ориентированное программирование, и ориентированное на скачок программирование.[8][9]

Составные части

Компонент в объектно-ориентированном экстенте представляет собой набор взаимодействующих классов (или только один класс) и его интерфейсы. Интерфейсы отвечают за возможность замены компонентов. Повторно используемые компоненты также могут быть изолированы и синхронизированы между репозиториями SCM с помощью технологий управления исходным кодом компонентов (CSCM ).

Внешние компьютеры

Вся концепция «повторного использования кода» может также охватывать инженерные приложения вне программного обеспечения. Например, параметрическое моделирование в системы автоматизированного проектирования позволяет создавать многоразовые конструкции. Стандартизация приводит к созданию взаимодействующих частей, которые затем можно повторно использовать во многих контекстах.[нужна цитата ]

Критика

Повторное использование кода приводит к зависимость на повторно используемом компоненте. Роб Пайк высказал мнение, что «Небольшое копирование лучше, чем небольшая зависимость». Когда он пришел в Google, компания уделяла большое внимание повторному использованию кода. Он считает, что Google кодовая база все еще страдает от результатов прежней политики с точки зрения скорости компиляции и ремонтопригодности.[10]

Смотрите также

Рекомендации

  1. ^ Frakes, W.B .; Кё Канг (июль 2005 г.). «Исследование повторного использования программного обеспечения: состояние и будущее». IEEE Transactions по разработке программного обеспечения. 31 (7): 529–536. CiteSeerX  10.1.1.75.635. Дои:10.1109 / TSE.2005.85. S2CID  14561810.
  2. ^ Lombard Hill Group. "Что такое повторное использование программного обеспечения?". lombardhill.com. Lombard Hill Group. Получено 22 октября 2014.
  3. ^ Lombard Hill Group. «Что такое повторное использование программного обеспечения?». Получено 22 октября 2014.
  4. ^ МакКоннелл, Стив (1996). Быстрая разработка: укрощение дикого расписания программного обеспечения. ISBN  978-1-55615-900-8.
  5. ^ а б Коломбо, Ф. (2011). "Это не просто повторное использование". SharedNow.blogspot.
  6. ^ Champman, M .; Ван дер Мерве, Альта (2008). «Рассмотрение систематического повторного использования программного обеспечения в небольшой проектно-ориентированной компании». Proceeding SAICSIT '08 Материалы ежегодной исследовательской конференции Южноафриканского института компьютерных ученых и информационных технологов 2008 года по ИТ-исследованиям в развивающихся странах: на волне технологий. Дои:10.1145/1456659.1456662. ISBN  978-1-60558-286-3.
  7. ^ «Повторное использование кода». DocForge. Архивировано из оригинал на 2011-07-10. Получено 6 декабря 2020.
  8. ^ а б Блетч, Тайлер (2011). Атаки с повторным использованием кода: новые рубежи и защиты. Государственный университет Северной Каролины. ISBN  978-1-124-75297-6.
  9. ^ Блетч, Тайлер; Цзян, Сюйсянь; Фри, Винс В; Лян, Чжэнкай (2011). «Прыжковое программирование: новый класс атак с повторным использованием кода» (PDF). Материалы 6-го симпозиума ACM по информационной, компьютерной и коммуникационной безопасности. ACM. С. 30–40. Дои:10.1145/1966913.1966919. ISBN  978-1-4503-0564-8. Архивировано из оригинал (PDF) на 2017-08-07. Получено 2017-08-07.
  10. ^ Язык программирования Go (01.12.2015), Go Proverbs - Rob Pike - Gopherfest - 18 ноября 2015 г., получено 26 февраля 2016

внешняя ссылка