Вы когда-нибудь сталкивались с ошибкой? Перегруженный? На решение потребовались часы, дни или недели? Как тебе, наконец, удалось оторваться? Тебе просто повезло, или все дело в умении?
Я определенно не всегда следовал формальному процессу отладки. Моя первая работа по программированию заключалась в написании сценариев Perl для обработки геномов дрожжей. Я бы потратил дни на исправление каждой ошибки и проблемы с производительностью. Почему? Я случайным образом угадывал исправление, а затем часами ждал результата. Это было не продуктивно и не весело. Чтобы избавить людей от такой же боли, я делюсь процессом, который совершенствовал годами и который мы применяем в MOKA Analytics.
Процесс отладки аналогичен научному методу и состоит из трех этапов:
- Наблюдайте: занесите в каталог то, что вы знаете и чего не знаете.
- Выдвинуть гипотезу: мозговой штурм выявить причины и ранжировать их по степени вероятности.
- Проверка: опровергайте гипотезы, собирая новые доказательства.
В наши дни я часто выполняю эти шаги в уме и параллельно. Однако, когда дела становятся тяжелыми, я считаю важным выполнить все шаги по порядку и все записать. В МОКА нередко можно увидеть результаты процесса отладки, нацарапанные на всех досках.
Теперь давайте углубимся в каждый этап цикла «наблюдение-гипотеза-проверка».
Соблюдайте
Первый шаг - каталогизировать то, что вы знаете и чего не знаете. Начните с каталогизации информации заголовка: симптомы (сообщения об ошибках, трассировка стека и т. Д.), Входные данные (ввод данных пользователем, набор данных и т. Д.) И среда (версия программного обеспечения, настройки и т. Д.). При отладке исключений я буду использовать отладчик для пошагового выполнения кода рядом с местом возникновения исключения, чтобы наблюдать путь кода и значения.
Профессиональный совет: научитесь использовать отладчик своей IDE. Если у вас нет IDE с отладчиком, переключите IDE. Если ваша компания не будет платить за IDE с отладчиком, смените работу.
Выдвигать гипотезы
Следующим шагом будет мозговой штурм потенциальных причин и их ранжирование по вероятности. Не бойтесь проявить творческий подход - ваша цель - убедиться, что реальная причина в конечном итоге окажется в списке гипотез. Процент гипотез, которые оказываются неверными, значения не имеет. Также нормально записывать гипотезы, уже опровергнутые доказательствами, а затем вычеркивать их. Неправильные гипотезы могут вызвать идеи, и каждая гипотеза, которую вы устраняете, - это прогресс в достижении вашей цели.
Записав свои гипотезы, быстро ранжируйте их по вероятности. Используйте свое наблюдение, а также свой собственный опыт. Некоторые из моих любимых эвристик: прошлые ошибки, области сложности, недавние изменения, покрытие тестами и автор кода (не говорите моим коллегам, что я сказал это последнее).
Профессиональный совет: жадно расширяйте свою модель мира, удаляя неизвестные неизвестные. Познакомьтесь с хитрыми областями, например, многопоточность, условия гонки, кодировки файлов, псевдонимы, юникод, кеширование, семантика равенства, различия между ОС и т. Д. просто необходимо знать, что эти проблемные области существуют и могут вызывать ошибки.
Тестовое задание
Наконец, вы устраните гипотезы, запустив тесты для сбора новых доказательств. Обдумайте свои наиболее вероятные гипотезы. Какие тесты вы можете провести, чтобы их подделать? Один из подходов состоит в том, чтобы спросить: «Если бы эта гипотеза была верной, что бы я ожидал наблюдать, если бы внес изменения во входные данные или среду?» Придумывая тесты, вы, скорее всего, обнаружите, что вам нужно уточнить свои гипотезы, чтобы они были более конкретными.
Для каждого теста оцените результат и усилия. Выигрыш, определяемый тем, какие гипотезы будут опровергнуты тестом (т. Е. Получение информации). Усилия состоят в том, сколько времени у вас уйдет на выполнение теста. Запустите тест, который обеспечивает максимальную отдачу от вложенных средств - лучший компромисс между отдачей и усилиями.
Совет: для конкретного теста часто существует более быстрый тест, который опровергает более слабую версию гипотезы. Зачастую они обеспечивают большую отдачу от вложенных средств. Например, что бы вы узнали, протестировав небольшое подмножество входных данных?
Собираем все вместе
Шаги процесса отладки образуют цикл. Каждый раз, проводя тест, наблюдайте за результатами и обновляйте свои гипотезы. Мы обнаружили, что для большинства проблем нам нужно всего два или три раза за цикл, чтобы диагностировать основную причину.
Заключительный совет: по мере того, как вы будете следовать этому процессу, в наблюдениях, гипотезах и тестах будут появляться закономерности. Для поддержки этих шаблонов инвестируйте в инфраструктуру ведения журналов, диагностики и тестирования. Ваше будущее будет вам за это благодарно.
MOKA Analytics принимает на работу!
Мы ищем хороших инженеров-программистов, которые присоединятся к нашему стремлению заменить консультантов по стратегии программным обеспечением. Хотите узнать больше? Отправьте мне свое резюме и краткое введение в [email protected]