Рубрик — руководство тестировщика
Для человека, который видит проект впервые. Читать сверху вниз: сначала что это такое и из чего состоит, потом словарь, потом тест-кейсы.
Ничего не нужно знать про код. Нужен ноутбук, полчаса и внимательность.
Часть 1. Что это за продукт
Рубрик — образовательный робототехнический набор для школ. Ребёнок собирает робота и пишет для него программу: сначала из блоков (как в Scratch), потом на настоящем Python.
Аналог LEGO EV3, но «мозг» робота — не специальный блок, а обычный Android-телефон.
Из чего состоит одна работающая связка
Ноутбук ученика ──Bluetooth──▶ Телефон на роботе ──USB-кабель──▶ Модуль робота
(пишет программу) (выполняет её) (крутит моторы)
Ноутбук учителя ──Wi-Fi класса──▶ ноутбуки учеников
(класс, ученики, курсы)
Четыре разные программы, и тестируются они по-разному:
| Что | Где работает | Зачем |
|---|---|---|
| Приложение ученика | ноутбук (Windows/macOS) | ребёнок пишет и запускает программу |
| Приложение учителя | ноутбук учителя | список класса, ученики, курсы, права |
| Приложение робота | Android-телефон | принимает программу и выполняет её |
| Портал | сайт | учитель скачивает курсы и обновления |
Это руководство — про приложение ученика и его связку с учительским. Телефон и модуль нужны только там, где сказано явно.
Три вещи, которые важно понять до тестов
1. Интернет не нужен. Совсем. Урок обязан идти в классе без сети: ребёнок пишет программу, запускает её на роботе, видит результат. Сеть нужна только учителю — чтобы видеть класс. Если что-то ломается без интернета, это баг.
2. Ноутбук общий. За одним компьютером сидят разные дети в разные дни. Поэтому приложение никогда не запоминает, кто вошёл, — каждый урок ребёнок выбирает себя заново.
3. Устройство один раз спрашивают, где оно стоит. «В классе» — ученики и курсы придут от учителя. «Самостоятельно» — всё хранится локально. Вопрос задают ровно один раз за устройство.
Часть 2. Словарь
Термины встречаются в интерфейсе и в отчётах о багах. Пользуйся ими — так тебя поймут.
| Термин | Что это |
|---|---|
| Ученик / профиль / карточка | один ребёнок в приложении. У него имя, фамилия, аватар и, возможно, PIN |
| Группа | класс, кружок или секция. Каждый ученик всегда в какой-то группе |
| Локальная группа | группа, которую приложение создаёт само, если учителя нет. В ней живут ученики самостоятельного режима |
| PIN | четыре цифры, чтобы войти под своей карточкой. Необязателен — карточка может быть без него, и это не баг |
| Робот | телефон с приложением робота плюс модуль с моторами |
| Виртуальный робот | программная имитация робота на самом ноутбуке. Позволяет запускать программы без железа |
| Сопряжение (pairing) | разовое рукопожатие между ноутбуком ученика и ноутбуком учителя. После него приезжают ученики и курсы |
| Код (при сопряжении) | короткая строка, которую ученик сверяет с экраном учителя. Совпали — соединение то самое |
| Мастерская | экран, где ребёнок собирает программу из блоков и запускает её |
| Блоки / Python | два режима программирования. Переход с блоков на Python необратим для конкретного проекта |
| Автопроверка | проверяет, выполнил ли ребёнок задание урока, по данным прошедшего запуска |
| Телеметрия | поток данных от робота: скорость моторов, заряд, ошибки |
| Курс / урок | учебный материал. Создаёт учитель, ученикам приезжает по сети класса |
| Режим устройства | «В классе» или «Самостоятельно». Задаётся при первом запуске, меняется в настройках |
| Драйвер экранов | инструмент разработки: открывает нужный экран одной командой. Тестировщику не обязателен |
Слова, которые в интерфейсе быть НЕ должны
Правило проекта: строка живёт, только если меняет следующее действие читателя. Если видишь такое — это находка, сообщай:
- успокоения: «это не поломка», «не волнуйся», «подтверждение придёт само»;
- лозунги: «собирай как конструктор», «настоящий код»;
- подпись, пересказывающая кнопку или заголовок рядом;
- одна и та же мысль дважды на экране;
- абзац там, где хватило бы фразы.
Проверка одной строкой: закрой её пальцем. Если следующий клик не изменился — строка мёртвая.
Часть 3. Подготовка
Что нужно
- ноутбук (macOS или Windows);
- для веток C и D — второй ноутбук или второе приложение на этом же (учительское);
- телефон и модуль — не нужны, всё проверяется на виртуальном роботе.
Установка
Установщики лежат на портале, вход не нужен: https://rubrick.beys.tech/downloads
Там два приложения — «Рубрик» (ученик) и «Рубрик — учитель». Для веток A, B, E, F хватит ученического; для C и D нужны оба.
- Windows:
student-<версия>-win-x64.exe. Windows покажет «Неизвестный издатель» — это ожидаемо, подпись ещё не куплена. Нажми «Подробнее» → «Выполнить в любом случае»; - macOS:
student-<версия>-mac-arm64.dmgна Apple Silicon,…-mac-x64.dmgна Intel. Перетащить в «Программы». При первом запуске macOS тоже поругается на неизвестного разработчика — правой кнопкой по программе → «Открыть».
Учительское приложение называется так же, но начинается с teacher-.
Рядом с каждым установщиком лежит файл .rbu — это не установщик, а пакет обновления для раздачи с флешки. Для установки он не нужен, качай .exe или .dmg.
Остальные документы (включая этот) — https://rubrick.beys.tech/docs
Если тестируешь из исходников, тебе дадут команды отдельно.
Сброс к «первому запуску»
Многие проверки начинаются с чистого устройства. Закрой приложение, потом удали базу.
macOS:
rm -f ~/Library/Application\ Support/student-app/rubrick.db
Windows (PowerShell):
Remove-Item "$env:APPDATA\student-app\rubrick.db" -ErrorAction SilentlyContinue
⚠️ Файл db.key.enc рядом не трогать — это ключ шифрования. Без него новая база не откроется.
⚠️ Не удаляй базу при запущенном приложении — оно этого не переживёт.
Часть 4. Тест-кейсы
Шесть веток. A и B — без учителя. C и D — с ним. E и F — отдельные ситуации.
Ветки A–D начинаются со сброса базы: вопрос про режим задают один раз за базу.
Как отмечать: каждый шаг — «прошёл» или «не прошёл». Если не прошёл, пиши: что сделал → что ожидал → что увидел, и прикладывай скриншот. Расхождение с колонкой «ожидание» — это находка, даже если кажется мелочью.
Ветка A — самостоятельный режим (учитель не нужен)
Домашний сценарий: ребёнок с ноутбуком и без школы.
| № | Действие | Ожидание |
|---|---|---|
| A1 | Сбросить базу, запустить приложение | Экран «Где работает этот компьютер?» с двумя карточками |
| A2 | «Самостоятельно» | «Выбери свою карточку»: поиск, «ГРУППЫ», чип «Локальная группа» |
| A3 | Закрыть приложение, запустить снова | Вопрос про режим не появляется — сразу выбор карточки |
| A4 | Чип «Локальная группа» → «Добавить ученика» → «Сохранить» с пустыми полями | «Напиши имя и фамилию — без них карточку не создать» |
| A5 | В поле «Имя» только пробелы → «Сохранить» | То же сообщение |
| A6 | Имя, фамилия, PIN из двух цифр → «Сохранить» | «PIN — это ровно четыре цифры. Допиши его или оставь поле пустым.» Карточка не создаётся |
| A7 | Дописать PIN до четырёх цифр → «Сохранить» | Карточка появилась в группе |
| A8 | «Добавить ученика» → те же имя и фамилия → «Сохранить» | «Такая карточка уже есть. Твоя — выбери её; другого человека — сохрани ещё раз» |
| A9 | «Сохранить» ещё раз, ничего не меняя | Карточка-тёзка создана. Так и задумано: два ребёнка могут быть тёзками |
| A10 | Ещё карточка: имя, фамилия, PIN пустой | Создана |
| A11 | Выбрать карточку без PIN | Сразу экран робота, PIN не спрашивают |
| A12 | Вернуться, выбрать карточку с PIN, ввести неверный | Точки краснеют, «Неверный PIN-код, попробуй ещё раз» |
| A13 | На экране PIN нажать «Это не я — выбрать другую карточку» | Возврат к выбору карточек |
| A14 | Снова войти в карточку с PIN, ввести неверный 5–6 раз подряд | Между попытками появляется задержка. Навсегда заблокировать не должно |
Ветка B — работа без робота и без сети
Продолжается из A, базу не сбрасывать. Проверяет, что автономное устройство самодостаточно.
| № | Действие | Ожидание |
|---|---|---|
| B1 | Экран робота: посмотреть на две кнопки внизу | Обе активны: «Найти робота» и «Виртуальный робот». Серых нет |
| B2 | «Найти робота» (робота рядом нет) | «Роботов не нашлось» и два шага, что сделать. Инструкция ровно одна, не повторяется |
| B3 | «Виртуальный робот» | Главный экран |
| B4 | Посмотреть на главный экран | Карточки «Продолжить урок» нет — проходить нечего. Нигде не должно быть «0% выполнено» |
| B5 | Меню слева → «Курсы» | «Курсы появятся после синхронизации» и кнопка. Разделов-заглушек («скоро», «в разработке») быть не должно |
| B6 | «Настройки» → «Синхронизация» | Текст совпадает с индикатором в шапке. Противоречия быть не должно |
| B7 | «Настройки» → «Режим устройства» | Написано «Самостоятельно» |
| B8 | «Главная» → «Новая программа» | Диалог с «Блоки» и «Python». Рекламных подписей быть не должно |
| B9 | «Блоки» → собрать: старт → вперёд 20 см → поворот | Справа появляется код на Python |
| B10 | «Старт» | Программа идёт, видна телеметрия, кнопка становится «Стоп» |
| B11 | Собрать длинную программу (повтор 20 раз), «Старт», затем «Стоп» | Останавливается сразу, не досматривая до конца |
| B12 | Уйти в «Проекты» и вернуться в мастерскую | Программа на месте. В списке проектов один проект, не два |
| B13 | Создать новый проект → «Проверить работу» до запуска | Кнопка называет условие («Сначала запусти») и сама запускает |
Ветка C — класс, учитель работает
Главный школьный сценарий. Сбросить базу. Запустить учительское приложение.
| № | Действие | Ожидание |
|---|---|---|
| C1 | Учитель: создать класс, добавить 2–3 учеников. Записать PIN | PIN показывают один раз и больше никогда |
| C2 | Учитель: вкладка «Подключение» → открыть сопряжение | Виден код и срок |
| C3 | Ученик: чистая база → «В классе» | Сразу поиск учителя. Создавать карточку не требуют |
| C4 | Дождаться | Учитель находится сам. Если он один — сопряжение начинается автоматически |
| C5 | Учитель: подтвердить устройство | У ученика «Готово! Устройство сопряжено» и код |
| C6 | Сверить код с экраном учителя | Совпадают |
| C7 | «Продолжить» | Экран выбора карточки, а не главный: ученик ещё не выбран |
| C8 | Посмотреть список | Приехали класс и ученики учителя. Кнопки «Добавить ученика» быть не должно |
| C9 | Выбрать себя, ввести PIN из C1 | Вход |
| C10 | «Курсы» | Курсы учителя, если он их опубликовал. Иначе — «Учитель пока не опубликовал ни одного курса» |
| C11 | «Настройки» → «Синхронизация» | «Синхронизировано с приложением учителя» |
| C12 | Закрыть учительское приложение, у ученика открыть «Настройки» | Через несколько секунд «сопряжено, нет связи». Урок при этом не прерывается |
Ветка D — класс, учителя ещё нет
Ноутбук привезли в класс раньше преподавателя. Сбросить базу. Учительское приложение не запускать.
Внизу экрана поиска два выхода, и они отвечают на разные вопросы. «Подключиться позже» уводит работать дальше, оставляя компьютер классным: учитель подключится, когда придёт. «Работать самостоятельно» отказывается от класса совсем — ростер учителя этому компьютеру больше не нужен. Поэтому второй проверяется последним: он меняет режим, и вернуться к первому в той же базе уже нельзя.
| № | Действие | Ожидание |
|---|---|---|
| D1 | Чистая база → «В классе» | Идёт поиск, потом «Ничего не найдено в сети» и поле для ручного адреса. Внизу два выхода: «Подключиться позже» и «Работать самостоятельно» |
| D2 | Нажать «Подключиться позже» | Выбор карточки. Видна строка «Компьютер ещё не подключён к классу» и кнопка «Подключиться к учителю» — режим остался классным |
| D3 | Открыть группу, проверить кнопку «Добавить ученика» | Её нет: на неподключённом классном устройстве плодить карточки нельзя. Вместо неё — «В этой группе пока никого нет — попроси учителя добавить тебя» |
| D4 | Нажать «Подключиться к учителю» | Снова экран поиска. Путь не тупиковый — кольцо замкнуто в обе стороны |
| D5 | Нажать «Работать самостоятельно» | Выбор карточки, режим стал самостоятельным: строки про класс больше нет |
Ветка E — смена режима задним числом
Базу не сбрасывать, продолжение любой ветки.
| № | Действие | Ожидание |
|---|---|---|
| E1 | «Настройки» → «Режим устройства» → «Сменить режим» | Сначала показывают, что изменится, и только потом кнопку подтверждения |
| E2 | Подтвердить переход в классный | Уводит на экран сопряжения |
| E3 | Повторить и нажать «Отмена» | Ничего не изменилось |
| E4 | Сменить обратно в самостоятельный | Профили и работы на месте |
Ветка F — повреждённая база
Единственная ветка, которую надо подстроить руками. Закрыть приложение.
macOS:
printf 'мусор' > ~/Library/Application\ Support/student-app/rubrick.db
Windows (PowerShell):
Set-Content "$env:APPDATA\student-app\rubrick.db" "мусор"
| № | Действие | Ожидание |
|---|---|---|
| F1 | Запустить приложение | Диалог «Локальная база данных повреждена или недоступна» с двумя кнопками |
| F2 | «Закрыть» | Приложение закрывается |
| F3 | Запустить снова, «Начать заново» | Стартует с чистой базы и снова спрашивает про режим |
| F4 | Прочитать сообщение и найти файл по указанному пути | Повреждённый файл лежит рядом и не удалён |
Отдельный заход — проход глазами по текстам
Без кликов по функциям: пройти все экраны и искать мёртвые строки по правилу из Части 2.
Дополнительно смотреть на вёрстку — её не ловит ни один автотест:
- углы прямые везде (это требование брендбука; скруглений быть не должно);
- поле ввода и кнопка рядом — одной высоты;
- иконки внутри рамок — по центру и по размеру;
- карточка на экране — по центру окна, не прижата к углу;
- ничего не срезано краем окна.
Часть 5. Мини-справочник по учительскому приложению
Нужен только для веток C и D. Полного теста учительского в этом этапе нет.
Запускается отдельно, на том же или соседнем ноутбуке. Вкладки сверху:
| Вкладка | Что там |
|---|---|
| Классы | создать класс, добавить учеников, выдать и сбросить PIN |
| Класс | живой вид урока: кто подключён, приостановить работу, снять ограничение |
| Курсы и уроки | конструктор курсов; там же импорт и экспорт курса файлом |
| Код учеников | чужие программы только на чтение, запустить можно у себя |
| Разрешения | что разрешено ученику: блоки, Python, запуск на роботе |
| Подключение | открыть сопряжение, подтвердить или отклонить устройство |
| Портал | скачать курсы из интернета |
| Обновления | обновить себя и раздать обновление ученикам по сети класса |
Для ветки C нужны только Классы (создать класс и учеников) и Подключение (открыть сопряжение, потом подтвердить устройство).
PIN показывают один раз. Записывай сразу — второй раз приложение его не покажет, только сбросит на новый.
Первый запуск на Windows попросит разрешение сети. Разрешать обе галочки — и частные, и общественные сети. Школьный Wi-Fi обычно считается общественным, и без этой галочки ученики не подключатся, а учитель будет видеть зелёный индикатор. Это известная слабость, о ней уже знают.
Часть 6. Как сообщать о находках
Одна находка — одно сообщение. В нём:
- Ветка и шаг — например «C7».
- Что сделал — по шагам, чтобы можно было повторить.
- Что ожидал — из колонки «Ожидание».
- Что увидел — фактически.
- Скриншот — обязательно для всего, что видно глазами.
- Окружение — Windows или macOS, версия приложения (Настройки → «О приложении»).
Мёртвую строку из Части 2 можно прислать одной строкой: сам текст и на каком экране.
Что НЕ является багом
- карточка без PIN — так задумано;
- два ученика с одинаковым именем — законно;
- «Виртуальный робот» вместо настоящего — полноценный режим, а не заглушка;
- отсутствие интернета — норма, приложение обязано работать без него;
- «Неизвестный издатель» при установке на Windows — подпись пока не куплена;
- Windows спрашивает про сеть при первом запуске учительского приложения — так и должно быть, разрешать и частные, и общественные сети, иначе ученики не подключатся.
Часть 7. Чего этот этап не проверяет
Честный список, чтобы не искать несуществующее:
- моторы, датчики и телеметрию модуля — нужен физический модуль, его нет;
- Bluetooth к настоящему телефону на Windows — не проверялось ни разу, это главный неизвестный риск проекта;
- перенос работ между ноутбуками — нужны два ноутбука и учитель;
- картинки в уроках — ещё не реализованы;
- личный режим устройства (чтобы ноутбук помнил ребёнка) — ещё не реализован.