Всем привет! Меня зовут Иван. И я решил завести этот канал под новый год, чтоб подвести итоги года 🤡
Шутка-шутка.
Уже 13 лет япрограммирую перекладываю жсоны, а в свободное время занимаюсь скалолазанием и перекладыванием жсонов. За это время, у меня накопился определенный багаж опыта и знаний в этой теме, которыми бы я хотел делиться. А еще, я часто бомблю в дискуссиях на тему программирования. Но собираюсь покончить с этой пагубной привычкой! (тут возможен пиздеж)
Поэтому я завел этот канал, где планирую
• Постить всякие мысли по поводу разработки ПО
• Делиться техническими заметками на тему программирования
• Читать ваши комментари, и стараться не бомбить (робота над собой)
• Постить мемасы и шутейки
Так шо подписывайтесь пожалуйста и каментируйте. В свою очередь, обещаю вам не спамить слишком сильно, быть конструктивным и не супер душным ❤️
Шутка-шутка.
Уже 13 лет я
Поэтому я завел этот канал, где планирую
• Постить всякие мысли по поводу разработки ПО
• Делиться техническими заметками на тему программирования
• Читать ваши комментари, и стараться не бомбить (робота над собой)
• Постить мемасы и шутейки
Так шо подписывайтесь пожалуйста и каментируйте. В свою очередь, обещаю вам не спамить слишком сильно, быть конструктивным и не супер душным ❤️
❤13🔥3👨💻3🗿2👾2💩1
Чуть меньше года прошло с моего митапа про юнит тестирование. И вы спросите "Поменялось ли что-то с тех самых пор? Стал ли ты писать тесты по-другому? Как у тебя вообще дела? " А я вам отвечу "Да, кое-что поменялось. Да, стал писать тесты немного по-другому". Сейчас расскажу про это поподробнее. Но прежде всего, давайте напомню основные тезисы с митапа.
Существуют две школы юнит тестирования, основные отличия между которым заключается в том, что именно мы заменяем тестовыми заглушками (моками):
* Классическая школа (КШ) - мокаем только внешние зависимости (кроме базы данных)
* Лондонская школа (ЛШ) - мокаем все зависимости
Соответственно, юнит это:
* Единица поведения в КШ
* Единица кода (метод или функция) в ЛШ
Митап строился по книге Владимира Хорикова "Принципы юнит тестирования". Книгу рекомендую к прочтению. В книге В. Хориков призывает писать тесты с ипользованием КШ. Я с этим мнением не согласен. На митапе я больше тяготел к ЛШ. Про плюсы и минусы обоих школ можно кратко посмотреть в моей презентации.
ЛШ позволяет более простым способом обеспечить полное покрытие тестами (формально). Если есть две зависимости A и B с n и m возможными исходами соотвественно, то в ЛШ мы пишем n + m тестов. В КШ нам прошлось бы написать n * m тестов. Разумеется, если зависимостей больше, то это произведение будет стремительно расти. Лондонская школа дает ощущение достижимости полного покрытия. Даже если ты не ставишь целью достичь 100% покрытия, ты все равно пишешь и пишешь эти тесты. Потому что можешь.
КШ даже не ставит перед тобой подобных задач. Потому что это недостижимо и неважно. Просто покрываем позитивные пути, и, если будет желание, парочку самых важных кейсов с ошибками.
Теперь о том, как изменилось мнение касательно юнит тестов.
Основным минусом ЛШ для меня стало время. В какой-то момент я стал понимать, что не фичи пилю, а тесты. Причем, те баги, что я находил с помощью тестов, могли бы быть найдены и с менее полным покрытием. В итоге я стал сочетать обе школы. Знаете, это будто какой-то переход в зрелость: тебе дают два противоположных подхода, но вместо выбора одного из них, ты начинаешь использовать их как инструменты и выбирать соответствующий под ситуацию.
Приведу (абстрактный) пример из практики. Допустим у вас есть подсистема, которая определяет правила доступа к контенту с очень сложной бизнес логикой. Эта подсистема может состоять из кучи внутренних юнитов. Вместе с тем, есть части системы, которые используют эту подсистему: показ контента, генерация отчетов, подписки и прочее. Тогда наверное имеет смысл использовать КШ для подсистемы правил, а для клиентских частей оставить ЛШ, верно?
Неверно! Это зависит от устройства подсистемы правил доступа. В некоторых случаях будет достаточно сделать именно так. Но, допустим, эта подсистема просто дергает другие подподсистемы, а итоговый результат - это логическое сложение результатов. В этом случае может иметь смысл оставить тестирование с помощью ЛШ, а как раз таки внутренние подподсистемы протестировать классически.
Как определить, где какую школу использовать? К сожалению простого ответа здесь дать не смогу. Как и многое в разработке ПО, выбор школы тестирования - это выбор наиболее компромиссного варианта, основанный на вашем опыте. В данный момент я делаю выбор так, чтоб минимизировать время их написания и количество кода в тестах. В конечном итоге это выливается в вопрос: какая школа обеспечит более простую преподготовку данных при схожем покрытии?
Штош, получилось душновато. Соррян)
Поделитесь в каментах, пишите ли вы юнит тесты? какой подход используете?
Существуют две школы юнит тестирования, основные отличия между которым заключается в том, что именно мы заменяем тестовыми заглушками (моками):
* Классическая школа (КШ) - мокаем только внешние зависимости (кроме базы данных)
* Лондонская школа (ЛШ) - мокаем все зависимости
Соответственно, юнит это:
* Единица поведения в КШ
* Единица кода (метод или функция) в ЛШ
Митап строился по книге Владимира Хорикова "Принципы юнит тестирования". Книгу рекомендую к прочтению. В книге В. Хориков призывает писать тесты с ипользованием КШ. Я с этим мнением не согласен. На митапе я больше тяготел к ЛШ. Про плюсы и минусы обоих школ можно кратко посмотреть в моей презентации.
ЛШ позволяет более простым способом обеспечить полное покрытие тестами (формально). Если есть две зависимости A и B с n и m возможными исходами соотвественно, то в ЛШ мы пишем n + m тестов. В КШ нам прошлось бы написать n * m тестов. Разумеется, если зависимостей больше, то это произведение будет стремительно расти. Лондонская школа дает ощущение достижимости полного покрытия. Даже если ты не ставишь целью достичь 100% покрытия, ты все равно пишешь и пишешь эти тесты. Потому что можешь.
КШ даже не ставит перед тобой подобных задач. Потому что это недостижимо и неважно. Просто покрываем позитивные пути, и, если будет желание, парочку самых важных кейсов с ошибками.
Теперь о том, как изменилось мнение касательно юнит тестов.
Основным минусом ЛШ для меня стало время. В какой-то момент я стал понимать, что не фичи пилю, а тесты. Причем, те баги, что я находил с помощью тестов, могли бы быть найдены и с менее полным покрытием. В итоге я стал сочетать обе школы. Знаете, это будто какой-то переход в зрелость: тебе дают два противоположных подхода, но вместо выбора одного из них, ты начинаешь использовать их как инструменты и выбирать соответствующий под ситуацию.
Приведу (абстрактный) пример из практики. Допустим у вас есть подсистема, которая определяет правила доступа к контенту с очень сложной бизнес логикой. Эта подсистема может состоять из кучи внутренних юнитов. Вместе с тем, есть части системы, которые используют эту подсистему: показ контента, генерация отчетов, подписки и прочее. Тогда наверное имеет смысл использовать КШ для подсистемы правил, а для клиентских частей оставить ЛШ, верно?
Неверно! Это зависит от устройства подсистемы правил доступа. В некоторых случаях будет достаточно сделать именно так. Но, допустим, эта подсистема просто дергает другие подподсистемы, а итоговый результат - это логическое сложение результатов. В этом случае может иметь смысл оставить тестирование с помощью ЛШ, а как раз таки внутренние подподсистемы протестировать классически.
Как определить, где какую школу использовать? К сожалению простого ответа здесь дать не смогу. Как и многое в разработке ПО, выбор школы тестирования - это выбор наиболее компромиссного варианта, основанный на вашем опыте. В данный момент я делаю выбор так, чтоб минимизировать время их написания и количество кода в тестах. В конечном итоге это выливается в вопрос: какая школа обеспечит более простую преподготовку данных при схожем покрытии?
Штош, получилось душновато. Соррян)
Поделитесь в каментах, пишите ли вы юнит тесты? какой подход используете?
❤6🏆3❤🔥2👍2🌭2💊2⚡1
Вместо вонючих итогов года хотелось бы поделиться историей и немножко понастальгировать😊
В далеком 2017-м году я написал простенькое расширение для гугл хрома. Это расширение позволяло скачивать пачками фотографии из диалогов в ВК. Идея создания этого расширения и проблематика, с которой оно борется, будто бы пришли из другой жизни. Тогда трава была зеленее, а солнце светило ярче. В моем 2017-м году ни одна тусовка или мероприятие не обходились без соответствующего сообщества или группы в ВК. После мероприятия, все что было нафотано скидывалось угадайте куда? Ну и, соответственно, там эти фотки оставались ипроябывались забывались. Хотелось как-то достать их оттуда и сохранить куда надо. Так и появилась мысль создать приложение, которое будет решать эту проблему. Прежде всего для меня самого.
Сейчас заканчивается 2024 год. Этот пост я пишу не где-то в ВК, а здесь в телеге. Все мои друзья и знакомые, которые заливали фотки в те самые группы ВК, уже давно перестали это делать. Да и такой потребности больше нет будто😢 Поменялись компании, окружающие люди, города. Встречи стали реже, фоток стало меньше, и они все заливаются в телегу, а не в ВК.
Так почему же сейчас в конце 2024 года я вспоминаю об этом? Последние коммиты я сделал в 2019 году. Я поправил все баги, которые смог найти на тот момент. После этого я напрочь забыл о нем и забил. Но в этом году мне 3 раза написали разные люди по поводу этого расширения. Сначала написал какой-то бухой чел, и я так и не понял че он хотел от меня. А затем прилетели 2 письма - благодарочки с запросами на фичи. После последнего письма я решил чекнуть, как там дела у расширения, и обнаружил, что последний отзыв на него "Не работает". Решил проверить, и оно правда не работало. Оказывается ВК поменял на своей стороне формат ссылок, и оно сломалось. В хром сторе же мне услужливо сообщили, что мое расширение будет скоро удалено, потому что использует старый api. Короче говоря, тлен и безнадега😔
А затем я глянул на статистику использования (см. картинку). Оказывается все эти 5 лет расширением пользовались, да еще как. Я не знаю, кто все эти люди, использующие ВК в 2024, но для меня это было одним из самых приятных и жизнеутверждающих моментов этого года. Ощущение того, что кто-то считает полезным то, что ты сделал, и благодарит тебя за это - бесценно☺️ Вдохновившись, я даже оторвал жопу, чтоб переписать экстеншн на новую версию api, и наконец-то спустя 7 лет выпустил версию 1.0.0 🥳
И вы меня спросите "так в чем же секрет твоего ошеломительного успеха?", а я вам отвечу "jquery, bootstrap и херовый код - вот 3 кита, на которых зиждятся маленькие победы".
Короче выводы:
1. Благодарочка от других людей - это круто и приятно
2. Иногда жизнь преподносит подарки
3. Подарков будет больше, если что-то делать
4. Подарок будет приятнее, если ни на что не надеяться и ничего не ждать
Всех с наступающими, и надеюсь, что грядущий год принесет вам много приятных подарков!🎁
В далеком 2017-м году я написал простенькое расширение для гугл хрома. Это расширение позволяло скачивать пачками фотографии из диалогов в ВК. Идея создания этого расширения и проблематика, с которой оно борется, будто бы пришли из другой жизни. Тогда трава была зеленее, а солнце светило ярче. В моем 2017-м году ни одна тусовка или мероприятие не обходились без соответствующего сообщества или группы в ВК. После мероприятия, все что было нафотано скидывалось угадайте куда? Ну и, соответственно, там эти фотки оставались и
Сейчас заканчивается 2024 год. Этот пост я пишу не где-то в ВК, а здесь в телеге. Все мои друзья и знакомые, которые заливали фотки в те самые группы ВК, уже давно перестали это делать. Да и такой потребности больше нет будто😢 Поменялись компании, окружающие люди, города. Встречи стали реже, фоток стало меньше, и они все заливаются в телегу, а не в ВК.
Так почему же сейчас в конце 2024 года я вспоминаю об этом? Последние коммиты я сделал в 2019 году. Я поправил все баги, которые смог найти на тот момент. После этого я напрочь забыл о нем и забил. Но в этом году мне 3 раза написали разные люди по поводу этого расширения. Сначала написал какой-то бухой чел, и я так и не понял че он хотел от меня. А затем прилетели 2 письма - благодарочки с запросами на фичи. После последнего письма я решил чекнуть, как там дела у расширения, и обнаружил, что последний отзыв на него "Не работает". Решил проверить, и оно правда не работало. Оказывается ВК поменял на своей стороне формат ссылок, и оно сломалось. В хром сторе же мне услужливо сообщили, что мое расширение будет скоро удалено, потому что использует старый api. Короче говоря, тлен и безнадега😔
А затем я глянул на статистику использования (см. картинку). Оказывается все эти 5 лет расширением пользовались, да еще как. Я не знаю, кто все эти люди, использующие ВК в 2024, но для меня это было одним из самых приятных и жизнеутверждающих моментов этого года. Ощущение того, что кто-то считает полезным то, что ты сделал, и благодарит тебя за это - бесценно☺️ Вдохновившись, я даже оторвал жопу, чтоб переписать экстеншн на новую версию api, и наконец-то спустя 7 лет выпустил версию 1.0.0 🥳
И вы меня спросите "так в чем же секрет твоего ошеломительного успеха?", а я вам отвечу "jquery, bootstrap и херовый код - вот 3 кита, на которых зиждятся маленькие победы".
Короче выводы:
1. Благодарочка от других людей - это круто и приятно
2. Иногда жизнь преподносит подарки
3. Подарков будет больше, если что-то делать
4. Подарок будет приятнее, если ни на что не надеяться и ничего не ждать
Всех с наступающими, и надеюсь, что грядущий год принесет вам много приятных подарков!
Please open Telegram to view this post
VIEW IN TELEGRAM
🎉13❤3🔥1
