stringtranslate.com

Программная ошибка

Программная ошибка — это ошибка в компьютерном программном обеспечении .

Компьютерную программу с множеством или серьезных ошибок можно назвать ошибочной .

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

Ошибки программного обеспечения были связаны с катастрофами. Программные ошибки в аппарате лучевой терапии Therac-25 были прямой причиной смертности пациентов в 1980-х годах. В 1996 году прототип ракеты Ariane 5 Европейского космического агентства стоимостью 1 миллиард долларов США был уничтожен менее чем через минуту после запуска из-за ошибки в бортовой компьютерной программе наведения. [1] В 1994 году разбился вертолет ВВС Великобритании «Чинук» , в результате чего погибло 29 человек; Первоначально в этом обвиняли ошибку пилота, но позже было решено, что это произошло из-за ошибки программного обеспечения в компьютере управления двигателем . [2] Программное обеспечение с ошибками стало причиной скандала в Британском почтовом отделении в начале XXI века . [3]

В 2002 году исследование, проведенное по заказу Национального института стандартов и технологий Министерства торговли США, пришло к выводу, что «ошибки или ошибки в программном обеспечении настолько распространены и настолько вредны, что они обходятся экономике США примерно в 59 миллиардов долларов в год, или около 0,6 миллиарда долларов США». процентов валового внутреннего продукта». [4]

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

История

Терминология

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

Различные стадии ошибки в цикле разработки можно охарактеризовать как ошибку: [6] : 31  аномалия, [6] : 10  ошибок, [6] : 31  ошибка, [6] : 31  ошибка, [6] : 31  исключение, [6] : 31  сбой, [6] : 22  сбоя, ошибка, [6] : 14  дефект, инцидент, [6] : 39  или побочный эффект.

Споры

Иногда использование ошибки для описания поведения программного обеспечения является спорным из-за восприятия. Некоторые предлагают отказаться от этого термина; заменен с дефектом или ошибкой .

Некоторые утверждают, что ошибка подразумевает, что дефект возник сам по себе, и настаивают на использовании дефекта вместо этого, поскольку он более четко указывает на то, что дефект возник по вине человека. [7]

Некоторые утверждают, что ошибка может быть использована для сокрытия преднамеренного дизайнерского решения. В 2011 году, после проверки со стороны сенатора США Эла Франкена за запись и хранение местонахождения пользователей в незашифрованных файлах, [8] Apple назвала такое поведение ошибкой. Однако Джастин Брукман из Центра демократии и технологий прямо оспорил это представление, заявив: «Я рад, что они исправляют то, что они называют ошибками, но я возражаю против их решительного отрицания того, что они отслеживают пользователей». [9]

Профилактика

Ошибка, возникшая из-за ошибки программного обеспечения, отображается на двух экранах на станции Ла-Круа-де-Берни во Франции.

Предотвращение ошибок как можно раньше в процессе разработки программного обеспечения является целью инвестиций и инноваций. [10] [11]

Языковая поддержка

Новые языки программирования, как правило, разрабатываются так, чтобы предотвращать распространенные ошибки, возникающие из-за уязвимостей существующих языков. Уроки, извлеченные из старых языков, таких как BASIC и C, используются при разработке более поздних языков, таких как C# и Rust .

Языки могут включать такие функции, как система статических типов , ограниченные пространства имен и модульное программирование . Например, для типизированного компилируемого языка (например, C ):

число с плавающей запятой = "3";

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

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

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

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

Техники

Такие методы программирования, как стиль программирования и защитное программирование, предназначены для предотвращения опечаток.

Например, ошибка может быть вызвана относительно незначительной типографской ошибкой (опечаткой) в коде. Например, этот код выполняет функцию fooтолько в том случае, если conditionоно истинно.

если (условие) foo();

Но этот код всегда выполняется foo:

если (условие); Фу();

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

если (условие) { Фу();}

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

Спецификация

Некоторые утверждают, что написание спецификации программы , описывающей поведение программы, может предотвратить ошибки.

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

Тестирование программного обеспечения

Одной из целей тестирования программного обеспечения является поиск ошибок.

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

Гибкие практики

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

При разработке через тестирование (TDD) модульные тесты пишутся во время написания производственного кода, и рабочий код не считается завершенным, пока все тесты не завершатся успешно.

Статический анализ

Инструменты статического анализа кода помогают разработчикам, проверяя текст программы за пределами возможностей компилятора, чтобы выявить потенциальные проблемы. Хотя в целом проблема обнаружения всех ошибок программирования с учетом спецификации неразрешима (см. « Проблему остановки» ), эти инструменты используют тот факт, что программисты-люди склонны часто совершать определенные виды простых ошибок при написании программного обеспечения.

Инструментарий

Инструменты для мониторинга производительности программного обеспечения во время его работы, либо специально для обнаружения проблем, таких как узкие места , либо для обеспечения уверенности в правильной работе, могут быть встроены в код явно (возможно, так же просто, как оператор, говорящий PRINT "I AM HERE"), или предоставляться как инструменты. Часто оказывается неожиданностью обнаружить, какой фрагмент кода занимает большую часть времени, и такое исключение предположений может привести к переписыванию кода.

Открытый источник

Разработка с открытым исходным кодом позволяет любому изучить исходный код. Школа мысли, популяризированная Эриком С. Рэймондом как закон Линуса, гласит, что популярное программное обеспечение с открытым исходным кодом имеет больше шансов иметь мало ошибок или вообще не содержать их, чем другое программное обеспечение, потому что «при достаточном количестве глаз все ошибки неглубоки». [12] Однако это утверждение оспаривается: специалист по компьютерной безопасности Элиас Леви писал, что «легко скрыть уязвимости в сложном, малопонятном и недокументированном исходном коде», потому что «даже если люди просматривают код, это не Это не значит, что они имеют на это право». [13] Примером ошибки в программном обеспечении с открытым исходным кодом была уязвимость OpenSSL 2008 года в Debian .

Отладка

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

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

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

Некоторые утверждают, что обнаружение ошибки — это своего рода искусство.

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

Иногда самая сложная часть отладки — это поиск причины ошибки. После обнаружения исправить проблему иногда легко, если не тривиально.

Иногда ошибка не является изолированным недостатком, а представляет собой ошибку мышления или планирования со стороны программистов. Часто такая логическая ошибка требует переделки или переписывания раздела программы.

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

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

Некоторые ошибки обнаруживаются при вводе данных, которые программисту может быть сложно воссоздать. Одной из причин гибели радиационной машины Therac-25 была ошибка (в частности, состояние гонки ), которая возникала только тогда, когда оператор машины очень быстро вводил план лечения; чтобы научиться это делать, потребовались несколько дней практики, поэтому ошибка не проявилась ни при тестировании, ни когда производитель пытался ее воспроизвести. Другие ошибки могут перестать возникать всякий раз, когда установка дополняется для поиска ошибки, например, при запуске программы с помощью отладчика; их называют ошибками Гейзенберга (в шутку названными в честь принципа неопределенности Гейзенберга ).

С 1990-х годов, особенно после катастрофы рейса 501 Ariane 5 , возрос интерес к автоматизированным средствам отладки, таким как статический анализ кода посредством абстрактной интерпретации . [15]

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

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

Управление

Пример истории ошибок ( данные проекта GNU Classpath ). Новая ошибка изначально не подтверждена. Как только воспроизводимость подтверждена, она меняется на подтвержденную . Как только проблема будет решена, она изменится на исправленную .

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

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

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

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

Строгость

Серьезность — это мера воздействия ошибки. [19] Это воздействие может выражаться в потере данных, финансовых потерях, потере репутации и напрасной трате усилий. Уровни серьезности не стандартизированы, но различаются в зависимости от контекста, например, от отрасли и инструмента отслеживания. Например, сбой в видеоигре имеет иные последствия, чем сбой на банковском сервере. Уровнями серьезности могут быть сбой или зависание , отсутствие обходного решения (пользователь не может выполнить задачу), наличие обходного решения (пользователь все еще может выполнить задачу), визуальный дефект (например, орфографическая ошибка) или ошибка документации . Другой пример набора степеней серьезности: критический , высокий , низкий , блокирующий , тривиальный . [20] Серьезность ошибки может быть отдельной категорией по сравнению с приоритетом ее исправления, или же эти две категории могут определяться количественно и управляться отдельно.

Ошибка, достаточно серьезная, чтобы задержать выпуск продукта, называется пробкой показа . [21] [22]

Приоритет

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

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

Пластырь

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

Релиз обслуживания

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

Известная проблема

Обычной практикой является выпуск программного обеспечения с известными ошибками низкого приоритета или другими проблемами. Возможные причины включают, помимо прочего:

Подразумеваемое

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

Помимо ущерба, причиненного ошибками, часть их стоимости связана с усилиями, затраченными на их исправление. В 1978 году Лиенц и др. показало, что в среднем 17 процентов усилий по разработке вкладывают в исправление ошибок. [25] В 2020 году исследование репозиториев GitHub показало, что медиана составляет 20%. [26]

Расходы

В 1994 году Центру космических полетов имени Годдарда НАСА удалось снизить среднее количество ошибок с 4,5 на 1000 строк кода ( SLOC ) до 1 на 1000 SLOC. [27]

Другое исследование, проведенное в 1990 году, показало, что исключительно хорошие процессы разработки программного обеспечения могут обеспечить уровень неудач при развертывании всего 0,1 на 1000 SLOC. [28] Эта цифра повторяется в такой литературе, как « Code Complete » Стива МакКоннелла [29] и в исследовании НАСА «Сложность программного обеспечения для полетов» . [30] Некоторые проекты даже достигли нулевого уровня дефектов: прошивка пишущей машинки IBM Wheelwriter , состоящая из 63 000 SLOC, и программное обеспечение Space Shuttle с 500 000 SLOC. [28]

Контрольный показатель

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

Типы

Некоторые известные типы ошибок:

Ошибка проектирования

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

Арифметика

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

Поток управления

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

Интерфейс

Параллелизм

Ресурсы

Синтаксис

Командная работа

В политике

Отчет «Ошибки в системе»

Институт открытых технологий, которым управляет группа New America , [38] в августе 2016 года опубликовал отчет «Ошибки в системе», в котором говорится, что политикам США следует провести реформы, чтобы помочь исследователям выявлять и устранять ошибки программного обеспечения. В отчете «подчеркивается необходимость реформы в области обнаружения и раскрытия уязвимостей программного обеспечения». [39] Один из авторов отчета заявил, что Конгресс не сделал достаточно для решения проблемы уязвимости киберпрограммного обеспечения, хотя Конгресс принял ряд законопроектов для борьбы с более широкой проблемой кибербезопасности. [39]

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

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

В популярной культуре

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

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

  1. ^ "Отчет о сбое рейса 501 ARIANE 5, подготовленный следственной комиссией" . Европейское космическое агентство . Отчет комиссии по расследованию Ariane 501 (33–1996). 23 июля 1996 г.
  2. ^ Саймон Роджерсон (апрель 2002 г.). «Катастрофа вертолета «Чинук»» (PDF) . Журнал ИМИС . 12 (2). Архивировано из оригинала 15 сентября 1993 года . Проверено 27 мая 2024 г.
  3. ^ «Скандал в почтовом отделении разрушил жизни, сообщает расследование» . Новости BBC . 14 февраля 2022 г.
  4. ^ «Ошибки в программном обеспечении дорого обходятся экономике США» . 10 июня 2009 года. Архивировано из оригинала 10 июня 2009 года . Проверено 24 сентября 2012 г.
  5. ^ «Опыт тестирования: т.е. журнал для профессиональных тестировщиков». Опыт тестирования . Германия: опыт тестирования: 42. Март 2012 г. ISSN  1866-5705. (требуется подписка)
  6. ^ abcdefghi 610.12-1990: Стандартный глоссарий терминологии разработки программного обеспечения IEEE . ИИЭЭ . 31 декабря 1990 г. doi :10.1109/IEESTD.1990.101064. ISBN 978-0-7381-0391-4.
  7. ^ "Новости SEI, сентябрь 1999 г." СЭИ Интерактив . 2 (3). Университет Карнеги-Меллона : Институт программной инженерии . 1 сентября 1999 года.
  8. Грегг Кейзер (21 апреля 2011 г.). «Компания Apple сталкивается с вопросами Конгресса по поводу отслеживания iPhone». Компьютерный мир .
  9. Грегг Кейзер (27 апреля 2011 г.). «Apple отрицает отслеживание пользователей iPhone, но обещает перемены». Компьютерный мир .
  10. ^ Дорота Хейзинга; Адам Колава (сентябрь 2007 г.). Автоматизированное предотвращение дефектов: лучшие практики управления программным обеспечением. Издательство компьютерного общества Wiley-IEEE. ISBN 978-0-470-04212-0.
  11. ^ Макдональд, Марк; Муссон, Роберт; Смит, Росс (2007). Практическое руководство по предотвращению дефектов . Майкрософт Пресс. п. 480. ИСБН 978-0-7356-2253-1.
  12. ^ «Выпускайте раньше, выпускайте часто». Архивировано 14 мая 2011 года в Wayback Machine , Эрик С. Рэймонд , Собор и базар.
  13. ^ «Широкий открытый исходный код». Архивировано 29 сентября 2007 г., в Wayback Machine , Элиас Леви , SecurityFocus , 17 апреля 2000 г.
  14. ^ "Цитаты Мориса Уилкса" . ЦитатаFancy . Проверено 28 апреля 2024 г.
  15. ^ «История PolySpace Technologies» . christele.faure.pagesperso-orange.fr . Проверено 1 августа 2019 г.
  16. ^ Аллен, Митч (май – июнь 2002 г.). «Основы отслеживания ошибок: руководство для начинающих по сообщению и отслеживанию дефектов». Журнал «Тестирование программного обеспечения и инженерия качества» . Том. 4, нет. 3. С. 20–24 . Проверено 19 декабря 2017 г.
  17. ^ Рекс Блэк (2002). Управление процессом тестирования (2-е изд.). Wiley India Pvt. Ограниченное. п. 139. ИСБН 978-8126503131. Проверено 19 июня 2021 г.
  18. ^ Крис Вандер Мей (2012). Величие доставки — практические уроки по созданию и запуску выдающегося программного обеспечения, полученные на работе в Google и Amazon. О'Рейли Медиа . стр. 79–81. ISBN 978-1449336608.
  19. ^ Сулеймани Нейсиани, Бехзад; Бабамир, Сейед Мортеза; Арицуги, Масаеши (1 октября 2020 г.). «Эффективная модель извлечения функций для повышения производительности проверки при обнаружении повторяющихся отчетов об ошибках в системах сортировки ошибок программного обеспечения». Информационные и программные технологии . 126 : 106344. doi : 10.1016/j.infsof.2020.106344. S2CID  219733047.
  20. ^ «5.3. Анатомия ошибки». bugzilla.org . Архивировано из оригинала 23 мая 2013 года.
  21. ^ Джонс, Уилбур Д. младший, изд. (1989). «Показать пробку». Глоссарий: аббревиатуры и термины оборонных закупок (4-е изд.). Форт-Бельвуар, Вирджиния: Министерство обороны, Колледж управления оборонными системами . п. 123. hdl :2027/mdp.39015061290758 – через Hathitrust.
  22. ^ Закари, Г. Паскаль (1994). Шоу-стоппер!: головокружительная гонка за создание Windows NT и следующего поколения в Microsoft . Нью-Йорк: Свободная пресса . п. 158. ИСБН 0029356717– через archive.org.
  23. ^ "Лексикон следующего поколения 1996 года от А до Я: выпуск Slipstream" . Следующее поколение . № 15. Март 1996. с. 41.
  24. ^ Карр, Николас (2018). «Это не ошибка, это особенность». Банально – или в самый раз?». проводной.com .
  25. ^ Лиенц, БП; Суонсон, Э.Б.; Томпкинс, GE (1978). «Особенности сопровождения прикладного программного обеспечения». Коммуникации АКМ . 21 (6): 466–471. дои : 10.1145/359511.359522 . S2CID  14950091.
  26. ^ Амит, Идан; Фейтельсон, Дрор Г. (2020). «Метрика качества кода вероятности корректирующего фиксации». arXiv : 2007.10912 [cs.SE].
  27. ^ «Обзор лаборатории программной инженерии» (PDF) . Серия лабораторий программной инженерии (SEL-94-005). Декабрь 1994 года.
  28. ^ Аб Кобб, Ричард Х.; Миллс, Харлан Д. (1990). «Инженерное программное обеспечение под статистическим контролем качества». Программное обеспечение IEEE . 7 (6): 46. дои : 10.1109/52.60601. ISSN  1937-4194. S2CID  538311 - через Университет Теннесси - Коллекция Харлана Д. Миллса.
  29. ^ МакКоннелл, Стивен С. (1993). Код завершен . Редмонд, Вашингтон: Microsoft Press. п. 611. ИСБН 978-1556154843– через archive.org. (Кобб и Миллс, 1990)
  30. Джерард Хольцманн (5 марта 2009 г.). «Приложение D – Сложность программного обеспечения» (PDF) . Заключительный отчет: Исследование НАСА сложности программного обеспечения для полетов (Дэниел Л. Дворжак (ред.)) . Программа технического совершенства Управления главного инженера НАСА.
  31. ^ Ле Гу, Клэр; Холтшульте, Нил; Смит, Эдвард К.; Брун, Юрий; Деванбу, Премкумар; Форрест, Стефани; Веймер, Уэстли (2015). «Бенчмарки ManyBugs и IntroClass для автоматического восстановления программ на языке C». Транзакции IEEE по разработке программного обеспечения . 41 (12): 1236–1256. дои : 10.1109/TSE.2015.2454513 . ISSN  0098-5589.
  32. ^ Просто, Рене; Джалали, Дариуш; Эрнст, Майкл Д. (2014). «Defects4J: база данных существующих неисправностей, позволяющая проводить контролируемые испытания программ Java». Материалы Международного симпозиума по тестированию и анализу программного обеспечения 2014 г. — ISSTA 2014 . стр. 437–440. CiteSeerX 10.1.1.646.3086 . дои : 10.1145/2610384.2628055. ISBN  9781450326452. S2CID  12796895.
  33. ^ Энтони Ди Франко; Хуэй Го; Синди Рубио-Гонсалес (23 ноября 2017 г.). Всестороннее исследование реальных численных характеристик ошибок . 2017 32-я Международная конференция IEEE / ACM по автоматизированной разработке программного обеспечения (ASE). ИИЭЭ . дои : 10.1109/ASE.2017.8115662.
  34. ^ Кимблер, К. (1998). Взаимодействие функций в телекоммуникационных и программных системах V. IOS Press. п. 8. ISBN 978-90-5199-431-5.
  35. ^ Сайед, Махбубур Рахман (2001). Мультимедийные сети: технологии, управление и приложения: технологии, управление и приложения. Идея Групп Инк (IGI). п. 398. ИСБН 978-1-59140-005-9.
  36. ^ Ву, Чван-Хва (Джон); Ирвин, Дж. Дэвид (2016). Введение в компьютерные сети и кибербезопасность. ЦРК Пресс. п. 500. ИСБН 978-1-4665-7214-0.
  37. ^ RFC 1263: «Расширения TCP считаются вредными», цитата: «Время распространения новой версии протокола на все хосты может быть довольно долгим (фактически навсегда). ... Если между старой и новой версиями есть малейшая несовместимость , может возникнуть хаос».
  38. ^ Уилсон, Энди; Шульман, Росс; Бэнкстон, Кевин; Герр, Трей. «Ошибки в системе» (PDF) . Институт открытой политики . Архивировано (PDF) из оригинала 21 сентября 2016 г. Проверено 22 августа 2016 г.
  39. ^ abcd Розенс, Трейси (12 августа 2016 г.). «Киберреформы необходимы для улучшения обнаружения и раскрытия ошибок в программном обеспечении: отчет Новой Америки – Новости национальной готовности» . Проверено 23 августа 2016 г.
  40. ^ Ульман, Эллен (2004). Баг . Пикадор . ISBN 978-1-250-00249-5.

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