Норми кодування () — це сукупність вказівок, що стосуються певної конкретної мови програмування і встановлюють правила стильового оформлення коду, практики та методи написання програм цією мовою. Ці норми зазвичай охоплюють організацію файлів, відступи, коментарі, оголошення, інструкції, пропуски, норми найменування, практики та принципи програмування, емпіричні правила програмування, найкращі архітектурні практики та ін.. Це поради стосовно структурної якості програмного забезпечення. Розробникам програмного забезпечення наполегливо рекомендується слідувати цим вказівкам, щоб покращити читабельність їхнього коду та полегшити підтримку програмного забезпечення. Норми кодування застосовні лише до людей-підтримувачів та рецензентів програмного забезпечення. Норми можуть бути формалізовані в документованому наборі правил, яких дотримується ціла команда чи компанія, або бути такими ж неформальними, як звичні індивідуальні практики кодування. Норми кодування не нав'язуються компіляторами. А отже, не дотримання деяких, чи навіть всіх правил не впливає на ефективність виконання програмного коду.
Підтримка програмного забезпечення Зменшення затратності підтримки програмного забезпечення є найбільш поширеною причиною дотримання норм кодування. У своїй передмові до норм програмування мовою Java, Sun Microsystems наводить такі міркування: Норми кодування важливі для розробників програмного забезпечення з кількох причин: 40 %–80 % загальної вартості програмного забезпечення витрачається на його утримання.Robert L. Glass: Facts and Fallacies of Software Engineering; Addison Wesley, 2003. Майже ніколи програмне забезпечення не підтримується до самого кінця своїм початковим автором. Норми кодування покращують читабельність програмного забезпечення, дозволяючи розробникам швидше й краще розбиратись в новому коді. Подібно до всякого іншого продукту, програмне забезпечення має бути «добре упакованим» і чистим.
Програмна інженерія Програмна інженерія це процес розробки змісту та дизайну проєкту. Вона є визначальною в питаннях успіху проєктів, зокрема й великих. Процес програмної інженерії — це те, що доводить процес кодування до успішного завершення. Хороша програмна інженерія задає різницю між проєктами успішним — у фінансовому й технічному розумінні — та такими, що, в найгіршому випадку, перебувають у стані «клінічної смерті». Хороша програмна інженерія зведе до мінімуму подальші витрати і підвищить успіх проєкту на ринку.
Документація проєкту Згідно з нормами кодування, проєкт повинен містити наступні документи:
Досьє проєкту (). Процес розробки починається зі створення цього документу. Строго кажучи, це лише короткий опис проєкту, що входить до ланцюга його офіційних документів. Опис вимог (). В цьому документі вказується, що саме робить проєкт. Він є найважливішим в ланцюгу документів, усі інші документи тісно пов'язані з ним. Дизайн проєкту (). Це офіційний документ з описом дизайну. Він перелічує модулі й компоненти, описує їх інтерфейси та пояснює зв'язки між ними. Програмний інженер, що працює над цим документом виконує такі завдання: Вибір найкращого варіанту дизайну з наявних опцій на основі їх аналізу. Ананіз всі аспекти, зокрема технічні, комерційні, питання якості, адміністрування й логістики. Це передбачає й час та вартість розробки, утримання, підтримки й використання — як поточні, так і подальші. Опис тестів (). Цей документ описує всі тести, які має пройти проєкт, та результати, яких варто чекати від такого тестування. Дуже часто тестування виконується спеціальними програмними пакетами, а отже ці тести описуються відповідними файлами. Результати тестів ().
Опис проєкту від досьє до результатів тестування становить так званий ланцюг документів. Кожен документ пов'язаний з попереднім відношенням «один до одного». Крім того, опис тестів пов'язаний з описом вимог. Ланцюг документів двонапрямний — опис іде вниз, результати повертаються нагору.
Ці методи називаються формальними.
Рефакторинг Рефакторинг — це процес зміни існуючого коду для його вдосконанлення та відповідності існуючим домовленостям про стиль коду без зміни його поведінки. Рефакторинг існуючого коду є важливою складовою його підтримки та потенційно переслідує такі цілі:
Вдосконалення дизайну, структури та імплементації програмного забезпечення. Збільшення читабельності та спрощення сирцевого коду. Сприяння ефективній підтримці програмного забезпечення — пришвидшення додавання нового функціоналу. Ефективне використання апаратного забезпечення, збільшення швидкості виконання коду.
Практика норм кодування Існують декілька підходів до покращення читабельності коду, серед них такі:
Домовленості з найменування змінних, функцій та класів. Дотримання правил відступів, пробілів та знаків табуляції. Додавання коментарів в код для сприяння розумінню функціоналу.
Домовленості з найменування Першочергова ціль правил найменування змінних значно спрощує розуміння сирцевого коду та ролі конкретної змінної. Кожна змінна повинна мати чітку та лаконічну назву, що надає семантики кінцевому коду.
Вибране правило найменування змінних має бути дотриманим в усьому коді
Різні мови програмування можуть мати різні норми найменування змінних, що дозволяє розрізняти операнди та ключові слова.
В свою чергу, найменування змінних підрозділяються на такі варіанти:
Зміїний регістр
У формі нотації "зміїний регістр" () використовується знак підкреслення для виділення окремих слів в назві змінної:
var_one
var_two
регістр Паскаля Регістр Паскаля () передбачає виділення окремих слів за рахунок перших букв кожного з них в верхньому регістрі:
VarOne
VarTwo
Верблюжий регістр
Верблюжий регістр () повторює Pascalcase — кожне слово виділяється першою буквою у верхньому регістрі за винятком першої букви:
varOne
varTwo
Шашличний регістр
Шашличний регістр () повторює підхід зміїного регістру з розділенням слів в найменуванні знаками пунктуаціями, для цього використовуються знаки тире (dash, '-'):
var-one
var-two
Угорська нотація
В Hungarian Notation (Угорській нотації) виділяється перше слово найменування, що визначає тип змінної, а решта слів визначає її функцію. Приклад такої нотації в Camel case:
arrExpVarOne // букв. "масив, приклад змінної 1"
intExpVarTwo // букв. "ціле число, приклад змінної 2"
All caps
All caps (All capitals, всі великі) має всі літери в верхньому регістрі та застосовується для позначення констант у коді:
CONST_ONE
CONST_TWO
Примітки
Посилання
Норми кодування для мов ActionScript: Flex SDK coding conventions and best practices Ada: Ada 95 Quality and Style Guide: Guidelines for Professional Programmers Ada: Guide for the use of the Ada programming language in high integrity systems (ISO/IEC TR 15942:2000) Ada: NASA Flight Software Branch — Ada Coding Standard Ada: European Space Agency's Ada Coding Standard (BSSC(98)3) C: Ganssle Group's Firmware Development Standard C: Netrino Embedded C Coding Standard C: Install Java On Windows C++: Quantum Leaps C/C++ Coding Standard C++: C++ Programming/Programming Languages/C++/Code/Style Conventions C++: GeoSoft's C++ Programming Style Guidelines C++: Google's C++ Style Guide C++: High Integrity C++ C#: C# Coding Conventions (C# Programming Guide) C#: Design Guidelines for Developing Class Libraries C#: Brad Abrams C#: Philips Healthcare D: The D Style Dart: The Dart Style Guide Erlang: Erlang Programming Rules and Conventions Flex: Code conventions for the Flex SDK Java: Ambysoft's Coding Standards for Java Java: Code Conventions for the Java Programming Language Java: GeoSoft's Java Programming Style Guidelines Java: Java: SoftwareMonkey's Coding Standards for Java and other C-like languages JavaScript: Code Conventions for the JavaScript Programming Language Lisp: Riastradh's Lisp Style Rules MATLAB: Neurobat Coding Conventions for MATLAB Mono: Programming style for Mono Object Pascal: Object Pascal Style Guide Perl: Perl Style Guide PHP::PEAR: PHP::PEAR Coding Standards PHP::FIG: PHP Framework Interop Group Python: Style Guide for Python Code Ruby: The Unofficial Ruby Usage Guide Ruby: GitHub Ruby style guide
Норми кодування для проєктів Apache Developers' C Language Style Guide Drupal PHP Coding Standards Zend Framework Coding Standards GNU Coding Standards Style guides for Google-originated open-source projects Linux Kernel Coding Style (or Documentation/CodingStyle in the Linux Kernel source tree) ModuLiq Zero Indent Coding Style Mozilla Coding Style Guide Road Intranet's C++ Guidelines The NetBSD source code style guide (formerly known as the BSD Kernel Normal Form) OpenBSD Kernel source file style guide (KNF) (PDF )