Programming Taskbook


E-mail:

Пароль:

Регистрация пользователя   Восстановление пароля

 

ЮФУ

Электронный задачник по программированию

©  М. Э. Абрамян (Южный федеральный университет), 1998–2022

 

Teacher Pack | Удаленные репозитории | Проверка на заимствования

PrevNext


Проверка на заимствования

Основные возможности

Если для группы используется удаленный репозиторий с возможностью хранения текстов программ (варианты 1–3 сохранения результатов), то преподаватель может дополнительно проверять учебные программы на заимствования, используя команду «Репозиторий | Поиск заимствований» контрольного центра.

Поиск заимствований выполняется внешней программой, которая может быть разработана самим преподавателем с использованием специальной библиотеки PTAntiplag.dll, входящей в состав комплекса Teacher Pack и находящейся в том же каталоге, что и контрольный центр. В этом каталоге содержится и простейший вариант реализации подобной программы — программа AntiplagBase.exe, проверяющая программы на полное совпадение после удаления из них всех пробельных символов. По умолчанию именно программа AntiplagBase.exe используется для проверки заимствований.

При выполнении команды «Поиск заимствований» на экране отображается соответствующее окно, позволяющее настроить параметры поиска и просмотреть его результаты.

Ниже приведен пример окна «Поиск заимствований», в котором заретушированы личные данные учащихся.

В окне «Поиск заимствований» можно выбрать программу поиска, указать дополнительные группы учащихся, которые также будут включены в поиск заимствований, а также указать пороговое значение для уровня совпадения (в процентах). Кроме того, в этом окне можно задать кодировку текста анализируемых программ (эта настройка берется из соответствующей настройки окна просмотра и рецензирования программ).

При выборе новой программы поиска выполняется ее тестовый запуск, позволяющий проверить, что она реализована на основе классов, описанных в библиотеке PTAntiplag.dll.

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

При поиске заимствований выполняется попарное сравнение всех программ, выполняющих одно и то же задание, для учащихся из текущей группы, а также из всех дополнительных групп, указанных в окне поиска заимствований. Если уровень совпадения для двух программ равен или превышает порог, указанный в окне, то данное совпадение добавляется к списку совпадений и указывается для каждого из учащихся текущей группы, представивших эти программы. В итоговом списке для каждого учащегося выводятся все обнаруженные совпадения его программ (порядок вывода определяется порядком следования учебных заданий, а для одинаковых заданий — временем их разработки). Слева указывается информация о программе данного учащегося, справа — информация о программе другого учащегося, имеющей уровень совпадения, равный или превышающий пороговый. Стрелка вида <=== или ===> указывает возможное направление заимствования (определяемое по времени сохранения данных программ в репозитории). Если уровень совпадения меньше 100%, то на стрелке указывается этот уровень (например, <97= или =89>). Имя группы для правого учащегося указывается только в том случае, если эта группа отличается от текущей. Если задание входит в вариант для данного учащегося, то между номером версии (в квадратных скобках) и датой запуска этой программы указывается символ «*».

При последующем поиске заимствований новые обнаруженные заимствования помечаются с начале строки символом «+». На приведенном выше рисунке показан результат нового поиска заимствований после подключения дополнительной группы; при этом все найденные совпадения с учащимися из другой группы оказались помечены символом «+».

Результат поиска не только отображается в окне, но и сохраняется в файле antiplag.dat в подкаталоге текущей группы. Имеется возможность сохранить данные в другом файле, нажав кнопку «Сохранить» и указав его имя (по умолчанию предлагается имя Antiplag, к которому добавляется дата проверки и расширение txt). Отображение результатов проверки на заимствования в окне просмотра и рецензировании текстов программ

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

Разработка новых вариантов программ поиска заимствований

Для разработки новых программ поиска заимствований можно использовать любой язык платформы .NET, например, PascalABC.NET или C#. К программе следует подключить библиотеку PTAntiplag.dll и определить в программе новый класс — потомок базового класса AntiplagBase, определенного в данной библиотеке.

В новом классе можно переопределить два виртуальных метода: Preprocess(txt, lang) и CompareText(olderTxt, newerTxt, lang). Все параметры методов являются входными.

Метод Preprocess вызывается для каждой программы, участвующей в проверке, при этом ему передается текст этой программы (строковый параметр txt, в котором строки исходного текста разделяются парой символов с кодами 13 и 10) и односимвольный идентификатор языка программирования (символьный параметр lang). Метод должен возвращать преобразованный текст аналогичного формата (строку с символами-разделителями, имеющими коды 13 и 10), который в дальнейшем будет использоваться при сравнении программ.

Символьный параметр lang может принимать следующие значения:

  • 'A' — язык PascalABC.NET;
  • 'p' — язык Pascal (среда Borland Delphi);
  • 'l' — язык Pascal (среда Free Pascal Lazarus);
  • 'b' — язык Visual Basic (версии 5 и 6);
  • 'B' — язык Visual Basic .NET;
  • 'c' — язык C++;
  • 'S' — язык C#;
  • 'F' — язык F#;
  • 'y' — язык Python;
  • 'j' — язык Java;
  • 'r' — язык Ruby;
  • 'u' — язык Julia;
  • 'e' — язык системы 1С:Предприятие.

Метод CompareText сравнивает тексты двух программ (olderTxt и newerTxt), предварительно обработанные методом Preprocess. Первым указывается текст более «старой» программы (т. е. той из двух программ, которая была раньше помещена в репозиторий). Третий параметр, как и для метода Preprocess, является односимвольным идентификатором языка программирования.

После переопределения данных методов в программе достаточно создать экземпляр нового класса и вызвать для него метод AntiplagCheck (без параметров).

Приведем пример программы на языке PascalABC.NET, реализующей новый класс AntiplagNew, который полностью повторяет функциональность исходного класса AntiplagBase (эту программу достаточно сохранить в файле AntiplagNew.pas и откомпилировать в том каталоге, в котором находится библиотека PTAntiplag.dll):

{$reference PTAntiplag.dll}
type AntiplagNew = class(PTAntiplag.AntiplagBase)
public
  function Preprocess(txt: string; lang: char): string; override;
  begin
    result := TransformText(txt);
  end;
  function CompareText(olderTxt, newerTxt: string; lang: char): integer;
override;
  begin
    result := olderTxt = newerTxt ? 100 : 0;
  end;
end;
begin
  (new AntiplagNew).AntiplagCheck;
end.

Использованный в методе Proprocess метод TransformText удаляет из исходного текста все пробельные символы; этот метод является статическим методом класса AntiplagBase. В методе CompareText выполняется обычное сравнение на равенство, при совпадении строк уровень совпадения полагается равным 100, в противном случае он полагается равным 0.

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

Следует заметить, что возможна реализация проверяющей программы, в которой функция Proprocess возвращает не преобразованный текст, а некоторый строковый ключ, связанный с информацией о преобразованном тексте, которая может иметь достаточно сложную структуру (например, содержать массив лексем анализируемой учебной программы, список использованных в ней идентификаторов и т. п.). В этом случае в функции CompareText параметры olderTxt и newerTxt будут содержать строковые ключи, обеспечивающие доступ к соответствующей информации.


PrevNext

 

Рейтинг@Mail.ru

Разработка сайта:
М. Э. Абрамян, В. Н. Брагилевский

Последнее обновление:
19.04.2022