Лабораторная работа №3
В качестве лабораторной работы необходимо решить задачу из пункта 3.3 или 3.4 задачника. Задачи из пункта 3.3 оцениваются на 1 балл меньше, чем задачи из пункта 3.4. Номера работ выдаёт преподаватель.
Требования к знаниям учащихся
- Уровень знакомства с синтаксисом языка Ruby:
- Запуск приложения из командной строки.
- Переменные, методы, блоки.
- Работа контейнерами, итераторами, нумераторами.
- Описание собственных классов.
- Наследование классов.
- Использование модулей и примесей.
- Использование стандартных классов чисел и диапазонов.
- Использование стандартных классов строк, регулярных выражений.
- Знание деталей вызова методов и указания его аргументов.
- Уровень знакомства с экосистемой Ruby:
- Установка, удаление зависимостей с помощью
gem
. - Управление зависимостями проекта с помощью Bundler.
- Проверка качества исходного кода с помощью Rubocop.
- Описание модульных тестов с помощью библиотеки MiniTest в формате xUnit или спецификаций.
- Оценка степени покрытия исходного кода тестами с помощью SimpleCov.
- Обеспечение изоляции от окружения в тестах с помощью библиотеки Mocha.
- Установка, удаление зависимостей с помощью
- Уровень знакомства с разработкой веб-приложений с помощью библиотеки Sinatra:
- Обработка запросов GET для получения информации.
- Использование шаблонов Foundation / Bootstrap для оформления сайта.
- Обработка запросов POST на редактирование информации.
- Сохранение данных пользователя в настройках приложения.
- Разделение приложения на модули.
- Передача аргументов в контроллер через адресную строку.
- Написание системных тестов для проверки функциональности приложений.
Процедура сдачи лабораторной работы
- Сдача лабораторной работы происходит на компьютерах, установленных в классе.
- Студент приходит на сдачу лабораторной работы с готовой лабораторной работой.
- Студенту предоставляется 10 минут на настройку компьютера для запуска лабораторной работы.
- Студенту предоставляется 5 минут на презентацию работы лабораторной работы.
- Студенту необходимо за 25 минут внести изменения в лабораторную, которые ему предложит преподаватель.
- Студенту предоставляется 5 минут на показ внесённых изменений.
- Во время контрольной разрешается использовать следующие источники информации:
- Встроенная документация, предоставляемая
ri
. - Документация на сайте ruby-doc.org.
- Встроенная документация, предоставляемая
- Остальные средства получения информации запрещены, в том числе:
- Любые интернет-ресурсы, включая информационный сайт курса запрещены.
- Любые ресурсы локальной сети, включая файловое хранилище.
- Общение с другими людьми, сдающими контрольную работу.
- Использование физических средств связи, телефонов, часов, гарнитур и т.д. Наличие телефона в руках автоматически обозначает его использование.
- Студент на сдачу может взять с собой листок бумаги и ручку, средства связи (мобильные телефоны, часы, наушники) лучше не брать.
Требования к выполнению задания
- Приложение должно реализовать все требования, указанные в задании. Однако, к защите допускаются приложения, реализующие только часть задач.
- Исходный код приложения должен быть проверен с помощью приложения Rubocop с настройками по-умолчанию. Для каждого нарушения, которое находит Rubocop, должно быть объяснение почему оно не было исправлено. Допускаются аргументы с точки зрения архитектуры приложения, другого рода аргументы не принимаются.
- Все зависимости приложения должны управляться с помощью Bundler, установка зависимостей с помощью
gem
запрещена. - Для разрабатываемого приложения должны быть создан отдельный каталог.
- В корне каталога должны располагаться конфигурационные файлы:
Gemfile
,Gemfile.lock
,Rakefile
. - Желательно разрабатывать приложение в модульном стиле.
- Необходимо создать файл
config.ru
и обеспечить запуск с помощью приложенияrackup
.
- В корне каталога должны располагаться конфигурационные файлы:
- Весь код приложения должен быть разбит на модули и классы, запрещается использовать файлы с простым набором методов, которые не пренадлежат какому-либо модулю.
- Необходимо выделить в отдельные модули классы, описывающие предметную область.
- В одном файле нельзя совмещать логические операции и операции ввода-вывода. Выделяйте логику взаимодействия с вводом-выводом в отдельные сущности.
- Приложение должно корректно обрабатывать неправильный ввод от пользователя.
- Для приложения необходимо написать модульные тесты, которые будут проверять ключевую логику из предметной области.
- Модульные тесты должны запускаться с помощью системы управления задач Rake.
- Необходимо измерять степень покрытия логики модульными тестами с помощью SimpleCov. Необходимо добиться покрытия в 95% на данной логике. Желательно добиться такого же покрытия и на коде, осуществляющем ввод-вывод данных.
- Для приложения необходимо написать системные тесты, которые будут проверять работу всех сценариев работы приложения. Системные тесты не должны влиять на степень покрытия тестами.