Программа для анализа семантических ошибок кода языка JAVA

  • Вид работы:
    Контрольная работа
  • Предмет:
    Информационное обеспечение, программирование
  • Язык:
    Русский
    ,
    Формат файла:
    MS Word
    159,78 Кб
  • Опубликовано:
    2017-07-05
Вы можете узнать стоимость помощи в написании студенческой работы.
Помощь в написании работы, которую точно примут!

Программа для анализа семантических ошибок кода языка JAVA

Содержание

Введение

1. Техническое задание

1.1 Основания для разработки

1.2 Назначение разработки

1.3 Рассмотренные альтернативы

1.4 Стандарты

1.5 Требования пользователя к программному обеспечению

1.5.1 Входные и выходные данные

1.5.2 Описание процесса работы с программой

1.5.3 Методические ограничения

1.5.4 Информационная совместимость

1.5.5 Результирующие компоненты изделия

.5.6 Носители информации

1.5.7 Требования к надежности

1.5.8 Рестарт

1.5.9 Требования к составу и параметрам технических средств

2. Технический проект

2.1 Схемы основных алгоритмов

3. Рабочий проект

3.1 Интерфейс пользователя

3.2 Тестовые наборы для отладки интерфейса пользователя

3.3 Модули и объекты интерфейса пользователя

3.3.1 Описание внутренних переменных модуля Unit1.cpp

.3.2 Описание подпрограмм модуля Unit1.cpp

Заключение

Список используемых источников

Приложение

Введение


В последнее время статический анализ всё больше используется в верификации свойств программного обеспечения (Далее - ПО), используемого в компьютерных системах высокой надёжности, особенно критичных для жизни. Также применяется для поиска кода, потенциально содержащего уязвимости.

Более широкое определение статистического анализа трактует его как анализ кода без реального выполнения исследуемых программ.

В рамках работы необходимо разработать программу для анализа семантических ошибок кода языка JAVA. Для осуществления поставленной цели, необходимо решить некоторые задачи.

Основные вопросы данного проекта:

разработка структуры программы;

написание функции для чтения вводимых данных;

написание функции анализа вводимых данных;

написание функции анализа текущего состояния программы.

В данном проекте используется среда разработки Borland C++ Builder 6.0, компоненты которой позволяют максимально эффективно осуществить поставленную цель.

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

1.      Техническое задание


1.1    Основания для разработки


Основанием для разработки программного продукта служит задание по работе по дисциплине "Программирование на языках высокого уровня".

1.2    Назначение разработки


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

1.3    Рассмотренные альтернативы


На этапе разработки было предложено две среды разработки:

C++ Builder 6;

Borland Delphi 7;

При постановке задачи на разработку данного программного изделия была выбрана среда разработки C++ Builder 6 в силу легкости проектирования пользовательского интерфейса.

1.4    Стандарты


Разработка программной документации и программного изделия должна производиться согласно ГОСТ 19.701-90, ГОСТ 2.304-88. Единая система программной документации.

1.5    Требования пользователя к программному обеспечению


1.5.1 Входные и выходные данные

Входные данные:

·   анализируемый код на языке JAVA с ошибками.

Выходные данные:

·   выделение позиции с ошибкой.

1.5.2 Описание процесса работы с программой

Данная программа позволяет найти семантические ошибки в предложенном коде языка JAVA. Пользователю предлагается ввести код на JAVA двумя способами: 1) самостоятельно, в выделенную для этого область; 2) путём открытия текстового файла с программой, написанной на языке JAVA. После ввода, нажатием на кнопку “Проверить”, пользователь запускает анализ введённого кода. Если программа нашла ошибки, то они будут выведены в поле ниже. Если же программа не нашла ошибки, то будет выведено сообщение «Ошибок не обнаружено!»

1.5.3 Информационная совместимость

Форматы хранения данных должны быть разработаны на основе документов, приведенных в 1.5.1 и по своей структуре полностью соответствовать им.

1.5.4 Программные ограничения, совместимость

Программное изделие должно работать в операционных системах Windows. Для переноса программы не должны требоваться специальные аппаратные и программные средства.

1.5.5 Результирующие компоненты изделия

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

·   командный файл для запуска приложения;

·   программная документация на изделие.

1.5.6 Носители информации

Программное изделие будет размещено в виде исполняемого файла на диске CD-R, либо на жестком диске, либо на flash-носителе.

1.5.7 Требования к надежности

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

1.5.8 Рестарт

В случаях рестарта необходимо запустить на выполнение программу. Данные при рестарте не сохраняются.

1.5.9 Требования к составу и параметрам технических средств

Для работы приложения необходимо дисковое пространство не менее 4 Мб, свободная оперативная память в размере не менее 13 Мб, видеокарта не менее 32 Мб, разрешение экрана не менее 1024*768, также микропроцессор Pentium III или выше и мышь.

2. Технический проект

 

.1 Схемы основных алгоритмов


Рисунок 1 - Блок-схема алгоритмов

 

3. Рабочий проект

 

.1 Интерфейс пользователя


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

Рисунок 2 - Заставка

Через 4 секунды появляется главная форма. Это окно позволяет вводить код для проверки, открывать файл с кодом, запускать поиск допущенных ошибок и закрывать программу.

Рисунок 3 - Главная форма пользователя

3.2 Тестовые наборы для отладки интерфейса пользователя


1. Случай использования: успешный поиск ошибок.

Предусловие: запущена главная форма, введён код JAVA с ошибками.

Тестовый случай: пользователь написал код для анализа и нажал кнопку «Проверить», программа проанализировала код.

Ожидаемый результат: вывод ошибки и её позиции.

Рисунок 3 - Случай использования 1

2. Случай использования: невозможность поиска ошибок.

Предусловие: запущена главная форма, введён код JAVA без ошибок.

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

Ожидаемый результат: сообщение, что ошибки не обнаружены.

Рисунок 4 - Случай использования 2

3.3 Модули и объекты интерфейса пользователя


Пользовательский интерфейс включает следующие компоненты:

·   набор кнопок управления;

·   поля ввода и вывода.

Листинг программы представлен в приложении А.

 

.3.1 Описание внутренних переменных модуля Unit1

int function2(char *c) - функция поиска switch без break

int function3(char *c) - функция поиска подряд идущих 3 операций

int function4(char *c) - функция поиска for без (

int function5(char *c) - функция проверки на else без if

int function1(char *c) - функция проверки запрещенных подряд идущих операций

3.3.2 Описание подпрограмм модуля Unit1


__fastcall TForm1::Timer1Timer(TObject *Sender)

Входные данные: Sender - объект источник события;

Выходные данные: четырёхсекундный показ заставки;

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

Используемые внешние переменные: нет.

__fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

Входные данные: Sender - объект источник события;

Выходные данные: Выход из программы;

Процесс обработки: функция закрывает программу.

Используемые внешние переменные: нет.

void __fastcall TForm2::FormCreate(TObject *Sender)

Входные данные: Sender - объект источник события;

Выходные данные: при повторном открытии программы поля Memo1 и RichEdit1 очищаются;

Процесс обработки: функция очищает занятые поля.

Используемые внешние переменные: нет.

void __fastcall TForm2::Button1Click(TObject *Sender)

Входные данные: Sender - объект источник события.

Выходные данные: функция открывает файл;

Используемые внешние переменные: нет.

void __fastcall TForm2::Button2Click(TObject *Sender)

Входные данные: Sender - объект источник события;

Выходные данные: анализ кода;

Процесс обработки: функция является обработчиком и анализатором введённого кода. По нажатию этой кнопки производится поиск ошибок и отображается результат;

Используемые внешние переменные: нет.

Заключение

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

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

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

Были получены разнообразные навыки работы с многомодульными проектами, а также закреплена теоретическая база в соответствие с изученными дисциплинами студента 1 курса специальности 09.03.04 «Программная инженерия».

 

Список используемых источников

1. Архангельский А.Я. Язык С++ в С++Builder. - М.: Издательство «Бином Пресс», 2011. - 944с.

2. Архангельский А.Я. Компоненты C++Builder. Справочное и методическое пособие. - М.: Издательство «Бином Пресс», 2012. - 960 с.

3. Шилдт Герберт С++ для начинающих. Шаг за шагом. - М.: Издательство «ЭКОМ Паблишерз», 2013. - 64 с.

4. Пахомов Б.И. С/C++ и Borland С++ Builder для начинающих. - М.: «БХВ-Петербург», 2012. - 640 с.

5. Ален И. Голуб Правила программирования на Си и Си++ - М.: «Бином-Пресс» 2001. 241 с.

 

Приложение


Листинг программы

//---------------------------------------------------------------------------

#include <vcl.h>

#include <string.h>

#include <stdlib.h>

#include <stdio.h>// библиотеки

#pragma hdrstop

#include "Unit2.h"

//---------------------------------------------------------------------------

#pragma package(smart_init)

#pragma resource "*.dfm"2 *Form2;

int function1(char *c)//функция проверки запрещенных подряд идущих операторов

{

char *t1=NULL;

t1=strstr(c,"<>");//получаем позицию <>pos1 = int(t1 - c); *t2=NULL;

t2=strstr(c,"><");//получаем позицию ><pos2 = int(t2 - c); *t3=NULL;

t3=strstr(c,"=>");//получаем позицию =>pos3 = int(t3 - c); *t4=NULL;

t4=strstr(c,"=<");//получаем позицию =<pos4 = int(t4 - c); *t5=NULL;

t5=strstr(c,"!>");//получаем позицию !>

int pos5 = int(t5 - c); *t6=NULL;

int pos6 = int(t6 - c);(t1!=NULL)//если t1!=NULL возвращаем его позицию

{

return pos1;

}

if(t2!=NULL)//если t2!=NULL возвращаем его позицию

{

return pos2;

}

if(t3!=NULL)//если t3!=NULL возвращаем его позицию

{

return pos3;

}

if(t4!=NULL)//если t4!=NULL возвращаем его позицию

{

return pos4;

}

if(t5!=NULL)//если t5!=NULL возвращаем его позицию

{

return pos5;

}

if(t6!=NULL)//если t6!=NULL возвращаем его позицию

{

return pos6;

}

else//иначе возвращаем -1

{-1;

}

}

function2(char *c)//фукцния поиска switch без break

{*t1=NULL;=strstr(c,"switch");//ищем позицию switchpos1 = int(t1 - c);//

*t2=NULL;//=strstr(c,"break");//ищем позицию breakpos2 = int(t2 - c);//(t1!=NULL&&t2==NULL)//если есть switch и нету break

{

return pos1;//возвращаем позицию switch

}

else if(t1!=NULL&&t2!=NULL)//иначе

{(isalpha(c[pos1-1])||isalpha(c[pos1+6]))//если после или перед switch идет буква

{-1;//возвращаем -1

}(pos1<=pos2)//если после switch есть "break

{-1;//возвращаем -1

}

{pos1;//иначе возвращаем позицию switch

}

}

{-1;//возвращаем -1

}

}


function3(char *c)//фукцния поиска подряд идущих 3 операторов

{(unsigned int i=0;i<strlen(c)-2;i++)//идем в цикле

{(((c[i]=='+')||(c[i]=='-')||(c[i]=='/')||(c[i]=='*')||(c[i]=='%')|| (c[i]=='^'))&& ((c[i+1]=='+')||(c[i+1]=='-')||(c[i+1]=='/')||(c[i+1]=='*')||(c[i+1]=='%')|| (c[i+1]=='^')) &&((c[i+2]=='+')||(c[i+2]=='-')||(c[i+2]=='/')||(c[i+2]=='*')||(c[i+2]=='%')|| (c[i+2]=='^')))

{

return i+1;//если нашли 3 подряд дидущих оператора - возвращаем из позицию

}

}

return -1;//иначе возвращаем -1

}






int function4(char *c)//фукция поиска for без (

{pos1=-1;*t1=NULL;//=strstr(c,"for(");//ищем for((t1!=NULL)//если не нашли

{

return -1;//возвращаем -1

}

else//иначе

{

t1=strstr(c,"for");//ищем for

if(t1!=NULL)//если нашли

{

pos1=t1-c;+=3;//(c[pos1-4]!=' ')//если перед for не пробел

{

return -1;//возвращаем -1

}

if(isalpha(c[pos1]))//если после for идем буква

}pp=1;//

(pp)//цикл

{

if(c[pos1]==' ')//если нашли пробел после for

{

pos1++;//идем в цикле дальше

}

else if(c[pos1]=='(')//иначе если c[pos1]=='('

{

return -1;//возвращаем -1

}

else if(c[pos1]=='\n'||c[pos1]=='\0')//иначе если дошли до конца строки или конца файла

{

pp=-1;

return pos1;//возвращаем позицию for

}

else//иначе

{

return pos1;//возвращаем позицию for

}


}

}


}

return -1;//возвращаем -1

}

int function5(char *c)//функция проверки на else без if

{*t1=NULL;//=strstr(c,"else");//идем позицию elsepos1 = int(t1 - c);*t2=NULL;//=strstr(c,"if");//идем позицию ifpos2 = int(t2 - c);//(t1!=NULL&&t2==NULL)//если нашли else и не нашли if

{pos1;//возврат pos1

}if(t1!=NULL&&t2!=NULL)//иначе

{

(isalpha(c[pos1-1])||isalpha(c[pos1+4]))//если до или после else идем буква

{-1;//возврат -1

}(pos1>=pos2)//если перед else есть if

{-1;//возврат -1

}

{pos1;//иначе возврат позиции елсе

}

}//иначе

{-1;//возврат -1

}

}

//---------------------------------------------------------------------------

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

//---------------------------------------------------------------------------

__fastcall TForm2::FormClose(TObject *Sender, TCloseAction &Action)

{>Terminate();//функция выхода с проги

}

//---------------------------------------------------------------------------__fastcall TForm2::FormCreate(TObject *Sender)

{

Memo1->Text="";//при загрузке проги обнуляем поля ввода и вывода

RichEdit1->Text="";//

}

//---------------------------------------------------------------------------

__fastcall TForm2::Button3Click(TObject *Sender)

{>Terminate();//функция выхода с проги

}

//---------------------------------------------------------------------------

__fastcall TForm2::Button1Click(TObject *Sender)//обработка кнопки открытия файла

{(OpenDialog1->Execute() )//открыли диалог открытия файла

{c[10000];//строка*f;cc;kol=0;=fopen( OpenDialog1->FileName.c_str(),"r");//открываем файл((cc = getc(f)) != EOF)//считываем до конца файла

{[kol]=cc;//++;//(cc=='\n')//

{

c[kol]='\0';//

Memo1->Lines->Add(c);//добавляем строки в поле мемо

kol=0;//

}

}

}

//---------------------------------------------------------------------------

__fastcall TForm2::Button2Click(TObject *Sender)//функция проверки текста

{c[15000];//строкаcc[15000];(cc,"");ccc[10];(c,Memo1->Text.c_str());//коприуем текст из поля в строку poz1=function1(c);//вызываем 1 проверку

RichEdit1->Clear();(poz1!=-1)//если poz1 не равно -1

{

char ccc[10];

strcpy(cc,"Недопустимые идущие подряд операторы! Позиция ");//добавляем в строку ошибку

strcat(cc,itoa(poz1+1,ccc,10));

strcat(cc,"\n");

}

int poz2=function2(c);//если poz2 не равно -1

if(poz2!=-1)

{(cc,"Обнаружен switch без break! Позиция ");//добавляем в строку ошибку

strcat(cc,itoa(poz2+1,ccc,10));

strcat(cc,"\n");

}

int poz3=function3(c);//если poz3 не равно -1

if(poz3!=-1)

{

strcat(cc,"Обнаружено 3 подряд идущих оператора! Позиция ");//добавляем в строку ошибку

strcat(cc,itoa(poz3+1,ccc,10));

strcat(cc,"\n");

}

int poz4=function4(c);//если poz4 не равно -1

if(poz4!=-1)

{

strcat(cc,"Отсутствует скобка ( после for! Позиция ");//добавляем в строку ошибку

strcat(cc,itoa(poz4+1,ccc,10));

strcat(cc,"\n");

}

int poz5=function5(c);//если poz5 не равно -1

if(poz5!=-1)

{

strcat(cc,"Отсутствует if перед else! Позиция ");//добавляем в строку ошибку

strcat(cc,itoa(poz5+1,ccc,10));

strcat(cc,"\n");

}

RichEdit1->Text=cc;//выводим ошибку в поле вывода

}

//---------------------------------------------------------------------------

Похожие работы на - Программа для анализа семантических ошибок кода языка JAVA

 

Не нашли материал для своей работы?
Поможем написать уникальную работу
Без плагиата!