В качестве лабораторной работы необходимо решить задачу из пункта 2.2 задачника. Номера работ выдаёт преподаватель.

Требования к знаниям учащихся

  • Уровень знакомства с синтаксисом языка Ruby:
    • Запуск приложения из командной строки.
    • Переменные, методы, блоки.
    • Работа контейнерами, итераторами, нумераторами.
    • Описание собственных классов.
    • Наследование классов.
    • Использование модулей и примесей.
    • Использование стандартных классов чисел и диапазонов.
    • Использование стандартных классов строк, регулярных выражений.
    • Знание деталей вызова методов и указания его аргументов.
  • Уровень знакомства с экосистемой Ruby:
    • Установка, удаление зависимостей с помощью gem.
    • Управление зависимостями проекта с помощью Bundler.
    • Проверка качества исходного кода с помощью Rubocop.
    • Описание модульных тестов с помощью библиотеки MiniTest в формате xUnit или спецификаций.
    • Оценка степени покрытия исходного кода тестами с помощью SimpleCov.
    • Обеспечение изоляции от окружения в тестах с помощью библиотеки Mocha.

Процедура сдачи лабораторной работы

  • Сдача лабораторной работы происходит на компьютерах, установленных в классе.
  • Студент приходит на сдачу лабораторной работы с готовой лабораторной работой.
    • Студенту предоставляется 10 минут на настройку компьютера для запуска лабораторной работы.
    • Студенту предоставляется 5 минут на презентацию работы лабораторной работы.
    • Студенту необходимо за 25 минут внести изменения в лабораторную, которые ему предложит преподаватель.
    • Студенту предоставляется 5 минут на показ внесённых изменений.
  • Во время контрольной разрешается использовать следующие источники информации:
    • Встроенная документация, предоставляемая ri.
    • Документация на сайте ruby-doc.org.
  • Остальные средства получения информации запрещены, в том числе:
    • Любые интернет-ресурсы, включая информационный сайт курса запрещены.
    • Любые ресурсы локальной сети, включая файловое хранилище.
    • Общение с другими людьми, сдающими контрольную работу.
    • Использование физических средств связи, телефонов, часов, гарнитур и т.д. Наличие телефона в руках автоматически обозначает его использование.
  • Студент на сдачу может взять с собой листок бумаги и ручку, средства связи (мобильные телефоны, часы, наушники) лучше не брать.

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

  • Приложение должно реализовать все требования, указанные в задании. Однако, к защите допускаются приложения, реализующие только часть задач.
  • Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
  • Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью gem запрещена.
  • Для разрабатываемого приложения должны быть создан отдельный каталог.
    • В корне каталога должны располагаться конфигурационные файлы: Gemfile, Gemfile.lock, Rakefile.
    • Весь код предметной области должен быть помещён в каталог lib.
    • Код для тестирования приложения должен быть помещён в каталог test.
    • Исполняемый файл приложения должен быть размещён в каталоге bin.
  • Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
  • В одном файле нельзя совмещать логические операции и операции ввода-вывода. Выделяйте логику взаимодействия с вводом-выводом в отдельные сущности.
  • Необходимо подготовить несколько наборов исходных файлов, содержащих корректные данные, если в задании сказано, что ввод данных осуществляется из файлов.
  • Приложение должно корректно обрабатывать неправильный ввод от пользователя.
  • Для приложения необходимо написать модульные тесты, которые будут проверять ключевую логику из предметной области.
  • Модульные тесты должны запускаться с помощью системы управления задач Rake.
  • Необходимо измерять степень покрытия логики модульными тестами с помощью SimpleCov. Необходимо добиться покрытия в 95% на данной логике. Желательно добиться такого же покрытия и на коде, осуществляющем ввод-вывод данных.