Скрытые ошибки программы

Причины отказов программного обеспечения

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

  • ошибки, скрытые
    в самой программе;

  • искажения входной
    информации, подлежащей обработке;

  • неверные действия
    пользователя;

  • неисправности
    аппаратуры установки, на которой
    реализуется вычислительный процесс.

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

Можно выделить
следующие основные классы ошибок в
программах.

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

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

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

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

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

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

Искажение
информации, подлежащей обработке,

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

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

  • искажение данных
    на первичных носителях информации;

  • сбои и отказы в
    аппаратуре ввода данных с первичных
    носителей информации;

  • шумы и сбои в
    каналах связи при передаче сообщений
    по линиям связи;

  • сбои и отказы в
    аппаратуре передачи или приема
    информации;

  • потери или искажения
    сообщений в буферных накопителях
    вычислительной системы;

  • ошибки в документации,
    используемой для подготовки вводимых
    данных;

  • ошибки пользователей
    при подготовке исходной информации.

Неверные действия
пользователя,

приводящие к отказу в процессе
функционирования ПО, связаны прежде
всего с неправильной интерпретацией
сообщений, с неправильными действиями
пользователя в процессе диалога с ЭВМ
и т. д.

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

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

Неисправность
аппаратуры.

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

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]

  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #
  • #

Лекция 13

Тема: Надежность программного обеспечения информационных систем

План

1. Основные понятия и определения надежности программного обеспечения.

2. Показатели надежности программного обеспечения.

3. Причины отказов программного обеспечения, признаки появления ошибок.

4. Способы обеспечения и повышения надежности программ.

Ключевые слова

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

Рекомендуемые материалы

Основные понятия надежности ПО

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

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

Надежность ПО определяется его безотказностью и восстанавливаемостью.

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

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

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

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

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

Механизм возникновения отказа аппаратуры и отказа ПО существенно отличаются друг от друга. Отказ аппаратуры обусловлен разрушением каких-либо элементов аппаратуры. Отказ ПО обусловлен несоответствием ПО поставленным задачам.

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

Корректность программы – ее соответствие спецификации.

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

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

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

Причины отказов программного обеспечения

Основными причинами непосредственно вызывающими нарушение нормального функционирования программы, являются [1, 2, 3, 10, 11]:

1. ошибки, скрытые в самой программе;

2. искажения входной информации, подлежащей обработке;

3. неверные действия пользователя;

4. неисправность аппаратуры установки, на которой реализуется вычислительный процесс.

1. Скрытые ошибки программы являются главным фактором нарушения нормальных условий его функционирования;

Можно выделить следующие основные ошибки в программе:

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

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

· Ошибки ввода-вывода – связаны с такими действиями, как управление вводом-выводом, формирование выходных записей и определение размеров записей.

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

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

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

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

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

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

· искажения данных на первичных носителях информации;

· сбои и отказы в аппаратуре ввода данных с первичных носителей информации;

· шумы и сбои в каналах связи при передачи сообщений по линиям связи и т.д.

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

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

Признаки появления ошибок

Наиболее типичными симптомами появления ошибок в программе являются:

· преждевременное окончание выполнения программы;

· недопустимое увеличение времени некоторой последовательности команд одной из программ;

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

· нарушение последовательности вызова отдельных программ, в результате чего происходит пропуск необходимых программ;

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

Способы обеспечения и повышения надежности программ

Они определены на следующие основные категории:

1. усовершенствование технологии программирования;

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

3. резервирование программ – дуальное или N-версионное программирование, другие методы введения структурной избыточности;

4. контроль и тестирование программ с последующей коррекцией.

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

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

· исходных данных, трансформированными в ходе вычислений:

· округления;

· методическими;

· обусловленными отказами, сбоями и ошибками в программе.

Контрольные вопросы и задания

1. Что понимается под надежностью программного обеспечения (ПО)?

2. Что такое корректность ПО?

3. От чего зависит восстанавливаемость ПО компьютера и КС?

4. Определите основные причины отказов ПО.

5. Какие существуют пути повышения надежности ПО компьютеров и КС?

6. Почему при мультипрограммной обработке информации используют принцип виртуальных машин?

Информация в лекции «20. Истечение жидкости через отверстия» поможет Вам.

7. Какой из способов обеспечения надежности программ считается более эффективным?

8. Что значит «усовершенствование технологии программирования»?

9. Дайте определение понятию «дуальное и N-версионное» программирование.

10. Как оценить вероятность безотказной работы программ?

11. Что означает термин «алгоритмическая избыточность»?

Литература: 1, 2, 3, 9, 10, 11.

Quoting an document dealing with taxonomy of threats etc.:

An error is detected if its presence is indicated by an error message
or error signal. Errors that are present but not detected are latent
errors.

Please mind that this is not the same as a dormant fault, which is a defect in the code activated by certain events and producing error when it gets activated.

Also the latent error is an error caused by a fault but not causing a failure. I guess it will be common in multi layer applications, yet I cannot think of any example. But I do not understand one more thing — eventually it has to cause a failure, otherwise it would not be discovered at all, dont you think?

Charles's user avatar

Charles

50.9k13 gold badges104 silver badges142 bronze badges

asked Jul 30, 2012 at 11:11

John V's user avatar

Good example of a latent error

In 2005 a Boeing 777-2H6ER aircraft with the registration 9M-MRG, serial number 28414, operating as Malaysia Airlines Flight 124 flying from Perth to Kuala Lumpur experienced an ADIRU (air data inertial reference unit) fault resulting in uncommanded manoeuvres by the aircraft acting on false indications.

In that incident the incorrect data impacted all planes of movement while the aircraft was climbing through 38,000 feet (11,600 m). The aircraft pitched up and climbed to around 41,000 feet (12,500 m), with the stall warning activated. The pilots recovered the aircraft with the autopilot disengaged and requested a return to Perth. During the return to Perth, both the left and right autopilots were briefly activated by the crew, but in both instances the aircraft pitched down and banked to the right.

The aircraft was flown manually for the remainder of the flight and landed safely in Perth. There were no injuries and no damage to the aircraft. The ATSB (Australian Transport Safety Bureau) found that the main probable cause of this incident was a latent software error which allowed the ADIRU to use data from a failed accelerometer. The US Federal Aviation Administration issued Emergency Airworthiness Directive (AD) 2005-18-51 requiring all 777 operators to install upgraded software to resolve the error.

Source: https://en.wikipedia.org/wiki/Malaysia_Airlines_Flight_370#Aircraft

answered Mar 14, 2014 at 9:06

MahNas92's user avatar

MahNas92MahNas92

3371 silver badge17 bronze badges

I did some reading:

e terms «active» and «latent» as applied to errors were coined by James Reason.(1,2) Latent errors (or latent conditions) refer to less apparent failures of organisation or design that contributed to the occurrence of errors or allowed them to cause harm to workers. For instance, whereas the active failure in a particular adverse event may have been a mistake in programming a logic controller, a latent error might be that the institution uses multiple different software code, making programming errors more likely. Thus, latent errors are quite literally «accidents waiting to happen.»

Latent errors are sometimes referred to as errors at the «blunt end,» referring to the many layers of the safety management system that affect the person carrying out the task. Active failures, in contrast, are sometimes referred to as errors at the ?sharp end,? or the personnel involved in the performance of the task.

So, applying the above to software, to me it means:

  • Error signal — defect manifesting itself into fault of some sort
  • Latent error — root cause with side effects; side effects are considered detected errors

I guess your example (if search in my app is not case sensitive but should be) qualifies quite well to be named «latent error». Its active failure could be something like «search results are clobbered with irrelevant stuff»

Community's user avatar

answered Jul 30, 2012 at 12:46

Roman Saveljev's user avatar

Roman SaveljevRoman Saveljev

2,5241 gold badge20 silver badges20 bronze badges

2


Подборка по базе: Метрики качества программного проекта.ppt, 6 лекция .pdf, ОиЭП лекция 1.docx, 18 лекция.docx, Тест по лекциям 1-3.docx, Темы с лекциями.docx, Отчет о прохождении программного материала за 2021 (2).docx, П_Б_П_ЛПИ Лекция 3 Педагогические теории Я.А. Коменского, Ж.-Ж. , Гигиена Лекция 8.docx, ПП Лекция 2 (9).pptx


План лекции:   1. Основные понятия. 2. Причины отказов ПО 3. Последствия и признаки появления ошибок в программе

Лекция №2 Причины отказов программного обеспечения, признаки появления ошибок.

Вопрос №1. Основные понятия.

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

2.Под надёжностью ПО понимается свойство выполнять задан­ные функции, сохранять свои характеристики в установлен­ных пределах при определенных условиях эксплуатации.

3.Надежность программного обеспечения (или просто про­граммы) определяется его (ее) безотказностью и восста­навливаемостью.

Безотказность программы или программ­ного обеспечения есть ее (его) свойство сохранять работо­способность при использовании в процессе обработки ин­формации на ЭВМ.

В данном определении под отказом программы или системы программного обеспечения понимается недо­пустимое отклонение характеристик процесса функциони­рования программы от требуемых.

Определенные условия внешней среды понимаются как совокупность входных дан­ных и состояния вычислительной системы. Заданный период наблюдений соответствует, как правило, необходимому для выполнения решаемой на машине задачи. 6. С точки зрения надежности принципиальное отличие программного обеспечения от аппаратуры состоит в том, что программы не изнашиваются и, следовательно, их выход из строя из-за поломки невозможен. Поэтому характеристи­ки функционирования программного обеспечения зависят только от его качества, предопределяемого процессом раз­работки. В то же время проявление ошибок программного обеспечения связано с тем, что в некоторые моменты вре­мени на обработку поступают ранее не встречавшиеся со­вокупности данных, которые программа не в состоянии кор­ректно обработать. Таким образом, входные данные в значительной мере влияют на функционирование про­граммного обеспечения. Восстановление после отказа в программе может заключаться в корректировке и восстановлении текста про­граммы, исправлении данных, внесении изменений в орга­низацию вычислительного процесса, что часто оказывается необходимым при работе ЭВМ в реальном масштабе времени. Восстанавливаемость ПО оценивается средней продолжительностью устранения ошибки в программе и восстановления ее работоспособ­ности и зависит от факторов, в том числе от сложности струк­туры комплекса программ, структурированности самих программ, алгоритмического языка, на котором разраба­тывалась программа, стиля программирования, качества документации на программу и т. п. 11. Устойчивость ПО может быть повышена с помощью разных форм структурной, информа­ционной и временной избыточности, позволяющих иметь дублирующие модули программ, альтернативные програм­мы для решения одних и тех же задач, осуществлять конт­роль за процессом исполнения программ (контроль за за­цикливанием, возникновением самоблокировок, перегруз­ками по пропускной способности) и т. п.

Вопрос №2. Причины отказов программного обеспечения

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

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

Скрытые ошибки программы. 

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

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

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

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

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

Причинами искажения вводимой информации могут быть следующие:

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

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

Вопрос №3. Последствия и признаки появления ошибок в программе

Признаки:

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

В зависимости от степени серь­езности последствий ошибок (отказов) в программе эти отклонения можно разделить следующим образом:

— полное прекращение выполнения функций на длитель­ное или неопределенное время;

—    кратковременное нарушение хода вычислительного про­цесса.

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

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

Баг (bug) – это ошибка в коде или в работе программы. Разработчики описывают этим сленговым словом ситуацию, когда что-то работает неправильно, выдает неверный или непредсказуемый результат.

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

Программу с багами называют забагованной. А отладку кода – дебаггингом, то есть избавлением от багов.

Слово bug в переводе с английского означает «жук». Оно пришло в программирование из сленга инженеров, которые называли багами ошибки при работе электронных схем. А в 1947 году создательница первого компилятора Грейс Хоппер обнаружила в компьютере Mark II бабочку, закоротившую контакты. В журнале происшествий написали: «Первый случай, когда был найден настоящий баг». Так термин закрепился в компьютерной сфере.

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

Где встречаются баги

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

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

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

Баг в игре, лицо во все небо
Известный смешной баг игры Mount and Blade: из-за сбоя в файлах игры вместо неба отображалось огромное лицо

На сайтах. Современные сайты такие гибкие и функциональные благодаря скриптам, написанным на языках программирования. В браузере работает JavaScript, на сервере языки могут быть разными: PHP, Python, Ruby и другие. Баг может возникнуть и на стороне сервера, и в клиентской части сайта – иногда его замечают только после выпуска в продакшн. Есть даже понятие bug bounty: вознаграждение, которое компания выплачивает пользователю, нашедшему критичный баг в информационной безопасности.

Кто сталкивается с багами

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

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

Из-за чего возникают баги

Мы выяснили, что такое баг. Теперь поговорим о причинах, из-за которых они появляются.

  • Первая и наиболее распространенная причина – ошибка разработчика. В IT-среде есть шутка: «Кто же победит: человек, венец природы… или крохотная забытая скобочка?». Маленькие недочеты могут быть очень критичными. Если поставить плюс вместо минуса в простейшем математическом вычислении, то получится совершенно другой результат.
  • Иногда причиной багов становится незнание. Например, разработчик был не в курсе специфического поведения какой-нибудь конструкции в языке, поэтому воспользовался ею не совсем корректно.
  • Часто баги возникают, если в команде программистов нет слаженности. Один не понимает, что написал другой, правит код по своему усмотрению и получает некорректное поведение программы.
  • Наконец, дизайн программы и архитектурные ошибки тоже могут быть причиной багов. Использование неоптимальных алгоритмов, ведущих к сбоям, неверный выбор инструментов – все это может привести к забагованности.
История одного неочевидного бага
Известный в интернете забавный случай показывает, насколько неочевидными бывают баги

Ворнинги, вылеты, исключения: чем отличаются от багов

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

Предупреждение. Это не совсем ошибка. Это скорее сообщение о риске некорректной работы. Не все предупреждения действительно указывают на что-то опасное. Например, линтеры – программы для написания чистого кода – выдают предупреждения, если человек пишет в «неправильном» стиле. На сленге предупреждения называют ворнингами от английского warning.

Исключение. Exception, или исключение, – это встроенный механизм защиты от ошибок в языках программирования. Программа выдает сообщение, что что-то пошло не так. Условия для исключений пишут сами программисты. Например, ставят защиту на ввод: если пользователь введет строку вместо числа, выбросится исключение.

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

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

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

Какими бывают баги

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

  • Опечатка – простейший вариант. Разработчик случайно пишет не то, и вся программа работает неправильно.
  • Бесконечный цикл – ситуация, когда условие для выхода из цикла никогда не наступает, и программа виснет.
  • Переполнение буфера – явление, когда программе перестает хватать памяти, и она начинает пользоваться памятью за пределами выделенного ей количества.
  • Состояние гонки – баг многопоточных приложений, когда несколько потоков одновременно обращаются к одному и тому же элементу и как бы «соревнуются» за доступ. Результат непредсказуем.
  • Количественный баг – ошибка при работе с большим количеством действий, когда при многократных повторениях появляются баги. Например, большое количество данных распределяется неравномерно.
  • Демонстрационный эффект – явление, когда программа работала нормально на этапе написания, но сломалась при демонстрации. Зачастую возникает из-за недостаточного тестирования и невнимательности: разработчик не учел какой-то сценарий.

Баги – это очень плохо?

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

Например, баг в медицинском оборудовании может привести к трагедии. Баг в коде сайта – к утечке огромного бюджета: так было, когда блокчейн-компания Compound случайно отправила своим пользователям почти 90 миллионов долларов. А самый дорогой баг в истории – арифметическое переполнение в программной начинке ракеты-носителя «Арион-5», из-за которого ракета взорвалась в полете.

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

Баг на табло, вместо 2000 года показывает 1900
Знаменитая «проблема 2000 года» или Y2K: когда наступил 2000 год, многие компьютеры по всему миру восприняли его как 1900

Как избежать багов

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

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

Для начинающего разработчика главное – внимательность, потому что частая причина багов – опечатки. А они вероятнее, если человек еще не привык писать код. Скрупулезность и внимание к деталям помогут если не избежать багов, то серьезно сократить их количество и быстро исправить те, что остались.

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