Программа для создания тестов ([Обсуждение программы и кода])

Полезные советы и программы от пользователей нашего форума.

Модератор: Модераторы разделов

Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Программа для создания тестов

Сообщение xwicked »

Здравствуйте!

Третья моя программа написана по наработкам второй(для создания электронных книг), поэтому содержит некоторые методы такого же названия например "openBookBase", что в последующих версиях будет исправлено на "openTestBase" :laugh:

Программа представляет собой миникомплекс, включающий: создание, тестирование, отчёт(статистика). Версия 0.3.1 - исходник + сборки.

Скрин последней версии:
Изображение

Ссылка на SourceForge.net. Код под GNU GPL v2 - OpenSource. С++(Qt).

Описание: кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием.
Её могут использовать все, кому понадобиться быстро создать тест и проверить знания. Можно будет создать вопрос типа "Что показано на изображении" и использовать как в школе так и на предприятии, для сдачи квалификационных экзаменов. Все тесты хранятся в базе данных SQLite3. Это позволяет располагать файл базы на любом сервере(Windows, GNU / Linux, и т. д.), без необходимости установки сервера баз данных.

Всё находится в одном исполняемом файле. Для редактирования / тестирования, необходимо переключить соответствующий пункт из меню "Режим". Отчёт о протестировавшихся представлен статистикой.

Внутренняя архитектура: список вопросов хранится в QStringList ListQuestions, список правильных ответов в QStringList ListRightAnswer, варианты ответа при тестировании в QStringList ListCheckRightAnswer. Изображения к тесту находятся в QByteArray ListImages[100000]. Режим редактирования защищён паролем, который пока что, хранится в открытом виде.

Обсуждаем.
Спасибо сказали:
azsx
Сообщения: 3684
ОС: calculate linux, debian, ubuntu

Re: Программа для создания тестов

Сообщение azsx »

1. пароль для редактирования тестов - я не понял где он записан
2.
При сборке возникает ошибка вызванная тем, что функция random() не находится. Необходимо будет все функции random() заменить на rand().
Больше никаких ошибок, без изменения кода, возникнуть не должно.

что надо делать???
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

azsx писал(а):
16.08.2011 06:28
1. пароль для редактирования тестов - я не понял где он записан...
Цитата из руководства пользователя, Изменение пароля режима:
Пароль режима редактирования изменяется из пункта "Редактировать->Пароль режима". По-умолчанию: "Password"
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Здравствуйте!

Вот новая версия 0.3.5.

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

Хочу обратить Ваше внимание на то, что в данной версии я сделал вот так:

Код: Выделить всё

         if(slotSelectTypeQuestion() == false) return;

         if(sTypeQuestion == tr("One answer")) setOneAnswerType();

         if(sTypeQuestion == tr("Many answers")) setManyAnswerType();

         if(sTypeQuestion == tr("Installation sequence")) setInstallSequenceType();

         if(sTypeQuestion == tr("Enter number")) setEnterNumberType();

         if(sTypeQuestion == tr("Enter word (sentence)")) setEnterWordType();

         slQuestionType << sTypeQuestion;
         SaveState = false;

Функция slotSelectTypeQuestion() отвечает за вывод списка, из которого можно будет выбрать соответствующий тип вопроса.
Далее идёт проверка типа и его применение - функция начинается на "set<Тип_вопроса>". Потом выбранный вариант загоняется в список типов QStringList slQuestionType. Но, здесь есть одно "но":

Код: Выделить всё

sTypeQuestion == tr("One answer")
- тип вопроса взят в "tr()", так что тест, составленный на русском языке не будет работать при использовании английского языка интерфейса программы и наоборот :( . Просьба, перед сборкой устранить эту ошибку, так как мной она будет устранена в последующий версиях :) .

Дабы быть уверенным в том, что файлы не побились, при закачке, я добавил текстовик с md5-контрольными суммами.
Git-репозиторий:
git://shelk-test.git.sourceforge.net/gitroot/shelk-test/shelk-test (read-only)


P.S. Ещё один очень важный момент: версии 0.3.5, 0.4.1, 0.4.2 - сборки являются минимальными. То есть, чтобы посмотреть на все функции, необходимо программу собрать из исходника :) . Это делалось для проверки аудитории пользователей на заинтересованность в программе, путем отправки мне запроса на получение исходного кода. Что было не очень удачной идеей и, с версии 0.4.3, сборки программы уже снова полнофункциональны. Прошу извинить меня за данное неудобство.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Для распространения программы между RPM-дистрибутивами, воспользуйтесь следующим спекфайлом:
Summary: On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge.

Summary(ru): Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt.

%define version 0.3.5

Group: Education

Name: shelk-test

BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3
BuildArch: %ix86

Provides: shelk-test

Release: alt1

Source: shelk-test-%{version}.tar.gz

Url: http://labfreetech.org/index_e.html

Version: %{version}

License: GPLv2

Packager: LabFreeTech.org admin@labfreetech.org

%description
On Qt-based, cross-platform software is designed for creating and editing tests, followed by tests of knowledge.
Supported features: - Creation of a test; - Editing of the test; - Testing; - Adding / removing tests from the database; - Rich editing the test of the tests; - Password protection regime editing;

%description -l ru
Кроссплатформенная программа для создания и редактирования тестов, с последующим тестированием. Основана на Qt.
Поддерживаемые функции: - Создание теста; - Редактирование теста; - Тестирование; - Добавление / удаление тестов из базы данных; - Расширенное редактирование текста вопросов теста; - Защита паролем режима редактирования;

%prep

%setup -q

%build
%make_build

%install

cp -Rv shelk/ %buildroot/

%clean

rm -rf $RPM_BUILD_ROOT

%files

/usr/bin/*
/usr/share/*

%post

test -e /usr/bin/xwts-0.3.5 || ln -s /usr/bin/xwts-0.3.5 /usr/bin/shelk-test-0.3.5

if (test -d $HOME/Desktop) then
test -e $HOME/Desktop/xwts.desktop || cp -r /usr/share/applications/xwts.desktop $HOME/Desktop/shelk-test.desktop
else
echo "Use command \"/usr/bin/xwts-0.3.5\""
fi

%postun

test -L /usr/bin/shelk-test-0.3.5 && rm -r /usr/bin/shelk-test-0.3.5
test -e $HOME/Desktop/shelk-test.desktop && rm -r $HOME/Desktop/shelk-test.desktop
Но, в нём есть небольшая ошибка или, даже скорей недочёт:
BuildRequires: gcc-c++, libqt4-sql-sqlite >= 4.4.3, libqtgui4 >= 4.4.3, libqt4-core >= 4.4.3
Непонятно почему при установке собранного пакета с этим спекфайлом, происходит игнорирование выделенной библиотеки :( , но libqt4-sql устанавливается, хотя явного указания её нет. Кто знает причину, прошу ответить.
Этот спекфайл находится в архиве shelk-test-0.3.5-rpm, расположенный по ссылке в предыдущем посте. Там же находится архив исходного кода и для дитрибутивов GNU / Linux Debian(/Ubuntu), с пометкой "deb".
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Программа для создания тестов

Сообщение Bizdelnick »

Какой отвратительный спек. Одно в нём хорошо - нигде, кроме Альта, он работать не будет.
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
sgfault
Сообщения: 586
Статус: -
Контактная информация:

Re: Программа для создания тестов

Сообщение sgfault »

xwicked писал(а):
15.08.2011 16:54
Скрин последней версии:
Изображение

<..>
Можно будет создать вопрос типа "Что показано на изображении" и использовать как в школе так и на предприятии, для сдачи квалификационных экзаменов.

А что показано на изображении? Я имею в виду, что это за машина? :huh:
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Bizdelnick писал(а):
21.10.2011 18:06
Какой отвратительный спек. Одно в нём хорошо - нигде, кроме Альта, он работать не будет.
Маэстро, прошу показать мне программу, из GPL-подобных, с межплатформенным спеком!!!

Удивительно, но для сборки в Mandriva я меняю только один макрос на команду:
%prep

%setup -q

%build
%make_build
//make

%install
И этого достаточно :rolleyes: . Дистрибутивы с отличной работой Alt 5 и Mandriva 2010
sgfault - infinity.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Программа для создания тестов

Сообщение Bizdelnick »

xwicked писал(а):
21.10.2011 21:12
прошу показать мне программу, из GPL-подобных, с межплатформенным спеком!!!

Да любая, для которой майнтейнер такой спек сочинил. Рекомендую почитать.

xwicked писал(а):
21.10.2011 21:12
для сборки в Mandriva я меняю только один макрос

Собственно, этот макрос я и имел в виду, когда говорил, что кроме Альта спек нигде работать не будет. Но ужасность спека не только и не столько в нём. Например, что это за бессмысленные и беспощадные %post с %postun? Вы никогда не слышали, что пакеты ставятся под рутом? А что никсы - многопользовательская система, и менять при установке что-то в хомяке отдельно взятого юзера крайне глупо, даже если бы этот юзер не был рутом?
А что устанавливаемые файлы должны принадлежать руту, Вы тоже не слышали?
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

%if %{defined fedora}
%if %{defined mdkversion}
%if 0%{?fedora} < 5
%if 0%{?mdkversion} > 2006
Я про это и говорил, что такого НЕТ. А это руководство использовать не просто глупо, но и жестоко. Всего дистрибутивов более 600, и они постоянно растут и я буду заниматься статистикой популярности и написанием подобных макроусловий, вместо кодинга.[fixed] :)
Спасибо сказали:
Аватара пользователя
taaroa
Сообщения: 1319

Re: Программа для создания тестов

Сообщение taaroa »

Bizdelnick писал(а):
21.10.2011 18:06
Какой отвратительный спек. Одно в нём хорошо - нигде, кроме Альта, он работать не будет.

fortune ALT -m "наши spec-файлы"

(ALT) % На основании этого можно сделать очевидные выводы: + нам удобно, чтобы чужие spec-файлы у нас работали (хотя бы для удобства подготовки своего spec-файла); + нам все равно, будут ли наши spec-файлы работать где-либо еще. -- ldv in sisyphus@ %

:wq
Спасибо сказали:
yaleks
Сообщения: 2121
Статус: вне статуса
ОС: Gentoo ~

Re: Программа для создания тестов

Сообщение yaleks »

taaroa писал(а):
22.10.2011 08:12
Bizdelnick писал(а):
21.10.2011 18:06
Какой отвратительный спек. Одно в нём хорошо - нигде, кроме Альта, он работать не будет.

fortune ALT -m "наши spec-файлы

(ALT) % На основании этого можно сделать очевидные выводы: + нам удобно, чтобы чужие spec-файлы у нас работали (хотя бы для удобства подготовки своего spec-файла); + нам все равно, будут ли наши spec-файлы работать где-либо еще. -- ldv in sisyphus@ %



http://freesource.info/wiki/korinf
Сначала rpm-спек преобразуется из спека для ALT Linux с помощью команды rpmbph (из etersoft-build-utils), далее выполняется его сборка в целевой системе, где задействуется пакет rpm-build-altlinux-compat (обеспечивающий совместимость спека по макросам с целевой системой).


Ну и http://www.altlinux.org/SpecTips/Compatibility про это тоже написано.
Спасибо сказали:
Аватара пользователя
Bizdelnick
Модератор
Сообщения: 20752
Статус: nulla salus bello
ОС: Debian GNU/Linux

Re: Программа для создания тестов

Сообщение Bizdelnick »

xwicked писал(а):
21.10.2011 22:34
Всего дистрибутивов более 600, и они постоянно растут и я буду заниматься статистикой популярности и написанием подобных макроусловий, вместо кодинга.

Так и не говорите, что
xwicked писал(а):
21.10.2011 17:31
Для распространения программы между RPM-дистрибутивами, воспользуйтесь следующим спекфайлом:

Но лучше бы этого спека не было даже под Альт, чем такой...
Пишите правильно:
в консоли
вку́пе (с чем-либо)
в общем
вообще
в течение (часа)
новичок
нюанс
по умолчанию
приемлемо
проблема
пробовать
трафик
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Продолжаем знакомиться с кодом. Версия 0.4.1 Включает в себя следующие изменения:
- Исправлена ошибка в реализации типа вопроса "Ввод числа";
- Исправлена ошибка в реализации типа вопроса "Установка последовательности";
- Добавлена возможность вставки изображения в вопрос теста;
- Добавлены горячие клавиши;
- Добавлена возможность использования баллов;
- Добавлена возможность ввода имени тестируемого;
- Добавлена статистика.

Статистика - это первый вариант журнала отчёта о протестировавшихся студентах, представлена обычным html-файлом:

Код: Выделить всё

            QFile file("/tmp/shelk-test-0.4.1/Stat.html");
            QDataStream sfile(&file);
            if(!file.exists())
            {
                file.open(QIODevice::WriteOnly);
                strStat.clear();
                strStat.append("<HTML>\n"
                               " <BODY>\n"
                               "  <TABLE border=\"3\">\n"
                               "   <TR>\n"
                               "    <TD> " + tr("User name") + " </TD>\n"
                               "    <TD> " + tr("Name test") + " </TD>\n"
                               "    <TD> " + tr("Total questions") + " </TD>\n"
                               "    <TD> " + tr("Correct answers") + " </TD>\n"
                               "    <TD> " + tr("Wrong answers") + " </TD>\n"
                               "    <TD> % </TD>\n"
                               "    <TD> " + tr("Total points:") + "  </TD>\n"
                               "    <TD> " + tr("Date") + "  </TD>\n"
                               "    <TD> " + tr("Time end") + "  </TD>\n"
                               "   </TR>\n"
                               "   <TR>\n"
                               "    <TD>" + UserName + "</TD>\n"
                               "    <TD>" + StatNameTest + "</TD>\n"
                               "    <TD>" + sTotalQuestions + "</TD>\n"
                               "    <TD>" + sCorrectAnswer + "</TD>\n"
                               "    <TD>" + sWrongAnswer + "</TD>\n"
                               "    <TD>" + strPercent + "</TD>\n"
                               "    <TD>" + sAllPoint + "</TD>\n"
                               "    <TD>" + strDate + "</TD>\n"
                               "    <TD>" + strTime + "</TD>\n"
                               "   </TR>\n"
                               "  </TABLE>\n"
                               " </BODY>\n"
                               "</HTML>\n");
                sfile << strStat;
                file.close();
                FormStat.StatLabel->setText(strStat);
            }
Есть что-нибудь проще или для начала сойдёт?
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Здравствуйте! Программа продолжает совершенствоваться и версия 0.4.2 включает 25 изменений. Было изменено отображение картинки в тесте. Теперь используется рисование непосредственно на виджите:

Код: Выделить всё

//WidgetImage.cpp

//Передаётся в конструктор вторым параметром путь к загружаемому изображению
WidgetImage::WidgetImage(QWidget* pwgt/*=0*/, QString sFileName) : QWidget(pwgt)
{
//Копирование пути в глобальную переменную,
//для использования в обработчике события рисования
    str1 = sFileName;
}


/*virtual*/ void WidgetImage::paintEvent(QPaintEvent*)
{
    QImage   img(str1);//Загрузка изображения
    QPainter painter;

    painter.begin(this);
//На img2 рисуется изображение из img масштабируемо по высоте
    QImage img2 = img.scaledToHeight(height());
    painter.drawImage(0, 0, img2);//Отрисовка на виджите
    painter.end();
}

//TestSystem.cpp
TestSystem::TestSystem(QMainWindow *pwgt /* = 0*/): QMainWindow(pwgt)
{
    setupUi(this);
...
    QSplitter* splitEditHV;//Объявление разделителя
...
    splitEditHV = new QSplitter(Qt::Vertical);//Создание разделителя вертикально
...
//Создание виджита в разделителе с передачей загружаемого изображения
    widgetImage = new WidgetImage(splitEditHV, "/tmp/shelk-test-0.4.2/temp/tempimage");
    widgetImage->resize(300, 300);//Изменение размера виджета
...
}
Как я предполагаю, что есть проще и правильнее способ, но времени найти его нет :( прошу помочь.

Ещё интересует вопрос по отлавливанию ошибок try catch. Это первая реализация. Что кроме вынесения в один метод обработчиков, во избежании наличия копированного кода, там можно сделать? Благодарю! :)
Ещё изменения:
- Добавлен учёт времени тестируемого;
- Добавилась возможность ручного запуска теста, по нажатию на клавишу;
- Добавлена возможность остановки теста, с занесением информации о тестируемом в статистику;
- Добавилась возможность экспорта в файл XWT;
- Добавилась возможность импорта из файла XWT;
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Программа для создания тестов

Сообщение RasenHerz »

xwicked писал(а):
22.11.2011 23:26
Ещё интересует вопрос по отлавливанию ошибок try catch. Это первая реализация. Что кроме вынесения в один метод обработчиков, во избежании наличия копированного кода, там можно сделать?

"Еще интересует вопрос по проверке условий в блоке if. Это первая реализация. Что кроме вынесения в один метод проверки условия, во избежание наличия копированного кода, там можно сделать?"
Ну вы поняли... =)
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

RasenHerz писал(а):
24.11.2011 04:11
"Еще интересует вопрос по проверке условий в блоке if. Это первая реализация. Что кроме вынесения в один метод проверки условия, во избежание наличия копированного кода, там можно сделать?"
Ну вы поняли... =)
Честно говоря нет, я делал как в книжке по ООП в C++. Что я недопонял намекните, пожалуйста.
Спасибо сказали:
Аватара пользователя
RasenHerz
Сообщения: 1341
ОС: Arch Linux amd64

Re: Программа для создания тестов

Сообщение RasenHerz »

xwicked писал(а):
24.11.2011 04:47
Честно говоря нет, я делал как в книжке по ООП в C++. Что я недопонял намекните, пожалуйста.

Ничего, кроме предусмотренного стандартом, вы с try/catch сделать не можете (хотя тут я наверное немного погорячился - изобретательность отдельных личностей нельзя сбрасывать со счетов). Почитайте Б. Страуструпа там информации об исключениях более чем достаточно.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

RasenHerz писал(а):
24.11.2011 19:48
Ничего, кроме предусмотренного стандартом, вы с try/catch сделать не можете (хотя тут я наверное немного погорячился - изобретательность отдельных личностей нельзя сбрасывать со счетов). Почитайте Б. Страуструпа там информации об исключениях более чем достаточно.
Ничего удивительного. В ОС Windows Qt почему-то не обрабатывает блок "catch(...)". Чтобы поймать хотя бы основные ошибки - был сделан первоначальный код, который Вы могли видеть, с условиями. Буду благодарен тому, кто найдёт нужную опцию компилятора для включения в ОС Windows.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

0.4.3 - это новая версия программы.

Здравствуйте! :)

- Добавлено шифрование и сжатие экспортируемого файла теста в формате xwt;
- Исправлена ошибка, когда пароль режима программы хранился и проверялся в открытом виде;
- Добавлена возможность работать с несколькими хранилищами тестов;
- Добавлена возможность резервировать хранилище тестов(со сжатием до 5-ти раз(!));
- Добавлена возможность запроса на сохранение теста, при его закрытии;

Код: Выделить всё

    QString RegimePassword;//Пароль режима
    QByteArray  baPassword;//Хеш пароля;
    RegimePassword = "Password";
    baPassword.append(RegimePassword);
    baPassword = baPassword.toBase64();
    baPassword = qCompress(baPassword, 9);
    baPassword = baPassword.toBase64();
    baPassword = qCompress(baPassword, 9);
    baPassword = baPassword.toBase64();
    RegimePassword.clear();
    RegimePassword.append(baPassword);
Для шифрования используется алгоритм Base64, для сжатия функция qCompress. Этот код может быть реверсирован и получен изначальный пароль фактически в 100%-ом виде. В будущем он будет заменён на md5 хеш или похожий.

А вот следующая проблема - это шифрование самого теста. Алгоритмы те же. При наличии у студента(/пользователя) кода все тесты предстают в абсолютно первозданном виде :( .
Шифрование по ключу думаю будет слишком хорошая защита, которую мне одному не реализовать. Найти другой вариант за ~2-а месяца у меня не получилось.

Какие есть варианты? Благодарю!
ЗЫ: Всего 25 изменений.
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Программа для создания тестов

Сообщение sciko »

xwicked писал(а):
26.01.2012 21:15
В будущем он будет заменён на md5 хеш или похожий.
Не поможет, т.к. вам его всё равно придётся восстанавливать.

xwicked писал(а):
26.01.2012 21:15
А вот следующая проблема - это шифрование самого теста.
Тут-то как раз нет проблемы: сам тест шифровать не надо, а надо шифровать ответы. Причём лучше хешем и таким, который для одного и того же ответа, но для разных заданий даст разный результат.

Более того, сама архитектура программы ущербна с точки зрения безопастности. В пределе, тестируемый может просто поменять переменную, отвечающую за оценку, и не решать тест. Для решения этой проблемы необходима клиент-серверная архитектура. Именно поэтому KEduca больше не разрабатывается, а Moodle -- живее всех живых.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

sciko писал(а):
27.01.2012 13:15
Не поможет, т.к. вам его всё равно придётся восстанавливать.
...
Тут-то как раз нет проблемы: сам тест шифровать не надо, а надо шифровать ответы. ...
Более того, сама архитектура программы ущербна с точки зрения безопастности. В пределе, тестируемый может просто поменять переменную, отвечающую за оценку, и не решать тест. Для решения этой проблемы необходима клиент-серверная архитектура. Именно поэтому KEduca больше не разрабатывается, а Moodle -- живее всех живых.
Пароль нужно будет восстанавливать, если пользователи(преподаватели) забыли его. Но, хеш пароля хранится в файле конфигурации программы. Если будет md5, то студент сможет считать его, но не сможет получить пароль. В то время, как преподаватель, если забыл пароль, удалит этот конфигурационный файл, и вуаля - пароль сброшен :) . Студент при том, без админки ничего не сделает. Да и шифровать вопросы, очень важно, ты наверное не был студентом?
Если студент сможет через отладчик работать с программой, то пожалуйста, на сервер может быть передана подмена аналогично ;) Если есть более полезные мысли, с радостью выслушаю :)
Спасибо сказали:
sciko
Сообщения: 1744
Статус: Ъ-участник
ОС: Debian/Ubuntu/etc

Re: Программа для создания тестов

Сообщение sciko »

xwicked писал(а):
27.01.2012 14:30
Пароль нужно будет восстанавливать, если пользователи(преподаватели) забыли его.
Ещё раз: пароль нужен программе, чтобы расшифровать и показать тест. Однако программа запускается с правами тестируемого. И различить запрос от тестируемого и от программы невозможно. Зная откуда берёт пароль программа, пользователь может получить пароль сам. Поэтому эта задача не разрешима в такой постановке.

Решение у этой задачи всего два:
1) проверять только ответы на соотвествие, шифруя правильный ответ необратимым алгоритмом.
2) запускать программу под другим пользователем.

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

Достаточно разжевал?

xwicked писал(а):
27.01.2012 14:30
Да и шифровать вопросы, очень важно, ты наверное не был студентом?
Важно шифровать только правильный ответ. Остальное желательно, но не важно, т.к. всё равно будет выдано тестируемому.

xwicked писал(а):
27.01.2012 14:30
Если студент сможет через отладчик работать с программой, то пожалуйста, на сервер может быть передана подмена аналогично
С каких пор сервер должен доверять клиенту?
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Программа для создания тестов

Сообщение /dev/random »

xwicked писал(а):
27.01.2012 14:30
Да и шифровать вопросы, очень важно, ты наверное не был студентом?

Есть только один способ надёжно защитить эти вопросы: хранить их на другом компьютере. Если их шифровать, то ключ шифрования всё равно будет находиться в памяти, и вытащить его отладчиком - не проблема. И даже если экзаменатор, проявив невероятные для географа сисадминские навыки, запретит отладку без знания рутового пароля, всегда можно вставить загрузочный диск, устанавливающий какой-нибудь руткит, и незаметно нажать резет. А потом оправдаться: это он сам перезагрузился, перегрелся, наверное! Географ поверит. А если запретить загрузку со сменных устройств, и следить, чтобы никто не влез в системник, то следует учесть ещё и то, что многие материнки не требуют биос-пароль для выбора загрузочного устройства. Ну и так далее.

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

xwicked писал(а):
27.01.2012 14:30
Если студент сможет через отладчик работать с программой, то пожалуйста, на сервер может быть передана подмена аналогично ;)

Программа должна целиком работать удалённо, а локальная часть не должна уметь ничего, кроме отрисовки интерфейса. И должна иметь возможность передавать на сервер только то, какую кнопку нажал студент.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

Эти все сложности реализации клиент-сервера давайте оставим itest'у и остальным велосипедам :) Мне важна практичность и эргономика.
ЗЫ: Появилась одна мысль - пошёл обдумывать её :)
Спасибо сказали:
Аватара пользователя
/dev/random
Администратор
Сообщения: 5282
ОС: Gentoo

Re: Программа для создания тестов

Сообщение /dev/random »

xwicked писал(а):
27.01.2012 15:46
Эти все сложности реализации клиент-сервера давайте оставим itest'у и остальным велосипедам :)

В таком случае можете даже не пытаться реализовать какую-либо защиту тестов внутри своей программы. Бесполезно. Без клиент-сервера единственной надёжной защитой будет стоять над душой каждого студента и следить за каждым движением.
Спасибо сказали:
Аватара пользователя
xwicked
Сообщения: 115
ОС: GNU / Linux Debian 7 amd64
Контактная информация:

Re: Программа для создания тестов

Сообщение xwicked »

/dev/random писал(а):
27.01.2012 15:50
xwicked писал(а):
27.01.2012 15:46
Эти все сложности реализации клиент-сервера давайте оставим itest'у и остальным велосипедам :)

В таком случае можете даже не пытаться реализовать какую-либо защиту тестов внутри своей программы. Бесполезно. Без клиент-сервера единственной надёжной защитой будет стоять над душой каждого студента и следить за каждым движением.
Хотя я понял, в чём дело. Эти все мысли по поводу поверхностной информации взятые с поста 0.4.3. Sqlite'овская база тестов итак находится на сервере. Шифрование необходимо было для распространения в файлах формата xwt. Но такую, как говорится, параноидальную защиту я делать не буду, если только в далёком будущем...
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Программа для создания тестов

Сообщение Voral »

xwicked писал(а):
27.01.2012 14:30
Если студент сможет через отладчик работать с программой, то пожалуйста, на сервер может быть передана подмена аналогично ;) Если есть более полезные мысли, с радостью выслушаю :)

1 Зачем отладчик? Есть программы типа ArtMoney (поправьте если я с названием ошибся - в игрушках всякое разное в памяти подменять)
2. В сетевом варианте подмены быть не может. Поскольку вопросы и ответы храняться на сервере. Все что сервер получает от клиента ответ. И о правильности/неправильности знает только сервер.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Аватара пользователя
Voral
Сообщения: 1205
ОС: Debian Wheezy (amd64)
Контактная информация:

Re: Программа для создания тестов

Сообщение Voral »

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

Режим:
1 отправил вопрос и ответы. (ни какой информации о правильности).
2 получил номер ответа
3 отправил результат

Клиент просто тупой браузер показывающий вопрос и варианты ответов и принимающий ответ тестируемого. Все. Ни какого анализа.

xwicked писал(а):
27.01.2012 16:14
Sqlite'овская база тестов итак находится на сервере.

Речь идет не о сервере БД. А о сервере вашего приложения.
Хотя теоретически можно проверку и средствами СУБД реализовать. или хотябы запросов. Но ни в коем случае не отправлять на клиента правильный ответ.
То что не убивает нас, делает нас сильнее! © Ницше.
When life puts you in tough situations, don’t say "why me". Just say "try me © ?
Спасибо сказали:
Ответить