«Разработка графического редактора uml-диаграмм компонентов»




Скачать 171.84 Kb.
Название«Разработка графического редактора uml-диаграмм компонентов»
Дата14.02.2013
Размер171.84 Kb.
ТипПрезентация


Министерство образования и науки РФ 
Федеральное государственное бюджетное образовательное учреждение высшего профессионального образования 
Волгоградский Государственный Технический Университет



Кафедра «Программное обеспечение автоматизированных систем»


Семестровая работа



по дисциплине «Технологии разработки программного обеспечения»


Тема: «Разработка графического редактора UML-диаграмм компонентов»




Выполнили:

студенты группы ИВТ-464

Коротков А.А.,

Млечко Р.И.,

Рябов А.А.

Студент группы ИВТ-461

Красников А.А.


Проверил: доц. Жукова И.Г.

Волгоград, 2011 г.

Содержание





Семестровая работа 1

Тема: «Разработка графического редактора UML-диаграмм компонентов» 1

Содержание 2

Модель требований 2

Постановка задачи 3

Этапы решения задач 3

Нефункциональные требования 3

Функциональные требования 4

Используемые технологии 6

Диаграмма вариантов использования 6

Диаграмма классов 7

Описание диаграммы классов 8

Фрагмент кода программы 8

Сценарий тестирования 12

Сценарий работы программы 15



Модель требований




Постановка задачи



Цель: оптимизация процесса создания диаграмм компонентов UML.


Область применения: разработка архитектуры программного обеспечения.


Для достижения поставленной цели были поставлены следующие задачи:


  • Изучение и анализ предметной области заказчика.

  • Разработка проектной документации с учѐтом требований и корректив заказчика.

  • Анализ и выбор методологии создания программного продукта.

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

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



Этапы решения задач





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

  • Причем если используется один из видов связей – реализация или использование, это осуществляется посредством интерфейсов.

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



Нефункциональные требования





  • Программа должна иметь инсталлятор, запускаться на Windows XP SP2/3, Windows 7.

  • Набор элементов в программе должен соответствовать стандарту UML (для диаграммы компонентов)

  • В программе должно быть реализовано перемещение объектов, согласно технологии Drag&Drop.

  • Программа должна адекватно отображать до 10 компонентов на рабочем поле.

  • Для выделения связей должна быть предусмотрена активная область, шириной не менее 7px.



Функциональные требования



1.Главная функция.

1.1. Создание и хранение диаграмм компонентов UML.

2. Основные функции.

2.1. Программа должна работать с файлом.

2.2. Открыть диаграмму компонентов из файла пользовательского формата csd.

2.3. Сохранить диаграмму компонентов в файл формата csd.

2.4. Сохранить как диаграмму компонентов в файл формата csd.

2.5. Программа должна работать с элементом диаграммы «Компонент».

2.5.1. Создать элемент диаграммы «Компонент» на рабочем поле.

2.5.2. Переместить выделенный элемент диаграммы «Компонент» в любую область рабочего поля с сохранением связей.

2.5.3. Удалить выделенный элемент диаграммы «Компонент» по нажатию кнопки delete или соответствующего элемента меню.

2.6. Программа должна работать с элементом диаграммы «Связь»

2.6.1. Создать элемент диаграммы «Связь» путем выбора объектов, между которыми она должна быть установлена на рабочем поле.

2.6.2. Создать элемент диаграммы «Связь» путем выбора соответствующих объектов и соединяющего их интерфейса на рабочем поле.

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

2.7. Программа должна работать с элементом диаграммы «Интерфейс».

2.7.1. Создать элементом диаграммы «Интерфейс» на рабочем поле.

2.7.2. Переместить элемент диаграммы «Интерфейс» в любую область рабочего поля с сохранением связей.

2.7.3. Удалить выделенный элемент диаграммы «Интерфейс» по нажатию кнопки delete или соответствующего элемента меню.

2.8. Программа должна работать с элементом диаграммы «Комментарий».

2.8.1. Создать элемент диаграммы «Комментарий» на рабочем поле.

2.8.2. Связать комментарий с объектом, к которому он относится на рабочем поле.

2.8.3. Переместить выделенный элемент диаграммы «Комментарий» в любую область рабочего поля с сохранением связей.

2.8.4. Удалить выделенный элемент диаграммы «Комментарий» по нажатию кнопки delete или соответствующего элемента меню.

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

2.10. В программе должны быть реализованы функции копирования, вставки и «вырезания» элементов.

2.11. При перетаскивании объекта с нажатой клавишей Alt он должен дублироваться на рабочем поле и перетаскиванию подвергаться его копия, оставляя оригинальный объект на месте рабочего поля.

2.12. В программе должна быть реализована отмена произвольного количества последних действий, произведенных на рабочем поле.

В программу добавлена следующая функция:

3. Вспомогательная функция.

3.1. Программа должна работать с автосохранением.

3.1.1. Автоматическое включение автосохранения при открытии и сохранении диаграммы компонентов в файл формата .csd

Используемые технологии



1.Язык разработки – С++ с использованием библиотеки Qt. (все участники команды имеют опыт разработки приложений на этом языке. Qt предоставляет большие возможности работы с графикой).

2.Среда разработки – Microsoft Visual Studio 2008 (большой набор инструментов, удобство использования, опыт работы у участников)

3.Средство комментирования – Doxygen. (более удобно, нежели ручное комментирование).

4.Средство командой разработки – Tortoise SVN + репозиторий на Google Code. (широкая доступность, отсутствие платы за использование, удобство, наглядность).

5.Средства связи – Skype, мобильная связь.

Диаграмма вариантов использования




Рис. 1. Диаграмма вариантов использования.


Диаграмма классов





Рис. 2. Физическая диаграмма классов.




Рис. 3. Диаграмма классов.


Описание диаграммы классов



В данной диаграмме, показаны функции, наиболее важные для понимания работы программы.

  1. QGraphicsLineItem

    1. Создание связи. Выполняется функция соединить элементы, с возвращаемым значением void и связь образуется от одного до другого элемента.

      1. Реализация. Выполняется функция отрисовать, возвращаемое значение void.

      2. Зависимость. Выполняется функция отрисовать, возвращаемое значение void.

      3. Использование. Выполняется функция отрисовать, возвращаемое значение void.

      4. Связь с комментарием. Выполняется функция отрисовать, возвращаемое значение void.

  2. QGraphicsScene

    1. Диаграмма. Выполняются функции добавить, выбрать, удалить с возвращаемым значением void,а также у диаграммы имеются имя типа string и элементы int.

      1. Файл. Выполняются функции открыть, сохранить с возвращаемым значением void, а также у файла имеется имя типа int (id файла).

  3. QGraphicsItem

    1. Элемент. Выполняются функции определить позицию, определить внешний вид, получить список связей с возвращаемым значением void, а также у элемента имеются имя типа int, координаты int, размеры int, форма int.



Фрагмент кода программы



void DiagramScene::mouseReleaseEvent(QGraphicsSceneMouseEvent *mouseEvent)

{

bool stop = false;

if (line != 0 && (myMode == InsertArrow || myMode == InsertDashLine || myMode == InsertRealization || myMode == InsertUsage))

{

//получаем список эл-тов, находящихся в начальной точе натягивания связи

QList startItems = items(line->line().p1());

//если там есть другая связь

if (startItems.count() && startItems.first() == line)

//удаляем ее

startItems.removeFirst();

//так же для конечной точки

QList endItems = items(line->line().p2());

if (endItems.count() && endItems.first() == line)

endItems.removeFirst();


removeItem(line);

delete line;

//! [11] //! [12]

//если есть начальный и конечный элементы и это не один и тот же эл-т и не связь

if (startItems.count() > 0 && endItems.count() > 0 &&

startItems.first()->type() == DiagramItem::Type &&

endItems.first()->type() == DiagramItem::Type &&

startItems.first() != endItems.first())

{

//приводим элементы к понятному типу

DiagramItem *startItem =

qgraphicsitem_cast(startItems.first());

DiagramItem *endItem =

qgraphicsitem_cast(endItems.first());

switch(myMode)

{

case InsertArrow:

//связь "Зависимость" устанавливается только между UML-компонентами диаграммы

if(startItem->itemType() == DiagramItem::ItemType::Comment || endItem->itemType() == DiagramItem::ItemType::Comment)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Cвязь \"Зависимость\" устанавливается только между UML-компонентами диаграммы.", QMessageBox::Ok);

}

//чтобы не натянуть стрелку дважды

foreach(Arrow* arrow, endItem->arrows())

if(arrow->myType() == Arrow::MyType::Dependency)

if(arrow->startItem() == startItem)

stop = true;

break;

case InsertDashLine:

//вставляем пунктирную линию только между комментом и другим элементом

if(startItem->itemType() != DiagramItem::ItemType::Comment && endItem->itemType() != DiagramItem::ItemType::Comment)

{

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Пунктирная линия используется только для связи с комментариями.", QMessageBox::Ok);

stop = true;

}

//чтобы не натянуть пунктир дважды

foreach(Arrow* arrow1, endItem->arrows())

foreach(Arrow* arrow2, startItem->arrows())

if(arrow2->myType() == Arrow::MyType::DashLine && arrow1->myType() == Arrow::MyType::DashLine)

if(arrow1 == arrow2)

stop = true;

break;

case InsertRealization:

//тянем реализацию только от компонента к интерфейсу

if(startItem->itemType() != DiagramItem::ItemType::Component)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Начальным элементом связи \"Реализация\" должен быть компонент, \nконечным - интерфейс.", QMessageBox::Ok);

}

else

if(endItem->itemType() != DiagramItem::ItemType::Interface)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Начальным элементом связи \"Реализация\" должен быть компонент, \nконечным - интерфейс.", QMessageBox::Ok);

}

else

//проверяем, что данный компонент еще не связан с данным интерфейсом с помощью реализации

foreach(Arrow* arrow, endItem->arrows())

{

if(arrow->myType() == Arrow::MyType::Realization)

if(arrow->startItem() == startItem)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", QString("Между компонентом \"" + startItem->getNameOrComment() + "\" и данным интерфейсом \nуже установлена связь \"Реализация\"."), QMessageBox::Ok);

}

}

break;

case InsertUsage:

//тянем использование только от компонента к интерфейсу

if(startItem->itemType() != DiagramItem::ItemType::Component)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Начальным элементом связи \"Использование\" должен быть компонент, \nконечным - интерфейс.", QMessageBox::Ok);

}

else

if(endItem->itemType() != DiagramItem::ItemType::Interface)

{

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", "Начальным элементом связи \"Использование\" должен быть компонент, \nконечным - интерфейс.", QMessageBox::Ok);

stop = true;

}

else

//проверяем, что данный компонент еще не связан с данным интерфейсом с помощью использования

foreach(Arrow* arrow, endItem->arrows())

{

if(arrow->myType() == Arrow::MyType::Usage)

if(arrow->startItem() == startItem)

{

stop = true;

QMessageBox::warning ( (QWidget*)parent(), "Вы делаете что-то неправильно", QString("Между компонентом \"" + startItem->getNameOrComment() + "\" и данным интерфейсом \nуже установлена связь \"Использование\"."), QMessageBox::Ok);

}

}

break;

default:break;

}

//отрисовываем связь

if(!stop)

{

changed = true;

Arrow *arrow;

switch (myMode)

{

case InsertArrow:

arrow = new Arrow(startItem, endItem);

break;

case InsertRealization:

arrow = new Arrow(startItem, endItem, Arrow::MyType::Realization);

break;

case InsertUsage:

arrow = new Arrow(startItem, endItem, Arrow::MyType::Usage);

break;

case InsertDashLine:

arrow = new Arrow(startItem, endItem, Arrow::MyType::DashLine);

break;

default: break;

}

emit arrowInserted(arrow);

arrow->setColor(myLineColor);

//теперь стрелки добавляются в redo-методах

/*startItem->addArrow(arrow);

addItem(arrow);

endItem->addArrow(arrow);*/

arrow->setZValue(1.0);

arrow->updatePosition();

}

}

}

else

if(myMode == MoveItem)

{

update();

newPositionItems.clear();

foreach(QGraphicsItem* item, items())

newPositionItems.insert(item, item->pos());

QMap movedItems;

foreach(QGraphicsItem* item, oldPositionItems.keys())

{

if(oldPositionItems.value(item) != newPositionItems.value(item))

{

DiagramItem* dItem = qgraphicsitem_cast(item);

if(dItem)

{

//создаем map (элемент, его старая позиция)

movedItems.insert(dItem, oldPositionItems.value(item));

}

}

}

//если что-то сдвинули

if(movedItems.size() > 0)

emit itemsMoved(movedItems);

}

line = 0;

QGraphicsScene::mouseReleaseEvent(mouseEvent);

}


Фрагмент добавленного кода программы


void MainWindow::getSettings()

{

if(settingsWindow->isEnabled() == 2)

{

if(_filename.isEmpty())

saveToFileAs();

if(_filename.isEmpty())

{

settingsWindow->setState(false);

return;

}

autosaveTimer->start(settingsWindow->interval());

}

else

autosaveTimer->stop();

}

Сценарий тестирования





Функции теста

Введенный тест

Ожидаемые результаты

Статус

Важность ошибки

Выявление функциональных возможностей программы

Открытие диаграммы классов из файла

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Сохранение диаграммы компонентов в файл

Верный результат

Работает

-

Выявление функциональных возможностей программы

Открытие без сохранения в файл текущего проекта.

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Открытие с сохранением в файл текущего проекта

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Создание нового проекта

Верный результат

Работает

-

Выявление функциональных возможностей программы

Создание элемента диаграммы «компонент»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Изменение элемента диаграммы «компонент»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Удаление элемента диаграммы «компонент»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Перемещение элемента диаграммы «компонент» в любую точку рабочего поля

Верный результат

Работает

-

Выявление функциональных возможностей программы

Создание элемента диаграммы «интерфейс»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Изменение элемента диаграммы «интерфейс». Редактирование названия «интерфейса» с сохранением изменений.

Верный результат

Работает

-

Выявление функциональных возможностей программы

Удаление элемента диаграмм «интерфейс»

Верный результат

Работает

-

Выявление функциональных возможностей программы

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

Верный результат

Работает

-

Выявление функциональных возможностей программы

Создание элемента диаграммы «Комментарий».

Верный результат

Работает

-

Выявление функциональных возможностей программы

Изменение элемента диаграммы «Комментарий»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Удаление элемента диаграммы «комментарий».

Верный результат

Работает

-

Выявление функциональных возможностей программы

Перемещение элемента диаграммы «Комментарий» в любую точку рабочего поля.

Верный результат

Работает

-

Выявление функциональных возможностей программы

Добавление элемента диаграммы «связь»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Удаление элемента диаграммы «связь»

Верный результат

Работает

-

Выявление функциональных возможностей программы

Копирование элемента в буфер обмена.

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Вставка элемента из буфера обмена.

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Функция "Вырезать/Вставить".

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Функция масштабирования.

Верный результат

Работает

-

Выявление функциональных возможностей программы

Функция Undo/Redo.

Верный результат

Работает во всех возможных вариантах

-

Выявление функциональных возможностей программы

Функция выведения объекта за рабочее поле

Ошибочный результат

Объект исчезает с рабочего поля и вернуть его нельзя

Средняя

Выявление функциональных возможностей программы

Функция перемещения элемента диаграммы «связь»

Ошибочный результат

Связь остается привязанной к компонентам, но некорректно отображается

Критическая

Выявление функциональных возможностей программы

Функция изменения объекта «компонент»

Ошибочный результат

Длина имени компонента не ограничена и при большом имени вызывает ошибку

Средняя

Исправленные ошибки

Выявление функциональных возможностей программы

Функция перемещения элемента диаграммы «связь»

Верный результат

Связь остается привязанной к компонентам, и отображается корректно

-

Выявление функциональных возможностей программы

Функция выведения объекта за рабочее поле

Верный результат

Введено ограничение рабочего поля, объект более нельзя «потерять»

-

Выявление функциональных возможностей программы

Функция изменения объекта «компонент»

Верный результат

Ограничение длины имени компонента

-

Таб. 1. Сценарий тестирования.

Сценарий работы программы



Пусть нам необходимо построить диаграмму компонентов, изображенную на рисунке ниже.




Рис. 4. Конечная диаграмма компонентов.

Добавление компонентов.

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





Добавление комментария.

В нашей диаграмме будут использоваться два типа комментариев – свободные и комментарии к элементу. Сначала добавим сами элементы, кликнув на соответствующий элемент панели управления. О добавлении связей будет сказано ниже.





Добавление интерфейсов

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





Добавление связей

В нашей диаграмме будут использоваться три вида связей – реализация, использование и зависимость, причем первые два вида – только посредством интерфейсов. Для добавления связи нужно выбрать соответствующий элемент на тулбаре, после чего «натянуть связь» между компонентами.





Перемещение элементов и редактирование содержимого

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





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


Похожие:

«Разработка графического редактора uml-диаграмм компонентов» iconЛекция: Этапы проектирования ис с применением uml: Основные типы uml-диаграмм, используемые в проектировании информационных систем.
ИС: моделирование бизнес-прецедентов, разработка модели бизнес-объектов, разработка концептуальной модели данных, разработка требований...
«Разработка графического редактора uml-диаграмм компонентов» iconВнешний облик издания: основы графического дизайна
Цель спецсеминара: изучение и практическом освоение создания тематической концепции, проектирования композиционно-графической модели...
«Разработка графического редактора uml-диаграмм компонентов» iconЛабораторная работа №10 графический планшет
В окне графического редактора Paint создайте два одинаковых рисунка: 1 – при помощи мыши; 2 при помощи графического пера
«Разработка графического редактора uml-диаграмм компонентов» iconКласса пояснительная записка учебно
«Компьютер», знакомство с фундаментальными понятиями алгоритмизации и основ логики, формирование и развитие пользовательских навыков...
«Разработка графического редактора uml-диаграмм компонентов» iconРабочая программа «Информатика и информационно-коммуникационные технологии»
Параллельно с этим организуется практическая работа на компьютере по формированию пользовательских навыков (на основе текстового...
«Разработка графического редактора uml-диаграмм компонентов» iconПрограмма по информатике для 6 класса(2009-2010уч год). Пояснительная записка
«Компьютер», знакомство с фундаментальными понятиями алгоритмизации и основ логики, формирование и развитие пользовательских навыков...
«Разработка графического редактора uml-диаграмм компонентов» icon02. графический редактор принципиальных схем pc-caps 22 Вызов и настройка конфигурации графического редактора pc-caps
Графический редактор принципиальных схем pc-caps 22 Вызов и настройка конфигурации графического редактора pc-caps
«Разработка графического редактора uml-диаграмм компонентов» iconЗадани е
Оформить пояснительную записку в текстовом редакторе Microsoft Word с применением графического редактора Coreldraw, включив в нее...
«Разработка графического редактора uml-диаграмм компонентов» iconВопросы к экзамену по управлению предприятием
Объектно-ориентированные методы проектирования. Нотация uml. Виды моделей нотации uml
«Разработка графического редактора uml-диаграмм компонентов» iconДипломное проектирование для студентов специальности «автоматизированные системы обработки информации и управления» Могилев 2008 удк 621. 01
Изложены этапы проектирования систем обработки данных с использованием современных case-систем. Приведена последовательность построения...
Разместите кнопку на своём сайте:
Библиотека


База данных защищена авторским правом ©lib.znate.ru 2014
обратиться к администрации
Библиотека
Главная страница