Програмна система оцінки плагіату програмного коду

Вивчення існуючих систем по виявленню плагіату. Алгоритм створення системи для виявлення плагіату, в базі якої будуть зберігатися всі лабораторні роботи студентів. Проектування програми: побудова uml-діаграм, видалення коментарів в коді, опис архітектури.

Рубрика Программирование, компьютеры и кибернетика
Вид дипломная работа
Язык украинский
Дата добавления 09.06.2012
Размер файла 4,1 M

Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже

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

КОНЦЕПЦІЯ ПРОЕКТУ І ОБЛАСТЬ ЗАСТОСУВАННЯ

Бачення

Основна мета проекту: створити систему оцінки плагіату коду з метою поліпшення праці викладачів вузів, тим, що перевірка на запозичення коду у інших студентів буде автоматизована.

Аналіз переваг

Дане рішення має надати переваги для навчальних закладів:

- викладачі автоматизують перевірку лабораторних або курсових робот студентів;

- поліпшення знань в сфері програмування студентів;

- буде сформована база з усіма роботами студентів.

Критерії оцінки

Проект продовжує розроблятися відповідно поставленої схеми розвитку. На даній стадій проект вже готов для запуску в експлуатацію в навчальні заклади. Для подальшого вдосконалення проекту треба запустити проект в експлуатацію та вислухати зауваження користувачів.

Проблеми заявлені замовником

На даній стадії система перевірки на плагіату повністю влаштовує замовника.

Вимоги

У наступних розділах розглядаються вимоги високого рівня для доказу рентабельності концепції проекту щодо впровадження її на використання в навчальних закладах. Кожен розділ описує різні аспекти вимог, наприклад, бізнес-вимоги, технічні вимоги, експлуатаційні вимоги і т.д.

Дизайн програми виского рівня. Архітектурне проектування високого рівня

Програмна система написана на мові програмування Java. В цій системі є декілька модулів. Перший модуль відповідає за перевід коду в токенізованний вид. В ньому передбачається видалення коментарів та побудова токенів. Других модуль відновідає за пошук плагіату, на виході який повертає інформацію для третього модулю, який відповідає за побудову звіту.

Технічне проектування високого рівня

Дана система розроблена у середовищі програмування Elipse. Дані по операторам мов програмування зберігаються в форматі XML.

Клієнт і профілі користувачів

В даній системі існують 2 види користувачів. Це викладачі та адміністратори. Викладач тільки використовує систему,а адміністратор має змогу добавити нову мову програмування в систему, а також обновити базу накопичених робіт.

Сценарії використання

Викладач вибирає адресу до кодів студента. Потім вибирає алгоритм і мову на якому написаний код програми. Натискає кнопку старт і програма створить звіт з перевірки, який викладач може подивитися в кількох варіантах.

Структура проекту. Ролі у команді та обов'язки

Таблиця 3.1 - Ролі у команді та обов'язки

Роль

Iм'я

Вміння

Обов'язки

Product Manager

Шатовська Т.Б.

Знання предметної області, гарні навички комунікації

Постановка задачі, управління проекту

Development

Кононов Ілля

Навички програмування, швидке рішення поставленої задачі

Розробка системи та тестування

Участь зацікавлених сторін

У проекті візьмуть участь кілька зацікавлених сторін на двох рівнях у рамках керівного комітету і в ході виконання проекту в якості учасників на доказ концепції. Керівний комітет складатиметься з наступних учасників:

Таблиця 3.2 - Участь зацікавлених сторін

Iм'я / посада або титул

Представництво Організації / Розділ

Роль у проекті

Шатовська Т.Б.

ХНУРЕ

Product Manager

Кононов І.О.

ХНУРЕ

Development Lead

Графік реалізації проекту

Таблиця 3.3 - Графік реалізації проекту

Номер

Назва етапів дипломної роботи

Термін виконання етапів проекту (роботи)

Примітка

1

Аналіз предметної області

10-02-11

виконано

2

Розробка структури програми

16-02-11

виконано

3

Створення коду інтерфейсу

01-03-11

виконано

4

Створення коду програми

23-03-11

виконано

5

Тестування системи

14-04-11

виконано

6

Створення пояснювальної записки

25-04-11

виконано

7

Підготовка презентації та доповіді

08-05-11

виконано

8

Попередній захист

06-06-11

виконано

9

Занесення диплома в електронний архів

14-06-11

виконано

10

Допуск до захисту у зав. кафедри

14-06-11

виконано

11

Захист

16-06-11

Проект ресурсозабезпечення та витрати

У наступній таблиці наведений розрахований час схема витрат на проект (травень 2011 року):

Таблиця 3.4 - Ресурсозабезпечення та витрати

Опис

Розрахована

кількість днів

Розрахована ціна

Проектування

2

400

Аналіз предметної галузі

6

1200

Розробка дизайну

1

200

Розробка

Установка необхідного ПЗ

0.5

100

Інтерфейс

1

200

Перший алгоритм

2

400

Побудова звіту пошуку плагіату

1

200

Другий алгоритм

2

400

Тестування

2

400

Документація

2

400

Випробування

1

200

Всього

20.5

4100

Додаток Б

Plag Detector

Test Plan

Version <0.94>

Таблиця. Історія змін

Дата

Автор

Версія

Зміни

16-02-11

Кононов Ілля

0.01

Інтерфейс та архітектура

25-03-11

Кононов Ілля

0.30

Розробка першого алгоритму

01-04-11

Кононов Ілля

0.43

Розробка звіту по перевірці коду на плагіат

13-04-11

Кононов Ілля

0.94

Розробка другого алгоритму

Мета

Цей документ - Test Plan для «Plag Detector» розрахований на:

- виявити існуючі помилки в програмному коді;

- перевірити якість виявлення плагіату в кодах програм;

- перевірити швидкість перевірки коду;

- визначити частки коду, які потребують оптимізації;

- визначити кращій алгоритм виявлення плагіату.

Передумови

Перед релізом системи виявлення плагіату, треба переконатись, що програма знаходить плагіат та час пошуку не дуже великий.

Область

Тест план був розроблений для виявлення недоліків системи. Головна мета тест плану переконатися, що система робить без помилок та всі алгоритми правильно виявляють плагіат в кодах програм. Спочатку треба протестувати якість кожного алгоритму окремо. Потім потрібно протестувати, як вони будуть робити в системі. Також алгоритми будуть протестовані на швидкість виконання.

Визначення проекту

В таблиці Б.1 вказані документи що використовуються для розробки.

Таблиця Б.1 - Визначення проекту

Document (and version / date)

Created or Available

Received or Reviewed

Author or Resource

Requirements Specification

Yes No

Yes No

Кононов Ілля

Functional Specification

Yes No

Yes No

Кононов Ілля

Use-Case Reports

Yes No

Yes No

Кононов Ілля

Project Plan

Yes No

Yes No

Кононов Ілля

Design Specifications

Yes No

Yes No

Кононов Ілля

Prototype

Yes No

Yes No

Кононов Ілля

User's Manuals

Yes No

Yes No

Кононов Ілля

Business Model or Flow

Yes No

Yes No

Кононов Ілля

Data Model or Flow

Yes No

Yes No

Кононов Ілля

Business Functions and Rules

Yes No

Yes No

Кононов Ілля

Project or Business Risk Assessment

Yes No

Yes No

Стратегія тестування. Тестування функцій

Для тестування функцій будемо використовувати метод чорного ящику. Цей тип тестування полягає у тому, що ми не бачимо програмний код, а маємо тільки графічне представлення. За допомогою цього тестування ми можемо побачити правильне рішення приймає система, чи ні.

Таблиця 2.1 - Тестування функцій

Test Objective:

Перевірка усіх функцій системи

Technique:

Виконати перевірки кожної можливої поведінки, з використанням дійсних даних та помилкових, щоб перевірити наступне:

- функція повертає очікуване значення при дійсних даних;

- функція правильно реагує на помилкові данні або викликається попередження;

- застосовується кожне бізнес-правило.

Completion Criteria:

- усі заплановані випробування було проведено;

- усі виявлені дефекти були враховані.

Тестування інтерфейсу користувача

Тестування графічного інтерфейсу користувача передбачає перевірку відповідності програми вимогам до графічного інтерфейсу, професійно воно виглядає, виконано воно в єдиному стилі. Метою тестування інтерфейсу користувача є перевірка на те, що система інтуїтивно зрозуміла користувачеві та в програмі немає орфографічних помилок.

Таблиця Б.2 - Тестування інтерфейсу користувача

Test Objective:

Перевірити наступне:

- навігація за цільовими тесту правильно відображає бізнес-функції та вимоги, яки очікуються;

- текст графічного інтерфейсу не містить графічних помилок.

Technique:

Створення та зміна випробувань для кожного вікна, щоб перевірити, правильність навігації і станів об'єкта для кожного вікна програми.

Completion Criteria:

Кожне вікно успішно перевірене, кожний елемент графічного інтерфейсу, відповідає за своїм обов'язкам та графічний інтерфейс не містить граматичних помилок.

Тестування XML-документу

Тестування XML-документу предназначено для перевірки того, щоб переконатися, що до програми надаються правильні дані, та документ правильно побудований. Це тестування необхідно, тому що, модуль токенізації використовує дані с XML-документа. Тому, якщо дані будуть неправильні, то і сама перевірка буде неправильна.

Таблиця Б.3 - Тестування XML-документу

Test Objective:

Переконатись, що XML-документ повертає правильні дані:

- перевірити, те що XML-документ повертає очікувані дані;

- перевірити, реакцію xsd-схеми при додаванні невірних даних у XML-документ.

Completion Criteria:

Перевірка даних пройшла успішно, дані повертаються правильні, та схема реагує на невірні дані.

Додаток В

Слайди презентації

Рисунок В.1 - Титульний слайд

Рисунок В.2 - Мета роботи

Рисунок В.3 - Постановка задачі

Рисунок В.4 - Аналіз аналогів

Рисунок В.5 - Визначення плагіату

Рисунок В.6 - Приклад плагіату

Рисунок В.7 - Схема пошуку плагіату

Рисунок В.8 - Видалення коментарів

Рисунок В.9 - Токенізація

Рисунок В.10 - Алгоритм жадібного строкового замощення

Рисунок В.11 - Алгоритм порівняння операторів

Рисунок В.12 - Результат роботи

Рисунок В.13 - Результат роботи в блочному вигляді

Рисунок В.14 - Висновок

Додаток Г

Код програми

Реалізація алгоритму жадібного строкового замощення:

public class GreedyStringTiling {

public static ArrayList<ResultGST> greedyStringTiling(

ArrayList<Operator> firstTokenList,

ArrayList<Operator> secondTokenList) {

ArrayList<Matches> matches = null;

ArrayList<ResultGST> result = new ArrayList<ResultGST>();

int minimumMatchLength = 15;

int maxmatch;

int k;

do {

matches = new ArrayList<Matches>();

maxmatch = minimumMatchLength;

ArrayList<Operator> firstUnmarkedToken = getUnmarked(firstTokenList);

ArrayList<Operator> secondUnmarkedToken = getUnmarked(secondTokenList);

for (int i = 0; i < firstUnmarkedToken.size(); i++) {

for (int j = 0; j < secondUnmarkedToken.size(); j++) {

k = 0;

while ((i + k < firstUnmarkedToken.size())

&& j + k < secondUnmarkedToken.size()

&& firstUnmarkedToken

.get(i + k)

.getName()

.equals(secondUnmarkedToken.get(j + k)

.getName())) {

k++;

}

if (k == maxmatch) {

matches.add(new Matches(i, j, k));

maxmatch = k;

} else if (k > maxmatch) {

matches = new ArrayList<Matches>();

matches.add(new Matches(i, j, k));

maxmatch = k;

}

}

}

for (Matches match : matches) {

for (int i = 0; i < match.getCount(); i++) {

firstUnmarkedToken.get(i + match.getFirst()).setMark(true);

secondUnmarkedToken.get(i + match.getSecond())

.setMark(true);

}

result.add(new ResultGST(match, firstUnmarkedToken,

secondUnmarkedToken));

}

} while (maxmatch > minimumMatchLength);

return result;

}

private static ArrayList<Operator> getUnmarked(ArrayList<Operator> list) {

ArrayList<Operator> unmarked = new ArrayList<Operator>();

for (Operator operator : list) {

if (!operator.isMark())

unmarked.add(operator);

}

return unmarked;

}

}

Реалізація алгоритму порівняння операторів:

public class CompareToken {

public static ArrayList<ResultDetector> detector(ArrayList<Operator> firstTokenList,

ArrayList<Operator> secondTokenList) {

ArrayList<Operator> bigger;

ArrayList<Operator> less;

ArrayList<ResultDetector> arrayMatches = new ArrayList<ResultDetector>();

int minCount = 0;

int count1 = firstTokenList.size();

int count2 = secondTokenList.size();

int maxCount = 0;

boolean changePossition = false;

if (count1 < count2) {

maxCount = count2;

minCount = count1;

bigger = secondTokenList;

less = firstTokenList;

changePossition = true;

} else {

maxCount = count1;

minCount = count2;

bigger = firstTokenList;

less = secondTokenList;

}

for (int i = 0; i < maxCount; i++) {

ArrayList<Operator> numberMatches = new ArrayList<Operator>();

for (int j = 0; j < minCount; j++) {

if (bigger.get(j).getName().equals(less.get(j).getName())) {

if (changePossition == false) {

numberMatches

.add(new Operator(bigger.get(i).getName(),

bigger.get(j).getLine(), less.get(j)

.getLine()));

} else {

numberMatches

.add(new Operator(bigger.get(i).getName(), less

.get(j).getLine(), bigger.get(j)

.getLine()));

}

}

}

double percent = (double) numberMatches.size() / (double) minCount

* 100;

arrayMatches.add(new ResultDetector(percent, numberMatches));

String s = bigger.get(0).getName();

int line = bigger.get(0).getLine();

bigger.remove(0);

bigger.add(new Operator(s, line));

}

return arrayMatches;

}

}

Размещено на Allbest.ru


Подобные документы

Работы в архивах красиво оформлены согласно требованиям ВУЗов и содержат рисунки, диаграммы, формулы и т.д.
PPT, PPTX и PDF-файлы представлены только в архивах.
Рекомендуем скачать работу.