Створення документа стандарту кодування


15

Я працюю в компанії з систем управління, де основною роботою є SCADA та PLC , а також інші системи управління.

Розробка програмного забезпечення насправді не є тим, що займається компанія, крім невеликих шматочків тут і там, поки не було прийнято рішення про створення внутрішньої системи управління проектами та оцінки.

Цей проект був узятий на озброєння людьми, які спочатку приїжджали сюди як люди із програмного забезпечення, і ми здебільшого молодші.

Проект розпочався невеликим, тому ми лише задокументували такі речі, як дизайн, матеріали бази даних тощо, але ми ніколи не погоджувалися щодо формату / умов кодування.

Ми почали використовувати StyleCop, щоб переконатися, що у нас добре задокументований код, але я вважаю, що нам потрібен офіційний документ для кодування конвенцій / практик, щоб ми могли продовжувати хороший стандарт і якщо в майбутньому буде якась більша робота з розробки, хто б не працював на цьому має гарну опорну табличку.

У цьому полягає проблема, я не маю уявлення, як скласти документ для кодування конвенцій та стандартів. Я все міг придумати - це приклади гарної проти поганої практики (наприклад, випадок верблюда при іменуванні змінних, уникнення позначень угорців тощо). достатньо грамотні програмісти (мабуть), але у нас просто немає статуту на подібні речі.

Якщо поставити крапку на цьому, моє запитання: Які ключові аспекти та зміст хорошого документа про стандарти кодування?


2
У вас вже є комплексне покриття тесту? Не має значення, наскільки гарний код, якщо він неправильний ...
JBRWilkinson,

2
Хороша річ у тому, що ми ретельно перевіряємо наші речі, ми регулярно впроваджуємо тестування для нашого проекту, і ми перед випуском будемо використовувати тестування на передпокої та випадково передбачати тестові характеристики для чорно-білого тестування.
Фелікс Вейр

Першочерговим завданням нашої маленької групи є те, що наш код надійний і його неможливо зламати. Ми також використовуємо програму bugzilla для відстеження помилок та користувацький інструмент звітування про помилки для користувачів.
Фелікс Вейр

Ось деякі ресурси, які вважаються "класичними" творами з цього питання. Я б запропонував взяти найкращі частини цих стандартів, щоб скласти документ, який відповідає потребам вашої групи: 1. Лабораторії Bell, Індійський пагорб C та стандарти кодування, 19 лютого 1997 року, maultech.com/chrislott/resources/cstyle/indhill-cstyle .pdf 2. Stallman, Richard, Стандарти кодування GNU, 30 червня 2012 року, gnu.org/prep/standards/standards.html 3. Лабораторія реактивного руху, Інституційний стандарт кодування для мови програмування на C, Версія 1.0, 3 березня 2009 р., lars-lab.jpl.nasa.gov/JPL_Coding_Standard_
Вільям Лера

Відповіді:


24

Які основні аспекти та зміст хорошого документа про стандарти кодування?

  1. Будучи при підтримці інструментів , які дають можливість автоматизованої перевірки коду . Якщо я знаю, що я не можу взяти на себе зобов’язання контролювати версії будь-якого фрагмента коду, який не відповідає деяким правилам, мені буде запропоновано дотримуватися цих правил у своєму коді. Якщо, з іншого боку, хтось із програмістів десь написав, що мені потрібно керуватися правилом, я не маю лайно щодо цих правил.

  2. Бути добре продуманим, а не своєю особистою думкою . Ви просто не кажете: "відтепер ми більше не використовуємо регіони, тому що мені не подобаються регіони". Скоріше ви поясніть, що регіони заохочують зростання коду і не вирішують жодної великої проблеми .

    Причина в тому, що в першому випадку ваш колега відповів би: "ну, мені подобаються регіони, тому я б все-таки їх використовував". У другому випадку, з іншого боку, це змусить людей, які не погоджуються, підходити з конструктивною критикою, пропозиціями та аргументами, зрештою змушуючи вас змінити свою первісну думку.

  3. Будучи добре задокументованим . Відсутність документації створює плутанину та можливість для тлумачення ; плутанина і можливість інтерпретації призводять до різниці стилів, тобто те, що стандарти хочуть придушити.

  4. Будучи широко поширена, в тому числі за межами вашої компанії . "Стандарт", який використовують двадцять програмістів, є менш стандартним, ніж стандарт, який знають сотні тисяч розробників у всьому світі.

Оскільки ви говорите про StyleCop, я вважаю, що програма написана однією з мов .NET Framework.

У цьому випадку, якщо у вас немає серйозних причин зробити інше, просто дотримуйтесь вказівок Microsoft. У цьому є кілька переваг, а не створення власних стандартів. Візьмемо чотири попередні пункти:

  1. Вам не потрібно переписувати правила StyleCop, щоб відповідати власним стандартам. Я не кажу, що важко написати власні правила, але якщо ти можеш цього не робити, це означає, що ти маєш більше часу робити щось корисне.

  2. Вказівки Microsoft дуже добре продумані. Є ймовірність, що якщо ви не згодні з деякими з них, це може бути тому, що ви їх не розумієте. Це був саме мій випадок; коли я розпочав розробку C #, я виявив кілька правил зовсім німим. Зараз я повністю з ними погоджуюся, бо я нарешті зрозумів, чому вони написані саме так.

  3. Настанови Microsoft добре задокументовані, тому вам не потрібно писати власну документацію.

  4. Нові розробники, яких згодом наймуть у вашу компанію, можливо, вже знайомі зі стандартами кодування Microsof. Є певні шанси, що ніхто не буде знайомий з вашим внутрішнім стилем кодування.


Ми маємо контроль над версіями (SVN, сподіваючись перейти до GIT незабаром), і керівник проекту завжди нагадує нам регулярно оновлювати, а потім робити зобов’язання, щоб уникнути масових конфліктів (хоча б пару разів на тиждень).
Фелікс Вейр

До речі, ви згадуєте "інструменти, які дають можливість автоматичної перевірки", які це інструменти? Мені цікаво.
Фелікс Вейр

@FelixWeir: для .NET Framework? StyleCop.
Арсеній Муренко

Ну правильно, я думав, ти натякаєш на щось інше. Ми використовуємо Stylecop ...: ^)
Фелікс Вейр

1
@FelixWeir: також спробуйте (якщо ви цього ще не зробили) аналіз коду. Призначення інше і не пов'язане з самим стилем, але воно також дозволяє стандартизувати.
Арсеній Муренко

8

Перше важливе, що слід зазначити, - це те, що документ зі стандартами кодування не є правильним і неправильним. Справа не в тому, що це добре і погано або який метод краще.

Метою документа стандарту кодування є переконатися, що весь код розроблений, написаний та викладений однаково, щоб полегшити розробнику перехід від роботи однієї людини до іншої без необхідної зміни менталітету читати чужий стиль.

Це все про рівномірність, і нічого про "правильне і неправильне"

Зважаючи на це, у документі про стандарти кодування слід уточнити:

Названня конвенцій

Як ви будете називати свої методи, змінні, класи та інтерфейси? Які позначення ви будете використовувати?

Крім того, щось інше, включене в наші стандарти, - це розділені стандарти для SQL, тому у нас були схожі назви для таблиць, процедур, стовпців, ідентифікаційних полів, тригерів тощо.

Відступ

Що ви будете використовувати для відступу? Єдина вкладка? 3 пробіли?

Макет

Чи будуть дужки утримуватися на тій же лінії, що і лінія методу відкривання? (як правило, java) або у наступному рядку чи власній лінії? (як правило, C #)

Обробка винятків / ведення журналів

Які ваші стандарти щодо оброблення винятків та ведення лісозаготівель, чи все вирощено в домашніх умовах чи ви використовуєте сторонній інструмент? Як його використовувати?

Коментуючи

У нас є стандарти, які диктують граматичну правильність, і те, що коментарі починаються в рядку до, або після, а не в тому ж рядку, це збільшує читабельність. Чи потрібно коментарі відступити на ту саму глибину, що і код? Чи приймете ви ті межі коментарів, які використовуються навколо великих текстів?

Як щодо \\\ у Методах описів? Це потрібно використовувати? Коли?

Експозиція

Чи повинні всі ваші методи та поля реалізувати найнижчий рівень доступу?

Також важливо звернути увагу. Документ про хороші стандарти може допомогти пройти перегляд коду, чи відповідає цим мінімальним стандартам?

Я ледве почухав поверхню того, що може потрапити в один із цих документів, але KISS

Не робіть це довгим, нудним, і неможливо пройти, або тих стандартів просто не будете дотримуватися, нехай це буде просто.


1
Стандарти кодування часто, особливо для розробки C / C ++, також містять (великий) розділ про те, які мовні конструкції ви не повинні використовувати та чому.
Барт ван Інген Шенау

2
@BartvanIngenSchenau немає жодної причини, чому вони вам потрібні для C ++, або чому вам не потрібні подібні розділи для інших мов - ви можете зробити безлад з C # або JS або .. ну, все, що завгодно. Усі мови мають "функції, які можна неправомірно використовувати". Найкраще навчити своїх розробників бути хорошими у своїй роботі, замість того, щоб заповнювати документ зі стандартами міні-підручниками "як не кодувати".
gbjbaanb

@gbjbaanb: Я не можу коментувати інші мови, але у C ++ є достатньо темних куточків та підводних каменів, що йдеться не про те, щоб уникнути неправильного використання, а скоріше відвернути людей від функцій, які важко правильно використовувати (наприклад, перевантаження &&). Навчання добре, але іноді краще мати приємний довідковий документ, щоб оновити пам’ять, чому ви не повинні цього робити.
Барт ван Інген Шенау

1
@BartvanIngenSchenau я відчуваю , що було б краще помістити в Coding Guidelines документа, а НЕ Coding Standards документа
RhysW

@RhysW: Досить справедливо. Мій досвід полягає в тому, що обидва зазвичай поєднуються в одному документі (під назвою "Стандарт кодування"), але я не вважаю проблемою це в двох документах.
Барт ван Іґен Шенау

6

Я переживав цей процес кілька разів. І найуспішнішим (хоча все-таки вибагливим) був підхід - взяти документ «Стандартів кодування» у відомої компанії та модифікувати його відповідно до ваших потреб.

Наприклад, я щойно знайшов це: http://www.tiobe.com/content/paperinfo/gemrcsharpcs.pdf

У будь-якому разі, тримайте під рукою вогнемет.

Ура,


2
+1 Я збирався сказати те саме. Створення документу стандартів кодування - це величезна робота, яку було зроблено раніше. Знайдіть хороший, а потім внесіть зміни, щоб налаштувати.
Джон Макінтайр

4

Я ненавиджу більшість стандартних документів, оскільки вони, як правило, намагаються потіти дрібні речі і ігнорувати більшу картину.

Наприклад, майже всі вони скажуть, як називати змінні чи розміщувати дужки. Це чистий стиль і мало що допомагає групі кодів розробників правильно. Вони ігнорують такі речі, як структура каталогу та макет коду. Я бачив стандартні документи, в яких точно було сказано, скільки пробілів потрібно розмістити між операторами та скільки порожніх рядків між методами. Все це зазвичай закінчується топовою винятком з правила, яке просто показує, наскільки вони безглузді, і тоді вони такі великі, що за ними ніхто не може піти, що знову ж таки знущається над тим, що вони намагаються зробити. .

Тепер для мене я використовую багато різних програмних програм у багатьох різних програм, і всі вони мають різні стилі. Я просто звикаю до цього, не скаржуюся, що не існує спільного стилю для всіх груп розвитку. Поки код є загальним стилем усього проекту, мені дійсно все одно, що це за стиль. Тому моє перше правило для всіх стандартних документів таке: Дотримуйтесь послідовного стилю кодування в рамках проекту . ніхто не повинен давати інжир, де є дужки, якщо вони однакові. Візьміть релігійні війни і засуньте їх :)

Друге - це компонування коду. Коли я підбираю фрагмент коду, я хочу побачити, що його викладено за аналогічними лініями, як і інші, подібні твори. Якщо у мене є веб-служба, я хочу, щоб назва договору wsdl було зрозумілим, я хочу, щоб ім'я реалізації було зрозумілим. Я не хочу, щоб хтось придумав абсолютно новий і інший макет для файлів і класів. Це означає, що я повинен грати "полювати на код", що викликає неприємності. Якщо це виглядає так само, як і останній проект, над яким я працював, я можу відразу знати, де знайти те, що шукаю, і це, мабуть, найбільша допомога в роботі з кодом інших людей, який я знаю. Отже, збережіть структуру того, як викладений код (наприклад, папка Документація для документів, інтерфейси для інтерфейсів тощо - все, що це працює для вас, але дотримуйтесь його).

Артефакти коду також повинні бути присутніми, тому вам потрібно сказати, чи очікувана обробка помилок є винятками або кодами помилок - тобто. функціональна архітектура документа, яка використовується . Слід також сказати, який тип журналу використовувати та як представити користувачеві журнали / помилки або будь-яку підсистему, яка використовується для управління кодом у дикій природі. Я працював у тому місці, де кожен проект робив журнал по-різному - було жалко, як кожен випуск коду повинен мати свій, різний, операційний документ, який розповідає хлопцям-операторам, як сказати, чи пішов він не так. Тут є дійсними журнал подій, файл журналу (у такому випадку де) та ін. Це ж стосується і інших поширених аспектів коду - як його налаштувати (немає сенсу використовувати файл .config для деяких програм, або користувацьку БД, або параметри командного рядка, або реєстр для інших).

Коротше кажучи, єдине, що має значення, - це послідовність . Оскільки величезні документи стандартів занадто багато для читання та запам'ятовування, я вважаю за краще просто повідомити людям про речі, які вони не бачать (наприклад, архітектурні стандарти, такі як ведення журналів), і сказати їм, щоб вони писали код, який вони пишуть, відповідно до того, що там є. А якщо у вас вже немає коду, тоді вам не потрібен стандартний документ! (ну, поки ви не написали достатньо, щоб зробити його корисним).

Тож візьміть із цього основні моменти: не намагайтеся скласти юридичний документ , подумайте про речі, які не є кодуючими, а також про те, як працює код і як код відповідає очікуванням інших людей. Тоді довіряйте людям робити добрий код, і ви побачите, що вони роблять. (а якщо їх немає, ви можете мати слова з ними, не потрібно складати це як закон).


2

Не годі, це зовсім втрата часу та енергії. StyleCop чудовий і був створений роками людьми, набагато досвідченішими та розумнішими, ніж ви чи хтось із вашої команди. Обійми і полюби! Він веде вас безперервно, що краще, ніж будь-який документ, який чекає того, хто зможе його прочитати.

Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.