Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Применение новых технологий в образовании.doc
Скачиваний:
75
Добавлен:
17.05.2013
Размер:
2.25 Mб
Скачать

Некоторые характеристики стиля программирования Клемпач в.В. (klyopa@tut.By)

Объединенный институт проблем информатики Национальной академии наук Беларуси, Минск

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

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

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

Таблица 1.

Вариант 1 Стиль35.0

Вариант 2 Стиль 67.5

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <ctype.h>

void main(void)

{int n,i,k,s;

puts("Enter the number 0<n<=100\n");

scanf("%d",&n);

puts("Enter the quotient 0<k<=n\n");

scanf("%d",&k);

i=0;

if(0<n<=100)

if(0<k<=n)

for (i=1;i<=n;i++)

{s=fmod(i,k);

if (s==0)

printf("%d ",i);}

else

puts("\nThe number is wrong\n");

puts("\n");

getch();}

#include <stdio.h>

#include <conio.h>

#include <math.h>

#include <ctype.h>

void main (void)

{

int iNum, iCnt, iQuotient, iRest;

puts ("Enter the number 0 < n <= 100 \n");

scanf ("%d", &iNum);

puts ("Enter the quotient 0 < k <= n \n");

scanf ("%d", &iQuotient);

iCnt = 0;

if (0 < iNum <= 100)

if (0 < iQuotient <= iNum)

for (iCnt = 1; iCnt <= iNum; iCnt++)

{

iRest = fmod (iCnt, iQuotient);

if (iRest == 0)

printf ("%d ", iCnt);

}

else

puts ("\nThe number is wrong\n");

puts ("\n");

getch ();

}

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

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

В таблице 1 приведен пример одной и той же программы, написанной разными людьми, с оценками их стиля, вычисленными программой Estimation. Программа находит все числа из промежутка [1, n], кратные задаваемому числу k.

В дальнейшем планируется дополнить программу Estimation алгоритмом распознавания плагиата (управляющий граф, информационный граф, оценка сложности и т.д.). Планируется также разработка алгоритма для анализа программ, написанных на языке С++.

Литература

1. Берри Р., Микинз Б. Язык Си: введение для программистов / Пер. с англ. и предисл. Д. Б. Подшивалова. –– М.: Финансы и статистика, 1988.

2. Ван Тассел Д. Стиль, разработка, эффективность, отладка и испытания программ: Пер. с англ. – М.: Мир, 1981. – 320 с.

3. Коган Б. Экспериментальные исследования программ. – М.: Наука, 1988. – 184 с. – ISBN 5 – 02 – 006594 – 3

4. Rees M. J. (1982). ‘Automatic assessment aids for Pascal Programs’, ACM Sigplan Notices, 17, No. 10 (October).