Задать вопрос
@nico

Как вы организуете разработку сложного продукта?

Суть вот в чем.
Недавно в первый раз начала работать в команде, разрабатывающий крупный проект. под "крупный" я имею в виду много фич, свистелок и прочего.
Проект развивается итерациями и фичи нагромождаются и код, естественно, не самый изящный и простой для понимания и анализа.

В общем, проблема в том, что после каждого спринта я вижу, что тестеры находят кучи багов, которые мы потом дружно правим 3-4 дня. Потому, как, тебя просят добавить или починить функцию А, ты ее чинишь, но попутно, возможно, ломаешь явно фичу Б и неявно В (возможно будет ошибка при работе В и С). Какие-то вещи, особенно из domain покрыты тестами, но всего не покрыть да и логика сложная и код легаси местами.

Так вот, по идее, мне кажется, что возможно организовать разработку так, чтобы этих вот багов было минимум. Что нужно делать? больше тестов? Внимательнее вносить правки в код и проверять все на 100 раз? Или смириться, "так у всех"?
  • Вопрос задан
  • 306 просмотров
Подписаться 1 Оценить Комментировать
Решения вопроса 1
Fesor
@Fesor
Full-stack developer (Symfony, Angular)
Проект развивается итерациями и фичи нагромождаются и код, естественно, не самый изящный и простой для понимания и анализа.


Тесты, TDD, рефакторинг, SOLID. И тогда нет боли. Но это увы далеко не на каждом проекте встретишь.

Потому, как, тебя просят добавить или починить функцию А, ты ее чинишь, но попутно, возможно, ломаешь явно фичу Б и неявно В

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

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


Баги это хорошо, регрессионные баги это плохо, это показатель того что с нашим кодом что-то не так. Уменьшить количество багов просто - нужно больше тестов с учетом различных инвариантов. Но иногда это избыточно, и проще просто словить и пофиксить баг.

Так же рекомедную вам ознакомитсья с практиками экстримального программирования, там много внимания удиляется обратной связи от момента когда разработчик что-то сломал до момента обнаружения проблемы (парное программирование, TDD).
Ответ написан
Пригласить эксперта
Ответы на вопрос 5
@Memorivardo
Покройте код тестами. Сразу будете видеть, что отвалилось после каждого коммита.
Ответ написан
xmoonlight
@xmoonlight
https://sitecoder.blogspot.com
Схема бизнес-процесса, модульность и документация к каждому модулю.
Стыки модулей - должны быть помечены на схеме, сами модули - выделены.
Ответ написан
max-kuznetsov
@max-kuznetsov
Главный IT-архитектор
В целом, похоже, что у вас в команде есть несколько проблем.
Во-первых, либо есть проблемы с архитектурой, либо неверно составлен план разработки. Это может быть связано с игнорированием ограничений agile. Мне кажется, что присутствует и то, и другое.
Во-вторых, программисты не сильно мотивированы писать качественный код, либо не имеют возможности этого делать. Возможно, у них не складывается модель предметной области, и, исправляя одну бяку, они тут же вносят новую. Есть смысл подумать о специализации конкретных разработчиков (или небольших групп разработчиков) на конкретных направлениях. Попробуйте разбить крупный проект на несколько отдельных "изолированных" проектов, в каждом из которых следует рассматривать смежные подпроекты как внешние системы. Каждому подпроекту нужна своя команда. Это сделает проект управляемым и понятным всем участникам.
А дальше, соглашусь с Сергей Протько , "Тесты, TDD, рефакторинг, SOLID".
Ответ написан
@lamazavr
высокая связанность кода, бегите
Ответ написан
@Elizavetta
Matroid: gamedev/js-разработка
Видимо у вас в проекте:
- код сильно связан
- таски выполняются всеми в параллель, ни у кого нет своих компонентов
- возможно, сами спринты составляются не вполне логично, из-за изменяющихся требований
- возможно, вам не выделяют время на рефакторинг, а требуют, чтобы всегда выполнялась какая-то таска или фикс
Все рекомендации дали выше, но также стоит подумать над рефакторингом модулей в первую очередь, после этого покрывать тестами.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы