Skip to content

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Notifications You must be signed in to change notification settings

su-mrak/school2024-test-task7

 
 

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

5 Commits
 
 
 
 
 
 

Repository files navigation

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Условие задания

Будучи тимлидом команды разработки, вы получили от менеджера проекта задачу повысить скорость разработки. Звучит, как начало плохого анекдота, но, тем не менее, решение вам все же нужно найти. В ходе размышлений и изучений различного внешнего опыта других команд разработки вы решили попробовать инструменты геймификации. То есть применить техники и подходы игрового характера с целью повышения вовлеченности команды в решение задач.

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

На практике вы видите решение следующим образом: на следующий день после окончания спринта в 00:00 запускается автоматическая процедура, которая забирает файл с данными о коммитах в релизную ветку, сделанных в период спринта, после чего выполняется поиск 3-х самых активных контрибьютеров. Имена найденных разработчиков записываются в файл, который впоследствии отправляется вам на почту.

В рамках практической реализации данной задачи вам необходимо разработать процедуру формирование отчета “Топ-3 контрибьютера”. Данная процедура принимает на вход текстовый файл (commits.txt), содержащий данные о коммитах (построчно). Каждая строка содержит сведения о коммите в релизную ветку в формате: “<Имя пользователя> <Сокращенный хэш коммита> <Дата и время коммита>”. Например: AIvanov 25ec001 2024-04-24T13:56:39.492

К данным предъявляются следующие требования:

  • имя пользователя может содержать латинские символы в любом регистре, цифры (но не начинаться с них), а также символ "_";
  • сокращенный хэш коммита представляет из себя строку в нижнем регистре, состояющую из 7 символов: букв латинского алфавита, а также цифр;
  • дата и время коммита в формате YYYY-MM-ddTHH:mm:ss.

В результате работы процедура формирует новый файл (result.txt), содержащий информацию об именах 3-х самых активных пользователей по одному в каждой строке в порядке убывания места в рейтинге. Пример содержимого файла: AIvanov AKalinina CodeKiller777

Ручной ввод пути к файлу (через консоль, через правку переменной в коде и т.д.) недопустим. Необходимость любых ручных действий с файлами в процессе работы программы будут обнулять решение.

Автор решения

Ковалева Мария Анатольевна

Описание реализации

В программе main.cpp реализована функция writeResult(). Она создает или переписывает файл result.txt, передавая в него имена 3 самых активных контрибьюторов за последние 4 недели (спринт).

Также для работы созданы:

  • Структура Contributor, чтобы хранить имя пользователя и кол-во его коммитов за последние 4 недели. Для структуры создан компоратор, сравнивающий кол-во коммитов
  • Функция isWithinFourWeeks для проверки, что передаваемая дата находится в пределах последних 4 недель
  • Функция countCommits, которая получает путь до файла commits.txt (предполагается, что он находится в корневой папке проекта), считает коммиты для каждого пользователя и отдает отсортированный по убыванию вектор Contributor

Возможные доработки в будущем:

  • Установить регулярный запуск программы можно с помощью утилиты cron и скрипта, который читает result.txt после выполнения программы. Для этого необходимо создать start.sh (для windows другое расширение):
  1. touch start.sh
  2. В файл start.sh:
#!/bin/bash
cd #путь до папки с репозиторием
./top3
cat result.txt

И создать правило для cron:

  1. В командной строке crontab -e
  2. Выбрать удобный редактор и в конфигурационном файле прописать запуск start.sh:
SHELL=/bin/bash
MAILTO= #указать свою почту
PATH=/bin:/sbin:/usr/bin:/usr/sbin:/usr/local/bin:/usr/local/sbin

0 0 */28 * * root /путь_к_start.sh/start.sh

Сохранить при выходе из редактора. С помощью этой настройки скрипт будет запускаться каждые 28 дней.

Для настройки отправки сообщений на почту в linux.

  • Как обрабатывать ситуацию, если больше чем у 3 пользователей максимальное кол-во коммитов за спринт? Можно выводить всех, выбирать трёх рандомных из них. Или выбирать из них тех, у кого было больше всего коммитов в день за месяц :)
  • Обработка чтения commits.txt на строки с нарушенным форматом (имя пользователя, не подходящее под условие, неверная запись версии коммита, неверная дата)

Инструкция по сборке и запуску решения

Для сборки и запуска необходим компилятор C++17. В репозиторий с программой поместите commits.txt для тестирования, после чего можно запускать программу.

Запуск с помощью g++ через терминал Linux:

  1. Перейдите в папку с репозиторием
  2. Выполните команду для сборки:
g++ main.cpp -o top3
  1. Чтобы запустить программу выполните:
./top3

В папке с репозиторием появится result.txt

Запуск на Windows с помощью g++:

  1. Установите компилятор
  2. Откройте консоль, перейдите в папку с репозиторием
  3. Выполните команду для сборки:
g++ main.cpp -o top3
  1. Чтобы запустить программу выполните:
top3

В папке с репозиторием появится result.txt

About

Тестовое задание для отбора на Летнюю ИТ-школу КРОК по разработке

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages

  • C++ 100.0%