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

Разработка программного обеспечения
Активность ядер
Парадигмы и модели
Методологии и рамки
Вспомогательные дисциплины
Практики
Инструменты
Стандарты и свод знаний
Глоссарии
Контуры

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

Большинство ошибок возникает из-за ошибок и ошибок, допущенных в программных дизайн или его исходный код, или в компонентах и операционные системы используется такими программами. Некоторые из них вызваны компиляторы производит неверный код. Программа, содержащая множество ошибок и / или ошибок, серьезно нарушающих ее функциональность, называется багги (неисправен). Ошибки могут вызывать ошибки, которые могут волновые эффекты. Ошибки могут иметь незаметные последствия или приводить к крушение или же заморозить компьютер. Другие ошибки квалифицируются как ошибки безопасности и может, например, включить злоумышленник обойти контроль доступа чтобы получить неавторизованные привилегии.[1]>

Некоторые программные ошибки связаны с катастрофами. Ошибки в коде, который контролировал Терак-25 радиационная терапия машина несут прямую ответственность за смерть пациентов в 1980-х годах. В 1996 г. Европейское космическое агентство 1 миллиард долларов США прототип Ариана 5 ракету пришлось уничтожить менее чем через минуту после пуска из-за ошибки в программе бортового компьютера наведения. В июне 1994 года Королевские ВВС Чинук вертолет разбился в Малл оф Кинтайр, убив 29. Первоначально это было отклонено как ошибка пилота, но расследование Computer Weekly убедил Дом лордов запрос о том, что это могло быть вызвано ошибкой программного обеспечения в самолете компьютер управления двигателем.[2]

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

История

Среднеанглийское слово ошибка является основанием для условий "медвежатник " и "пугало "как термины, используемые для обозначения монстра.[4]

Термин «ошибка» для описания дефектов был частью инженерного жаргона с 1870-х годов и предшествовал электронным компьютерам и компьютерному программному обеспечению; возможно, изначально он использовался в аппаратной инженерии для описания механических неисправностей. Например, Томас Эдисон написал следующие слова в письме своему сотруднику в 1878 году:[5]

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

Дефлекторный шар, первая механическая пинбол game, в 1931 году была объявлена ​​"не содержащей ошибок".[7] Проблемы с военным снаряжением во время Вторая Мировая Война назывались ошибками (или глюки ).[8] В фильме 1940 года Командование полета, дефект в части радиопеленгатора называется "ошибкой".[нужна цитата ] В книге, опубликованной в 1942 году, Луиза Дикинсон Рич, говоря о мощном резка льда машина, сказал: «Пиление льда было приостановлено до тех пор, пока создатель не сможет вытащить насекомых из своей любимой».[9]

Айзек Азимов использовал термин «ошибка» для обозначения проблем с роботом в своем рассказе »Поймать этого кролика ", изданная в 1944 году.

Страница из Гарвард Марк II журнал электромеханического компьютера с удаленной с устройства мертвой молью.

Термин "ошибка" был использован в аккаунте компьютерным пионером. Грейс Хоппер, который объявил причину неисправности в одном из первых электромеханических компьютеров.[10] Типичная версия этой истории:

В 1946 году, когда Хоппер была освобождена от действительной службы, она поступила на Гарвардский факультет в вычислительную лабораторию, где продолжила свою работу над Марк II и Марк III. Операторы связали ошибку Mark II с моль в ловушке реле, придумав термин ошибка. Этот баг был аккуратно удален и записан в журнал. Исходя из первой ошибки, сегодня мы называем ошибки или сбои в программе ошибка.[11]

Хоппер не нашла ошибки, как она с готовностью признала. Дата в бортовом журнале - 9 сентября 1947 года.[12][13][14] Операторы, которые его нашли, в том числе Уильям «Билл» Берк, позже Лаборатория морского вооружения, Дальгрен, Вирджиния,[15] были знакомы с техническим термином и забавно держали насекомое с пометкой «Первый реальный случай обнаружения ошибки». Хоппер любил пересказывать эту историю.[16] Этот бортовой журнал с прикрепленным к нему мотыльком является частью коллекции Смитсоновского института. Национальный музей американской истории.[13]

Связанный термин "отлаживать "также, кажется, предшествует его использованию в вычислениях: Оксфордский словарь английского языка'Этимология этого слова содержит свидетельство 1945 года в контексте авиационных двигателей.[17]

Идея о том, что программное обеспечение может содержать ошибки, восходит к Заметки Ады Лавлейс 1843 года об аналитической машине, в котором она говорит о возможности программных «карточек» для Чарльз Бэббидж с аналитическая машина ошибочен:

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

Отчет "Ошибки в системе"

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

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

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

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

Хотя использование термина «ошибка» для описания ошибок программного обеспечения является обычным явлением, многие считают, что от него следует отказаться. Один из аргументов состоит в том, что слово «ошибка» не связано с тем, что проблема была вызвана человеком, и вместо этого подразумевает, что дефект возник сам по себе, что привело к отказу от термина «ошибка» в пользу таких терминов, как «дефект» с ограниченным успехом.[20] С 1970-х гг. Гэри Килдалл несколько юмористически предложил употребить термин «грубая ошибка».[21][22]

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

Различные стадии «ошибки» во всем цикле могут быть описаны как «ошибки», «аномалии», «сбои», «сбои», «ошибки», «исключения», «сбои», «сбои», «ошибки». , «дефекты», «инциденты» или «побочные эффекты».[23]

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

Индустрия программного обеспечения приложила много усилий для сокращения количества ошибок.[24][25] К ним относятся:

Типографические ошибки

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

Методологии разработки

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

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

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

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

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

Поддержка языков программирования

Языки программирования включать функции, помогающие предотвратить ошибки, такие как статические системы типов, ограниченный пространства имен и модульное программирование. Например, когда программист пишет (псевдокод) ПОЗВОЛЯТЬ REAL_VALUE PI = "ТРИ И БИТ", хотя это может быть синтаксически правильным, код не проверка типа. Скомпилированные языки улавливают это без необходимости запускать программу. Интерпретируемые языки выявляют такие ошибки во время выполнения. Некоторые языки намеренно исключают функции, которые легко приводят к ошибкам, за счет снижения производительности: общий принцип заключается в том, что почти всегда лучше писать более простой и медленный код, чем непостижимый код, который выполняется немного быстрее, особенно с учетом того, что стоимость технического обслуживания существенно. Например, Язык программирования Java не поддерживается указатель арифметика; реализации некоторых языков, таких как Паскаль и языки сценариев часто есть время выполнения проверка границ массивов, по крайней мере, в отладочной сборке.

Анализ кода

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

Приборы

Инструменты для мониторинга производительности программного обеспечения во время его работы, либо специально для поиска таких проблем, как узкие места или чтобы гарантировать правильную работу, может быть встроен в код явно (возможно, так просто, как утверждение, говорящее ПЕЧАТЬ "Я ЗДЕСЬ") или предоставлены как инструменты. Часто бывает неожиданностью обнаружить, где большую часть времени занимает фрагмент кода, и это удаление предположений может привести к переписыванию кода.

Тестирование

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

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

Отладка

Типичная история ошибок (Путь к классам GNU данные проекта). Новая ошибка, отправленная пользователем, неподтвержденный. После того, как он был воспроизведен разработчиком, это подтвержденный ошибка. Подтвержденные ошибки позже фиксированный. Ошибки, относящиеся к другим категориям (невоспроизводимые, не будут исправлены и т. Д.), Обычно в меньшинстве.

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

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

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

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

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

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

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

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

Тест ошибок

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

  • эталонный тест Сименс
  • ManyBugs[30] это тест на 185 ошибок C в девяти программах с открытым исходным кодом.
  • Дефекты4J[31] Это тест на 341 ошибку Java из 5 проектов с открытым исходным кодом. Он содержит соответствующие патчи, которые охватывают различные типы патчей.[32]
  • Медведи[33] - это эталон сбоев при непрерывной интеграции при сборке с упором на сбои тестов. Он был создан путем мониторинга сборок из проектов с открытым исходным кодом на Трэвис Си.

Управление ошибками

Управление ошибками включает в себя процесс документирования, категоризации, назначения, воспроизведения, исправления и выпуска исправленного кода. Предлагаемые изменения в программном обеспечении - ошибки, запросы на улучшения и даже целые выпуски - обычно отслеживаются и управляются с помощью системы отслеживания ошибок или же системы отслеживания проблем.[34] Добавленные элементы могут называться дефектами, заявками, проблемами или, в соответствии с гибкое развитие парадигмы, рассказы и былины. Категории могут быть объективными, субъективными или комбинированными, например: номер версии, область программного обеспечения, серьезность и приоритет, а также тип проблемы, например, запрос функции или ошибка.

Строгость

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

Приоритет

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

Релизы программного обеспечения

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

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

  • Должен быть соблюден крайний срок, а ресурсов недостаточно для исправления всех ошибок к этому сроку.[36]
  • Ошибка уже исправлена ​​в следующем выпуске, и она не является приоритетной.
  • Изменения, необходимые для исправления ошибки, слишком дороги или затрагивают слишком много других компонентов, что требует серьезного тестирования.
  • Можно подозревать или знать, что некоторые пользователи полагаются на существующее поведение с ошибками; предлагаемое исправление может ввести нарушение изменения.
  • Проблема в том, что в следующем выпуске будет устаревшим; исправлять это не нужно.
  • Это «не ошибка». Возникло недопонимание между ожидаемым и предполагаемым поведением, когда такое недопонимание не вызвано путаницей, возникшей из-за недостатков дизайна или ошибочной документации.

Типы

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

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

Концептуальные ошибки - это неправильное понимание разработчиком того, что должно делать программное обеспечение. Полученное программное обеспечение может работать в соответствии с пониманием разработчика, но не в соответствии с тем, что действительно необходимо. Другие типы:

Арифметика

Логика

Синтаксис

  • Использование неправильного оператора, например, выполнение присваивания вместо проверка равенства. Например, в некоторых языках x = 5 установит значение x равным 5, а x == 5 будет проверять, равно ли x в настоящее время 5 или другому числу. Интерпретируемые языки допускают сбой такого кода. Скомпилированные языки могут обнаруживать такие ошибки еще до начала тестирования.

Ресурс

Многопоточность

Взаимодействие

  • Неправильное использование API.[37]
  • Неправильная реализация протокола.
  • Неправильное обращение с оборудованием.
  • Неправильные предположения о конкретной платформе.
  • Несовместимые системы. Новый API или же протокол связи может показаться, что работает, когда две системы используют разные версии, но могут возникать ошибки, когда функция или функция, реализованная в одной версии, изменяется или отсутствует в другой. В производственных системах, которые должны работать постоянно, отключение всей системы для крупного обновления может оказаться невозможным, например, в телекоммуникационной отрасли.[38] или в Интернете.[39][40][41] В этом случае меньшие сегменты большой системы обновляются индивидуально, чтобы свести к минимуму перебои в работе большой сети. Однако некоторые разделы могут быть пропущены и не обновлены, что может вызвать ошибки совместимости, которые может быть трудно найти и исправить.
  • Неправильные аннотации кода[42]

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

  • Нераспространяемые обновления; например программист изменяет myAdd, но забывает изменить mySubtract, который использует тот же алгоритм. Эти ошибки смягчаются Не повторяйся философия.
  • Комментарии устарели или неверны: многие программисты полагают, что комментарии точно описывают код.
  • Различия между документацией и продуктом.

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

Размер и тип ущерба, который может вызвать программная ошибка, естественным образом влияют на принятие решений, процессы и политику в отношении качества программного обеспечения. В таких приложениях, как пилотируемые космические путешествия или же автомобильная безопасность, поскольку недостатки программного обеспечения могут привести к травмам или даже смерти людей, такое программное обеспечение будет подвергаться гораздо более тщательной проверке и контролю качества, чем, например, веб-сайт онлайн-покупок. В таких приложениях, как банковское дело, где недостатки программного обеспечения могут нанести серьезный финансовый ущерб банку или его клиентам, контроль качества также более важен, чем, скажем, приложение для редактирования фотографий. НАСА Центр технологий Software Assurance удалось снизить количество ошибок до менее 0,1 на 1000 строк кода (SLOC )[нужна цитата ] но считалось, что это неосуществимо для проектов в деловом мире.

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

Известные ошибки

Ряд программных ошибок стал широко известным, как правило, из-за их серьезности: примеры включают крушения различных космических и военных самолетов. Возможно, самая известная ошибка - это Проблема 2000 года, также известная как ошибка 2000 года, при которой опасались, что мировой экономический коллапс случится в начале 2000 года из-за того, что компьютеры будут думать, что это был 1900 год (в конце концов, серьезных проблем не возникло). Срыв биржевой торговли в 2012 году включал одну такую ​​несовместимость между старым API и новым API.

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

  • В романе 1968 года 2001: Космическая одиссея и соответствующий фильм 1968 года 2001: Космическая одиссея, бортовой компьютер космического корабля, HAL 9000, пытается убить всех членов экипажа. В следующем романе 1982 года 2010: Одиссея вторая, и сопровождающий фильм 1984 года, 2010 выясняется, что это действие было вызвано тем, что компьютер был запрограммирован с двумя конфликтующими целями: полностью раскрыть всю свою информацию и сохранить истинную цель полета в секрете от экипажа; этот конфликт привел к тому, что HAL стал параноиком и в конечном итоге стал смертоносным.
  • В американской комедии 1999 года Офисное помещение, трое сотрудников пытаются воспользоваться озабоченностью своей компании исправлением компьютерной ошибки, связанной с проблемой 2000 года, путем заражения компьютерной системы компании вирусом, который отправляет округленные пенни на отдельный банковский счет. Этот план имеет неприятные последствия, поскольку у самого вируса есть собственная ошибка, которая преждевременно отправляет большие суммы денег на счет.
  • Роман 2004 года Ошибка, к Эллен Ульман - это попытка программиста найти неуловимую ошибку в приложении базы данных.[45]
  • Канадский фильм 2008 года Control Alt Удалить рассказывает о программисте, который в конце 1999 года пытался исправить ошибки в своей компании, связанные с проблемой 2000 года.

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

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

  1. ^ Миттал, Варун; Адитья, Шивам (1 января 2015 г.). «Последние разработки в области исправления ошибок». Процедуры информатики. Международная конференция по компьютерам, коммуникациям и конвергенции (ICCC 2015). 48: 288–297. Дои:10.1016 / j.procs.2015.04.184. ISSN  1877-0509.
  2. ^ Проф. Саймон Роджерсон. "Катастрофа с вертолетом" Чинук ". Ccsr.cse.dmu.ac.uk. Архивировано из оригинал 17 июля 2012 г.. Получено 24 сентября, 2012.
  3. ^ «Программные ошибки дорого обходятся экономике США». 10 июня 2009 г. Архивировано 10 июня 2009 г.. Получено 24 сентября, 2012.CS1 maint: неподходящий URL (связь)
  4. ^ Сотрудники Computerworld (3 сентября 2011 г.). "Мотылек в машине: Устранение причины" ошибки'". Computerworld. В архиве с оригинала от 25 августа 2015 года.
  5. ^ Ошибка "Знаете ли вы? Эдисон придумал термин""". 1 августа 2013 г.. Получено 19 июля, 2019.
  6. ^ Эдисон - Пушкаш, 13 ноября 1878 г., документы Эдисона, Национальная лаборатория Эдисона, Служба национальных парков США, Вест-Ориндж, штат Нью-Джерси, цитируется в Хьюз, Томас Парк (1989). Американский генезис: век изобретений и технологического энтузиазма, 1870-1970 гг.. Книги пингвинов. п. 75. ISBN  978-0-14-009741-2.
  7. ^ "Перегородка". База данных Интернет-пинбол. (См. Изображение рекламы в справочной записи)
  8. ^ «Современные авианосцы - результат 20 лет умных экспериментов». Жизнь. 29 июня 1942 г. с. 25. В архиве из оригинала от 4 июня 2013 г.. Получено 17 ноября, 2011.
  9. ^ Дикинсон Рич, Луиза (1942), Мы отправились в лес, JB Lippincott Co, стр. 93, LCCN  42024308, OCLC  405243, в архиве с оригинала от 16 марта 2017 г.
  10. ^ Тест FCAT NRT, Харкорт, 18 марта 2008 г.
  11. ^ Дэнис, Шаррон Энн: контр-адмирал Грейс Мюррей Хоппер"". ei.cs.vt.edu. 16 февраля 1997 г.. Получено 31 января, 2010.
  12. ^ "Ошибка В архиве 23 марта 2017 г. Wayback Machine ", Файл жаргона, вер. 4.4.7. Проверено 3 июня 2010 года.
  13. ^ а б "Журнал с ошибкой компьютера В архиве 23 марта 2017 г. Wayback Machine ", Национальный музей американской истории, Смитсоновский институт.
  14. ^ "Первая "компьютерная ошибка" ", Военно-исторический центр. Но обратите внимание на Гарвард Марк II компьютер не был готов до лета 1947 года.
  15. ^ IEEE Annals of the History of Computing, Vol 22 Issue 1, 2000
  16. ^ Джеймс С. Хаггинс. «Первая компьютерная ошибка». Jamesshuggins.com. Архивировано из оригинал 16 августа 2000 г.. Получено 24 сентября, 2012.
  17. ^ Журнал Королевского авиационного общества. 49, 183/2, 1945 «Он проходил ... через этап типовых и летных испытаний и« отладку »...»
  18. ^ Уилсон, Энди; Шульман, Росс; Банкстон, Кевин; Герр, Трей. «Ошибки в системе» (PDF). Институт открытой политики. В архиве (PDF) из оригинала 21 сентября 2016 г.. Получено 22 августа, 2016.
  19. ^ а б c d Розенс, Трейси (12 августа 2016 г.). «Киберреформы необходимы для улучшения обнаружения и раскрытия ошибок программного обеспечения: отчет New America - Homeland Preparedness News». Получено 23 августа, 2016.
  20. ^ "Новости в архиве SEI 1999". cmu.edu. В архиве из оригинала 26 мая 2013 г.
  21. ^ Шустек, Лен (2 августа 2016 г.). «Его собственными словами: Гэри Килдалл». Замечательные люди. Музей истории компьютеров. В архиве с оригинала 17 декабря 2016 г.
  22. ^ Килдалл, Гэри Арлен (2 августа 2016 г.) [1993]. Килдалл, Скотт; Килдалл, Кристин (ред.). «Компьютерные связи: люди, места и события в развитии индустрии персональных компьютеров» (Рукопись, часть 1). Семья Килдалл: 14–15. В архиве из оригинала 17 ноября 2016 г.. Получено 17 ноября, 2016. Цитировать журнал требует | журнал = (помощь)
  23. ^ а б «Опыт тестирования: te: журнал для профессиональных тестировщиков». Опыт тестирования. Германия: тестирование, опыт: 42. Март 2012 г. ISSN  1866-5705. (требуется подписка)
  24. ^ Хейзинга, Дорота; Колава, Адам (2007). Автоматизированное предотвращение дефектов: передовой опыт управления программным обеспечением. Пресса компьютерного общества Wiley-IEEE. п. 426. ISBN  978-0-470-04212-0. В архиве с оригинала 25 апреля 2012 г.
  25. ^ Макдональд, Марк; Муссон, Роберт; Смит, Росс (2007). Практическое руководство по предотвращению дефектов. Microsoft Press. п.480. ISBN  978-0-7356-2253-1.
  26. ^ «Выпускать раньше, выпускать часто» В архиве 14 мая 2011 г. Wayback Machine, Эрик С. Раймонд, Собор и базар
  27. ^ «Широко открытый исходный код» В архиве 29 сентября 2007 г. Wayback Machine, Элиас Леви, Безопасность, 17 апреля 2000 г.
  28. ^ Цитаты Мориса Уилкса
  29. ^ «История PolySpace Technologies». christele.faure.pagesperso-orange.fr. Получено 1 августа, 2019.
  30. ^ Ле Гуэ, Клэр; Holtschulte, Нил; Смит, Эдвард К .; Брун, Юрий; Деванбу, Премкумар; Форрест, Стефани; Веймер, Уэстли (2015). «Тесты ManyBugs и IntroClass для автоматического восстановления программ на языке C». IEEE Transactions по разработке программного обеспечения. 41 (12): 1236–1256. Дои:10.1109 / TSE.2015.2454513. ISSN  0098-5589.
  31. ^ Просто, Рене; Джалали, Дариуш; Эрнст, Майкл Д. (2014). «Defects4J: база данных существующих неисправностей, позволяющая проводить контролируемое тестирование программ Java». Материалы Международного симпозиума 2014 года по тестированию и анализу программного обеспечения - ISSTA 2014. С. 437–440. CiteSeerX  10.1.1.646.3086. Дои:10.1145/2610384.2628055. ISBN  9781450326452. S2CID  12796895.
  32. ^ Собрейра, Виктор; Дюрье, Томас; Мадейраль, Фернанда; Монперрус, Мартин; де Алмейда Майя, Марсело (2018). «Анализ набора данных об ошибках: анатомия 395 патчей от Defects4J». 25-я Международная конференция по анализу, эволюции и реинжинирингу программного обеспечения, IEEE, 2018 (SANER). С. 130–140. arXiv:1801.06393. Дои:10.1109 / SANER.2018.8330203. ISBN  978-1-5386-4969-5. S2CID  4607810.
  33. ^ Мадейраль, Фернанда; Урли, Саймон; Майя, Марсело; Монперрус, Мартин; Майя, Марсело А. (2019). «BEARS: расширяемый тест на ошибки Java для исследований автоматического исправления программ». 26-я Международная конференция по анализу, эволюции и реинжинирингу программного обеспечения, IEEE, 2019 г. (SANER). С. 468–478. arXiv:1901.06024. Дои:10.1109 / SANER.2019.8667991. ISBN  978-1-7281-0591-8. S2CID  58028949.
  34. ^ Аллен, Митч (май – июнь 2002 г.). «Основы отслеживания ошибок: руководство для начинающих по сообщению и отслеживанию дефектов». Журнал тестирования программного обеспечения и качества. Vol. 4 шт. 3. С. 20–24.. Получено 19 декабря, 2017.
  35. ^ «5.3. Анатомия ошибки». bugzilla.org. В архиве из оригинала от 23 мая 2013 г.
  36. ^ «Лексикон следующего поколения 1996 года от А до Я: выпуск Slipstream». Следующее поколение. № 15. Imagine Media. Март 1996. с. 41.
  37. ^ Монперрус, Мартин; Брух, Марсель; Мезини, Мира (2010). «Обнаружение отсутствующих вызовов методов в объектно-ориентированном программном обеспечении». ECOOP 2010 - Объектно-ориентированное программирование (PDF). Конспект лекций по информатике. 6183. С. 2–25. Дои:10.1007/978-3-642-14107-2_2. ISBN  978-3-642-14106-5. S2CID  16724498.
  38. ^ Кимблер, К. (1998). Взаимодействие функций в телекоммуникационных и программных системах V. IOS Press. п. 8. ISBN  978-90-5199-431-5.
  39. ^ Сайед, Махбубур Рахман (1 июля 2001 г.). Мультимедийные сети: технологии, управление и приложения: технологии, управление и приложения. Idea Group Inc (IGI). п. 398. ISBN  978-1-59140-005-9.
  40. ^ Ву, Чван-Хва (Джон); Ирвин, Дж. Дэвид (19 апреля 2016 г.). Введение в компьютерные сети и кибербезопасность. CRC Press. п. 500. ISBN  978-1-4665-7214-0.
  41. ^ RFC 1263: "Расширения TCP считаются вредными" цитата: "время для распространения новой версии протокола на все хосты может быть довольно долгим (фактически навсегда). ... Если есть малейшая несовместимость между старой и новой версиями, может возникнуть хаос результат."
  42. ^ Юй Чжунсин; Бай, Ченган; Сейнтюрье, Лайонел; Монперрус, Мартин (2019). «Описание использования, развития и влияния аннотаций Java на практике». IEEE Transactions по разработке программного обеспечения: 1. arXiv:1805.01965. Дои:10.1109 / TSE.2019.2910516. S2CID  102351817.
  43. ^ Lientz, B.P .; Swanson, E.B .; Томпкинс, Г. Э. (1978). «Характеристики сопровождения прикладного программного обеспечения». CACM. 21 (6): 466–471. Дои:10.1145/359511.359522. S2CID  14950091.
  44. ^ Амит, Идан; Фейтельсон, Дрор Г. (2020). «Метрика качества корректирующего кода вероятности». arXiv:2007.10912 [cs.SE ].
  45. ^ Ульман, Эллен (2004). Ошибка. Пикадор. ISBN  978-1-250-00249-5.

внешняя ссылка