stringtranslate.com

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

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

Повторное использование кода может быть достигнуто разными способами в зависимости от сложности выбранного языка программирования и варьируется от подходов более низкого уровня, таких как копирование кода (например, с помощью фрагментов ), [3] простых функций ( процедур или подпрограмм ) или набора объекты или функции , организованные в модули (например, библиотеки ) [4] [2] : 7  или пользовательские пространства имен , а также пакеты , платформы или комплекты программного обеспечения на более высоких уровнях.

Повторное использование кода подразумевает зависимости, которые могут усложнить сопровождение кода . [ нужна цитата ] По крайней мере одно исследование показало, что повторное использование кода уменьшает технический долг . [5]

Обзор

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

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

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

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

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

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

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

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

Другим, более новым средством является использование программных « генераторов », программ, которые могут создавать новые программы определенного типа на основе набора параметров, которые выбирают пользователи. Областями изучения таких систем являются генеративное программирование и метапрограммирование .

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

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

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

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

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

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

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

Примеры

Библиотеки программного обеспечения

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

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

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

Рамки

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

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

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

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

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

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

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

Примерами атак с повторным использованием кода являются атака с возвратом в libc , программирование, ориентированное на возврат , и программирование, ориентированное на переход. [12] [13]

Компоненты

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

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

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

Критика

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

Повторно используемый код обычно требует больше усилий для написания и проектирования. Фред Брукс обсуждает значительно более высокие затраты, связанные с этими усилиями, в своих эссе «Смоляная яма» и « Нет серебряной пули ». Заблуждение заключается в том, что усилия часто тратятся без тщательного понимания механизмов, с помощью которых эти затраты будут окупаться. Оправдание часто происходит из-за неправильного проведения параллелей с деталями многократного использования в физическом производственном процессе. Неверно, потому что написание кода аналогично проектированию одного продукта, а не производству нескольких единиц.

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

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

  1. ^ Фрейкс, ВБ; Кё Кан (июль 2005 г.). «Исследование повторного использования программного обеспечения: состояние и будущее». Транзакции IEEE по разработке программного обеспечения . 31 (7): 529–536. CiteSeerX  10.1.1.75.635 . дои :10.1109/TSE.2005.85. S2CID  14561810.
  2. ^ Аб Редди, Мартин (2011). Разработка API для C++. Бостон: Морган Кауфманн. ISBN 978-0-12-385004-1. OCLC  704559821.
  3. ^ Селаоло, Карабо; Хломани, Хломани (2016). «К кластеру онтологий алгоритмов: для повторного использования модульного кода и полиглотного программирования». Достижения в области компьютерных наук . 5:63 – через Researchgate.
  4. ^ «4. Повторное использование кода: функции и модули — Head First Python, 2-е издание [книга]» . www.oreilly.com . Проверено 26 января 2022 г.
  5. ^ Фейтоса, Дэниел; Ампацоглу, Апостолос; Гкорцис, Антониос; Биби, Стаматия; Хацигеоргиу, Александр (сентябрь 2020 г.). «Повторное использование кода на практике: польза или вред техническому долгу» (PDF) . Журнал систем и программного обеспечения . 167 : 110618. doi : 10.1016/j.jss.2020.110618. S2CID  219502749.
  6. ^ Группа Ломбард-Хилл. «Что такое повторное использование программного обеспечения?». lombardhill.com . Группа Ломбард Хилл. Архивировано из оригинала 23 января 2019 года . Проверено 22 октября 2014 г.
  7. ^ Группа Ломбард-Хилл. «Что такое повторное использование программного обеспечения?». Архивировано из оригинала 23 января 2019 года . Проверено 22 октября 2014 г.
  8. ^ МакКоннелл, Стив (1996). Быстрая разработка: укрощение диких графиков работы программного обеспечения . Пирсон Образование. ISBN 978-1-55615-900-8.
  9. ^ аб Коломбо, Ф. (2011). «Это не просто повторное использование». SharedNow.blogspot .
  10. ^ Чемпмен, М.; Ван дер Мерве, Альта (2008). «Рассмотрение систематического повторного использования программного обеспечения в небольшой проектно-ориентированной компании» . Proceeding SAICSIT '08 Материалы ежегодной исследовательской конференции Южноафриканского института компьютерных наук и информационных технологов 2008 года по исследованиям в области информационных технологий в развивающихся странах: на волне технологий . дои : 10.1145/1456659.1456662. ISBN 978-1-60558-286-3.
  11. ^ «Повторное использование кода». ДокФордж . Архивировано из оригинала 10 июля 2011 г. Проверено 14 января 2024 г.
  12. ^ Аб Блетч, Тайлер (2011). Атаки с повторным использованием кода: новые границы и защита. Государственный университет Северной Каролины. ISBN 978-1-124-75297-6.
  13. ^ Блетч, Тайлер; Цзян, Сюсянь; Фри, Винс В.; Лян, Чжэнькай (2011). «Программирование, ориентированное на переход: новый класс атак с повторным использованием кода» (PDF) . Материалы 6-го симпозиума ACM по информационной, компьютерной и коммуникационной безопасности . АКМ. стр. 30–40. дои : 10.1145/1966913.1966919. ISBN 978-1-4503-0564-8. Архивировано из оригинала (PDF) 7 августа 2017 г. Проверено 7 августа 2017 г.
  14. ^ Язык программирования Go (01 декабря 2015 г.), Go Proverbs - Роб Пайк - Gopherfest - 18 ноября 2015 г., заархивировано из оригинала 22 декабря 2021 г. , получено 26 февраля 2016 г.

Внешние ссылки