Метка: тестирование

  • Тестирование для вайб-кодинга

    Тестирование для вайб-кодинга

    Чем больше вокруг кода пишется с помощью ИИ, тем больше мы должны уделять внимания тестированию проектов.

    – Без тестов мы не можем быть уверены, что ИИ не разрушил часть работающего функционала. Галлюцинации и потеря контекста вносят неожиданные проблемы, которые тесты могут выявить.
    – В среднем, код сложнее, чем тесты — у него больше вариантов в результате исполнения. Предполагаю, поэтому ИИ будет проще писать хорошие тесты, чем хороший код.
    – Автоматизированное тестирование станет более доступным по цене и не таким трудоёмким в создании: большая часть рутинного кода будет писаться тоже с помощью ИИ. Очень мало причин не обзавестись регрессионными тестами.
    – В ближайшее время появится множество инструментов для покрытия тестами, ревью кода, анализа и исправления ошибок с помощью ИИ.
    – Аудиты на безопасность и нагрузочное тестирование сможет запускать агент.

    Есть обратная сторона. ИИ может писать такой код, чтобы он проходил тест, а не решал поставленную задачу. Он может даже подменять ожидаемое значение, лишь бы пройти тест. Хорошо на этот случай иметь множество разных проверок кода — юнит-тесты, статический анализ, линтеры, попытка компиляции, функциональное тестирование, интеграционные и e2e-тесты, автоматизированное и ручное ревью кода.

    Как мне кажется, объём и качество тестирования будет расти. Возможно, будет нужен агент или человек для тестирования тестов!

  • Тестовые задания для разработчиков

    Тестовые задания для разработчиков

    Тестовые задания для разработчиков.

    Не люблю я тестовые задания. И разработчики не любят.

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

    Мидл не оскорбится, но проверить его навыки у вас тоже получится плохо. С выдуманным маленьким тестовым он справится без труда. Большое тестовое бесплатно делать не захочет. Задание нужно компетентно проверить и затем обсудить. Кто будет тратить на это ресурсы?

    Джун может посыпаться даже на простом задании. Вы же собираетесь его доучивать? Проверите разве что базовые навыки: нажимать на кнопки, смотреть в документацию и кормить вашими тестовыми нейросеть.

    Лайв кодинг — отдельная категория увеселительной и ненужной активности. Выполняем абстрактное тестовое онлайн и наблюдаем за нервничающим кандидатом. Так можно проверить только стрессоустойчивость, но не навыки решения проблем.

    Задайтесь вопросом, что мы на самом деле пытаемся у кандидата тестовыми заданиями узнать? Можно ли эти ответы получить иначе?

    Моя практика с тестированием навыков такая:
    1) Для сеньоров и мидлов — начать с обсуждения тестового ТЗ, очень похожего на реальный проект. Тут вы действительно сможете понять логику, оценить предлагаемые решения и обсудить реализацию. На пальцах и за 20 минут. Такое ТЗ без проблем составит ваш ПМ.
    2) Дать настоящие задачи и оплатить их выполнение. Я стараюсь вывести всех перспективных кандидатов на тестовую неделю. Мы увидим всё — навыки коммуникации, командной работы, скорость работы, владение реальными инструментами и возможность решать задачи реального мира. В любой момент тестовой недели обе стороны могут остановить тест и безопасно разойтись.
    3) Для джуна — он же не только у вас собеседование проходит. Спросите, какие ещё тестовые он проходил — и попросите показать результат. Сомневаюсь, что он подписал на тестовые NDA. Заодно поймёте, как подбирают разработчиков ваши коллеги и конкуренты.
    4) У всех кандидатов просить реальный код любого проекта. Можно не с прошлой работы, можно пет-проект. Этот код можно скормить на аудит нейросетке.

    А у вас как с тестовыми? Были случаи, когда они реально необходимы?

  • Пройти Тест Джоэля

    Пройти Тест Джоэля

    В 2000 году Джоэль Сполски — сооснователь StackOverflow и Trello, написал список из 12 вопросов, известные как Тест Джоэля. Часто ссылаюсь на этот тест, поэтому прокомментирую эти вопросы.

    1. Используете систему контроля версий?
    Кажется, что git — уже обязательная вещь. Но до сих пор встречаются проекты без системы контроля версий.
    Для тех, кто уже использует, вопрос всё ещё актуален, но теперь звучит так: Вы действительно используете систему контроля версий? У вас есть стратегия ветвления, процедура слияния веток, понятные правила для работы с репозиторием?

    2. Сборка проекта происходит в один шаг?
    Проект должен собираться в 1 команду и она должна быть написана в readme. Если для запуска проекта требуется поставить несколько сервисов, иметь нужную версию компилятора и запущенную базу данных — стоит прописать все эти зависимости в docker-compose и запускать одной командой. После прихода виртуализации оправданий для многошаговой сборки и зависимости от среды больше нет.

    3. У вас настроен CI/CD?
    В оригинале Джоэль говорит про daily build — оперативная сборка софта каждый день. Сейчас в большинстве команд нет нужды синхронизировать код раз в день, можно делать это автоматически каждый раз, когда код попадает в репозиторий.
    Настройте автоматическую сборку и выкатку приложения на тестовый сервер.

    4. У вас же есть база багов? Правда?
    Громоздкая Джира не единственный вариант. Эксель тоже подойдёт! Если у вас есть общий зафиксированный список проблем, вы можете с ними работать и планировать их устранение.

    5. Вы чините баги до написания нового кода?
    Технический долг на проектах с горящими сроками не вызывает вопросы. Но когда сроки сгорели, вы же выделяете время на рефакторинг и устранение багов? Команду не просто демотивирует развивать новые фичи в продукте, когда в фундаменте есть проблемы. Это приводит к плохим архитектурным решениям и обрушению новых этажей.

    6. У вас есть план работ со сроками?
    План, который знают все и который связан с реальностью. Roadmap, этапы или просто дата, в которую надо запуститься.
    Работа ведёт себя как газ — занимает всё выделенное время. Ставьте сроки.

    7. У вас есть спецификация?
    Банально, но без ТЗ результат ХЗ. Сейчас не нужно писать исчерпывающее финальное тех задание — требования поменяются по ходу разработки. Достаточно написать концепцию, сделать прототипы, записать user story и опубликовать. Задачи тоже нужно записать и поставить в трекер.

    8. У разработчиков есть тихие рабочие места?
    Ваш разработчик всё ещё сидит в опенспейсе? Зря-зря. Скорее всего, он уже обзавёлся наушниками и пытается от вас отвернуться. Помогите ему создать изолированную среду.

    9. У разработчиков лучшая техника и инструменты?
    Быстрый комп, 2ой монитор, современный софт, быстрые серверы — стоят копейки относительно времени программиста. Планка памяти стоит как час работы разработчика. Ускоряйте их всеми доступными способами, это очень дёшево.

    10. У вас есть тестировщики?
    Если баги ищут только разработчики — значит, баги находят пользователи.
    Менеджеры и программисты проверяют, что код работает. Тестировщики проверяют, ищут где он не работает. У вас должен быть хотя бы 1 тестировщик в команде на нескольких разработчиков.

    11. Пишут ли кандидаты код на собеседовании?
    Это единственный пункт, с которым я сейчас не полностью согласен в его изначальной формулировке. Изучить код и мышление кандидата на собеседовании получится, а вот показать реальные навыки в стрессовой ситуации собеседования — вряд ли. Мой рецепт — выводить подходящих кандидатов на тестовую неделю и смотреть совместимость без давления в реальной обстановке.

    12. Вы делаете usability тесты на добровольцах?
    Соберите группу для тестирования. Первые 5 случайных пользователей укажут вам на 95% проблем. Находите этих пользователей и проводите тестирование до большого релиза. Это дёшево и просто. В оригинале предлагается поймать добровольца в коридоре компании, но сейчас эра удалёнки — найдите их онлайн.

    Если вы фаундер или руководитель и у вас есть ответы “Нет” — их точно стоит обсудить с командой.

  • Оргструктура для стартапа — как назначить всем должность

    Оргструктура для стартапа — как назначить всем должность

    Оргструктура для стартапа — как назначить всем должность.

    Пока компания небольшая и все делают всё, очень большой соблазн не проектировать структуру организации. Особо самоуверенные предприниматели игнорируют её годами. Грабли детские, поэтому бьют особенно больно ниже пояса.

    Я выписал всё, чем нам нужно заниматься. Разработкой всё не ограничивается. Огромное количество действий поглощает рабочие дни команды: продажи, редакция, партнёрская программа, маркетинг, PR, финансы, бухгалтерия, HR, секретарь, служба поддержки, продукт, разработка, дизайн, интеграции, тестирование, юридические аспекты, инвестиции.

    И попробовал рассортировать по кучкам. Потом на эти кучки можно будет приклеить ярлычки CEO, CFO, CMO, C3PO, R2D2…

    Через 40 минут сортировки на доске я понял, что у меня не стыкуется. Текущая команда и виртуальная структура с дырками… В общем, заставил GPT воображать себя венчурным инвестором и успешным предпринимателем, после чего скормил ему эту задачу. Описал всех участников, рассказал, кто чем занимается и дал список направлений деятельности.

    Такое распределение менеджмента получилось в итоге:
    1. CEO (Chief Executive Officer) + CTO (Chief Technology Officer). Генеральный + технический директор. Стратегия и руководство, технические вопросы, финансы, инвестиции.
    2. COO (Chief Operating Officer) + CRO (Chief Revenue Officer). Операционный директор + РОП. Продажи, управление редакцией, онбординг новых клиентов и сотрудников.
    3. Head of Design & UX/UI — Дизайнер.
    4. Head of Customer Support — Поддержка клиентов.
    5. Head of Marketing (потенциально CMO) — Маркетолог.

    Забавно, что AI назначает Head of, даже если в отделе один специалист. Но мы помним, что в стартапе карьерные ступеньки подставляют вниз. Ещё интересно, что не все участники команды получили позицию менеджера. Даже если этот участник в отделе один.

    Теперь дополнительная польза. Кого можно сейчас не нанимать?
    Chief Product Officer (CPO) — Директор по продукту. В нашем случае закрывается созданием продуктовой команды из CEO/CTO + COO + Design. Лучшее решение, спасибо искусственным мозгам! Что интересно — ровно так разработка у нас и происходит. Находка, что можно не выделять главного в этом процессе и продолжать работать коллективом.

    Chief Financial Officer (CFO) — Финансовый директор. Когда деньги появятся, тогда и возьмёте. Для меня отличным решением оказалось раннее выделение роли Chief Revenue Officer без довеса на эту роль функционала CFO. И правда, чем управлять? Продавайте пока и всё.

    HR-менеджер — Управление персоналом пока больше сводится к найму. Это закрывают сами CEO и COO, а что не смогут — отдать рекрутерам. Мы можем долго не нанимать выделенного HR, потому что оба фаундера много нанимали сами в других проектах.

    Юрист — аутсорсить на точечных консультациях (это мы уже начали) или взять агентство (а вот это пока навряд ли).

  • Как код попадает на сервер 2025 edition

    Как код попадает на сервер 2025 edition

    Как раньше: открыл удалённую папку на сервере по FTP, скопировал туда свои файлы — сайт работает.

    К каким проблемам это приводило:
    – Два разработчика скачали один и тот же файл, внесли правки и по очереди загрузили их на сервер. Изменения первого разработчика стёрты вторым.
    – Разработчики работают прямо на сервере. Человеческий фактор неизбежно приводит к ошибкам.

    Как это выглядит у нас сейчас:
    – Разработчик копирует код из Git-репозитория (git clone/git pull)
    – Создаёт свою ветку, в ней изменения хранятся отдельно (git checkout -b)
    – Вносит изменения в свой экземпляр (git commit)
    – Отправляет изменения обратно в репозиторий (git push)
    – Создаёт запрос на добавление своих изменений в общий код (Merge Request)
    – Робот 🤖 на новом поддомене разворачивает тестовую копию сайта с изменениями (Review Apps) и запускает тестирование
    – Менеджер, Тестировщик и другие разработчики смотрят и щупают изменения
    – Разработчик дорабатывает код, тестовый сайт автомагически обновляется
    – После принятия запроса на слияние (Merge Request) все новые изменения автоматически выкатываются на промежуточный сервер
    – С промежуточного сервера время от времени все обновления попадают на основной сервер (тоже через Merge Request)

    В итоге менеджеры могут одновременно отслеживать прогресс разных задач на тестовых доменах и давать обратную связь.
    Дополнительные бонусы: исключаем риск утечки данных (152-ФЗ) и рукожопства на сервере (🤖).