Соглашения о кодировании

Соглашения о кодировании #

Здесь указаны свойства, которыми должен обладать код проекта (включая тесты).

Поддержка Linux #

  1. Рекомендуется писать кроссплатформенный код, работающий в GNU/Linux, Windows, Mac OSX
  2. Базовая поддержка GNU/Linux обязательна — при проблемах сборки на Linux преподаватель сообщит об этом

Обычно кроссплатформенность достигается проще для C# и Go, но сложнее для C++.

Зелёная сборка #

Код собирается без ошибок и предупреждений, включая тесты. Тесты выполняются без ошибок.

  • Обратите внимание, в шаблонах статические анализаторы, которые могут создавать предупреждения и ошибки при сборке.
  • Отключать статические анализаторы нельзя
  • Менять правила статического анализа можно по согласованию с преподавателем
  • Если вы уверены, что диагностика — это ложное срабатывание, то вы можете сделать подавление диагностики (suppression)

Не принимается код без тестов #

У проекта должны быть модульные и/или интеграционные тесты:

  1. Модульные тесты следует писать там, где они легко реализуются и хорошо находят ошибки — например, для лексического анализатора
  2. В остальных случаях предпочтительны интеграционные тесты

Советы:

  • лучше составить список тестов до начала тестирования.
  • сперва проверяйте основные сценарии (happy path), затем — пограничные случаи, и лишь в конце — негативные сценарии
  • создавайте и проверяйте HTML-отчёт о покрытии кода тестами

Тестовый фреймворк выбирается в зависимости от языка, на котором пишете проект:

ЯзыкФреймворк
C#XUnit
C++Catch3
Goвстроенный

Чистый код #

  1. Все переменные хорошо названы
  2. Именование, форматирование и стиль кода единообразный во всём проекте
  3. Не должно быть неиспользуемого либо закомментированного кода
  4. Все тексты исключений и ошибок компилятора пишутся на одном языке — английском либо русском
  5. Все комментарии в коде пишутся на русском языке

Требования для языков #

В зависимости от языка есть свои требования:

  1. Требования к коду на C#
  2. Требования к коду на C++
  3. Требования к коду на Go