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