Требования к выполнению заданий

  1. Каждая программа должна быть написана полностью самостоятельно.
  2. Каждая программа должна быть выполнена в соответствии с заданием. При возникновении вопросов необходимо консультироваться с преподавателем.
  3. Все программы должны быть представлены в виде исходных текстов.
  4. Программа должна быть хорошо протестирована до сдачи.
  5. Код программы должен компилироваться и исполняться без ошибок и предупреждений warning. Флаги компиляции для gcc и clang: -Wall -Wextra -Werror
  6. Имена переменных следует выбирать в соответствии со смыслом (назначением), а не типом переменной.
  7. Имена переменных должны отражать суть данных, которые она содержит. Использование однобуквенных неясных названий для переменных считается сильным недостатком, кроме индексов, координат и других принятых математических обозначений.
  8. Имя метода или функции должно начинаться с глагола, отражающего суть выполняемого действия.
  9. Исходный код должен быть понятен без сопутствующих комментариев.
  10. Исходный код должен быть оформлен в соответствии с общепринятыми конвенциями оформления. Для языка C/С++ это стандарт Google C++ Style Guide.
  11. Как только была пройдена тема модульного тестирования все программы должны сопровождаться исчерпывающим набором тестов. На каждую функцию и метод должен быть написан набор тестов.
  12. Логика программ не должна быть смешана с логикой ввода данных. По умолчанию, если не оговорено иное, лабораторные не предполагают ввода данных через консоль, поэтому подтверждение работоспособности программы показывается модульными тестами.
  13. Время жизни переменной, объекта должно быть максимально коротким.
  14. Запрещено использовать не примитивные типы для значений аргументов функции или метода по умолчанию, если того не требует условие задания.
  15. Запрещено использование магических констант. Если необходимо, они должны быть именованными.
  16. Запрещено использовать метки goto.
  17. Запрещено создание громоздких функций и методов размера более 30 строк. Такие конструкции следует разбивать на мелкие и понятные функции и методы.
  18. Нельзя использовать глобальные переменные, только локальные автоматические, если это не требуется явно по заданию.
  19. Нельзя использовать статические переменные в Си, если это не требуется явно по заданию.