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