stringtranslate.com

Исходный код

Простой пример исходного кода на языке C , процедурный язык программирования . Полученная программа выводит "hello, world" на экран компьютера. Этот первый известный фрагмент " Hello world " из основополагающей книги " The C Programming Language" был написан Брайаном Керниганом в Bell Laboratories в 1974 году . [1]

В вычислительной технике исходный код или просто код или источник — это простая текстовая компьютерная программа, написанная на языке программирования . Программист пишет читаемый человеком исходный код для управления поведением компьютера .

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

Фон

Первые программируемые компьютеры, появившиеся в конце 1940-х годов, [2] были запрограммированы на машинном языке (простые инструкции, которые могли быть напрямую выполнены процессором). Машинный язык было трудно отлаживать, и он не был переносим между различными компьютерными системами. [3] Первоначально аппаратные ресурсы были редкими и дорогими, в то время как человеческие ресурсы были дешевле. [4] По мере того, как программы становились все более сложными, производительность программистов становилась узким местом. Это привело к появлению высокоуровневых языков программирования , таких как Fortran, в середине 1950-х годов. Эти языки абстрагировались от деталей оборудования, вместо этого они были разработаны для выражения алгоритмов, которые могли бы быть более понятны людям. [5] [6] Поскольку инструкции отличаются от базового компьютерного оборудования , программное обеспечение, таким образом, является относительно новым, начиная с этих ранних высокоуровневых языков программирования, таких как Fortran , Lisp и Cobol . [6] Изобретение высокоуровневых языков программирования было одновременно с появлением компиляторов, необходимых для автоматического перевода исходного кода в машинный код, который может быть напрямую выполнен на компьютерном оборудовании . [7]

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

Организация

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

Более сложный пример исходного кода Java . Написанный в стиле объектно-ориентированного программирования , он демонстрирует шаблонный код . С комментариями пролога, обозначенными красным, встроенными комментариями, обозначенными зеленым, и программными операторами, обозначенными синим.

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

Цели

Оценка

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

Коммуникация

Исходный код также используется для передачи алгоритмов между людьми – например, фрагменты кода в Интернете или в книгах. [13]

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

Исходный код часто содержит комментарии — блоки текста, помеченные для игнорирования компилятором. Это содержимое не является частью логики программы, а вместо этого призвано помочь читателям понять программу. [15]

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

Модификация

Доступ к исходному коду (не только к объектному коду) необходим для его изменения. [17] Понимание существующего кода необходимо для понимания того, как он работает [17] и перед его изменением. [18] Скорость понимания зависит как от кодовой базы, так и от навыков программиста. [19] Опытным программистам легче понять, что делает код на высоком уровне. [20] Иногда для ускорения этого процесса используется визуализация программного обеспечения . [21]

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

Обзоры кода другими разработчиками часто используются для тщательной проверки нового кода, добавленного в проект. [24] Целью этого этапа часто является проверка того, что код соответствует стандартам стиля и поддерживаемости , и что он является правильной реализацией программного обеспечения . [25] По некоторым оценкам, обзор кода значительно сокращает количество ошибок, сохраняющихся после завершения тестирования программного обеспечения . [24] Наряду с тестированием программного обеспечения, которое работает путем выполнения кода, статический анализ программ использует автоматизированные инструменты для обнаружения проблем с исходным кодом. Многие IDE поддерживают инструменты анализа кода, которые могут предоставлять метрики ясности и поддерживаемости кода. [26] Отладчики — это инструменты, которые часто позволяют программистам пошагово выполнять выполнение, отслеживая, какой исходный код соответствует каждому изменению состояния. [27]

Составление и исполнение

Файлы исходного кода на языке программирования высокого уровня должны пройти стадию предварительной обработки в машинный код , прежде чем инструкции могут быть выполнены. [7] После компиляции программа может быть сохранена как объектный файл , а загрузчик (часть операционной системы) может взять этот сохраненный файл и выполнить его как процесс на оборудовании компьютера. [10] Некоторые языки программирования используют интерпретатор вместо компилятора. Интерпретатор преобразует программу в машинный код во время выполнения , что делает их в 10–100 раз медленнее, чем компилируемые языки программирования. [22] [28]

Качество

Качество программного обеспечения — это всеобъемлющий термин, который может относиться к правильному и эффективному поведению кода, его возможности повторного использования и переносимости или простоте модификации. [29] Обычно более экономически выгодно встраивать качество в продукт с самого начала, а не пытаться добавить его позже в процессе разработки. [30] Более качественный код снизит стоимость жизненного цикла как для поставщиков, так и для клиентов, поскольку он более надежен и прост в обслуживании . [31] [32]

Поддерживаемость — это качество программного обеспечения, позволяющее легко изменять его, не нарушая существующую функциональность. [33] Соблюдение соглашений о кодировании, таких как использование четких имен функций и переменных, которые соответствуют их назначению, упрощает поддержку. [34] Использование условных операторов цикла только в том случае, если код может выполняться более одного раза, и исключение кода, который никогда не будет выполняться, также может повысить понятность. [35] Многие организации по разработке программного обеспечения пренебрегают поддерживаемостью на этапе разработки, даже если это увеличит долгосрочные затраты. [32] Технический долг возникает, когда программисты, часто из-за лени или срочности, чтобы уложиться в срок, выбирают быстрые и грязные решения вместо того, чтобы встроить поддерживаемость в свой код. [36] Распространенной причиной является недооценка усилий по разработке программного обеспечения , что приводит к недостаточному выделению ресурсов на разработку. [37] Проблема с поддерживаемостью заключается в том, что многие курсы по программной инженерии не делают на ней акцента. [38] Инженеры-разработчики, которые знают, что они не будут нести ответственность за поддержку программного обеспечения, не имеют стимула встраивать поддерживаемость. [18]

Авторское право и лицензирование

Ситуация в мире различается, но в Соединенных Штатах до 1974 года программное обеспечение и его исходный код не были объектом авторского права и, следовательно, всегда были общественным достоянием . [39] В 1974 году Комиссия США по новым технологическим видам использования защищенных авторским правом работ (CONTU) постановила, что «компьютерные программы, в той мере, в которой они воплощают оригинальное творение автора, являются надлежащим объектом авторского права». [40] [41]

Проприетарное программное обеспечение редко распространяется в виде исходного кода. [42] Хотя термин «программное обеспечение с открытым исходным кодом» буквально относится к публичному доступу к исходному коду , [43] к программному обеспечению с открытым исходным кодом предъявляются дополнительные требования: свободное распространение, разрешение на изменение исходного кода и выпуск производных работ под той же лицензией, а также отсутствие дискриминации между различными видами использования, включая коммерческое использование. [44] [45] Возможность свободного повторного использования программного обеспечения с открытым исходным кодом может ускорить разработку. [46]

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

Ссылки

  1. ^ Керниган, Брайан В. "Программирование на языке C: Учебное пособие" (PDF) . Bell Laboratories, Мюррей-Хилл, Нью-Джерси Архивировано из оригинала (PDF) 23 февраля 2015 г.
  2. ^ Габбриелли и Мартини 2023, с. 519.
  3. ^ Габбриелли и Мартини 2023, стр. 520–521.
  4. ^ Габбриелли и Мартини 2023, с. 522.
  5. ^ Габбриелли и Мартини 2023, с. 521.
  6. ^ ab Tracy 2021, стр. 1.
  7. ^ ab Tracy 2021, стр. 121.
  8. ^ Лин и др. 2001, стр. 238–239.
  9. ^ Катьял 2019, стр. 1194.
  10. ^ ab Tracy 2021, стр. 122–123.
  11. О'Реган 2022, стр. 230–231, 233, 377.
  12. ^ Фостер 2014, стр. 249, 274, 280, 305.
  13. ^ abc Spinellis, D: Чтение кода: перспектива открытого исходного кода . Addison-Wesley Professional, 2003. ISBN 0-201-79940-5 
  14. ^ " Искусство и компьютерное программирование " ONLamp.com Архивировано 20 февраля 2018 г. в Wayback Machine , (2005)
  15. ^ Качмарек и др. 2018, с. 68.
  16. ^ Катьял 2019, стр. 1186–1187.
  17. ^ ab Katyal 2019, стр. 1195.
  18. ^ abc Offutt, Jeff (январь 2018 г.). «Обзор обслуживания и эволюции программного обеспечения». Кафедра компьютерных наук Университета Джорджа Мейсона . Получено 5 мая 2024 г.
  19. ^ Трипатия и Найк 2014, с. 296.
  20. ^ Трипатия и Найк 2014, с. 297.
  21. ^ Трипати и Найк 2014, стр. 318–319.
  22. ^ ab O'Regan 2022, стр. 375.
  23. ^ Трипатия и Найк 2014, с. 94.
  24. ^ ab Dooley 2017, стр. 272.
  25. О'Реган 2022, стр. 18, 21.
  26. О'Реган 2022, стр. 133.
  27. ^ Качмарек и др. 2018, стр. 348–349.
  28. ^ Sebesta 2012, стр. 28.
  29. ^ Галин 2018, стр. 26.
  30. О'Реган 2022, стр. 68, 117.
  31. О'Реган 2022, стр. 3, 268.
  32. ^ ab Varga 2018, стр. 12.
  33. ^ Варга 2018, стр. 5.
  34. ^ Трипати и Найк 2014, стр. 296–297.
  35. ^ Трипатия и Найк 2014, с. 309.
  36. ^ Варга 2018, стр. 6–7.
  37. ^ Варга 2018, стр. 7.
  38. ^ Варга 2018, стр. 7–8.
  39. ^ Лю, Джозеф П.; Доган, Стейси Л. (2005). «Закон об авторском праве и специфика предмета: случай компьютерного программного обеспечения». Ежегодный обзор американского права Нью-Йоркского университета . 61 (2). Архивировано из оригинала 25 июня 2021 г.
  40. Apple Computer, Inc. против Franklin Computer Corporation возвращает байт под защиту авторских прав на компьютерные программы. Архивировано 7 мая 2017 г. на Wayback Machine в Golden Gate University Law Review, том 14, выпуск 2, статья 3, автор — Ян Л. Нуссбаум (январь 1984 г.)
  41. ^ Лемли, Менелл, Мерджес и Сэмюэлсон. Программное обеспечение и интернет-право , стр. 34.
  42. ^ Бойл 2003, стр. 45.
  43. ^ Морин и др. 2012, Открытый исходный код против закрытого исходного кода.
  44. ^ Сен и др. 2008, стр. 209.
  45. ^ Морин и др. 2012, Лицензирование свободного и открытого программного обеспечения (FOSS).
  46. О'Реган 2022, стр. 106.

Источники

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