Я работаю с командой, которая выросла с 2 разработчиков до 10 менее чем за год. Я был номером 3 и первым поднял вопрос о стандартах кодирования. Два оригинальных разработчика работали бок о бок в течение нескольких лет, и они приняли общий стандарт, который казался мне чуждым. У нас были точно такие же проблемы, которые вы описываете.
То, что мы сделали, было:
Стандарты кодирования исследований
Мы потратили несколько дней на проверку существующих проектов с открытым исходным кодом. Мы знали, что команда будет быстро расширяться, и мы искали реальные решения, основанные на реальных проектах, а не на каких-то общих принципах. Также мы не заботились об оптимальных стандартах кодирования, но о наборе правил и рекомендаций, которые имели бы смысл и не требовали рефакторинга всей нашей кодовой базы. Мы искали взломать стандарты кодирования, если хотите.
Мы втроем решили, что лучшими стандартами кодирования для установленного PHP-проекта были стандарты Zend Framework. К счастью, сотрудники Zend Framework предоставляют очень полный документ по стандартам кодирования .
Создание наших собственных стандартов кодирования
Конечно, применять к нашему проекту стандарты кодирования другого проекта не имеет смысла. Мы используем документ Zend Framework в качестве шаблона:
- Сначала мы удалили все, что не относится к нашему проекту
- Затем мы изменили все, что мы воспринимали как вопрос стиля, на наш стиль.
- И наконец мы записали все
Таким образом, у нас был довольно большой документ, который хранился в нашей модной вики , это было хорошее чтение, согласованное всеми нами. И совершенно бесполезен сам по себе.
Оставаясь верным нашему обещанию
Наша кодовая база в то время составляла около 1 * 10 ^ 6 sloc. Мы знали, что с тех пор, как мы приняли формальные стандарты кодирования, нам пришлось начать рефакторинг нашего кода, но в то время мы столкнулись с другими проблемами. Поэтому мы решили просто провести рефакторинг наших основных библиотек, всего 5 * 10 ^ 3 sloc.
Мы назначили одного из нас мастером по стандартам кодирования (вместо мастера мы использовали местную ненормативную лексику ), отвечая за проверку и обеспечение соблюдения стандартов. Мы перерабатываем роль каждые несколько спринтов. Я был первым, и это было много работы, так как мне приходилось следить почти за каждым коммитом.
У меня было несколько новых обсуждений и небольших дополнений к первоначальному документу во время моего пребывания в должности, и, наконец, у нас был несколько стабильный документ. Мы время от времени меняем его, но большинство этих изменений касаются новых возможностей языка, поскольку PHP 5.3 был основным выпуском во всех, кроме названия.
Общение с новым парнем
Когда появился следующий новый парень, пришло время проверить наши стандарты кодирования. После небольшого введения в нашу кодовую базу мы попросили его оценить наш документ по стандартам кодирования. Он чуть не плакал. Оказалось, что он сделал все по-другому.
Поскольку я был мастером стандартов кодирования в то время, я должен был оценить его вклад и соответственно пересмотреть документ. Его предложения были:
- Вопросы личного стиля (в общем уволены)
- Стандарты, которые имели смысл для его фона Java, но не так много с PHP (отклонено)
- Условные обозначения, которые он взял из своего краткого знакомства с PHP (некоторые были отклонены, но многие оказались популярными соглашениями, о которых мы никогда не думали и не обнаружили в нашем первоначальном исследовании)
В течение следующих нескольких недель ему было поручено простое задание: привести несколько частей нашей кодовой базы в соответствие со стандартами. Мне пришлось тщательно выбирать те части, основываясь на нескольких правилах:
- Код должен быть относительно простым для тех, кто не знаком с нашей базой кода (и PHP в целом)
- Код должен быть на том, что он был нанят, чтобы сделать
Я контролировал его процесс, и он отлично поработал. Мы идентифицировали несколько частей кода, которые невозможно было вписать в наш документ, и соответствующим образом пересмотрели (код и / или стандарты, в зависимости от того, что имело смысл)
А потом появился еще один новый парень. Мы повторили процесс (другой мастер на этот раз), и он снова заработал. И опять.
В заключение
- Создайте документ по стандартам кодирования, но убедитесь, что ваши стандарты не являются исключительно вашими, но отражают общие стандарты в более широком сообществе вашей платформы.
- Назначьте аналогичную роль нашему мастеру по стандартам кодирования. Кто-то, чтобы отслеживать, по крайней мере, новый код, и особенно новый код от новых участников. Переработайте роль, так как она очень скучная.
- Всегда оценивайте вклад нового участника. Всегда пересматривайте свои стандарты, если это имеет смысл. Ваш документ по стандартам кодирования должен развиваться, но медленно. Вы не хотите реорганизовывать свою кодовую базу на каждой итерации.
- Выделите какое-то время каждому новому члену для изучения и адаптации к вашим стандартам и соглашениям. Учитесь, выполняя работу лучше всего в этих ситуациях.
- Вики творит чудеса для таких документов.
- Кодовые обзоры творит чудеса для любой ситуации!
В какой-то момент процесса было предложено использовать ловушку предварительной фиксации для автоматизации проверки стандартов. Мы решили отказаться от него по ряду причин, по StackOverflow есть несколько интересных дискуссий по этому вопросу:
Некоторые из них специфичны для PHP, но ответы относятся ко всем платформам.