0 added
0 removed
Original
2026-01-01
Modified
2026-03-10
1
<ul><li><a>Ошибка - это…</a><ul><li><a>Этимология</a></li>
1
<ul><li><a>Ошибка - это…</a><ul><li><a>Этимология</a></li>
2
</ul></li>
2
</ul></li>
3
<li><a>Несколько слов о классификации</a><ul><li><a> Разновидности</a></li>
3
<li><a>Несколько слов о классификации</a><ul><li><a> Разновидности</a></li>
4
</ul></li>
4
</ul></li>
5
<li><a>Наиболее распространенные баги</a><ul><li><a>Взаимодействие и ресурсы</a></li>
5
<li><a>Наиболее распространенные баги</a><ul><li><a>Взаимодействие и ресурсы</a></li>
6
<li><a>Компиляционный тип</a></li>
6
<li><a>Компиляционный тип</a></li>
7
<li><a>Синтаксис</a></li>
7
<li><a>Синтаксис</a></li>
8
<li><a>Логический тип</a></li>
8
<li><a>Логический тип</a></li>
9
<li><a>Время выполнения</a></li>
9
<li><a>Время выполнения</a></li>
10
</ul></li>
10
</ul></li>
11
</ul><p>Ошибка работы приложения - явление достаточно частое. Не всегда оно безобидное и предсказуемое. В данной статье будет рассказано о том, какие встречаются виды ошибок ПО (баги). Предстоит разобраться с классификацией сбоев. А еще - познакомиться с их разновидностями.</p>
11
</ul><p>Ошибка работы приложения - явление достаточно частое. Не всегда оно безобидное и предсказуемое. В данной статье будет рассказано о том, какие встречаются виды ошибок ПО (баги). Предстоит разобраться с классификацией сбоев. А еще - познакомиться с их разновидностями.</p>
12
<h2>Ошибка - это…</h2>
12
<h2>Ошибка - это…</h2>
13
<p>Программная ошибка (или баг) - это ошибка в программе или системе, из-за которой приложение выдает неожиданное поведение/результат. Большинство таких явлений возникают из-за того, что разработчики допустили недочеты в исходном коде. Некоторые баги (от английского bug - "жук") образовываются вследствие некорректной работы инструментов программиста.</p>
13
<p>Программная ошибка (или баг) - это ошибка в программе или системе, из-за которой приложение выдает неожиданное поведение/результат. Большинство таких явлений возникают из-за того, что разработчики допустили недочеты в исходном коде. Некоторые баги (от английского bug - "жук") образовываются вследствие некорректной работы инструментов программиста.</p>
14
<p>Термин "программная ошибка" употребляется для того, чтобы обозначить неточности и сбои, возникающие на стадии работы программы. Но соответствующее понятие может использоваться и в широком смысле. Тогда оно указывает не только на непосредственные неполадки в работе утилиты, но и на критические ошибки. Последние приводят к аварийному завершению программы или к полной ее неработоспособности. Носят название "краш" (от английского crush).</p>
14
<p>Термин "программная ошибка" употребляется для того, чтобы обозначить неточности и сбои, возникающие на стадии работы программы. Но соответствующее понятие может использоваться и в широком смысле. Тогда оно указывает не только на непосредственные неполадки в работе утилиты, но и на критические ошибки. Последние приводят к аварийному завершению программы или к полной ее неработоспособности. Носят название "краш" (от английского crush).</p>
15
<h3>Этимология</h3>
15
<h3>Этимология</h3>
16
<p>Ошибка у разработчиков и IT-специалистов называется "баг". Понятие возникло задолго до появления первых компьютеров. Его ввел Томас Эдисон еще в 1878 году. Он описывал баги как "мелкие ошибки и трудности". Для того, чтобы исправить соответствующие сбои, требовались месяцы наблюдений и исследований, а также усилий.</p>
16
<p>Ошибка у разработчиков и IT-специалистов называется "баг". Понятие возникло задолго до появления первых компьютеров. Его ввел Томас Эдисон еще в 1878 году. Он описывал баги как "мелкие ошибки и трудности". Для того, чтобы исправить соответствующие сбои, требовались месяцы наблюдений и исследований, а также усилий.</p>
17
<p>Во времена Второй Мировой войны словом "bugs" описывали проблемы, возникающие при эксплуатации радарной электроники. Но есть и более интересная теория происхождения слова "баг".</p>
17
<p>Во времена Второй Мировой войны словом "bugs" описывали проблемы, возникающие при эксплуатации радарной электроники. Но есть и более интересная теория происхождения слова "баг".</p>
18
<p>Соответствующее понятие появилось 9 сентября 1947 года. Его произнесла Грейс Хоппер. Она работала в Гарвардском университете и тестировала вычислительную машину Mark II. Устройство функционировало с ошибками. Когда его разобрали, ученые увидели застрявшего мотылька между реле машины. Из-за него и возникла неполадка. Тогда мотылька извлекли, устройство заработало, а этот случай стали считать "первым реальным случаем обнаружения жучка".</p>
18
<p>Соответствующее понятие появилось 9 сентября 1947 года. Его произнесла Грейс Хоппер. Она работала в Гарвардском университете и тестировала вычислительную машину Mark II. Устройство функционировало с ошибками. Когда его разобрали, ученые увидели застрявшего мотылька между реле машины. Из-за него и возникла неполадка. Тогда мотылька извлекли, устройство заработало, а этот случай стали считать "первым реальным случаем обнаружения жучка".</p>
19
<h2>Несколько слов о классификации</h2>
19
<h2>Несколько слов о классификации</h2>
20
<p>Ошибки программного обеспечения и приложений в разработке можно разделить на несколько категорий. Существуют различные виды классификации.</p>
20
<p>Ошибки программного обеспечения и приложений в разработке можно разделить на несколько категорий. Существуют различные виды классификации.</p>
21
<p>В зависимости от этапа разработки программы выделяют:</p>
21
<p>В зависимости от этапа разработки программы выделяют:</p>
22
<ul><li>синтаксические баги;</li>
22
<ul><li>синтаксические баги;</li>
23
<li>предупреждения (варнинги, warnings);</li>
23
<li>предупреждения (варнинги, warnings);</li>
24
<li>ошибки времени исполнения (run-time).</li>
24
<li>ошибки времени исполнения (run-time).</li>
25
</ul><p>В программах поддерживается разделение багов на категории по важности:</p>
25
</ul><p>В программах поддерживается разделение багов на категории по важности:</p>
26
<ul><li>критические;</li>
26
<ul><li>критические;</li>
27
<li>косметические;</li>
27
<li>косметические;</li>
28
<li>серьезные;</li>
28
<li>серьезные;</li>
29
<li>незначительные.</li>
29
<li>незначительные.</li>
30
</ul><p>Неполадки в программах классифицируют по времени появления:</p>
30
</ul><p>Неполадки в программах классифицируют по времени появления:</p>
31
<ul><li>постоянно - при каждом запуске ПО;</li>
31
<ul><li>постоянно - при каждом запуске ПО;</li>
32
<li>иногда ("плавающий" тип);</li>
32
<li>иногда ("плавающий" тип);</li>
33
<li>только на устройстве конкретного пользователя.</li>
33
<li>только на устройстве конкретного пользователя.</li>
34
</ul><p>Неисправности также подразделяются по направлению и месту возникновения:</p>
34
</ul><p>Неисправности также подразделяются по направлению и месту возникновения:</p>
35
<ul><li>пользовательского интерфейса;</li>
35
<ul><li>пользовательского интерфейса;</li>
36
<li>системы обработки;</li>
36
<li>системы обработки;</li>
37
<li>связанные с граничными условиями;</li>
37
<li>связанные с граничными условиями;</li>
38
<li>вычислительные;</li>
38
<li>вычислительные;</li>
39
<li>управления потоками;</li>
39
<li>управления потоками;</li>
40
<li>обработки и интерпретации данных;</li>
40
<li>обработки и интерпретации данных;</li>
41
<li>при состоянии гонки;</li>
41
<li>при состоянии гонки;</li>
42
<li>повышения нагрузки;</li>
42
<li>повышения нагрузки;</li>
43
<li>тестирования;</li>
43
<li>тестирования;</li>
44
<li>контроля версии и идентификаторов.</li>
44
<li>контроля версии и идентификаторов.</li>
45
</ul><p>Неисправность может быть обнаружена быстро, еще на этапе написания программного кода. Некоторые сбои долгое время не проявляют себя. Некоторые баги проявляются в виде образования уязвимостей, упрощающих взлом ПО.</p>
45
</ul><p>Неисправность может быть обнаружена быстро, еще на этапе написания программного кода. Некоторые сбои долгое время не проявляют себя. Некоторые баги проявляются в виде образования уязвимостей, упрощающих взлом ПО.</p>
46
<p>Классификация ошибок программного обеспечения может быть следующей:</p>
46
<p>Классификация ошибок программного обеспечения может быть следующей:</p>
47
<ul><li>логические;</li>
47
<ul><li>логические;</li>
48
<li>синтаксические;</li>
48
<li>синтаксические;</li>
49
<li>компиляционные;</li>
49
<li>компиляционные;</li>
50
<li>арифметические;</li>
50
<li>арифметические;</li>
51
<li>ресурсные;</li>
51
<li>ресурсные;</li>
52
<li>взаимодействия.</li>
52
<li>взаимодействия.</li>
53
</ul><p>Все эти категории предусматривают свои ключевые особенности. Далее будут более подробно рассмотрены наиболее распространенные варианты во время разработки и программирования.</p>
53
</ul><p>Все эти категории предусматривают свои ключевые особенности. Далее будут более подробно рассмотрены наиболее распространенные варианты во время разработки и программирования.</p>
54
<h3> Разновидности</h3>
54
<h3> Разновидности</h3>
55
<p>Существуют различные виды багов. А именно:</p>
55
<p>Существуют различные виды багов. А именно:</p>
56
<ol><li>Борбаг. Неполадка, которая всплывает стабильно. Обнаруживается достаточно легко. Исправить ее обычно не составляет никакого труда.</li>
56
<ol><li>Борбаг. Неполадка, которая всплывает стабильно. Обнаруживается достаточно легко. Исправить ее обычно не составляет никакого труда.</li>
57
<li>Гейзенбаг. Сюда относят сбои, которые время от времени исчезают и изменяют свои свойства при попытке обнаружения.</li>
57
<li>Гейзенбаг. Сюда относят сбои, которые время от времени исчезают и изменяют свои свойства при попытке обнаружения.</li>
58
<li>Мандельбаг. Неполадки хаотического типа. Их достаточно трудно предсказать, как и результат исполнения программы.</li>
58
<li>Мандельбаг. Неполадки хаотического типа. Их достаточно трудно предсказать, как и результат исполнения программы.</li>
59
<li>Шредингбаг. Критический сбой. Может долгое время никак себя не проявлять. После того, как кто-нибудь на нее натыкается, программа полностью перестает функционировать.</li>
59
<li>Шредингбаг. Критический сбой. Может долгое время никак себя не проявлять. После того, как кто-нибудь на нее натыкается, программа полностью перестает функционировать.</li>
60
</ol><p>Это основные категории программных ошибок, которые встречаются при разработке и непосредственном использовании ПО.</p>
60
</ol><p>Это основные категории программных ошибок, которые встречаются при разработке и непосредственном использовании ПО.</p>
61
<h2>Наиболее распространенные баги</h2>
61
<h2>Наиболее распространенные баги</h2>
62
<p>Баги программ бывают совершенно разными. Вероятность их появления можно привести к минимуму, если основательно и досконально подойти к вопросу формирования ТЗ для будущего ПО, а также к непосредственному написанию исходного кода. Далее приведены самые распространенные баги и их особенности.</p>
62
<p>Баги программ бывают совершенно разными. Вероятность их появления можно привести к минимуму, если основательно и досконально подойти к вопросу формирования ТЗ для будущего ПО, а также к непосредственному написанию исходного кода. Далее приведены самые распространенные баги и их особенности.</p>
63
<h3>Взаимодействие и ресурсы</h3>
63
<h3>Взаимодействие и ресурсы</h3>
64
<p>Сбой взаимодействия относится к аппаратному и программному окружению. Пример - приложение для облачного сервиса. Если разработчик ошибся с веб-протоколами, будет возникать баг взаимодействия. Он устраняется путем переписывания "проблемного" фрагмента кода.</p>
64
<p>Сбой взаимодействия относится к аппаратному и программному окружению. Пример - приложение для облачного сервиса. Если разработчик ошибся с веб-протоколами, будет возникать баг взаимодействия. Он устраняется путем переписывания "проблемного" фрагмента кода.</p>
65
<p>Ресурсные сбои - это неполадки, связанные непосредственно с ресурсами, используемыми во время функционирования программы. Пример - переполнение буфера, когда разработчик не учел очистку памяти перед тем, как записывать новые электронные материалы. Устраняется сбой точно так же, как и в случае со взаимодействием - при помощи корректировки части кода.</p>
65
<p>Ресурсные сбои - это неполадки, связанные непосредственно с ресурсами, используемыми во время функционирования программы. Пример - переполнение буфера, когда разработчик не учел очистку памяти перед тем, как записывать новые электронные материалы. Устраняется сбой точно так же, как и в случае со взаимодействием - при помощи корректировки части кода.</p>
66
<h3>Компиляционный тип</h3>
66
<h3>Компиляционный тип</h3>
67
<p>Возникают такие неполадки при компиляции программы. Могут быть вызваны как неправильным синтаксисом, так и непосредственным сбоем в компиляторе. Устраняются на этапе разработки и отладки.</p>
67
<p>Возникают такие неполадки при компиляции программы. Могут быть вызваны как неправильным синтаксисом, так и непосредственным сбоем в компиляторе. Устраняются на этапе разработки и отладки.</p>
68
<p>Компиляционные неполадки - это то, что делает бета-тест невозможным. Они не позволяют программе в принципе запуститься.</p>
68
<p>Компиляционные неполадки - это то, что делает бета-тест невозможным. Они не позволяют программе в принципе запуститься.</p>
69
<h3>Синтаксис</h3>
69
<h3>Синтаксис</h3>
70
<p>Синтаксические сбои - это ошибки синтаксиса. То есть, непосредственных правил языка. Одной из самых распространенных причин появления таких неполадок является невнимательность разработчика. Чаще всего допускаются новичками при изучении того или иного языка.</p>
70
<p>Синтаксические сбои - это ошибки синтаксиса. То есть, непосредственных правил языка. Одной из самых распространенных причин появления таких неполадок является невнимательность разработчика. Чаще всего допускаются новичками при изучении того или иного языка.</p>
71
<p>Синтаксические ошибки программного обеспечения являются наименее "опасными". Они достаточно легко устраняются, особенно если исходный код не очень большой. На неправильный синтаксис укажет компилятор. Останется разобраться в том, что же сделано не так, а затем внести необходимые корректировки.</p>
71
<p>Синтаксические ошибки программного обеспечения являются наименее "опасными". Они достаточно легко устраняются, особенно если исходный код не очень большой. На неправильный синтаксис укажет компилятор. Останется разобраться в том, что же сделано не так, а затем внести необходимые корректировки.</p>
72
<p>Выше - наглядный пример элементарного синтаксического бага программы в Pascal. Код не будет работать, потому что в первой строчке в самом конце необходимо поставить символ "точка с запятой".</p>
72
<p>Выше - наглядный пример элементарного синтаксического бага программы в Pascal. Код не будет работать, потому что в первой строчке в самом конце необходимо поставить символ "точка с запятой".</p>
73
<h3>Логический тип</h3>
73
<h3>Логический тип</h3>
74
<p>Основной источник критических неполадок и появления неработающего кода. Иногда программа написано синтаксически верно, но она все равно не функционирует так, как было задумано. Логические сбои делятся на:</p>
74
<p>Основной источник критических неполадок и появления неработающего кода. Иногда программа написано синтаксически верно, но она все равно не функционирует так, как было задумано. Логические сбои делятся на:</p>
75
<ol><li>Арифметические. Появляются вследствие вычислений большого количества переменных, но "что-то идет не так" на том или ином этапе расчетов. Пример - деление на ноль.</li>
75
<ol><li>Арифметические. Появляются вследствие вычислений большого количества переменных, но "что-то идет не так" на том или ином этапе расчетов. Пример - деление на ноль.</li>
76
<li>Обычные. Все остальные логические ошибки программного обеспечения.</li>
76
<li>Обычные. Все остальные логические ошибки программного обеспечения.</li>
77
</ol><p>Данный тип неисправностей приводит к изменению функционирования программы вопреки заданному техническому заданию. Поведение приложения предсказать практически невозможно, как и итоговый результат. Пример - запись ошибочных данных в документ, представляющий значимость для функционирования программы.</p>
77
</ol><p>Данный тип неисправностей приводит к изменению функционирования программы вопреки заданному техническому заданию. Поведение приложения предсказать практически невозможно, как и итоговый результат. Пример - запись ошибочных данных в документ, представляющий значимость для функционирования программы.</p>
78
<p>Логические ошибки проблематично обнаружить, так как надо понимать логику ПО. Компиляторы их не выявляют. Придется изучать исходный код и искать неполадки собственноручно. Иногда на соответствующий процесс уходят недели, а то и месяцы.</p>
78
<p>Логические ошибки проблематично обнаружить, так как надо понимать логику ПО. Компиляторы их не выявляют. Придется изучать исходный код и искать неполадки собственноручно. Иногда на соответствующий процесс уходят недели, а то и месяцы.</p>
79
<p>Выше - пример логической ошибки. Здесь она безобидна, потому что вывод сообщения при i = 15 не приводит ни к каким последствиям. Если же программа должна выдать при соответствующем условии сигнал тревоги или что-либо в этом роде, трудно представить масштабы произошедшего бедствия.</p>
79
<p>Выше - пример логической ошибки. Здесь она безобидна, потому что вывод сообщения при i = 15 не приводит ни к каким последствиям. Если же программа должна выдать при соответствующем условии сигнал тревоги или что-либо в этом роде, трудно представить масштабы произошедшего бедствия.</p>
80
<h3>Время выполнения</h3>
80
<h3>Время выполнения</h3>
81
<p>Если код логически и синтаксически написан правильно, нет никаких гарантий того, что он будет работать как задумано. Программа может сталкиваться с неполадками при непосредственном функционировании. Пример - не обнаружен обязательный для чтения файл, который был удален. При игнорировании ситуации программа аварийно завершается.</p>
81
<p>Если код логически и синтаксически написан правильно, нет никаких гарантий того, что он будет работать как задумано. Программа может сталкиваться с неполадками при непосредственном функционировании. Пример - не обнаружен обязательный для чтения файл, который был удален. При игнорировании ситуации программа аварийно завершается.</p>
82
<p>Выше - пример ошибки времени выполнения. Речь идет о делении на ноль. С точки зрения логики и синтаксиса код написан грамотно. Но, если пользователь укажет 0 в качестве значения переменной, произойдет ошибка.</p>
82
<p>Выше - пример ошибки времени выполнения. Речь идет о делении на ноль. С точки зрения логики и синтаксиса код написан грамотно. Но, если пользователь укажет 0 в качестве значения переменной, произойдет ошибка.</p>
83
<p>Именно так должен выглядеть код, чтобы он функционировал правильно.</p>
83
<p>Именно так должен выглядеть код, чтобы он функционировал правильно.</p>
84
<p><em>P. S. <a>Большой выбор курсов по тестированию</a> есть и в Otus. Присутствуют варианты как для продвинутых, так и для начинающих пользователей.</em></p>
84
<p><em>P. S. <a>Большой выбор курсов по тестированию</a> есть и в Otus. Присутствуют варианты как для продвинутых, так и для начинающих пользователей.</em></p>
85
85