HTML Diff
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