img

Как прокачать свои навыки отладки?

21 ноября
20:00
Бесплатный вебинар
Введение в Docker
Ведущий — Филипп Игнатенко.
Руководитель центра разработки
Записаться
img
img

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

Все мы делаем такие ошибки, поскольку мы не можем знать абсолютно все о написании кода. Все мы люди, и все мы делаем ошибки.

Или вы знаете, как получить суперсилу? Ну и ладненько, не заморачивайтесь. 

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

Как бороться с ошибками?

Есть три основных способа, как бороться с ошибками:

  1. «Предварительная отладка»: устранение ошибок до того, как они будут сделаны.
  2. Отладка: выявление, устранение и удаление ошибок уже после того, как они будут обнаружены.
  3. Пост-отладка: предположение непредвиденных или неизвестных ошибок. 

Давайте рассмотрим каждый из этих способов в отдельности.

Что такое «предварительная отладка»?

Уже покойный специалист в области теории вычислительных машин и систем Эдсгер Видбе Дейкстра сказал: 

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

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

Вот определение: 

«[Отладка] – это процесс выявления и устранение ошибок в компьютерном аппаратном или программном обеспечении.»

Что? И это все, что мы должны сделать?

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

Вот несколько способов, которые могут вам в этом помочь:

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

И все такое прочее!

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

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

? Изучите основы инструментов, с которыми вы часто работаете

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

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

Например, многие пользователи JavaScript никак не могут запомнить, что же возвращает функция splice(). А некоторые не могут запомнить, чем же отличается метод массивов map() от другого метода forEach(). И вообще, есть ли эта разница? Проехали! Временами мы все грешим в этом плане.

Если вы не используете JavaScript, то просто возьмите какой-нибудь встроенный метод или функцию из языка, который вы используете, и спросите себя:

Какой аргумент принимает эта функция? Что она возвращает? Что будет, если ей будет передан недопустимый аргумент?

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

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

? Прежде чем писать код, составьте план

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

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

И вот, всем начинает казаться, что программирование – это «код, код, код, поиск, отладка».

Но следует хорошо понимать, что ты делаешь, поэтому кратко запишите следующее:

  • Что мы хотим получить в качестве входных данных, а также структуру и особенности этих входных данных.
  • Что мы собираемся делать с входными данными.
  • Что мы хотим вернуть или сделать в конце в отношении входных данных или прочее.
  • Что мы должны сделать, если мы не получим нужные входные данные. 

Если вкратце, то составление плана относительно входных данных, процессов и выходных данных функции или программы не просто помогает сократить количество совершаемых ошибок, но и помогает писать эффективные тесты.

? Ознакомьтесь с самыми распространенными сообщениями об ошибках

Как правило, исправить ошибку довольно легко, если вы знаете, что это за ошибка. 

Именно поэтому очень важно потратить свое время на то, чтобы изучить некоторые распространенные ошибки и способы их устранения. Давайте поговорим о них:

1. Ошибки в синтаксисе

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

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

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

function {}

Появится ошибка.

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

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

let school = { 
name: "Harvard", 
location: "Heaven On Earth", admit: function() { return "weeew! You are admitted" } 
} 
console.log(school.names); // undefined

«Undefined», возвращенное функцией, говорит нам о том, что объект или свойство, к которому мы пытаемся обратиться, не доступны. Мы вполне можем разобраться, в чем же проблема, если более внимательно посмотрим на сообщение об ошибке. 

Давайте пойдем чуть дальше.

console.log(school.locations.address); // Uncaught TypeError: Cannot read property 'address' of undefined.

Если вы внимательно посмотрите на сообщение об ошибке, то без проблем сможете понять, где произошла ошибка.

Сообщение об ошибке, приведенное выше, («Cannot read property 'address' of undefined.») говорит о том, что address – это свойство, и это свойство, как известно, принадлежит объекту (в JavaScript). Но в данном случае объект не определен (undefined). 

Чем больше вы практикуетесь в написании кода, тем меньше синтаксических ошибок вы будете делать. Более того, вы можете использовать редакторы кода, линтеры или IDE, которые будут подсвечивать ваши синтаксические ошибки. Эти инструменты могут хорошо вам помочь.

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

  • Для JavaScript – ESLint
  • Для Python – PyLint
  • Для Java – Checkstyle
  • Для PHP – PHP_CodeSniffer

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

2. Логические/семантические ошибки

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

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

?prompt("enter number") + 3;

Вы хотите, чтобы в качестве выходных данных вернулось число, а вернется строка. Проще говоря, вы получите не то, что хотели.

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

3. Ошибки компиляции

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

Например, если вы запишете строку без обычных кавычек, то есть const name = Ayobami, то вы получите ошибку компиляции. Все потому, что строка должна быть заключена в кавычки. В связи с этим код компилироваться не будет.

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

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

4. Ошибки нехватки ресурсов

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

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

function factorial(num) {
  var result = 1;
  for(var i = num; i > 0; i--){
    result = num * factorial(num-1);
  }
  return result;
}

factorial(5);
factorial(10);
factorial(20);
factorial(0);

Функция factorial() «ломает» или замедляет работу браузера, так как стековое пространство, то есть память, которая была выделена браузером для цепочки вызовов функции, исчерпана. В данном случае это ошибка нехватки ресурсов, так как она возникает в результате того, то вся выделенная память была полностью использована. 

5. Ошибки интерфейса

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

Допустим, что метод go(string) ждет, что ему передадут строку, но мы вместо этого вызываем его, передав ему число. Если создатель программы не предвидит такую ситуацию и не контролирует то, как программа будет себя вести в таком случае, это приведет к ошибке.

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

В таких ситуациях полезно документировать ваши API.

? Убедитесь, что ваши настройки подходят для ваших инструментов

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

Например, WampServer может неправильно работать в ОС Windows, если на компьютере не будет некоторых сред выполнения Microsoft VC. Тоже самое может быть и в Linux, и в macOS. 

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

? Будьте однозначны в том, что касается функций в вашей программе

«В математике, информатике и физике детерминированная система – это система, в которой никакая случайность не участвует в развитии будущих состояний системы.

Детерминированная модель, таким образом, всегда будет давать одинаковый результат из заданного начального условия или начального состояния,» - источник.

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

Если вкратце, то вам нужно принимать нужные данные и отклонять ненужные или уведомлять пользователей о том, какие данные нужны.

? Не используйте, если не понимаете

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

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

? Научитесь безошибочно печатать

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

Довольно много ошибок в программировании связаны именно с обычными опечатками. Ваша аккуратность при наборе текста даст вам преимущество и позволит сократить количество ошибок.

? Наблюдайте за другими разработчиками, как они производят отладку

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

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

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

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

Что такое отладка?

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

Отладка состоит из трех основных этапов:

  1. Поиск ошибок.
  2. Анализ и выявление причин возникновения ошибок.
  3. Исправление или устранение ошибок.

Как найти ошибку? 

Поиск ошибок должен начинаться с осмысления сообщений об ошибках, которые вы видите.

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

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

Для того, чтобы найти ошибки, вам нужно сделать следующее:

  • Четко сформулируйте то, что вы ожидаете от программы.
  • Проверьте результаты, которые вы получили.
  • Сравните свои ожидания и фактический результат для того, чтобы понять, что вы упустили.

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

К тому же вы можете проверить различные части вашего кода относительно ваших предположений и найти несостыковку методом проб и ошибок. 

Как понять, почему появилась ошибка?

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

На самом деле многие разработчики просто гуглят и использует ответы из StackOverflow.

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

Понимание причины возникновения ошибки – это важный шаг на пути ее исправления. 

Как исправить или устранить ошибку?

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

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

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

Кроме того, вы можете попросить помощи у другого человека, так как другие люди могут смотреть на те же вещи совсем по-другому. Этот человек беспристрастен, и эта беспристрастность может помочь в исправление некоторых ошибок.

Так что, гуглите!

Задавайте вопросы на StackOverflow, Twitter или еще где-то, где вы можете пообщаться с другими разработчиками.

Ничего страшного! Мы все это делали, и далеко не раз.

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

Что такое пост-отладка?

«Пост-отладка» - это предположение непредвиденных ошибок в программах, которые вы уже написали. 

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

А теперь вопрос: как вы это делаете? Хорошо, с помощью системы отслеживания ошибок. 

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

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

Таких средств очень много. Для того, чтобы найти то, что вам подходит больше всего, вам просто нужно попробовать несколько вариантов. 

Заключение

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

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

Настало время стать великим разработчиков программного обеспечения, и отладка может вам в этом помочь.

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

Ссылка
скопирована
Получите бесплатные уроки на наших курсах
Все курсы
Программирование
Скидка 25%
Python Advanced. Продвинутый курс
Освойте асинхронное и метапрограммирование, изучите аннотацию типов и напишите собственное приложение на FastAPI. Улучшите свои навыки Python, чтобы совершить быстрый рост вашего грейда до уровня middle.
Получи бесплатный
вводный урок!
Пожалуйста, укажите корректный e-mail
отправили вводный урок на твой e-mail!
Получи все материалы в telegram и ускорь обучение!
img
Еще по теме:
img
Гипервизор - это программное обеспечение для виртуализации, используемое для создания и запуска виртуальных машин (ВМ). Гипервиз
img
Виртуализация серверов позволяет запускать несколько виртуальных машин на одном физическом сервере. Запуск виртуальных машин (ВМ
img
Сегодня мы рассмотрим, как настроить и использовать PHP в проекте. Но прежде чем начать, нужно понять, что такое PHP. Что такое
img
Как разработчик, вы знаете, что HTML расшифровывается как HyperText Markup Language (язык разметки гипертекста). HTML — это язык
img
Бесконечные споры вокруг искусственного интеллекта приводят к путанице. Существует много терминов, которые кажутся похожими, но
img
SVG расшифровывается как масштабируемая векторная графика. Это веб-дружелюбный векторный формат файлов, используемый для отображ
21 ноября
20:00
Бесплатный вебинар
Введение в Docker