Вчера посмотрел презентацию по лучшими практиками написания приложений на Go. Хочу прокомментировать в нескольких постах основные моменты, которые пригодятся не только Go программистам
1. Пишите тестируемый код
На видео автор уделяет отдельное внимание теме автоматичесого тестирования. И понятно почему: как разработчик, могу сказать, что примерно половина рабочего времени уходит на ручное тестирование программ. Это не так плохо, если после завершения проекта к коду никто и никогда не будет прикосаться. Но чаще всего, проект развивается, и со временем в него вносятся изменения. Тут то и начинаются проблемы: сделали небольшое изменение, протестировали руками измененный код и выкатили, не заметив проблем, которые проявляют себя только в динамике
Особенно эта боль остро чувствуется в языках с динамической типизацией. Например: функция всегда ожидала на вход число, а тут она начнет получать (null / nil) и начинает падать. Разработчик в принципе не мог помнить, что от чего зависит в проекте, соответственно ругать его - не самое лечшее решение, чтобы избежать подобных проблем. В таких ситуациях лучше всего писать приложение (автоматические тесты), которое тестирует ваше приложение. Такой подход поможет выиграть время, которое вы бы могли потратить на ручной прогон приложения
Не подмуайте, что все так гладко - придется писать код по-другому - он должен быть готов к тому, что его будут автоматически тестировать. По опыту могу сказать, что в основном, необходимо помнить про 2 взаимосвязные вещи:
1) избегать глобальные состояния (global state);
2) делать "инъекции" зависимостей (dependency injection) в тестируемые функции
Эти советы можно хорошо прочувтсвовать при работе с фреймворком AngularJS - там практически везде необходимо использовать инъекции зависимостей и уходить от глобального состояния. Рекомендую потратить несколько дней на опробывание данной технологии - лично для меня этот опыт был бесценен
В итоге, изменив свой подход к тестированию, вы станете уверенней себя чувствовать во время релиза, ведь теперь, искать проблемы за вас начнет другая программа
По теме тестирования хочу посоветовать отличную книгу "Как тестируют в Google". После прочтения, становится понятно, как массивная компания все еще имеет возможность так быстро двигаться. Секрет в особом подходе к тестированию (неожиданно, да?)
P.S. Я начинаю прорабатывать видео курс (бесплатный) по программированию на Go, и если вам интересно понаблюдать за разработкой реального приложения со многими проблемами и их решениями, стоящих на пути разработчика (в том числе и автоматические тесты), то напишите "+" мне в личку @dkostenko
Post #35
1.74K