Меню


Site Logo

Тестовое задание для ведущего разработчика С++

Уровень: основной
Индекс сложности: 4

Постановка задачи

Есть последовательность идентификаторов, строящаяся по следующим правилам:

  1. Первый идентификатор последовательности имеет вид «A1», второй — «A2», третий - «A3» и так далее. За «A9» следует «B1». Следующий после «Z9» имеет вид «A1-A1», потом «A1-A2» и так далее. После «A1-Z9» следует «A2-A1».
  2. Максимальная длина идентификатора - десять групп по два символа.
  3. В идентификаторах никогда не должны присутствовать буквы «D», «F», «G», «J», «M», «Q», «V» и цифра «0».

Нужно реализовать модуль, обеспечивающий вычисление идентификатора. Модуль должен реагировать на сообщение GenerateNextIdentifier содержащее параметр PrevIdentifier типа string. Ответный идентификатор или ошибка модулю-клиенту должны сообщаться специальным сообщением.

Требование к тестовому заданию:

  • Код должен быть пригоден для включения в состав программного продукта - т.е. компилироваться. В случае ошибок компиляции задание считается невыполненным, анализ, что там внутри написано проводиться не будет.
  • Код должен без проблем собираться с помощью Microsoft Visual C++ 18.00 и старше.
  • Для решения задачи разрешается использовать только стандартную библиотеку С++ и поставляемые вместе с заданием распространяемые файлы.

Требования к решению

Для успешного прохождения тестирования кандидат должен предоставить комплект материалов:

  • сценарии работы модуля управляющей логики;
  • чек-лист;
  • протокол модуля;
  • модель конечного автомата;
  • код;
  • автоматические тесты.

Комплект предоставляется в форме zip-архива с именем в формате <ФамилияИО>.zip (например: SukhoiDA.zip).

Задание можно выполнять как с применением Microsoft Visual C++ (под управлением ОС Windows), так и с применением компилятора gcc (под управлением ОС Linux CentOS 7 или ОС Ubuntu Linux).

Внимание!

Резюме и выполненное тестовое задание присылайте на электронный адрес n.prosalkova@uniteller.ru

Рекомендуемый порядок выполнения задания

  1. Изучить материалы тренинга (как минимум нужно понять конструкцию программных решений, что такое протокол и зачем он нужен, что такое конечный автомат и как он функционирует, как он изображается). Не прочитав эти материалы правильно задание сделать будет тяжело.
  2. Скачать материал для загрузки под нужную платформу (ссылки ниже);
  3. Изучить руководство состав пакета для загрузки (если у вас платформа Windows);
  4. Разработать сценарии использования и интерфейс модуля (протокол обмена);
  5. Разработать модель поведения модуля (конечный автомат);
  6. Разработать чек-лист (перечень аспектов, которые необходимо контролировать);
  7. Разработать скрипты автоматического тестирования;
  8. Разработать программный код;
  9. Собрать модуль и разместить его и его протокол в папке release для тестирования;
  10. Запустить автоматические тесты и убедиться, что модуль работает.

Критерий успеха

  • Есть все материалы, собранный код удалось запустить и проверить тестами. В чек-листе не менее 10 пунктов

Вспомогательные материалы

При реализации следует могут использовать системные сообщения среды исполнения, определенные протоколом обмена Kernel.

Messages ; Сообщения
  TimeOut : 1                                 | Сообщение TimeOut. Рассылается машинами состояний в случае превышения допустимого интервала нахождения в определенном состоянии.
    1 : 0
  ModuleFailedOnEvent : 2                     | Модуль не смог обработать сообщение
    1 : 3
      EventKind : int                         | - Тип, события, при реакции на которое произошла ошибка
      ExceptionKind : string                  | - Тип ошибки (исключения)
      ExceptionMessage : string               | - Сообщение об ошибке
  Start : 3                                   | Команда инициализации
    1 : 0
  Stop : 4                                    | Команда остановки
    1 : 0 ; Поколение 1, число аргументов 0
  StateChanged : 5                            | Событие, присылаемое в момент изменения состояния конечного автомата
    1 : 4
      MachineName : string                    | - Имя конечного автомата, перешедшего в новое состояние
      OldState : string                       | - Старое состояние машины
      NewState : string                       | - Новое состояние машины
      Event : int                             | - Событие, активировавшее переход

Появились вопросы, на которые нет ответа в материалах?

Если у кандидата появились какие-то вопросы, на которые не обнаружился ответ в материалах их можно задать через электронную почту n.prosalkova@uniteller.ru.