Replikant_mih
Replikant_mih личный блог
14 января 2018, 15:05

Ненавижу дебажить код.

Ненавижу дебажить код.

Код стратегий, код чего угодно. По типу задачи (задача найти баг или оценить код на предмет: есть ли баги) – задача моя – т.е. я такое люблю – найди то, не зная что, так не зная как. Но блин – итак много задач, эти задачи они как бы не входили в твои планы, это как бы внеплановые задачи. Задача найти баги – плановая – но каждый конкретный новый баг – это внеплановая фигня – поэтому она напрягает. Это не задача, двигающая вперед, а задача, решение которой тебя возвращает в текущую точку развития после откидывания назад. Когда возникнет такая возможность, в первую очередь делегирую QA. 

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

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

38 Комментариев
  • neophyte
    14 января 2018, 15:17
    Искать баги — полбеды.
    Хуже, когда багов нет, а в логике алгоритма косяк, причем там где не ожидаешь.
    • SMT
      14 января 2018, 15:26
      Николай Скриган, косяк в логике тоже к багам  
      нет формальных свидетельств их наличия
      что-то работает не так как надо
      • sortarray sortarray
        14 января 2018, 15:39
        SuperMegaTrader, 
        косяк в логике тоже к багам  

        Забавно, что слово «баг» пошло от застрявшего жучка в контактах реле допотопного компа, а теперь его трактуют весьма вольно:)
        • SMT
          14 января 2018, 15:58
          sortarray sortarray,  автор отнес. Я к этому. 
          Вольная трактовка от геймеров пошла, видимо.
           По мне, так я вообще это слово стараюсь не использовать.
           Вместо этого использую словосочетание «какая-то куйня».  Я не проф-программер, мне можно)   

  • Jame Bonds
    14 января 2018, 16:02
    Ошибка ваша в том, что исправление бага возвращает назад. Исправление бага придвигает вас к правильно работающей программе. Это как движение к идеалу, который, может быть недостижим, но ведь двигаться к нему все равно надо !
    Меня мотивирует вести журнал багов. Как только случилось что-то нехорошее, или даже то, что кажется подозрительным, записать это в систему баг-трекинга (но когда один работаешь, то проще в какую-нибудь табличку; мне самому в итоге лучше всего писать это в Mindjet). Критические баги надо исправлять сразу, остальные могут и подождать. Периодически в эту табличку нужно заглядывать и брать один из багов на ликвидацию.
    Еще хороший прием -  тотальное логгирование. Пусть роботы пишут по несколько ГБ текстовых логов в день, какая проблема, ужмете их раром и перенесете в папочку на будущее. Но когда ошибка случается, чаще всего вся информация, нужная для ликвидации бага уже там содержится.
    Иногда информации для ликвидации багов в текстовых логах недостаточно и понять, что к нему привело невозможно. В таком случае можно сделать еще сообщений в логах и при следующем появлении этого бага уже станет понятнее.
    Когда исправляешь баг — переносишь его из своего списка в другой список «выполнено». Периодически заглядывать нужно и туда. Баг казался неисправимым, проявлялся непредсказуемо, целый год мешал жить, а потом смотришь — он в разделе «устранено». Это дополнительная мотивация.
    Ну и, конечно, программы надо стараться писать так, чтобы баги было проще исправлять. Это и архитектура, и комментарии в коде и различные проверки того, что «не должно было случиться никогда».
    Еще прием — исправлять один серьезный баг и тут же один мелкий. И хоть все системы тайм-менеджмента учат сначала заниматься срочными и важными делами, потом важными, а потом уже всеми остальными, но если мелкие баги накапливаются, то они начинают мешать жить с невероятной силой и мешать отлавливать более крупные. 
  • VladMih
    14 января 2018, 16:05
    Если код «трейдерский», логически выстроенный, то и баги легко находить — глазом видно, что сделки не соответствуют логике ТС.
    А вот если система «математическая», тут не знаю… Беда.
    • Алексей
      14 января 2018, 16:23
      VladMih, не всегда можно увидеть на глаз, если заявок тьма то анализ сделок занимает очень много времени. в общем сложно всё. с другой стороны это наш хлеб.
      • VladMih
        14 января 2018, 18:05
        Алексей, время требуется, конечно, как на любую работу,
        но обычно такие ошибки находятся достаточно легко. 
        Рекомендую ТСЛаб — тут вообще всё на полуавтомате.
  • Иван Иванов
    14 января 2018, 16:08
    Сначала тесты пишем со всевозможными параметрами потом реализующий код, когда тесты прошли программный код готов.
    Внес очередное изменение, напиши(поправь) на него тест, остальные тесты пробежали ок значит нет регрессии.
    Часто написать хороший тест сложнее чем реализовать функционал.

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

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



    Удобно когда каждый коммит в репозиторий запускает сборку проекта и автотесты+интеграционные(на отдельной машине) с результатом по мылу всей команде, сразу видно кто всю малину…
    • Turboslon
      15 января 2018, 05:24
      Иван Иванов, зашел сюда написать этот пост :)
      Добавлю одну мысль: Написание теста перед написанием основного кода очень структурирует в голове основную задачу.
  • Roman Ivanov
    14 января 2018, 16:28
    А я в таких случаях представляю себя охотником. Ведь этот процесс аналогичен тому, чем занимались наши предки и он у нас в крови. И все становится на свои места.

      • Roman Ivanov
        14 января 2018, 16:40
        Replikant_mih, все зависим от ожиданий. Отбрось иллюзию что пишешь без багов. И тогда единственное что будет тебе досаждать, это мысль «а как же оно работало уже пол-года»!?
        • П М
          14 января 2018, 18:24
          ivanovr, или иногда «три года»
  • ilijaz
    14 января 2018, 17:02
    Посмотрите на TDD. В крупных проектах написание тестов занимает большую часть разработки, возникшие баги — как дополнительные кейсы для тестов. По мне только с таким подходом появляется больше уверенности в правильности работы программы.
  • П М
    14 января 2018, 18:19
    опыт наверное всё-таки не приводит к уменьшению ошибок.
    в конце концов иной раз можно целый день гоняться за каким-нибудь "<" вместо ">" и т.п.
    просто на самом деле начинаешь проверять всё. сделал кусочек, проверил, сделал другой — проверил. собрал вместе — снова ещё пяток раз проверил. ну, если не лень, конечно.

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

    почитал комменты. я тоже веду журнальчик. если замечу с роботом что-то странное, сразу записываю. сейчас висящих задач вроде как нет.
  • ves2010
    14 января 2018, 18:20
    тестить надо на этапе написания кода… а не после...
    вообще… есть норма… 20 строк отлаженного кода в день… 
    • Sergey Pavlov
      15 января 2018, 06:55
      ves2010, 20 — многовато в день. По нормам, если 14 строк в день отлажено (качественно), то день не зря прожит.
  • Alpinist573
    14 января 2018, 18:35
    это оч мало имхо, если только совсем тема незнакомая и плаваешь с языком
  • vladkot
    14 января 2018, 19:33
    А вы баги ищете на бэктестах или на реальных торгах?
      • vladkot
        14 января 2018, 21:12
        Replikant_mih, вообще то бэктест это что-то приближенное к реальности. Много ошибок, много нереальных сделок. Баги нужно искать в реальной торговле. Форвард-тест 1 контрактом даст больше информации, чем куча бэктестов. Мое имхо.
  • Андрей К
    14 января 2018, 22:13
    есть отдельная должность такая — юнит тестировщик. Вот нужно по такому принципу действовать. Отлаживать код кусками и модулями на этапе создания
  • tranquility
    14 января 2018, 23:31
    TDD и стандартные модульные тесты, видимо, крутая вещь, но, возможно, геморрная, когда сам работаешь. Но, видимо, если речь идет о сверх большом проекте, без нее не обойтись. Вопрос только в том, как такое осилить в одиночку...
    У меня проект уже достаточно большой и я его тестирую, часто дублируя функции, написанные разными способами. На выходе имеются два текстовых файла, которые должны в точности совпадать, сравниваются в WinMerge. Выглядит это так:

    Видимо, это тоже какая-то форма TDD.
  • Alpinist573
    16 января 2018, 19:52
    в Луа под квик никаких юнит тестов нет, отлаживаюсь финально (так то конечно каждую ф-цию тестишь на работоспособность в момент написания) на живом рынке, просто одним конем и ставишь цены на исполнение такие, чтобы лимитки повисали без исполнения (на ранней стадии отладки) и в совсем боевом, с исполнением, но маленьким сайзом на фьюче сбера например (подешевле маленько). Когда отладился и запустился, первое время надо не лениться все руками проверять/пересчитывать, бывает что-то вылезает

Активные форумы
Что сейчас обсуждают

Старый дизайн
Старый
дизайн