Из Википедии, бесплатной энциклопедии
Перейти к навигации Перейти к поиску

Повторное использование кода , также называемое повторным использованием программного обеспечения , - это использование существующего программного обеспечения или знаний о программном обеспечении для создания нового программного обеспечения [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]

См. Также [ править ]

  • Не повторяйся
  • ICSR
  • Наследование
  • Привязка к языку
  • Не здесь придумано ( антоним )
  • Полиморфизм
  • Процедурное программирование
  • Изобретая колесо ( антоним )
  • Возможность повторного использования
  • Повторное использование показателей
  • Единый источник истины
  • Программный фреймворк
  • Виртуальное наследование

Ссылки [ править ]

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

Внешние ссылки [ править ]

  • ReNews - информационный сайт о повторном использовании программного обеспечения и доменной инженерии
  • Статья с советами по повторному использованию программного обеспечения