Skip to content

Instantly share code, notes, and snippets.

@codedokode
Last active January 24, 2023 14:44
Show Gist options
  • Star 20 You must be signed in to star a gist
  • Fork 6 You must be signed in to fork a gist
  • Save codedokode/8733007 to your computer and use it in GitHub Desktop.
Save codedokode/8733007 to your computer and use it in GitHub Desktop.
Сайт для тестирования TestHub

Задача

Cделать сайт TestHub, который позволяет преподавателям проверять знания студентов в автоматическом режиме с помощью тестов.

  • Предлагаемые технологии: фреймворк Yii/MySQL/Twig
  • Время выполнения: все зависит от тебя

Описание страниц сайта

/ - Главная. Содержит информацию о сервисе, кнопки регистрации преподавателей и список лучших студентов и групп.

/reg/student - Регистрация студента. Содержит поля имя/фамилия/пол(опр. по возможности автоматически)/номер группы/аватарка. Есть возможность войти через вконтакте/фейсбук чтобы не заполнять поля.

/reg/teacher - Регистрация преподавателя Содержит то же + список групп, у которых ведет занятия преподаватель. Чтобы получить доступ, преподаватель должен быть подтвержден администратором.

Если студент залогинен, то он попадает на свою страницу со списком тестов ( /tests/my ). Выводятся тесты в 2 списка: уже сданные (выводится результат), и которые надо сдать (выводится срок). В первую очередь выводятся тесты, до сдачи которых осталось мало времени.

Также выводятся успехи других студентов группы.

Если нажать на сданный тест, то попадаем на страницу результатов /results/12345 . На этой странице виден список вопросов, и выведено правильно или неправильно дан ответ. Страница результатов может быть общедоступна, а может быть закрыта. Тут же можно расшарить ссылку на страницу в соцсетях или закрыть доступ.

Тут еще надо подумать, а нет ли здесь уязвимости что можно посмотреть как другие сдали тесты и методом исключения подобрать правильные ответы.

Если нажать на несданный тест, то попадаем на входную страницу теста /tests/1234. На ней выводится информация о тесте: название, число баллов, нужно для сдачи, преподаватель, предисловие, правила прохождения теста. И большая кнопка «Начать тест». И кнопка возврата назад к списку.

В самом тесте просто показываются вопросы по очереди, и отсчиытвается оставшееся время. После сдачи студент попадает на страницу с результатами. Можно отказаться сдавать тест, но в любом случае все попытки сдачи учитываются. Если все попытки потрачены, то нужно просить преподавателя добавить еще.

Страница со списком групп /manage/groups — выводися список групп, по клику можно перейти на страницу со списком студентов. Для каждой группы выводится статистика по успешно сдавшим/провалившим/сдающим тесты.

Страница группы /manage/groups/62501 — выводится студентов и результаты сдачи тестов. Тут же можно добавить попыток, просмотреть ответы или аннулировать результаты. Можно редактировать студентов.

Страница со списком преподавателей /manage/teachers — выводится список преподавателей, можно их блокировать или подтверждать.

Список тестов Преподаватель может редактировать только свои тесты, администратор — все. Выводится статистика по тестам, число сдавших, медианный балл. Можно кликнуть чтобы увидеть поименный список сдавших/проваливших тест.

Тесты

Тест имеет такие свойства: название, номера групп, ограничение по времени, число попыток, сложность, порог сдачи, доступен с, сдать до. Вопросы могут содержать картинку, текст, число баллов, способ ответа (олиночный, множественный, числом, строкой). Вопросы можно добавлять, удалять, перемещать.

Старые тесты отправляются в архив.

Надо подумать про тесты с параметрами (вида Сколько бит содержится в {n} байтах?).

Тесты можно экспортировать/импортировать в XML, в текст, распечатывать с правильными ответами или без. Тесты можно создавать на основе старых.

Картинки

Картинки пока не нарисованы. Есть вайрфреймы, то есть набросок как это будет выглядеть:

Верстать их пока не надо, так как я их еще перерисую.

Наполнение БД

Надо будет написать скрипт, который генерирует нужное число студентов, преподавателей, тестов, результатов сдачи, чтобы мы могли тестировать сайт на непустой базе.

Миграции

Изменения в Бд надо делать через миграции: http://www.yiiframework.com/doc/guide/1.1/ru/database.migration Миграции нужны, чтобы мне например не надо было дропать и пересоздавать базу когда ты туда добавишь новое поле.

Формы и гриды

В задании много работы с формами и таблицами. Для них надо использовать соотв. возможности Yii

Права доступа

У нас есть пользователи с разными правами доступа. Например, преподаватель может редактировать тесты — но только свои, администратор - все что угодно. Можно использовать для управления правами какие-то стандартные компоненты.

Поиск

Нужно будет сделать всюду удобный поиск: поиск студента по имени, поиск теста по названию.

Сущности и их свойства

Группы: номер (возможно потом добавим еще факультеты и номер курса)

Пользователи:

  • У всех есть имя, фамилия, пол, email (мб пустым при входе через соцсеть), аватар, телефон (не обяз.)
  • Пользователи могут входить на сайт через email + пароль либо же через соцсеть
  • Email/телефон может использоваться для напоминаний (срочно сдать тест) и уведомлений.
  • Насчет телефона не уверен — насколько безопасно хранить их на сайте. Может и не стоит.
  • Нужно подумать, реально ли при логине из фейсбука конвертировать англоязычное написание имени в русское
  • Хорошо бы при регистрации автоматом определять пол по имени/фамилии, подумай как это сделать

Свойства:

  • Студент: группа в которой учится
  • Препод: группы у которых он ведет занятия, ссылка на личную страницу, рабочий телефон, название кафедры
  • Куратор: как и препод
  • Администратор: ?

Права:

  • студент — сдавать тесты
  • препод — создавать тесты, аннулировать результаты, разрешать пересдачу но только в своих группах
  • куратор — подтверждает и блокирует кураторов и преподов, просматривает все результаты, аннулирует тесты, разрешает пересдачу
  • администратор — может все

Заметь, здесь есть хороший вопрос, как хранить разные типы пользвоателей. Можешь погуглить про наследование таблиц, есть разные способы.

Тесты: автор, название, предисловие, сколько баллов для сдачи, доступен с, сдать до (но препод может продлевать срок отдельным студентам), число попыток (препод может дать дополнительные лично), номера групп которым предназначен тест.

Старые-старые тесты отправляются в архив, чтобы не мозолить глаза.

Вопросы теста: текст (наверно стоит предусмотреть возможность HTML), картинка, сложность в баллах, тип ответа, ответ

Виды ответов: выбрать один из вариантов, выбрать 0-N вариантов, число (с погрешностью, например, 1.23 ±10%), строка (сравнивается без учета пробелов и регистра).

Резлультат теста: результаты сдачи всех тестов хранятся в БД, включая время ответа на каждый вопрос и выбранный ответ.

Тут стоит подумать, а что если потом тест или вопросы поменяются? Не нарушатся ли данные в архиве результатов?

Вроде как все. Если я что-то забыл — можешь добавить.

Генератор данных

Нам также нужен консольный скрипт-генератор для набивания базы. Я вижу примерно такой вариант:

yiic fill students:90 teachers:5 tests:7 questions:200 results:35

Синтаксис можно поменять. Должны генерироваться и связываться между собой все указанные сущности в нужном числе.

Источники данных для генератора:

Имена:

Список с синонимами может пригодится, чтобы например при входе из соцсети конвертировать имя в строгую форму. Но это если мы захотим это делать.

Фамилии:

Склонение имен и фамилий. Возможно, стоит сделать склонялку или же в базу забить имена в 6 падежах (их можно получить через inflector яндекса, который конечно не предназаначен для такого использования но работает вполне ок). Ну может не будем делать склонение. Ты сам-то что думаешь?

email — можно сгенерировать в fakenamegenerator или как-нибудь самому, из имен например.

аватар — гм, не знаю пока где их брать. Можно взять картинки какие-нибудь или ничего не стаивть.

Номера групп: можно сделать как тут http://isu.ifmo.ru/pls/apex/f?p=2005:4:121700718774411::NO::SCH:2 Названия кафедр: http://isu.ifmo.ru/pls/apex/f?p=2005:2:0::NO:RP:STRUCT,STRUCT_TYPE_W,STRUCT_TYPE_H,STRUCTURE_FILTER:1,777,4,

Названия тестов: http://ru.wikipedia.org/wiki/%D0%A1%D0%BF%D0%B8%D1%81%D0%BE%D0%BA_%D0%B0%D0%BA%D0%B0%D0%B4%D0%B5%D0%BC%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D1%85_%D0%B4%D0%B8%D1%81%D1%86%D0%B8%D0%BF%D0%BB%D0%B8%D0%BD

Вопросы для тестов с ответами: http://moydocs.ru/geografiya/73061/index.html (удобен тем, что можно скопировать текст в файл и расковырять регулярками по словам «Вопрос», «A», «B» ... это займет строчек 20).

Попробуй сделать списки (не знаю, в каком формате — можно txt файл с значениями на отдельных строках, или json) исходных данных и прикрутить генератор. Совсем сильно заморачиваться не надо, главное чтобы мы могли заплнить базу правдоподобными значениями.

В боевой базе должно быть примерно столько сущностей:

  • 1-2 куратора
  • 15 преподов
  • 60 групп по ~25 студентов
  • в среднем 8 тестов на студента, тест на 3-4 группы => около 120 тестов
  • 10-50 вопросов в каждом тесте
  • 3-4 варианта ответа на вопрос
  • половина студентов не сдавала тесты, четверть сдала ок, четверть пробовала сдать но провалила (это сложно сгенерировать?)
@Elnar1995
Copy link

алло

@lindel33
Copy link

алло

@500apmZerg
Copy link

500apmZerg commented Sep 2, 2022

алло

@mcblin
Copy link

mcblin commented Jan 24, 2023

алло

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment