Четвертая неделя курса Backend Engineering Module 1 Школы программного обеспечения и дизайна Тьюринга началась с того, что нам поручили новый проект. Проект Cross Check. Нам дали несколько CSV-файлов, полных статистики НХЛ за несколько сезонов. Затем нам дали около 30 различных методов, которые мы должны были написать, каждый из которых выполнял бы некоторую сортировку или статистический анализ данных.

Перекрестная проверка — это групповой проект. Всего в моей группе было три человека. Мы начали с настройки Gemfile, rakefile и запуска SimpleCov. Последние два будут использоваться, чтобы помочь нам оценить, насколько хорошо были разработаны наши тесты. Например, с помощью SimpleCov мы могли вызвать сгенерированный им индексный файл, в котором сообщалось бы о том, сколько строк кода было покрыто нашими тестами. Идеалом было тестирование каждой строки кода в какой-то момент.

Следующим шагом было заняться файлами CSV. Мы рассмотрели некоторые способы сделать это в Ruby, такие как File, IO и CSV. В конце концов мы выбрали метод CSV.foreach. Это позволило нам анализировать большие CSV-файлы, манипулировать заголовками, считывать каждую строку CSV и использовать эти данные в качестве аргументов для создания новых объектов. Фрагмент кода выше показывает, как мы подошли к синтаксическому анализу.

def parse_teams(file_path)
@team_storage = TeamStorage.new
# @stat_tracker = StatTracker.from_csv(locations)
CSV.foreach(file_path, {headers: true, header_converters: :symbol}) do |team_info|
@teams = @team_storage.add_team(Team.new({:team_id => team_info[0], :franchiseid => team_info[1], :shortname => (team_info[2]),
:teamname => team_info[3], :abbreviation => team_info[4], :link => team_info[5]}))
end
@teams
end

Нам также пришлось выполнять больше работы с файлами CSV из-за их размера. Один из файлов содержал почти 15 000 строк. С этим было бы трудно справиться при написании тестов для нашего кода. Вместо этого мы разбили эти файлы на образцы файлов, используя примерно 50 строк файла CSV.

Наши подпрограммы синтаксического анализа находились в классе stat_tracker, который был обязательной частью проекта. Мы оставили в классе только подпрограммы синтаксического анализа, а все остальные необходимые функции переместили в другие классы. Поскольку наши файлы данных были game.csv, game_team_stats.csv и team_info.csv, мы решили назвать наши классы соответственно. Мы сделали это также потому, что многие из методов, которые мы должны были написать, более или менее согласовывались с этим расположением. У каждого из этих трех классов также был класс _storage, который использовался исключительно как часть подпрограмм синтаксического анализа для stat_tracker.

Также был создан модуль game_stats. Этот модуль был использован, чтобы помочь нам с рядом методов, которые мы должны были разделить между классами. В нашем первоначальном проекте класс stat_tracker был суперклассом, а другие классы наследовались от него. После дня или двух в проекте мы поняли, что модуль был лучшим инструментом для того, что нам нужно, и мы удалили наследование. К концу проекта у нас было три модуля, которые мы использовали.

Помимо технической части проекта, связанной с кодированием, мы также столкнулись с парой новых задач. Одна из них заключалась в том, что проект будет прерван рождественскими каникулами. В перерыве я уезжал из города на несколько дней, так что это был наш первый опыт кодирования с кем-то удаленным. В начале проекта мы решили, как будем работать удаленно, как будем обрабатывать пулл-реквесты GitHub и т. д., чтобы не влиять на наш рабочий процесс.

Еще одна проблема, с которой мы столкнулись, заключалась в документировании хода нашего проекта. От нас требовалось использовать какой-то инструмент планирования проекта. Сначала мы думали, что будем использовать waffle.io, но на занятии по другой теме инструктор упомянул, что Тьюринг скоро перейдет на GitHub Projects. Поскольку это было направление, в котором шла школа, мы решили также использовать GitHub Projects.

GitHub Projects — это способ настройки проекта и отслеживания прогресса. Он использует «карточки», которые описывают то, над чем ведется работа в данный момент. Затем карточки можно перемещать из столбца в столбец по мере необходимости. Мы создали четыре столбца: «Сделать», «В процессе», «Проверить» и «Готово». Затем мы рассмотрели все методы, которые нам нужно было написать, и назначили методы каждому из нас в группе.

Каждое утро мы собирались вместе и просматривали карты. Мы обсуждали, над чем работаем, над чем нам нужна помощь, и перемещали карточки в ту колонку, в которой они должны быть, в зависимости от проделанной работы. Для нас это был отличный способ следить за проектом в целом. Мы настраиваем проекты, используя один из предоставленных шаблонов. Я хотел бы попробовать некоторые другие шаблоны, которые у него есть в будущем.

До сих пор это был хороший проект с точки зрения изучения нового материала, а также изучения того, как работать в команде. Проект должен быть сдан в течение следующей недели занятий, после чего мы начнем новый индивидуальный проект, который будет использоваться как часть нашей итоговой оценки. Будут еще посты о последних двух неделях Модуля 1, о том, как был завершен проект перекрестной проверки, и об окончательной работе над модулем.