Что такое командная разработка. Как получить опыт командной разработки.

Автор: Петр Арсентьев


Team work

Что такое командная разработка. Как получить опыт командной разработки.

Практически во всех вакансиях на позицию Java программист есть пункт – опыт командной разработки. Давайте разберемся, что такое командная разработка, и как можно самостоятельно получить опыт командной разработки.
Давайте рассмотрим два примера командной работы.
Пример первый – грузчикам нужно поднять пианино на 5 этаж. Чтобы выполнить эту задачу, нужно минимум два человека. Работу они должны выполнять совместно и синхронно. Если один из грузчиков устал, вся команда должна остановиться.
Пример второй – ремонт в квартире. Для выполнения этой задачи нужно несколько специалистов: электрик, отделочник, сантехник. Каждый член этой команды может выполнять свою работу независимо от другого члена команды. Если отделочник заболел и не может работать, то это не повлияет на работу электрика и сантехника.
Эти два примера наглядно демонстрируют два типа командной работы.

Первый тип – работу можно выполнить только группой людей.
Второй тип – работу можно выполнить одному.

Важно понимать, что все IT проекты относятся ко второму типу командной разработки. То есть все процессы в разработке могут выполняться независимо от других членов команды. Например, команда состоит из 3 человек: back-end программист, front-end программист и android программист. Каждый из членов команды может выполнять свои задачи независимо друг от друга.
Возникает закономерный вопрос, в чем тогда смысл командной разработки, если каждый из членов команды работает независимо. Смысл в том, что все члены работают над общим ресурсом – это проект. В примере с ремонтом – это квартира. Чтобы всем членам команды было удобно и эффективно выполнять свои задачи, каждый член команды должен следовать регламентированным правилам. Опыт применения этих правил и требуется в вакансиях. Давайте рассмотрим эти правила.

Использование системы контроля версий (Git, SVN, Mercurial) для хранения исходных кодов.

Система контроля версий решает несколько важных задач.
1. Хранение исходных кодов.
2. Хранение истории изменений кода.
3. Распределенное пользование исходным кодом. Каждый член команды использует один и тот же репозиторий. Это позволяет мгновенно получать обновления, которые сделали другие члены команды.
4. Решение конфликтов в измении кода. Если два программиста поправят один и тот же кусок кода,
то система сообщит о конфликте версий кода и попросит одного из членов команды устранить эти конфликты.
В курсе job4j мы используем сервис GitHub – этот сервис предоставляет бесплатный доступ к использованию системы контроля версий.

Использование багтрекера для ведения проекта.

Для управления состоянием проекта весь проект разбивают на отдельные задачи.
Эти задачи заводят в трекинговую систему, где отслеживают их состояния.
Каждая задача назначается члену команды. Когда программист завершает работать над задачей,
он отписывает в трекер и переводит задачу в состояние «решена».
Другие члены команды могут посмотреть, что происходило с задачей.
Тоже самое касается любых непонятных ситуаций. Если есть вопрос, то создается задача,
в которой описывается, что не понятно. Менеджер проекта переводит задачу на соответствующего члена команды, который отвечает на вопросы.
Это позволяет всем членам команды иметь доступ к любой информации о проекте.
В курсе job4j мы используем TrackStudio для этой цели. Каждому ученику создаются задачи,
которые он должен решить. Вы можете использовать другой инструмент – git issues.

Использование cистемы автоматической сборки: Maven, Gradle, Ant

Каждый член команды работает на своем персональном компьютере.
Поэтому в проекте должен быть стандартизированный инструмент для сборки.
Это исключит проблемы с настройкой окружения среды и сборкой проекта.
Например, кто-то использует для разработке IDEA, а кто-то Eclipse. Кто пишет на MacOS, а кто-то на Linux.
Каждому разработчику пришлось бы создавать скрипты под свое окружение – это занимает время на объединение результатов работы и сборки проекта.
В курсе Job4j мы используем Maven. Инструмент позволяет производить различные манипуляции с проектом: компилировать, запускать тесты, проверять качество кода.

Использование инструментов для проверки качества кода: JUnit, JaCoCo, CheckStyle.

Так как мы программисты, то часть задач по качеству кода мы можем возложить на инструменты анализа кода.
Каждый из нас уникален, и каждый имеет свой стиль программирования.
Но когда мы работаем над общим проектом, нам следует придерживаться стандартных правил.
CheckStyle – библиотека, позволяющая привести ваш код под стандартные требования оформления – Java code convention.

Так же другие простые вещи – это автоматические тесты. По ним мы можем понять,
работает ли наше приложение хотя бы от части, и как хорошо мы написали наши тесты.
Для это цели мы используем модульные тесты JUnit и JaCoCo. Эти библиотеки хорошо интегрируется в Maven.
В курсе job4j мы так же используем эти бесплатные решения – Junit JaCoCo Checkstyle.

Использование непрерывного интегрирования.

Диалог коллег программистов.
- Ты коммит недавно делал?
- Да.
- У меня проект не собирается.
- У меня все собирается. Вот смотри. Это у тебя проблема .
Чтобы избежать таких ситуациий, нам нужен беспристрастный судья, который соберет проект, запустит тесты и скажет, кто виноват, если произошла проблема.
Процесс разработки ПО включает в себя несколько фаз.
1. Разработка технического задания.
2. Написание кода и тестов.
3. Тестирование кода, валидация и проверка покрытия.
4. Сборка проекта.
5. Загрузка и запуск проекта на сервере.
Все эти этапы - это последовательность действий. Существует методология разработки ПО при которой часть этих этапов автоматизирована.
Это методология называет Непрерывная интеграция (Continuous Integration).
Каждое изменение кода должно проходить фазу тестирования и валидацию кода.
Если предыдущая фаза прошла успешно, то можно переходить к выполнению новой фазы.
Все эти процессы выполняются автоматизировано. Это сокращает время разработки и уменьшает риски на человеческий фактор.
В этом курсе Job4j мы используем Travis CI в качестве сервера для CI. Этот сервис бесплатный для opensource проектов.

В заключении.

Для командной разработки вам нужен только компьютер, интернет и желание развиваться в программировании.
Не надо пинать друзей или искать единомышленников, чтобы изображать команду программистов. Это не про командную работу.
Получить опыт командной разработки просто, нужно начать использовать эти инструменты:
Git, Git Issue, Maven, Checkstyle, JUnit, JaCoCo, Travis CI.
Как вы видите, в курсе Job4j мы так же используем эти инструменты.
Это позволяет подготовить учащегося к реальному проекту.
Наиболее быстрый способ овладеть этими инструментами – заниматься с индивидуальным ментором.