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