Министерство образования и науки Российской Федерации Государственное образовательное учреждение высшего

advertisement
Министерство образования и науки Российской Федерации
Государственное образовательное учреждение высшего
профессионального образования
ВОЛГОГРАДСКИЙ ГОСУДАРСТВЕННЫЙ ТЕХНИЧЕСКИЙ
УНИВЕРСИТЕТ
(ВолгГТУ)
Кафедра «Программное обеспечение автоматизированных систем»
Дисциплина «Технология разработки программного обеспечения»
Курсовой проект
Activity-diagram-redactor
Выполнили:
студенты группы ИВТ-460
Ермолов Р.В.
Ушаков А.Ф.
Хржановская О.А.
Проверила:
доц. Жукова И. Г.
Волгоград, 2011
Содержание
1. Постановка задачи ....................................................................................................... 4
1.1. Цель ............................................................................................................................ 4
1.2. Задачи ....................................................................................................................... 4
1.3. Область деятельности ............................................................................................. 4
1.4. Объект проектирования .......................................................................................... 4
1.4.1. Состав и структура объекта проектирования .................................................... 4
1.5. Функциональные требования .................................................................................. 5
1.5.1. Добавление элементов uml-диаграммы активности на рабочую область ...... 5
1.5.2. Удаление элементов uml-диаграммы активности с рабочей области ............. 6
1.5.3. Перемещение элементов uml-диаграммы активности на рабочей области ... 6
1.5.4. Добавление связей между двумя элементами uml-диаграммы активности ... 7
1.5.5. Редактирование текста элементов uml-диаграммы активности ...................... 8
1.5.6. Сохранение uml-диаграммы активности в файл собственного формата ....... 9
1.5.7. Экспорт uml-диаграммы активности в файл изображения формата *.png .... 9
1.5.8. Загрузка uml-диаграммы активности из файла с расширением *.acd ............ 9
1.5.9. Дублирование при перетаскивании элементов uml-диаграммы активности . 9
1.5.10. Отмена последних действий uml-диаграммы активности ........................... 10
1.5.11. Работы с буфером обмена ............................................................................... 10
1.6. Нефункциональные требования............................................................................ 10
1.7. Ограничения............................................................................................................ 11
1.8. Макет экранной формы ......................................................................................... 12
2. Выбор технологий ..................................................................................................... 13
2.1. Языки и библиотеки .............................................................................................. 13
2.2. Среда разработка .................................................................................................... 13
2
2.3. Средства документирования ................................................................................ 13
2.4. Средства тестирования ......................................................................................... 13
2.5. Средства командной разработки .......................................................................... 13
2.6. Технические средства ........................................................................................... 13
Приложение А. Состав и структура uml-диаграммы активности ........................... 15
Приложение Б. Структура файла ................................................................................. 17
Приложение В. Диаграмма вариантов использования .............................................. 19
Приложение Г. Диаграмма классов ............................................................................. 20
Приложение Д. Фрагмент кода программы ................................................................ 23
Приложение Е. Сценарии тестирования ..................................................................... 27
3
1. Постановка задачи
1.1.Цель
Целью
разработки
программного
продукта
является
повышение
эффективности создания uml-диаграмм активности за счет сокращения сроков
проектирования и автоматизации процесса.
1.2.Задачи
В ходе проекта ставится 4 задачи:
 проведение предпроектного исследования;
 представление вариантов решения;
 выбор метода решения с последующей реализацией;
 внедрение.
1.3.Область деятельности
Диаграммы активности используются при проектировании программного
обеспечения.
1.4.Объект проектирования
Объектом
проектирования
является
uml-диаграмма
активности,
удовлетворяющая следующим требованиям:
 должна соответствовать стандартам uml 2.0;
 должна соответствовать заданию.
1.4.1. Состав и структура объекта проектирования
В состав диаграммы активности входят следующие элементы:
- узлы действия (элемент «Действие»);
- узлы управления (элемент «Начальный узел», элемент «Конечный узел»,
элемент «Ветвление», элемент «Объединение»);
- потоки (связи);
4
- комментарии (свободные, к элементам).
Более подробное описание состава и пример структуры приведен в
приложении А.
1.5.Функциональные требования
Главной функцией программного продукта является построение umlдиаграммы активности со следующими функциональными возможностями:
1.5.1. Добавление элементов uml-диаграммы активности на рабочую
область
а. Добавление элемента «Начальный узел» путем выбора элемента на
панели инструментов и размещение элемента на рабочей области
нажатием левой кнопки мыши (ЛКМ).
б. Добавление элемента «Конечный узел» путем выбора элемента на
панели инструментов и размещение элемента на рабочей области
нажатием ЛКМ.
в. Добавление элемента «Действие» путем выбора элемента на панели
инструментов и размещение элемента на рабочей области нажатием
ЛКМ.
г. Добавление элемента «Ветвление» путем выбора элемента на панели
инструментов и размещение элемента на рабочей области нажатием
ЛКМ.
д. Добавление элемента «Объединение» путем выбора элемента на панели
инструментов и размещение элемента на рабочей области нажатием
ЛКМ.
е. Добавление элемента «Комментарий» путем выбора элемента на панели
инструментов и размещение элемента на рабочей области нажатием
ЛКМ.
5
1.5.2. Удаление элементов uml-диаграммы активности с рабочей области
а. Удаление элемента «Начальный узел» путем выделения его нажатием
ЛКМ и нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех исходящих связей.
б. Удаление элемента «Конечный узел» путем выделения его нажатием
ЛКМ нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех входящих связей.
в. Удаление элемента «Действие» путем выделения его нажатием ЛКМ и
нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех входящих и исходящих связей.
г. Удаление элемента «Ветвление» путем выделения его нажатием ЛКМ и
нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех входящих и исходящих связей.
д. Удаление элемента «Объединение» путем выделения его нажатием ЛКМ
и нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех входящих и исходящих связей.
е. Удаление элемента «Комментарий» путем выделения его нажатием
ЛКМ и нажатием кнопки «Удалить» на панели инструментов. При этом
происходит удаление всех входящих и исходящих связей.
1.5.3. Перемещение элементов uml-диаграммы активности на рабочей
области
а. Перемещение элемента «Начальный узел» путем выделения его
нажатием ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
б. Перемещение элемента «Конечный узел» путем выделения его
нажатием ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
в. Перемещение элемента «Действие» путем выделения его нажатием
ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
6
г. Перемещение элемента «ветвление» путем выделения его нажатием
ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
д. Перемещение элемента «Объединение» путем выделения его нажатием
ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
е. Перемещение элемента «Комментарий» путем выделения его нажатием
ЛКМ и перемещением мышью на новое место. При этом все
инцидентные связи должны быть сохранены.
Так же должно происходить перемещение сразу нескольких элементов.
Это должно происходить путем выделения всех объектов, которые
необходимо переместить, ПКМ, удерживая нажатой клавишу «Ctrl» и
последующем перемещением мышью всех выделенных элементов. При
этом все инцидентные связи должны быть сохранены.
1.5.4. Добавление
связей
между
двумя
элементами
uml-диаграммы
активности
Добавление связи должно происходить путем выбора на панели
инструментов пункта «Линия». Далее выбирается нажатием ПКМ элемент из
которого должна выходить связь и, удерживая нажатой ПКМ, проводится
связь мышью до элемента, в который должна эта связь входить.
Допустимо создание только следующих связей:
а.
Начальный узел -> действие (1:n)
б.
Начальный узел -> ветвление (1:n)
в.
Начальный узел -> комментарий (1:n)
г.
Действие -> объединение (2:1)
д.
Действие -> ветвление (1:1)
е.
Действие -> комментарий (n:n)
ж.
Действие -> конечный узел (n:1)
з.
Действие -> действие (n:n)
7
и.
Ветвление -> действие (1:2)
к.
Ветвление -> комментарий (n:n)
л.
Объединение -> комментарий (n:n)
м.
Объединение -> действие (n:1)
н.
Объединение -> конечный узел (n:1)
о.
Конечный узел -> комментарий (1:n)
При попытке создания некорректной связи связь должна не создаваться.
Между двумя элементами должна быть возможна только одна связь.
Связь между любыми возможными парами элементов, не включающих
комментарий, должна представляться элементом «Поток», изображение и
описание которого приведено в приложении А.
Связь между комментарием и другим элементом должна представляться
элементом «Связь комментария и элементом», изображение и описание
которого приведено в приложении А.
1.5.5. Редактирование текста элементов uml-диаграммы активности
а. Редактирование текста элемента «Действие» возможно следующими
способами:
 двойное нажатие ЛКМ по элементу;
 выделение элемента ЛКМ и выбор команды «Изменить текст» на
панели инструментов.
Текст элемента «Действие» представляет собой однострочный текст,
не превышающий 19 символов.
б. Редактирование текста элемента «Комментарий» возможно способами,
аналогичными элементу «Действие» для редактирования текста.
Текст элемента «Комментарий» представляет собой многострочный
текст с автопереносом. Длина текста не превышает 100 символов.
8
1.5.6. Сохранение uml-диаграммы активности в файл собственного формата
Сохранение uml-диаграммы активности должно происходить путем
выбора пунктов меню «Файл» - «Сохранить как…» с последующим
заданием имени файла и выбора расширения *.acd. Расширение *.acd
при этом должно быть задано по умолчанию без возможности его
изменения пользователем. В случае отсутствия прав доступа на
создание/сохранение файла должно быть выдано соответствующее
сообщение об ошибке.
Описание
структуры
собственного
файла
*.acd
приведено
в
приложении Б.
1.5.7. Экспорт uml-диаграммы активности в файл изображения формата
*.png
Экспорт uml-диаграммы активности в файл изображения должно
происходить путем выбора пунктов меню «Файл» - «Экспорт…» с
последующим заданием имени файла и выбора расширения *.png.
Расширение *.png при этом должно быть задано по умолчанию без
возможности его изменения пользователем. В случае отсутствия прав
доступа
на
создание/сохранение
файла
должно
быть
выдано
соответствующее сообщение об ошибке.
1.5.8. Загрузка uml-диаграммы активности из файла с расширением *.acd
Загрузка uml-диаграммы активности происходит путем выбора
пунктов меню «Файл» - «Открыть» и выбора соответствующего файла
формата *.acd. В случае отсутствия прав доступа на чтение файла
должно быть выдано соответствующее сообщение об ошибке.
1.5.9. Дублирование при перетаскивании элементов uml-диаграммы
активности
Дублирование при перетаскивании элементов uml-диаграммы
активности должно происходить нажатием клавиши Alt и
9
последующим перетаскиванием созданной копии. При этом
оригинальные объекты должны оставаться на месте.
1.5.10. Отмена последних действий uml-диаграммы активности
Отмена последних действий должна происходить выбором на панели
инструментов пунктов «Назад» (Ctrl+Z) или «Вперед» (Ctrl+Y) . При
выборе «Назад» диаграмма должна вернуться в состояние,
предшествующее последнему изменению. При выборе «Вперед»
диаграмма должна вернуться в состояние, которые было отменено
нажатием «Назад». В журнале должна появиться запись,
соответствующая сделанному действию.
1.5.11. Работы с буфером обмена
Копирование выделенных фигур в буфер обмена должно происходить
по нажатию сочетания клавиш Ctrl+C.
Вставка скопированных фигур должна происходить по нажатию
сочетания клавиш Ctrl+V. При этом элементы должны вставляться на 5
пикселей правее и ниже.
Вырезание выделенных фигур должно происходить по нажатию
сочетания клавиш Ctrl+X.
Буфер обмена должен работать в том числе и между двумя
копиями запущенной программы.
1.6. Нефункциональные требования
К нефункциональным требованиям относится следующие:
 программа должна интуитивно понятным интерфейсом, что должно
достигаться за счет русскоязычной локализации, выдачи всплывающих
10
подсказок в виде описания выбранной кнопки при наведении на нее и
отображение более подробной информации в строке состояния;
 для удобства пользователя создание связей должно происходить с
автоматической привязкой инцидентной связи к границе объекта;
 масштабирование рабочей области uml-диаграммы должно происходить
путем
передвижения
слайдера
«Масштабирование»
на
панели
активности
должна
инструментов: влево – уменьшение, вправо – увеличение;
 прокрутка
рабочей
области
uml-диаграммы
происходить колесиком мыши или прокруткой горизонтального и
вертикального ползунков, предварительно нажав на них ЛКМ;
 в
случае
некорректной
работы
программа
должна
выдавать
соответствующие сообщения об ошибках;
 для программы должен быть предусмотрен инсталлятор, который должен
иметь возможность установить программу на «чистую» систему Windows
XP, включая все библиотеки и компоненты, необходимые для работы
программы.
1.7.Ограничения
Программный продукт должен быть реализован в составе 2х релизов и сдан
до 10 декабря 2011 года.
Следующие моменты не учитываются в данном программном продукте:
 размер объектов и рабочая область рассчитаны на диаграмму, состоящую
из 15-20 элементов;
 программа не должна контролировать наложение объектов друг на друга;
 программа не должна производить автосохранение.
11
1.8.Макет экранной формы
Макет экранной формы программного продукта представлен на Рис.1.
Рис.1. Макет экранной формы программного продукта
12
2. Выбор технологий
Работа должна быть выполнена на лицензионном ПО, права на которое
принадлежат разработчикам.
2.1. Языки и библиотеки
Исходный код программы должен быть написан на языке С++ с
использованием библиотеки Qt версии не ниже 4.7.4.
2.2.Среда разработки
В качестве среды разработки программы должна быть использована среда
Microsoft Visual Studio версий 2005, 2008 или 2010.
2.3. Средства документирования
Документацией
к
программному
продукту
является
программная
документация, созданная с помощью генератора программной документации
doxygen.
2.4. Средства тестирования
Тестирование
производится
вручную
согласно
сценариям
тестирования.
2.5. Средства командной разработки
В качестве средства командной разработки должна использоваться
централизованная система контроля версий Subversion (SVN). Для общения
между разработчиками используются такие средства коммуникаций как ICQ,
Skype и Dropbox.
2.6. Технические средства
В состав технических средств должен входить IBM-совместимый
персональный компьютер (ПЭВМ) со следующими характеристиками:
13
 процессор с тактовой частотой не менее 1 ГГц;
 материнская плата с FSB не менее 1 ГГц;
 оперативная память объемом не менее 1 Гб;
 видеокарта с памятью объемом не менее 256 Мб
 объем свободного места на жестком диске должен быть не менее 300 Мб
для нормального функционирования программы.
14
Приложение А. Состав и структура uml-диаграммы активности
Элемент
Название
Описание
Начальный узел
Указывает, где
начинается поток при
вызове деятельности
Конечный узел
Завершает деятельность
деятельности
Узел ветвления
Разделяет поток на
несколько параллельных
потоков
Узел объединения
Синхронизирует
несколько параллельных
потоков
Поток
Указывает переход от
одной деятельности к
другой
Комментарий
Аннотационная сущность
Связь комментария и
Делает свободный
элемента
комментарий частным (к
элементу)
15
Пример uml-диаграммы активности («Процесс производства продукта»),
структуру представлен на рис.2.
Рис.2. Uml-диаграмма активности «Процесс производства продукта»
16
Приложение Б. Структура файла
Структура собственного файла *.acd, содержащего описание umlдиаграммы активности, построенной и сохраненной в данном программном
продукте:
Для начального узла:
0 <Х> <Y>
Для конечного узла:
1 <Х> <Y>
Для действия:
2 <Х> <Y> <текст>
Для комментария:
3 <Х> <Y> <текст>
Для ветвления:
4 <Х> <Y>
Для объединения:
5 <Х> <Y>
Для связи:
6 <Номер элемента 1>< Номер элемента 2>
17
Пример структуры диаграммы, представленной на рис 3.
3 52 138 Пример
2 210 379 Действие3
5 210 306
2 314 241 Действие2
2 120 242 Действие1
4 216 176
0 214 121
1 214 456
617
621
632
642
653
654
665
Рис. 3 «Простой пример диаграммы»
18
Приложение В. Диаграмма вариантов использования
Диаграмма вариантов использования (use-case диаграмма) представлена на
рис.4.
Рис.4. Use-case диаграмма.
19
Приложение Г. Диаграмма классов
Диаграмма классов сцены и элементов представлена на рис. 5.
Диаграмма классов истории (undo/redo) и диалогов ввода текста
представлена на рис. 6.
20
Рис. 5. Диаграмма классов сцены и элементов.
Рис. 6. Диаграмма классов истории (undo/redo) и диалогов ввода текста.
22
Приложение Д. Фрагмент кода программы
Файл «diagramscene.cpp»
void DiagramScene::clipboardCopyEvent()
{
DiagramElement * element = NULL;
//текущий элемент
QList<QGraphicsItem *> items = selectedItems(); //выделенные элементы
QList<DiagramElement *> elements;
//элементы
QList<Link *> links;
//связи между ними
int i = 0;
//выделяем связи и удаляем их из общего контейнера
while(i < items.size())
{
Link * link = qgraphicsitem_cast<Link *>(items[i]);
if(link != NULL)
{
links << link;
items.removeAt(i);
}
else
i++;
}
//выделяем элементы
for(int i = 0; i < items.size(); i++)
{
DiagramElement * element = qgraphicsitem_cast<DiagramElement*>
(items[i]);
if(element != NULL)
elements << element;
}
QStringList data = fromItems(elements, links);
QString clipboardText;
for(int i = 0; i < data.size(); i++)
clipboardText += data[i] + "._";
QApplication::clipboard()->setText(clipboardText);
}
void DiagramScene::clipboardPasteEvent()
{
QString clipboardText = QApplication::clipboard()->text();
QStringList data = clipboardText.split("._");
data.removeLast();
QList<DiagramElement *> elements;
//элементы
QList<Link *> links;
//связи между ними
QList<QGraphicsItem *> items = selectedItems(); //выделенные элементы
//снимаем выделение
for(int i = 0; i < items.size(); i++)
{
items[i]->setSelected(false);
}
toItems(data, elements, links);
// Добавление элементов
23
for(int i = 0; i < elements.size(); ++i)
{
elements[i]->setPos(elements[i]->pos() + QPointF(15.0, 15.0));
elements[i]->setSelected(true);
this->addItem(elements[i]);
}
//контроль рабочей области для вставленных элементов
for(int i = 0; i < elements.size(); i++)
{
this->controlElementPos(elements[i]);
}
// Добавление связей
for(int i = 0; i < links.size(); ++i)
{
this->addItem(links[i]);
links[i]->setSelected(true);
}
// Занесение в историю
QList<QGraphicsItem*> list;
foreach(DiagramElement* item, elements)
list << (QGraphicsItem*)item;
foreach(Link* link, links)
list << (QGraphicsItem*)link;
if(list.size())
{
QUndoCommand *curAddCommand = new AddCommand(list[0]->scene(), list);
undoStack->push(curAddCommand);
}
// Обновляем буфер(со смещёнными элементами)
this->clipboardCopyEvent();
}
Файл «MainWindow.cpp»
void MainWindow::onOpenActivated()
{
QString filename; // Имя файла
// Запрос на сохранение диаграммы
QMessageBox msgBox;
msgBox.setText("Завершение работы с текущей диаграммой.");
msgBox.setInformativeText("Вы хотите сохранить диаграмму?");
msgBox.setStandardButtons(QMessageBox::Save | QMessageBox::Discard |
QMessageBox::Cancel);
msgBox.setDefaultButton(QMessageBox::Save);
int ret = msgBox.exec();
switch (ret)
{
case QMessageBox::Cancel:
break;
case QMessageBox::Save:
filename = QFileDialog::getSaveFileName(this, "Сохранить
как...", "", "Файлы uml-диаграмм активности (*.acd)");
// пользователь задал имя файла, но файл не создался
if(filename != "" && !saveDiagram(filename))
break;
case QMessageBox::Discard:
// Открытие файла
filename = QFileDialog::getOpenFileName(this, "Открыть...", "",
"Файлы uml-диаграмм активности (*.acd)");
24
if(filename != "")
loadDiagram(filename);
break;
}
}
bool MainWindow::loadDiagram(QString filename)
{
bool flagErr = false;
if(!filename.isEmpty())
{
QFile file(filename);
bool flagOpenFile = file.open(QIODevice::ReadOnly);
if(flagOpenFile)
{
QTextStream in(&file);
QStringList strs; // Лист строк файла
while (!in.atEnd())
strs << in.readLine();
// Парсинг файла с выделением элементов и связей
QList<DiagramElement*> elements;
QList<Link*> links;
bool res = mScene->toItems(strs,elements,links);
if(res)
{
// Очиcтка сцены
QList<QGraphicsItem*> list = mScene->items();
for(int i = 0; i < list.size(); ++i)
mScene->removeItem(list[i]);
undoStack->clear();
// Добавление элементов
for(int i = 0; i < elements.size(); ++i)
mScene->addItem(elements[i]);
// Добавление связей
for(int i = 0; i < links.size(); ++i)
mScene->addItem(links[i]);
// Занесение в историю
list.clear();
foreach(DiagramElement* item, elements)
list << (QGraphicsItem*)item;
foreach(Link* link, links)
list << (QGraphicsItem*)link;
if(list.size())
{
QUndoCommand *curAddCommand = new AddCommand(mScene,
list);
undoStack->push(curAddCommand);
}
}
else
{
QMessageBox mBox;
mBox.setText("Некорректная структура файла!");
mBox.exec();
flagErr = false;
}
file.close();
}
else
{
// Сообщение о неудаче открытия файла
25
QMessageBox msgBoxErrOpen;
msgBoxErrOpen.setText("Невозможно открыть файл!");
flagErr = false;
}
}
else
return 0;
return !flagErr;
}
void MainWindow::onSaveAsActivated()
{
QString filename = QFileDialog::getSaveFileName(this, "Сохранить как...",
"", "Файлы uml-диаграмм активности (*.acd)");
if(filename != "")
saveDiagram(filename);
}
bool MainWindow::saveDiagram(QString filename)
{
if(!filename.isEmpty())
{
if(!filename.endsWith(".acd"))
filename.append(".acd");
// Получим список всех элементов на сцене
QList<QGraphicsItem*> list = mScene->items();
QList<DiagramElement*> elements; // Элементы диаграммы
QList<Link*> links;
// Связи
QFile file(filename);
// Файл
QStringList strList;
// Тектовое представление диаграммы
bool flagOpenFile = file.open(QIODevice::WriteOnly);
if(flagOpenFile)
{
// Разделим список всех объектов
// на список элементов и список связей
for(int i = 0; i < list.size(); ++i)
{
if(((DiagramElement*)list[i])->type() < 6)
elements << (DiagramElement*)list[i];
else
links << (Link*)list[i];
}
// Формирование текста собственного формата
strList = mScene->fromItems(elements, links);
for(int i = 0; i< strList.size(); ++i)
file.write(qPrintable(strList[i] + QString("\n")));
file.close();
}
else
{
// Сообщение о неудаче открытия файла
QMessageBox msgBoxErrOpen;
msgBoxErrOpen.setText("Невозможно создать файл!");
return 0;
}
}
else
return 0;
return 1;
}
26
Приложение Е. Сценарии тестирования
Сценарий тестирования программы
Действие
Ожидаемый результат
Запуск программы
Появление экранной формы. Форма активна.
Добавление элемента
Кнопка добавления элемента активна, на
«Начальный узел» на сцену. выбранном месте после нажатия ЛКМ
Выбор места расположения
появился элемент «Начальный узел». Кнопка
элемента и его помещение
добавления элемента «Начальный узел»
на выбранное место.
неактивна. Активна кнопка «Курсор».
Добавление элемента
Кнопка для добавления элемента активна, на
«Действие» на сцену.
выбранном месте после нажатия ЛКМ
Выбор места расположения
появился элемент «Действие».
элемента и его помещение
Кнопка добавления элемента «Действие»
на выбранное место.
неактивна. Активна кнопка «Курсор».
Задание надписи
После выделения элемента ПКМ и
добавленному элементу
последующего нажатия кнопки изменения
«Действие»: выделение
текста на панели рисования появление
элемента и нажатие кнопки
диалогового окна с однострочным полем
изменения текста. Задание
ввода. После ввода текста и нажатия «Ок» в
текста.
диалоговом окне на элементе «Действие»
изменился текст на заданный.
Добавление связи между
После нажатия кнопки добавления связи на
двумя добавленными
панели рисования, выделения начального узла
элементами. Нажатие
ЛКМ и доведения появившейся линии,
кнопки добавления связи на
привязанной к центру элемента «Начальный
панели рисования.
узел», не отпуская ЛКМ, до элемента
Выделение начального
«Действие». Стрелка привязывается к центу
элемента и элемента, к
элемента «Действие» и после отжатия ЛКМ
27
которому ведется связь.
фиксируется на сцене.
Перемещение элемента
После выделения ЛКМ элемента «Действие» и
«Действие».
перемещения его на новое место, не отпуская
ЛКМ, происходит перемещение не только
самого элемента, но и всех инцидентных
связей.
Сохранение диаграммы.
Появление стандартного диалогового окна
«Файл -> Сохранить как».
«Сохранить как…» с фокусом в поле ввода
(Файла с заданным именем
«Имя файла» и указанием формата файла в
не существует)
поле «Тип файла» *.acd по умолчанию. После
ввода имени файла и нажатием «Сохранить»
создается файл формата *.acd, содержащий
структуру диаграммы, в указанной
директории.
Добавление элемента
Кнопка для добавления элемента активна, на
«Конечный узел» на сцену.
выбранном месте после нажатия ЛКМ
Выбор места расположения
появился элемент «Конечный узел».
элемента и его помещение
Кнопка добавления элемента «Конечный узел»
на выбранное место.
неактивна. Активна кнопка «Курсор».
Добавление связи между
После нажатия кнопки добавления связи на
элементами «Действие»
панели рисования, выделения элемента
«Конечный узел». Нажатие
«Действие» ЛКМ и доведения появившейся
кнопки добавления связи на
линии, привязанной к центру элемента
панели рисования.
«Действие», отпускив ЛКМ, до элемента
Выделение начального
«Конечный узел». Стрелка привязывается к
элемента и элемента, к
центу элемента «Конечный узел» и после
которому ведется связь.
клика ЛКМ фиксируется на сцене.
Сценарий тестирования методов класса InitialNode
28
Метод addLink
Действие
Ожидаемый результат
Добавление исходящей связи. Связь должна корректно добавиться в
Контейнер пуст
контейнер. Возвращаемое значение true
Добавление исходящей связи. Связь добавить невозможно – у элемента
В контейнере уже содержится должна быть только одна исходящая
исходящая связь
связь. Возвращаемое значение false
Добавление входящей связи. Связь добавить невозможно – у элемента
Контейнер пуст
должна быть только одна исходящая
связь. Возвращаемое значение false
Добавление входящей связи. Связь добавить невозможно – у элемента
В контейнере уже содержится должна быть только одна исходящая
исходящая связь
связь. Возвращаемое значение false
Метод paint
Действие
Ожидаемый результат
Вызов метода с корректными Отрисовка элемента на сцене
параметрами
Метод clone
Действие
Вызов метода
Ожидаемый результат
Должен вернуться указатель на новый
элемент InitialNode. Указатель на новый
элемент не должен быть равен указателю
на копируемый элемент
29
Download