Советы по отладке с очень небольшим количеством информации? [закрыто]

11

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

Со всем этим я могу справиться большую часть времени без проблем.

Проблема в том, когда клиент где-то находит ошибку. Обычно они высылают скриншот с конечной проблемой и говорят: «Не могли бы вы взглянуть на это?» при выделении на странице конкретной вещи, которая не соответствует действительности, а иногда и того, что ожидалось. Дается очень мало информации, и пытаться поговорить с ними и получить больше (например, то, что они сделали, чтобы получить результат), все равно что вырывать зубы.

По сути, это сводится к следующему:

  • Большая и сложная кодовая база, с которой я не знаком на 100%
  • Много-много способов что-то может пойти не так
  • Очень мало информации о том, как появилась ошибка

У кого-нибудь есть какие-либо советы, хитрости, предложения и т. Д., Как отлаживать подобные вещи?

Тарка
источник
"Вы когда-нибудь слышали о базе данных спагетти?" Однажды я работал на работе, где база данных продукта непрерывно развивалась в течение более десяти лет, практически не прилагая усилий к ее рефакторингу, поскольку требования росли (и росли, и росли, и росли). У меня был сотрудник, вся работа которого сводилась к «Понять базу данных, создать SQL-запросы для извлечения чего-либо полезного из нее» - и она была незаменима. Я чувствую твою боль.
BlairHippo
В качестве дополнения, [прочитайте «экстрасенсорные сообщения» в блоге Рэймонда Чена] ( goo.gl/2KIH )!
Wizard79 22.10.10
Насколько велика база кода? Десять KLOC или 50 MLOC?
Василий Старынкевич

Ответы:

11

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

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

РЕДАКТИРОВАТЬ: Цзин был хорошей идеей, когда я написал это несколько лет назад. С тех пор они изменили свой установщик, чтобы загрузить вашу систему с «бонусным» программным обеспечением, которое вы никогда не запрашивали, поэтому я больше не могу его рекомендовать. Хотя вокруг полно приличных рекордеров экрана.

Мейсон Уилер
источник
2
+1 Хороший совет, и я бы расширил его до: могут ли они сделать ошибку надежной, или она прерывистая? Если это происходит надежно, могут ли они провести вас через шаги, которые они предприняли, чтобы туда добраться?
BlairHippo
1
Просмотр журналов может немного помочь.
pramodc84
11

Хорошее начало может быть эта книга .

альтернативный текст

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

Устаревший код - это исходный код, который больше не поддерживается.

Гордон
источник
Грустная часть, это даже не унаследованный код. Я почти уверен, что большая часть того, над чем я работаю, была начата в начале этого года.
Тарка
3
@Slokun - определение «Код наследия» в книге не совсем совпадает с его традиционным определением. Это очень хорошая книга.
Остин Салонен
4

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

Мы использовали Fogbugz (я предполагаю, что они все еще делают Fogcreek!), И мы смогли создать механизм обработки исключений, при котором пользователь мог нажимать кнопку в любое время, когда возникло исключение, и оно немедленно попадало бы в нашу систему - больше никаких вызовов и нет больше скриншотов. С помощью этой опции вы берете нужную информацию вместо того, чтобы пытаться извлечь ее из пользователя. Похоже, вариант принесет вам пользу, особенно с возможностью захвата скриншота.

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

Остин Салонен
источник
Для большой ранее существующей кодовой базы добавление хорошей регистрации будет АД большой работы. +1, потому что это может оказаться единственным жизнеспособным вариантом, если ошибки периодически.
BlairHippo
@BlairHippo: Из моего опыта это так, но это цена, которую вы платите за кодовую базу, которую он описывает. Это почти так же плохо, как работать в такой кодовой базе, чтобы начать с ...
Остин Салонен
Вход сложно. Добавление автоматической регистрации исключений тривиально и стоит (минимальных) усилий в тысячу раз. Или, по крайней мере, это в Delphi. Не уверен, какие решения существуют для других языков, но это не должно быть слишком сложно для любого языка с достойной обработкой исключений.
Мейсон Уилер
1

Мой самый серьезный совет - начать рефакторинг, где вы можете. Я не могу сосчитать, сколько раз я видел копию функциональности, только чтобы узнать, что это не 100% полная копия. Это была копия на 99,9% и одна маленькая незначительная ошибка, которая привела к ошибке. Начните добавлять модульные тесты ко всему, и если у вас есть отдел QA, попробуйте подготовить несколько сценариев автоматического тестирования для тех частей кода, с которыми вы работаете.

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

Wheaties
источник
0

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

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

Продолжайте итерацию, пока не поймете кодовую базу.

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

Дима
источник