Такой вопрос частенько возникает у новичков, которые приходят на проект. Или же бывают ситуации, когда проект уходит на поддержку и развитие в новые руки, и у нового разработчика также появляется этот вопрос. И редко кто из них пытается разобраться в реальных причинах, почему здесь так, а не иначе. Это может привести к печальным последствиям для бизнеса, например, новый разработчик может настоять на том, чтобы переписать все приложение с нуля.
Чтобы минимизировать такие риски, следует вместо вопроса «
почему так сложно?» задаться такими вопросами:
- Какие требования к процессу разработки закладывал архитектор?
- Какой результат процесса разработки требуется на выходе?
Требования к процессу разработки
Сначала разработчик должен вникнуть в систему процесса разработки, он должен задать такой вопрос:
По какой системе выстроен процесс?
Часто в заказной разработке на вход приходит проект с однозначными требованиями и фиксированным набором функционала. Насколько проработанными они могут быть — это уже тема другой статьи. И процесс разработки в таких проектах чаще всего выстроен по водопадной системе, потому как предполагает непосредственную обратную связь от пользователей продукта — после разработки всего функционала продукта, тогда как при итерационной модели обратную связь можно получить уже после первой итерации. У архитектора для таких проектов обычно уже припасена устоявшаяся архитектура, которая отвечает определенным требованиям к этому процессу. Какие же требования к такому процессу разработки закладывает архитектор?
1)
Pipeline процесса разработки должен быть максимально сложным для разработчика. И отбраковывание кода, поступающего в репозиторий проекта, должно по максимуму происходить автоматически и, по возможности, без участия самого архитектора.
Т.е. в процессе должен быть настроен определенный
pipeline. Код, который прошел весь этот
pipeline — считается удовлетворяющим требованиям. Это очень важно, т.к. хорошему архитектору необходимо избавить его разработчиков от головной боли и ответственности за не рабочую сборку послепопадания кода в репозиторий. Если такого
pipeline нет — ваши разработчики будут страдать от постоянного стресса. Если код попал в репозиторий и
pipeline его принял, и этот код сломал сборку или повредил уже работающий функционал — это уже проблема самого
pipeline.
Поэтому в таком
pipeline необходимо использовать:
- Множество статических анализаторов кода
- Автоматические тесты и соблюдение пирамиды тестирования
- Автоматический подсчет покрытия кода тестами
- Ворота качества кода (Quality gates). По всевозможным метрикам: процент покрытия кода тестами, процент дублирования кода, code smells, security, bugs, т.д.
- перекрестное Code Review
- etc
Все эти пункты в совокупности и приводят к появлению у разработчика вопроса:
почему так сложно? Для примера попробуйте написать тесты для вот такого кода: