Годы бегут, компьютеры становятся мощнее, листинги программ длиннее, а программисты возятся всё с теми же разновидностями ошибок, как и пару десятков лет назад :)
В книге «Принцип Питера, или дела идут вкривь и вкось» Лоуренс Дж. Питер пишет в главе «Электронная некомпетентность», посвящённой компьютерам:
Компьютеры бесподобны: за несколько минут они могут совершить такую ошибку, которую не в состоянии сделать множество людей за многие месяцы.
Человечество имеет уже достаточно примеров, наглядно демонстрирующих, к каким последствиям приводят ошибки компьютеров. Откуда же они берутся и на какие типы делятся? Вот давайте сегодня с этим и разберёмся, а в качестве примеров я буду использовать любопытные факты, которые уже стали частью истории
Программист, создавая программный комплекс, может специально внести в него ошибку. Другим вариантом проявления «злой воли программиста» является включение в программу «логической бомбы», срабатывающей, например, после определённого числа запусков программы, определённых значениях входных данных и др. Оператор, обслуживающий компьютер, может сознательно ввести в компьютер неверные данные, которые и будут обработаны компьютером, выдавая неверные выходные данные в соответствии с принципом «мусор на входе – мусор на выходе»
Анализ приведённых типов ошибок показывает, что основными задачами, стоящими перед разработчиками программного обеспечения в плане повышения его надёжности, является:
Таким образом, программный комплекс в обязательном порядке должен проходить тщательное тестирование и отладку (выявление ошибок 1-го и 2-го типов). Выявление возможных ошибок 5-го типа производится с помощью имитации отказа приборов и датчиков на прошедших тестирование программных комплексах.
Поиск ошибок — увлекательное и полезное занятие, но требующее огромных затрат сил и времени, так что легче не допустить ошибку, чем допустить и потом её искать :) К тому же, на дворе кризис, значит программисты просто обязаны делать меньше ошибок :)))
Надеюсь, моя подборка поможет новичкам и не только им. Удачи вам и поменьше ошибок в ваших творениях
В книге «Принцип Питера, или дела идут вкривь и вкось» Лоуренс Дж. Питер пишет в главе «Электронная некомпетентность», посвящённой компьютерам:
Компьютеры бесподобны: за несколько минут они могут совершить такую ошибку, которую не в состоянии сделать множество людей за многие месяцы.
Человечество имеет уже достаточно примеров, наглядно демонстрирующих, к каким последствиям приводят ошибки компьютеров. Откуда же они берутся и на какие типы делятся? Вот давайте сегодня с этим и разберёмся, а в качестве примеров я буду использовать любопытные факты, которые уже стали частью истории
Типы ошибок
Тип 1. Ошибки в программном комплексе, допущенные при разработке и не обнаруженные при его тестировании
- В «Справочнике Microsoft Works» и интерактивной помощи пакета интегрированной обработки информации Works 2.0 функция ЕСЛИ описана как
ЕСЛИ (Условие, ЗначениеЛожь, ЗначениеИстина)
Однако в действительности работа данной функции должна иметь следующий вид:
ЕСЛИ (Условие, ЗначениеИстина, ЗначениеЛожь)
В «Руководстве пользователя Microsoft Works для Windows» пакета Works 3.0 эта ошибка исправлена. - В русифицированном варианте Norton Utilities (версия 7.0, фирма Symantec) в утилите форматирования sformat при задании опции:
Системные файлы: [Не ставить…]
при форматировании выдаётся сообщение:
Системные файлы: Ставить
и наоборот, при задании опции:
Системные файлы: [Ставить…]
при форматировании выдаётся сообщение:
Системные файлы: Не ставить
- Неудача при запуске первого американского спутника к Венере случилась, вероятнее всего, из-за ошибки в программе – вместо требуемой в операторе точки программист поставил запятую. Вот как был записан этот оператор:
DO 50 I = 12,525
На самом же деле он должен был выглядеть следующим образом:
DO 50 I = 12.525
- Потеря связи с космической станцией «Фобос-1» (СССР) произошла из-за ошибочной команды, переданной с Земли на бортовой компьютер.
- Причиной осложнений, возникших при возвращении на Землю советско-афганского и советско-французского экипажей, явились ошибки, допущенные в программном обеспечении бортовых компьютеров.
Тип 2. Ошибки, возникающие при вводе в компьютер неверных данных
- В 1983 году произошло наводнение в юго-западной части США. Причина заключалась в том, что в компьютер были введены неверные данные о погоде, в результате чего он дал ошибочный сигнал шлюзам, перекрывающим реку Колорадо.
Тип 3. Компьютерные вирусы, «вмешивающиеся» в работу компьютера и выполняемую им программу
- Летом 1988 года в Мичиганском госпитале компьютерный вирус инфицировал три компьютера, которые обрабатывали информацию о пациентах. Вирус перемешал фамилии пациентов в базе данных. В результате данного «вмешательства» диагностические сведения одних пациентов оказались приписанными другим пациентам.
Тип 4. Выход из строя элементов компьютера и обслуживающих его систем
- В процессе эксплуатации компьютера возможно физическое повреждение накопителя на жёстком магнитном диске, выход из строя блока питания, отключение электроэнергии, колебания напряжения в электрической сети и др. Результатом такого рода неисправностей может быть полная потеря информации, хранящейся на жёстком магнитном диске, частичная или полная потеря информации в файлах баз данных, нарушение работы систем, управляемых компьютером и многое другое. Для предотвращения ошибок данного типа используют системы, в которых одновременно работают несколько компьютеров, дублирующих друг друга, в компьютеры устанавливают два параллельно работающие накопители на жёстких магнитных дисках, компьютеры подключают к источникам бесперебойного питания, которые обеспечивают его работу при отключении электроэнергии или колебаниях напряжения электрической сети и др.
Тип 5. Выход из строя или сбои в работе измерительных приборов и датчиков, используемых при управлении какими-либо техническими системами и технологическими процессами
- В июле 1985 года произошло преждевременное отключение компьютера одного из основных двигателей американского космического корабля «Челленджер» (Шаттл), едва не закончившееся катастрофой. Положение спас командир корабля, сумевший на двух работающих основных двигателях и двух менее мощных двигателях для маневрирования вывести «Челленджер» на орбиту. Причина же заключалась в том, что один из трёх бортовых компьютеров, управляющих двигателями (на каждый двигатель по компьютеру), был «обманут» вышедшим из строя датчиком, измеряющим температуру газа в двигателе. Для устранения подобных неполадок в будущем на следующих космических кораблях серии Шаттл были установлены датчики изменённой конструкции.
- При запуске французской ракеты нового поколения «Ариан-5» примерно на 37-й секунде полёта компьютер, находившийся на борту ракеты, получил от датчиков системы управления неверную информацию о пространственной ориентации ракеты. Исходя из этой информации, компьютер начал корректировать траекторию полёта для того, чтобы компенсировать не существующую на самом деле погрешность. Ракета стала отклоняться от курса, что привело к возрастанию нагрузок на её корпус. В результате чрезмерных нагрузок верхняя часть ракеты отвалилась, и по команде с земли ракета была взорвана.
Тип 6. «Злая воля человека», носителем которой чаще всего выступает либо программист, либо оператор
Программист, создавая программный комплекс, может специально внести в него ошибку. Другим вариантом проявления «злой воли программиста» является включение в программу «логической бомбы», срабатывающей, например, после определённого числа запусков программы, определённых значениях входных данных и др. Оператор, обслуживающий компьютер, может сознательно ввести в компьютер неверные данные, которые и будут обработаны компьютером, выдавая неверные выходные данные в соответствии с принципом «мусор на входе – мусор на выходе»
- • Сборочный конвейер волжского автомобильного завода в городе Тольятти работает под управлением ЭВМ, которая обеспечивает своевременное поступление деталей на конвейер со складов и из цехов вспомогательных производств. Для выполнения этой задачи информационно-управляющая система хранит информацию о тысячах узлов и деталей, из которых собирается автомобиль, о запасах деталей на складах, об их движении по транспортным линиям и т. д. На основе этой информации ЭВМ самостоятельно управляет автоматизированными складами, транспортными конвейерами, а также рядом других устройств.
Программист, разрабатывавший программное обеспечение для управления главным конвейером Волжского автозавода, сознательно внёс в программу «логическую бомбу» в знак протеста против низкой зарплаты. Через некоторое время эта «логическая бомба» сработала, и главный конвейер остановился на несколько дней. Ущерб от остановки составил 1 миллион рублей (в ценах 80-х годов), этот ущерб был несопоставим с зарплатой всех программистов ВАЗа, вместе взятых, а программист был дисквалифицирован и переведён в рабочие.
Анализ приведённых типов ошибок показывает, что основными задачами, стоящими перед разработчиками программного обеспечения в плане повышения его надёжности, является:
- устранение ошибок, допущенных при разработке программного обеспечения (1-й тип ошибок);
- проектирование программного обеспечения с учётом человеческого фактора, то есть таким образом, чтобы оно было защищено от «дурака» (2-й тип ошибок). При этом «свалять дурака» могут не только пользователи, работающие за клавиатурой компьютера, но и приборы и датчики, от которых компьютер принимает информацию при управлении техническими или иными системами (5-й тип ошибок);
- использование известных мер безопасности для снижения вероятности переноса компьютерных вирусов (3-й тип ошибок) с программами, передаваемыми в эксплуатацию
Таким образом, программный комплекс в обязательном порядке должен проходить тщательное тестирование и отладку (выявление ошибок 1-го и 2-го типов). Выявление возможных ошибок 5-го типа производится с помощью имитации отказа приборов и датчиков на прошедших тестирование программных комплексах.
Поиск ошибок — увлекательное и полезное занятие, но требующее огромных затрат сил и времени, так что легче не допустить ошибку, чем допустить и потом её искать :) К тому же, на дворе кризис, значит программисты просто обязаны делать меньше ошибок :)))
Надеюсь, моя подборка поможет новичкам и не только им. Удачи вам и поменьше ошибок в ваших творениях