stringtranslate.com

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

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

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

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

Обзор

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

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

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

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

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

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

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

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

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

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

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

Повторное использование можно классифицировать далее:

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

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

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

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

Примеры

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

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

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

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

Фреймворки

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

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

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

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

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

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

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

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

Компоненты

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

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

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

Критика

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

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

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

Ссылки

  1. ^ Frakes, WB; Kyo Kang (июль 2005 г.). «Исследования повторного использования программного обеспечения: статус и будущее». IEEE Transactions on Software Engineering . 31 (7): 529–536. CiteSeerX  10.1.1.75.635 . doi :10.1109/TSE.2005.85. S2CID  14561810.
  2. ^ ab Reddy, Martin (2011). Проектирование API для C++. Бостон: Morgan Kaufmann. ISBN 978-0-12-385004-1. OCLC  704559821.
  3. ^ Selaolo, Karabo; Hlomani, Hlomani (2016). «К кластеру онтологии алгоритмов: для повторного использования модульного кода и многоязычного программирования». Достижения в области компьютерных наук . 5 : 63 – через Researchgate.
  4. ^ "4. Повторное использование кода: функции и модули - Head First Python, 2-е издание [книга]". www.oreilly.com . Получено 26.01.2022 .
  5. ^ Фейтоса, Даниэль; Ампатцоглу, Апостолос; Гкорцис, Антониос; Биби, Стаматия; Хатзигеоргиу, Александр (сентябрь 2020 г.). «Повторное использование кода на практике: польза или вред техническому долгу» (PDF) . Журнал систем и программного обеспечения . 167 : 110618. doi : 10.1016/j.jss.2020.110618. S2CID  219502749.
  6. ^ Lombard Hill Group. «Что такое повторное использование программного обеспечения?». lombardhill.com . Lombard Hill Group. Архивировано из оригинала 23 января 2019 года . Получено 22 октября 2014 года .
  7. ^ Lombard Hill Group. «Что такое повторное использование программного обеспечения?». Архивировано из оригинала 23 января 2019 года . Получено 22 октября 2014 года .
  8. ^ Макконнелл, Стив (1996). Быстрая разработка: укрощение диких программных графиков . Pearson Education. ISBN 978-1-55615-900-8.
  9. ^ ab Colombo, F. (2011). «Это не просто повторное использование». SharedNow.blogspot .
  10. ^ Чампман, М.; Ван дер Мерве, Альта (2008). «Рассмотрение систематического повторного использования программного обеспечения в небольшой проектно-ориентированной компании» . Труды SAICSIT '08 Труды ежегодной исследовательской конференции 2008 года Южноафриканского института компьютерных ученых и информационных технологов по исследованиям в области ИТ в развивающихся странах: на волне технологий . doi :10.1145/1456659.1456662. ISBN 978-1-60558-286-3.
  11. ^ "Повторное использование кода". DocForge . Архивировано из оригинала 2011-07-10 . Получено 29 октября 2024 .
  12. ^ ab Bletsch, Tyler (2011). Атаки с повторным использованием кода: новые рубежи и защита. Университет штата Северная Каролина. ISBN 978-1-124-75297-6.
  13. ^ Bletsch, Tyler; Jiang, Xuxian; Freeh, Vince W; Liang, Zhenkai (2011). "Jump-ориентированное программирование: новый класс атак с повторным использованием кода" (PDF) . Труды 6-го симпозиума ACM по информационной, компьютерной и коммуникационной безопасности . ACM. стр. 30–40. doi :10.1145/1966913.1966919. ISBN 978-1-4503-0564-8. Архивировано из оригинала (PDF) 2017-08-07 . Получено 2017-08-07 .
  14. The Go Programming Language (2015-12-01), Go Proverbs – Rob Pike – Gopherfest – 18 ноября 2015 г., заархивировано из оригинала 2021-12-22 , извлечено 26 февраля 2016 г.

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