Как мы научили машины считать и думать за нас? Модуль 20: Важность недостатков программы

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

Как мы научили машины считать и думать за нас? /> </p><p class = 22 июля 1962 года НАСА запустило ракету для вывода зонда «Маринер-1» на орбиту Венеры

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

Откуда взялась ошибка?

С самого начала развития информатики ошибки в программах были серьезной проблемой. Было необходимо написать много программ для самых разных целей, но люди ошибались, поэтому программные ошибки были обычным явлением. Теперь, зная это, мы используем языки программирования таким образом, чтобы вероятность совершить ошибку была как можно ниже. Но в начале, когда программирование на машинных языках (см. «Начала программирования», «Речь о истории» от 17 декабря 2021 г.) и с первыми ошибками в программах стали бороться, их тоже стали называть ошибками . Известно, что это имя в язык информатики ввела Грейс Хоппер. Я писал об этой необыкновенной женщине в той же части (№ 14) этой серии колонок, и более того — я упоминал ее много раз позже в следующих частях серии, потому что многие фундаментальные элементы современной информатики являются результатом своих авангардных концепций и новаторских достижений. Именно она внесла в компьютерную программу баг, в англоязычной литературе называемый bug, который в польском обычно заменяют словом bedbug.

Это название объясняли по-разному. Зная, среди прочего, что создательница этого имени Грейс Хоппер была адмиралом ВМС США, фантазировали, будто досадные ошибки адмирала в программах связывали адмирала с клопами, которые иногда появлялись на кораблях ВМС США и наносили свой ущерб. Затем корабли подвергают операции по отладке — так назывались мероприятия, направленные на обнаружение и устранение ошибок в компьютерной программе.

Оказывается, верно и другое объяснение происхождения названия «жук» (вообще насекомое, не обязательно клоп). Ну, пока Грейс работала с компьютером Mark II, в какой-то момент он начал вести себя странно. Он ошибался в расчетах и ​​не подчинялся приказам. Это было ровно 9 сентября 1947 года в г. 15.25. Начались поиски причины и в 15.45 было установлено: моль забралась внутрь машины и заблокировала работу реле №70 в панели F! Происшествие описали в журнале работы компьютера, дополнительно прилепив «виновника» (мотылька) на соответствующую страницу — что видно на картинке в интернете. Мотылька убрали, а саму деятельность Грейс назвала «отладкой». Я знаю эту историю и вот она ради нее, хотя как программист с 30-летним стажем яростной отладки программ (своих и моих учеников), я больше склонен ассоциировать слово баг с сильно кусающимися багами, а не с невинная и милая бабочка!

Дорого пропущена одна полоска

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

Когда дело доходит до программирования компьютеров, больше всего шокирует несоответствие между причиной (незначительная ошибка в программе) и масштабом следствий. Когда я обучал студентов программированию на FORTRAN, я рассказывал им о самой дорогой линии в мировой истории. 22 июля 1962 года с мыса Канаверал во Флориде была запущена огромная ракета, которая доставила зонд «Маринер-1» на орбиту планеты Венера. В ракете было огромное количество топлива, потому что она должна была лететь очень далеко. Но сразу после взлета ракета начала вести себя некорректно, и все указывало на то, что она обрушится сверху чудовищной огненной волной на обитаемый берег Флориды недалеко от Орландо. Перепуганные авиадиспетчеры на 293-й секунде приказали ракете самоликвидироваться. В гигантском взрыве погиб зонд «Маринер» и более миллиарда долларов, вложенных в строительство ракеты!

Причиной стала ошибка в программе управления полетом ракеты, написанной на Фортране. В этой программе было несколько сотен тысяч строк кода, но в одной из них было забыто одно маленькое тире. Я показывал эту злосчастную строку кода студентам и объяснял, как должен был реагировать компьютер, если бы строка была введена, как он реагировал бы, если бы ее не было. Не вдаваясь в подробности, можно сказать, что компьютер управлял ракетой «нервно», поскольку каждое, даже малейшее отклонение скорости от зафиксированных в программе значений вызывало внезапные реакции систем управления, дестабилизировавшие ракету. В этих условиях катастрофа была неизбежна.

«Клоп»

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

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

К сожалению, разработчики первых компьютерных систем были вынуждены экономить память. Поэтому кому-то пришла в голову мысль, что вместо того, чтобы во всех датах писать полное число года, например 1975 или 1988, можно писать только 75 или 88 — потому что это «19» будет автоматически добавляться при отображении или печати соответствующих документов . И так это работало несколько десятков лет! Но наступил момент, когда 1999 год вот-вот должен был смениться 2000 годом, и тогда было понятно, что все документы, созданные в этом году, будут иметь дату по умолчанию 1900 год, в результате чего то, что последует, будет рассматриваться всеми компьютерами как более раннее событие. системы. Путаница должна была быть жестокой, в компьютерные системы быстро вносились поправки, и самым большим страхом была неуверенность в том, можно ли эти поправки сделать действительно везде, ведь даже одна неисправленная ИТ-система могла внести путаницу с непредсказуемыми последствиями.

Возможно, некоторые читатели в этот момент пожали плечами: «В чем беда отчета с неверной датой?» Но когда вы понимаете, что компьютерные системы используются в различных системах управления, таких как управление воздушным движением, перспектива столкновения самолетов действительно выглядит не очень хорошо!

К счастью, оказалось, что этот «жучок тысячелетия» успешно нейтрализован и ничего страшного не произошло. У меня есть частное забавное приключение, связанное с этим, о котором я позволю себе упомянуть. Итак, на рубеже 1999/2000 гг. я был ректором АГХ и в мои обязанности входило в том числе объявление — смотреть в руки! — момент прихода Нового года с балкона на традиционном балу в главном корпусе университета. Вот я и задумал небольшую шутку: договорился с техническим персоналом, что когда я буду считать через громкоговорители: «…три, два, один, НОЛЬ!», электрик отключит питание освещения здания, будет темно и все будут в ужасе от того, что перед их глазами встретятся тревожные объявления СМИ! Однако я недооценил уровень энергобезопасности AGH. Когда основное электроснабжение здания было (преднамеренно) отключено — за доли секунды активировалось аварийное электроснабжение. В муках складывания желаний, выхлопывания пробок от шампанского, громкой музыки никто даже не заметил мгновенного «моргания» огоньков и шутка не удалась.

Летальные последствия программных ошибок

«Клоп тысячелетия» не укусил, за взрыв ракеты можно не переживать, но к сожалению некоторые ошибки в программах унесли жизни людей. Известным (но, конечно, не единственным) случаем такого рода была программная ошибка в Therac-25. Эта система использовалась для управления процессом облучения жестким ядерным излучением больных с диагностированным онкологическим заболеванием. Если опухоль располагалась глубоко и в непосредственной близости от важных органов, которые хирург, удаляющий опухоль, тоже должен был бы повредить — будь он или нет — лучше использовать метод лучевой терапии (так называемый гамма-нож) , а не прибегать к хирургическому вмешательству. Сам метод очень хорош и используется до сих пор. В мире есть тысячи людей, чьи жизни были спасены таким образом. Но требует применения компьютера, т. к. в тело больного необходимо многократно вводить узкие пучки излучения, направляемые (компьютером!) с разных сторон так, чтобы они пересекались в области опухоли. В результате опухоль накапливает постепенно смертельную дозу радиации, которая ее разрушит, в то время как здоровые ткани пропускают эти лучи только один раз и на короткое время, поэтому степень их поражения ничтожно мала.

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

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

Автор — профессор AGH в Кракове

Оцените статью
( Пока оценок нет )

В профессии с 2008 года. Профиль - международные отношения и политика. Почта: andreykozlov07@gmail.com

Последние новости 24 часа
Как мы научили машины считать и думать за нас? Модуль 20: Важность недостатков программы
Сергей Нечаев надеется, что «Северный поток — 2» завершат до конца сентября