Исходный код
Выполнение программы |
---|
Общие понятия |
Типы кода |
Стратегии составления |
Известное время выполнения |
|
Известные компиляторы и наборы инструментов |
|
В вычислительной технике исходный код или просто код или источник — это текст (обычно простой текст ), который соответствует удобочитаемому языку программирования и определяет поведение компьютера . Программист пишет код для создания программы , которая работает на компьютере.
Поскольку компьютер, по сути, понимает только машинный код , исходный код должен быть преобразован, чтобы его мог использовать компьютер, и это может быть реализовано различными способами в зависимости от доступной технологии. Исходный код может быть преобразован компилятором или ассемблером в машинный код, который может быть выполнен напрямую . Альтернативно, исходный код может обрабатываться без преобразования в машинный код с помощью интерпретатора , который выполняет действия, предписанные исходным кодом, через машинный код интерпретатора. Другая технология (например, байт-код ) включает в себя оба механизма путем преобразования исходного кода в промежуточную форму, которая часто не читается человеком, но также не является машинным кодом, и интерпретатор выполняет промежуточную форму.
Большинство языков допускают комментарии . Программист может добавлять комментарии для документирования исходного кода для себя и для других программистов, читающих код. Комментарии не могут быть представлены в машинном коде и поэтому игнорируются компиляторами, интерпретаторами и т.п.
Часто исходный код прикладного программного обеспечения не распространяется и не является общедоступным, поскольку производитель хочет защитить свою интеллектуальную собственность (ИС). Но, если исходный код доступен ( с открытым исходным кодом ), он может быть полезен пользователю , программисту или системному администратору , любой из которых может пожелать изучить или изменить программу.
Предыстория [ править ]
Первые программируемые компьютеры, появившиеся в конце 1940-х годов, [2] были запрограммированы на машинном языке (простые инструкции, которые могли быть непосредственно выполнены процессором). Машинный язык было трудно отлаживать, и его нельзя было переносить между различными компьютерными системами. [3] Первоначально аппаратные ресурсы были скудными и дорогими, а человеческие ресурсы были дешевле. [4] По мере усложнения программ производительность программистов стала узким местом. Это привело к появлению языков программирования высокого уровня, таких как Фортран, в середине 1950-х годов. Эти языки абстрагировали детали аппаратного обеспечения и вместо этого были разработаны для выражения алгоритмов, которые людям было бы легче понять. [5] [6] Поскольку инструкции отличаются от базового компьютерного оборудования высокого уровня, , программное обеспечение появилось сравнительно недавно и восходит к таким ранним языкам программирования как Fortran , Lisp и Cobol . [6] Изобретение языков программирования высокого уровня произошло одновременно с появлением компиляторов, которые должны были автоматически транслировать исходный код в машинный код, который можно было напрямую выполнять на аппаратном обеспечении компьютера . [7]
Исходный код — это форма кода, которая модифицируется непосредственно людьми, обычно на языке программирования высокого уровня. Объектный код может выполняться непосредственно машиной и генерируется автоматически из исходного кода, часто с помощью промежуточного этапа — языка ассемблера . Хотя объектный код будет работать только на определенной платформе, исходный код можно перенести на другую машину и перекомпилировать там. Для одного и того же исходного кода объектный код может существенно различаться — не только в зависимости от машины, для которой он скомпилирован, но и в зависимости от оптимизации производительности компилятора. [8] [9]
Организация [ править ]
Большинство программ не содержат всех ресурсов, необходимых для их запуска, и полагаются на внешние библиотеки . Частью функции компилятора является связывание этих файлов таким образом, чтобы программа могла выполняться аппаратно. [10]
Разработчики программного обеспечения часто используют управление конфигурацией для отслеживания изменений в файлах исходного кода ( контроль версий ). Система управления конфигурацией также отслеживает, какой файл объектного кода соответствует какой версии файла исходного кода. [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]
См. также [ править ]
- Байт-код
- Код как данные
- Соглашения о кодировании
- Компьютерный код
- Бесплатное программное обеспечение
- Устаревший код
- Машинный код
- Язык разметки
- Запутанный код
- Код объекта
- Программное обеспечение с открытым исходным кодом
- Пакет (система управления пакетами)
- Язык программирования
- Репозиторий исходного кода
- Подсветка синтаксиса
- Язык визуального программирования
Ссылки [ править ]
- ^ Керниган, Брайан В. «Программирование на C: Учебное пособие» (PDF) . Bell Laboratories, Мюррей-Хилл, Нью-Джерси. Архивировано из оригинала (PDF) 23 февраля 2015 года.
- ^ Габбриелли и Мартини 2023 , с. 519.
- ^ Габбриелли и Мартини, 2023 , стр. 520–521.
- ^ Габбриелли и Мартини 2023 , с. 522.
- ^ Габбриелли и Мартини 2023 , с. 521.
- ↑ Перейти обратно: Перейти обратно: а б Трейси 2021 , с. 1.
- ↑ Перейти обратно: Перейти обратно: а б Трейси 2021 , с. 121.
- ^ Лин и др. 2001 , стр. 238–239.
- ^ Катьял 2019 , с. 1194.
- ↑ Перейти обратно: Перейти обратно: а б Трейси, 2021 г. , стр. 122–123.
- ^ О'Риган 2022 , стр. 230–231, 233, 377.
- ^ Фостер 2014 , стр. 249, 274, 280, 305.
- ↑ Перейти обратно: Перейти обратно: а б с Спинеллис, Д.: Чтение кода: взгляд на открытый исходный код . Аддисон-Уэсли Профессионал, 2003 г. ISBN 0-201-79940-5
- ^ « Искусство и компьютерное программирование » ONLamp.com. Архивировано 20 февраля 2018 г. в Wayback Machine (2005).
- ^ Качмарек и др. 2018 , стр. 68.
- ^ Катьял 2019 , стр. 1186–1187.
- ↑ Перейти обратно: Перейти обратно: а б Катьял 2019 , с. 1195.
- ↑ Перейти обратно: Перейти обратно: а б с Оффатт, Джефф (январь 2018 г.). «Обзор сопровождения и развития программного обеспечения» . Университета Джорджа Мейсона Факультет компьютерных наук . Проверено 5 мая 2024 г.
- ^ Трипатия и Найк 2014 , с. 296.
- ^ Трипатия и Найк 2014 , с. 297.
- ^ Трипати и Найк 2014 , стр. 318–319.
- ↑ Перейти обратно: Перейти обратно: а б О'Риган 2022 , с. 375.
- ^ Трипатия и Найк 2014 , с. 94.
- ↑ Перейти обратно: Перейти обратно: а б Дули 2017 , с. 272.
- ^ О'Риган, 2022 , стр. 18, 21.
- ^ О'Риган 2022 , с. 133.
- ^ Качмарек и др. 2018 , стр. 348–349.
- ^ Sebesta 2012 , p. 28.
- ^ Галин 2018 , с. 26.
- ^ О'Риган, 2022 , стр. 68, 117.
- ^ О'Риган 2022 , стр. 3, 268.
- ↑ Перейти обратно: Перейти обратно: а б Варга 2018 , с. 12.
- ^ Варга 2018 , с. 5.
- ^ Трипати и Найк 2014 , стр. 296–297.
- ^ Трипатия и Найк 2014 , с. 309.
- ^ Варга 2018 , стр. 6–7.
- ^ Варга 2018 , с. 7.
- ^ Варга 2018 , стр. 7–8.
- ^ Лю, Джозеф П.; Доган, Стейси Л. (2005). «Закон об авторском праве и специфика предмета: случай компьютерного программного обеспечения» . Ежегодный обзор американского права Нью-Йоркского университета . 61 (2). Архивировано из оригинала 25 июня 2021 года.
- ^ Apple Computer, Inc. против Franklin Computer Corporation возвращает байт под защиту авторских прав для компьютерных программ. Архивировано 7 мая 2017 года в Wayback Machine в Обзоре права Университета Золотые Ворота, том 14, выпуск 2, статья 3, Ян Л. Нуссбаум (январь). 1984)
- ^ Лемли, Менелл, Мерджес и Самуэльсон. Программное обеспечение и интернет-право , с. 34.
- ^ Бойл 2003 , с. 45.
- ^ Морин и др. 2012 , Открытый исходный код против закрытого исходного кода.
- ^ Сен и др. 2008 , с. 209.
- ^ Морин и др. 2012 г. , Лицензирование свободного и открытого программного обеспечения (FOSS).
- ^ О'Риган 2022 , с. 106.
Источники [ править ]
- Аблон, Лилиан; Богарт, Энди (2017). Нулевые дни, тысячи ночей: жизнь и времена уязвимостей нулевого дня и их использования (PDF) . Корпорация Рэнд. ISBN 978-0-8330-9761-3 .
- Кэмпбелл-Келли, Мартин; Гарсия-Шварц, Дэниел Д. (2015). От мэйнфреймов к смартфонам: история международной компьютерной индустрии . Издательство Гарвардского университета. ISBN 978-0-674-28655-9 .
- Дасвани, Нил ; Эльбаяди, Муди (2021). Большие нарушения: уроки кибербезопасности для всех . Апресс. ISBN 978-1-4842-6654-0 .
- Дули, Джон Ф. (2017). Разработка программного обеспечения, проектирование и кодирование: с шаблонами, отладкой, модульным тестированием и рефакторингом . Апресс. ISBN 978-1-4842-3153-1 .
- Фостер, Элвис К. (2014). Программная инженерия: методический подход . Апресс. ISBN 978-1-4842-0847-2 .
- Галин, Дэниел (2018). Качество программного обеспечения: концепции и практика . Джон Уайли и сыновья. ISBN 978-1-119-13449-7 .
- Хабер, Мори Дж.; Хибберт, Брэд (2018). Векторы атак на активы: построение эффективных стратегий управления уязвимостями для защиты организаций . Апресс. ISBN 978-1-4842-3627-7 .
- Качмарек, Стефан; Лиз, Брэд; Беннетт, Гэри; Фишер, Митч (2018). Objective-C для начинающих: программирование для iPhone, iPad и Mac стало проще . Апресс. ISBN 978-1-4842-3428-0 .
- Катьял, Соня К. (2019). «Парадокс секретности исходного кода» . Обзор законодательства Корнелла . 104 :1183.
- Китчин, Роб; Додж, Мартин (2011). Код/пространство: Программное обеспечение и повседневная жизнь . МТИ Пресс. ISBN 978-0-262-04248-2 .
- Лин, Дэниел; Саг, Мэтью; Лори, Рональд С. (2001). «Исходный код против объектного кода: последствия патентов для сообщества открытого исходного кода» . Журнал Санта-Клары по праву в области компьютеров и высоких технологий . 18 : 235.
- Морен, Эндрю; Урбан, Дженнифер; Слиз, Петр (2012). «Краткое руководство по лицензированию программного обеспечения для ученого-программиста» . PLOS Вычислительная биология . 8 (7): e1002598. Бибкод : 2012PLSCB...8E2598M . дои : 10.1371/journal.pcbi.1002598 . ISSN 1553-7358 . ПМК 3406002 . ПМИД 22844236 .
- О'Риган, Джерард (2022). Краткое руководство по разработке программного обеспечения: от основ к методам применения . Спрингер Природа. ISBN 978-3-031-07816-3 .
- Сен, Рави; Субраманиам, Чандрасекар; Нельсон, Мэтью Л. (2008). «Определители выбора лицензии на программное обеспечение с открытым исходным кодом». Журнал информационных систем управления . 25 (3). Информа UK Limited: 207–240. дои : 10.2753/mis0742-1222250306 . ISSN 0742-1222 .
- Себеста, Роберт В. (2012). Концепции языков программирования (10-е изд.). Аддисон-Уэсли. ISBN 978-0-13-139531-2 .
- Трейси, Ким В. (2021). Программное обеспечение: техническая история . Издательство Морган и Клейпул. ISBN 978-1-4503-8724-8 .
- Трипати, Приядарши; Наик, Кширасагар (2014). Эволюция и сопровождение программного обеспечения: подход практикующего специалиста . Джон Уайли и сыновья. ISBN 978-0-470-60341-3 .
- Варга, Эрвин (2018). Разгадка сопровождения и эволюции программного обеспечения: нестандартное мышление . Спрингер. ISBN 978-3-319-71303-8 .