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

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

Рубрика Программирование, компьютеры и кибернетика
Вид контрольная работа
Язык русский
Дата добавления 05.07.2017
Размер файла 487,0 K

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

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

Размещено на http://www.allbest.ru/

Содержание

  • Введение
  • 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 Результирующие компоненты изделия
      • 1.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.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. Технический проект

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

3.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 «Программная инженерия».

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

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

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

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

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

Ален И. Голуб Правила программирования на Си и Си++ - М.: «Бином-Пресс» 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"

TForm2 *Form2;

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

{

char *t1=NULL;

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

int pos1 = int(t1 - c);

char *t2=NULL;

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

int pos2 = int(t2 - c);

char *t3=NULL;

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

int pos3 = int(t3 - c);

char *t4=NULL;

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

int pos4 = int(t4 - c);

char *t5=NULL;

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

int pos5 = int(t5 - c);

char *t6=NULL;

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

int pos6 = int(t6 - c);

if(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

{

return -1;

}

}

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

{

char *t1=NULL;

t1=strstr(c,"switch");//ищем позицию switch

int pos1 = int(t1 - c);//

char *t2=NULL;//

t2=strstr(c,"break");//ищем позицию break

int pos2 = int(t2 - c);//

if(t1!=NULL&&t2==NULL)//если есть switch и нету break

{

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

}

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

{

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

{

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

}

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

{

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

}

else

{

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

}

}

else

{

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

}

}

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

{

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

{

if(((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 без (

{

int pos1=-1;

char *t1=NULL;//

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

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

{

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

}

else//иначе

{

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

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

{

pos1=t1-c;

pos1+=3;//

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

{

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

}

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

{

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

}

int pp=1;//

while(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

{

char *t1=NULL;//

t1=strstr(c,"else");//идем позицию else

int pos1 = int(t1 - c);

char *t2=NULL;//

t2=strstr(c,"if");//идем позицию if

int pos2 = int(t2 - c);//

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

{

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

}

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

{

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

{

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

}

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

{

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

}

else

{

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

}

}

else//иначе

{

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

}

}

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

__fastcall TForm2::TForm2(TComponent* Owner)

: TForm(Owner)

{

}

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

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

{

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

}

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

void __fastcall TForm2::FormCreate(TObject *Sender)

{

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

RichEdit1->Text="";//

}

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

void __fastcall TForm2::Button3Click(TObject *Sender)

{

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

}

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

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

{

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

{

char c[10000];//строка

FILE *f;

char cc;

int kol=0;

f=fopen( OpenDialog1->FileName.c_str(),"r");//открываем файл

while((cc = getc(f)) != EOF)//считываем до конца файла

{

c[kol]=cc;//

kol++;//

if(cc=='\n')//

{

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

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

kol=0;//

}

}

}

}

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

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

{

char c[15000];//строка

char cc[15000];

strcpy(cc,"");

char ccc[10];

strcpy(c,Memo1->Text.c_str());//коприуем текст из поля в строку

int poz1=function1(c);//вызываем 1 проверку

RichEdit1->Clear();

if(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)

{

strcat(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;//выводим ошибку в поле вывода

}

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

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


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

  • Изучение объектно-ориентированного языка программирования Java, его функциональные возможности. Создание программного кода. Описание классов и методов, использованных в программе. Руководство пользователя, запуск сервера и клиентского приложения.

    курсовая работа [1,8 M], добавлен 16.09.2015

  • Создание языка программирования с помощью приложения "Java". История названия и эмблемы Java. Обзор многообразия современных текстовых редакторов. Обработка строки. Методы в классе String. Java: задачи по обработке текста. Примеры программирования.

    курсовая работа [276,1 K], добавлен 19.07.2014

  • Общая характеристика интерфейса языка программирования Delphi. Рассмотрение окна редактора кода, конструктора формы, инспектора объектов и расширения файлов. Ознакомление с основными этапами создания и сохранения простого приложения; проверка его работы.

    презентация [184,3 K], добавлен 18.03.2014

  • Понятие и общая характеристика языка программирования РНР, принципы и этапы его работы, синтаксис и ассоциируемые массивы. Обработка исключений в языке Java. Работа с базами данных с помощью JDBC. Изучение порядка разработки графического интерфейса.

    презентация [192,3 K], добавлен 13.06.2014

  • История развития языка программирования Java. История тетриса - культовой компьютерной игры, изобретённой в СССР. Правила проведения игры, особенности начисления очков. Создание интерфейса программы, ее реализация в среде Java, кодирование, тестирование.

    курсовая работа [168,1 K], добавлен 27.09.2013

  • Создание тематического Web-сайта с использованием гипертекстового языка разметки HTML, каскадных листов стилей CSS и языка программирования Java Script. Описание используемых тегов при его создании. Особенности разработки навигации и интерфейса сайта.

    контрольная работа [2,8 M], добавлен 02.12.2009

  • Общее описание разрабатываемого приложения, его актуальность и сферы практического применения. Выбор среды разработки и языка программирования, 3D-движка. Архитектура приложения, интерфейса и его главных элементов, взаимодействие с пользователем.

    дипломная работа [317,5 K], добавлен 10.07.2017

  • История создания языка Java. Основные принципы объектно-ориентированного программирования. Структура, особенности синтаксиса и примеры прикладных возможностей использования языка Java, его преимущества. Перспективы работы программистом на языке Java.

    курсовая работа [795,9 K], добавлен 14.12.2012

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

    дипломная работа [1,0 M], добавлен 10.07.2017

  • Разработка игры "Экзамен" с применением объектно-ориентированного программирования и языка Java (в среде Eclipse Helios). Структура программы и алгоритм решения задачи. Описание методов и переменных. Экспериментальное тестирование и оценка программы.

    курсовая работа [122,5 K], добавлен 19.05.2011

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