Разработка графического приложения для программных проектов на Agile
Популярность основных методов, практик и инструментов гибкой разработки. Главная особенность создания графического приложения для программных проектов, использующего новую модификацию, для организации рабочего процесса и отслеживания выполнения задач.
Рубрика | Программирование, компьютеры и кибернетика |
Вид | дипломная работа |
Язык | русский |
Дата добавления | 15.09.2018 |
Размер файла | 1,8 M |
Отправить свою хорошую работу в базу знаний просто. Используйте форму, расположенную ниже
Студенты, аспиранты, молодые ученые, использующие базу знаний в своей учебе и работе, будут вам очень благодарны.
Результаты данного исследования могут быть полезны для организаций в сфере разработки программного обеспечения в качестве удобного сочетания подходов гибкой методологии.
В заключение можно скачать, что выпускная квалификационная работа представляет собой попытку разработать новый подход к процессу разработки программного обеспечения в быстро развивающейся, относительно молодой и востребованной области, где взгляд на классические вещи под другим углом может предложить революционное решение, которое может изменить понятие подхода в целом.
Список литературы
1. Ken Schwaber, Jeff Sutherland. The Scrum Guide. The definitive Guide to Scrum: The Rules of the Game. 2017.
2. Ajay Reddy. The Scrumban [R] Evolution: Getting the Most Out of Agile, Scrum, and Lean Kanban. 2015.
3. Charles G. Cobb. Making Sense of Agile Project Management: Balancing Control and Agility, by Wiley, 2011.
4. Louise Ledbrook, “Waterfall Project Management: An Overview”, 2012
5. Michael Cohn. Succeeding with Agile: Software Development Using Scrum, by Addison-Wesley Professional, 2009. - 504 p.
6. David Anderson, Kanban: Successful Evolutionary Change for Your Technology Business, 2010.
7. Кеннет Рубин. Основы Scrum: Практическое руководство по гибкой разработке ПО = Essential Scrum: A Practical Guide to the Most Popular Agile Process. -- М.: «Вильямс», 2016.
8. Кент Бек: Экстремальное программирование -- Питер, 2002.
9. Кен Ауэр, Рой Миллер: «Экстремальное программирование: постановка процесса с первых шагов и до победного конца» -- Питер, 2003.
10. Е.Р. Алексеев, Г. Г. Злобин, Программирование на языке С++ в среде Qt Creator, 2015. -448с.
11. Шлее М. Qt 5.3. Профессиональное программирование на C++. -- СПб.: БХВ-Петербург, 2015. -- 928 с
Приложение
//infoclass.h
enum TYPE { OPEN, DEVELOPMENT, PLANNED, INPROGRESS, INTESTING, MAINTENANCE, DONE };
class InfoClass {
public:
InfoClass(const int id);
bool CmpID(int id_);
int getID();
void add_info(QString name, QString description, TYPE type);
void save_creation_date(QDate creation);
void save_dates(QDate planned_end, QDate completion_date);
QString getName();
QString getDescription();
TYPE getType();
QDate getCreationDate();
QDate getPlannedEndDate();
QDate getCompletionDate();
private:
int id;
QString name;
QString description;
TYPE type;
QDate CreationDate;
QDate PlannedEndDate;
QDate CompletionDate;
};
//personinfo.h
class PersonInfo
{
public:
PersonInfo(const int id_);
void add_info(QString first, QString second, QString email, QString phone, QString path); //QPicture
bool CmpID(int id_);
int getID();
QString getFirstName();
QString getSecondName();
QString getPhoneNumber();
QString getEmailAdress();
QString getPicturePath();
void setFirstName(QString);
void setSecondName(QString);
void setPhoneNumber(QString);
void setEmailAdress(QString);
void setPicturePath(QString);
private:
QString first_name;
QString second_name;
QString email_adress;
QString phone_number;
QString picture_path;
int id;
};
//editdialog.h
class EditDialog
{
Q_OBJECT
public:
EditDialog ()
~EditDialog();
QString getName();
QString getDescription();
TYPE getType();
virtual void getClass(TaskInfo* task_info);
QDate getCompletionDate_();
QDate getCreationDate_();
QDate getPlannedEndDate_();
private:
QString name;
QString description;
TYPE type;
QDate CompletionDate;
QDate PlannedEndDate;
QDate CreationEndDate;
};
//mainwindow.h
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
QString string_wrapping(QString string);
void draw_sprint_column(QString name, QString date, int id);
void move_tasks_to_sprint_window(QDynamicButton *button);
void move_tasks_to_board(QDynamicButton *button);
void refresh_weight();
private slots:
void on_AddPerson_Button_clicked();
void on_AddProject_Button_clicked();
void on_AddTaskButton_clicked();
void ShowPersonInfo_slot();
void ShowProjectInfo_slot();
void ShowSprintInfo_slot();
void EditTaskInfo_slot();
void on_AddSprint_Button_clicked();
void on_tabWidget_currentChanged(int index);
private:
Ui::MainWindow *ui;
PersonInfo* person_info;
ProjectInfo* project_info;
TaskInfo* task_info;
SprintInfo* sprint_info;
std::vector<PersonInfo> VecPerson_Info;
std::vector<ProjectInfo> VecProject_Info;
std::vector<TaskInfo> VecTask_Info;
std::vector<SprintInfo> VecSprint_Info;
QHBoxLayout *SprintWindow_layout;
QSpacerItem *h_spacer;
QString style_string_task_dev;
QString style_string_task_maint;
QString style_string_person;
QString style_string_backlog_sprint;
QString style_string_sprint;
};
//mainwindow.cpp
void MainWindow::ShowPersonInfo_slot()
{
QDynamicButton *button = (QDynamicButton*) sender();
AddPersonDialog edit_person(this);
int right_id = 0;
for (unsigned int i = 0; i < VecPerson_Info.size(); i++)
{
if(VecPerson_Info.at(i).CmpID(button->getID()))
right_id = i;
}
edit_person.getClass(&VecPerson_Info.at(right_id));
switch(edit_person.exec()) {
case QDialog::Accepted: {
qDebug() << "Accepted";
button->setText(VecPerson_Info.at(right_id).getFirstName() + "\n email: " + VecPerson_Info.at(right_id).getEmailAdress());
break;
}
case QDialog::Rejected:
qDebug() << "Rejected";
break;
default:
qDebug() << "Unexpected";
}
}
void MainWindow::ShowProjectInfo_slot()
{
QDynamicButton *button = (QDynamicButton*) sender();
AddProjectDialog edit_project(this);
int right_id = 0;
for (unsigned int i = 0; i < VecProject_Info.size(); i++)
{
if(VecProject_Info.at(i).CmpID(button->getID()))
right_id = i;
}
edit_project.getClass(&VecProject_Info.at(right_id));
switch(edit_project.exec()) {
case QDialog::Accepted: {
qDebug() << "Accepted";
button->setText(VecProject_Info.at(right_id).getName());
break;
}
case QDialog::Rejected:
qDebug() << "Rejected";
break;
default:
qDebug() << "Unexpected";
}
}
void MainWindow::ShowSprintInfo_slot()
{
QDynamicButton *button = (QDynamicButton*) sender();
AddSprintDialog edit_sprint(this);
int right_id = 0;
for (unsigned int i = 0; i < VecSprint_Info.size(); i++)
{
if(VecSprint_Info.at(i).CmpID(button->getID()))
right_id = i;
}
edit_sprint.getClass(&VecSprint_Info.at(right_id));
switch(edit_sprint.exec()) {
case QDialog::Accepted: {
qDebug() << "Accepted";
button->setText(VecSprint_Info.at(right_id).getName() + "\n" + VecSprint_Info.at(right_id).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(right_id).getPlannedEndDate().toString("dd.MM"));
QLabel *label=this->findChild<QLabel *>(QString::number(VecSprint_Info.at(right_id).getID()) + "_sprint_label");
if(label != NULL)
{
label->setText(VecSprint_Info.at(right_id).getName() + "\n" +
QString::number(VecSprint_Info.at(right_id).getSumWeight()) + "/" + QString::number(VecSprint_Info.at(right_id).getMaxWeight()) + "pt " +
VecSprint_Info.at(right_id).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(right_id).getPlannedEndDate().toString("dd.MM"));
}
break;
}
case QDialog::Rejected:
qDebug() << "Rejected";
break;
default:
qDebug() << "Unexpected";
}
}
void MainWindow::EditTaskInfo_slot()
{
QDynamicButton *button = (QDynamicButton*) sender();
EditTaskDialog edit_task(this);
int right_id = 0;
for (int i = 0; i < VecTask_Info.size(); i++)
{
if(VecTask_Info.at(i).CmpID(button->getID()))
right_id = i;
}
edit_task.getClass(&VecTask_Info.at(right_id));
switch(edit_task.exec()) {
case QDialog::Accepted: {
qDebug() << "Accepted";
button->setText(string_wrapping(VecTask_Info.at(right_id).getName()) + "\n " + QString::number(VecTask_Info.at(right_id).getWeight()) + " pt");
VecTask_Info.at(right_id).setSprintID(-1);
for(int j = 0; j < VecSprint_Info.size(); j++)
{
if(VecTask_Info.at(right_id).getSprintName() == VecSprint_Info.at(j).getName())
VecTask_Info.at(right_id).setSprintID(VecSprint_Info.at(j).getID());
}
if(VecTask_Info.at(right_id).isDev())
button->setStyleSheet(style_string_task_dev);
else
button->setStyleSheet(style_string_task_maint);
if(ui->tabWidget->currentIndex() == 1)
switch(VecTask_Info.at(right_id).getType())
{
case OPEN:
ui->BacklogLayout->addWidget(button);
break;
case PLANNED:
ui->ToDoLayout->addWidget(button);
break;
case INTESTING:
ui->InTestingLayout->addWidget(button);
break;
case INPROGRESS:
ui->InProgressLayout->addWidget(button);
break;
case DONE:
ui->DoneLayout->addWidget(button);
break;
default:
break;
}
else if(ui->tabWidget->currentIndex() == 2)
{
if(button->getID() == VecTask_Info.at(right_id).getID())
{
QLayout *layout=this->findChild<QLayout *>(QString::number(VecTask_Info.at(right_id).getSprintID())+"_sprint_layout");
if(layout != NULL)
{
layout->addWidget(button);
}
else
{
QLayout *layout=this->findChild<QLayout *>("BacklogSprintLayout");
if(layout != NULL) layout->addWidget(button);
}
}
refresh_weight();
}
break;
}
case QDialog::Rejected:
qDebug() << "Rejected";
break;
default:
qDebug() << "Unexpected";
}
}
void MainWindow::on_tabWidget_currentChanged(int index)
{
if(index == 1)
{
QLayout *layout=this->findChild<QLayout *>("BacklogSprintLayout");
if(layout != NULL)
{
if(layout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(0)->widget());
move_tasks_to_board(button);
}while(layout->count() != 0);
}
}
for(int i = 0; i < VecSprint_Info.size(); i ++)
{
QLayout *layout=this->findChild<QLayout *>(QString::number(VecSprint_Info.at(i).getID())+"_sprint_layout");
if(layout != NULL)
{
if(layout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(0)->widget());
move_tasks_to_board(button);
}while(layout->count() != 0);
}
}
}
}
else if(index == 2)
{
if(ui->BacklogLayout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->BacklogLayout->itemAt(0)->widget());
move_tasks_to_sprint_window(button);
}while(ui->BacklogLayout->count() != 0);
}
if(ui->ToDoLayout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->ToDoLayout->itemAt(0)->widget());
move_tasks_to_sprint_window(button);
}while(ui->ToDoLayout->count() != 0);
}
if(ui->InProgressLayout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->InProgressLayout->itemAt(0)->widget());
move_tasks_to_sprint_window(button);
}while(ui->InProgressLayout->count() != 0);
}
if(ui->InTestingLayout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->InTestingLayout->itemAt(0)->widget());
move_tasks_to_sprint_window(button);
}while(ui->InTestingLayout->count() != 0);
}
if(ui->DoneLayout->count() != 0)
{
do{
QDynamicButton *button = qobject_cast<QDynamicButton*>(ui->DoneLayout->itemAt(0)->widget());
move_tasks_to_sprint_window(button);
}while(ui->DoneLayout->count() != 0);
}
refresh_weight();
}
}
void MainWindow::refresh_weight()
{
for(int j = 0; j < VecSprint_Info.size(); j++)
{
VecSprint_Info.at(j).setSumWeight();
QLayout *layout=this->findChild<QLayout *>(QString::number(VecSprint_Info.at(j).getID())+"_sprint_layout");
if(layout != NULL)
{
if(layout->count() != 0)
{
for(int i = 0; i < layout->count(); i++)
{
QDynamicButton *button = qobject_cast<QDynamicButton*>(layout->itemAt(i)->widget());
for(int ind = 0; ind < VecTask_Info.size(); ind++)
{
if(button->getID() == VecTask_Info.at(ind).getID())
{
VecSprint_Info.at(j).change_weight(VecTask_Info.at(ind).getWeight());
if(VecTask_Info.at(ind).isDev())
ecSprint_Info.at(j).change_dev_weight(VecTask_Info.at(ind).getWeight());
else VecSprint_Info.at(j).change_maint_weight(VecTask_Info.at(ind).getWeight());
}
}
}
}
}
QLabel *label=this->findChild<QLabel *>(QString::number(VecSprint_Info.at(j).getID()) + "_sprint_label");
if(label != NULL)
{
int dev_w = (VecSprint_Info.at(j).getMaxWeight()/100)*VecSprint_Info.at(j).getPercentDevelopment() + 0.5;
int maint_w = (VecSprint_Info.at(j).getMaxWeight()/100)*VecSprint_Info.at(j).getPercentMaintenance() + 0.5;
label->setText(VecSprint_Info.at(j).getName() + "\n" +
"Development " + QString::number(VecSprint_Info.at(j).getDevWeight()) + "/" + QString::number(dev_w) + "pt" +
"\nMaintenance " + QString::number(VecSprint_Info.at(j).getMaintWeight()) + "/" + QString::number(maint_w) + "pt" +
"\n" + VecSprint_Info.at(j).getCreationDate().toString("dd.MM") + " - " + VecSprint_Info.at(j).getPlannedEndDate().toString("dd.MM"));
Размещено на Allbest.ru
...Подобные документы
Создание, изучение и разработка приложение на Android. Среда разработки приложения DelphiXE5. Установка и настройка среды программирования. Этапы разработки приложения. Инструменты для упрощения конструирования графического интерфейса пользователя.
курсовая работа [1,6 M], добавлен 19.04.2017Проектирование удобного приложения для комфортной навигации по файлам облачного хранилища в одном файловом менеджере. Выбор интегрированной среды разработки. Выбор инструментов для визуализации приложения. Выбор средств отслеживания HTTPзапросов.
курсовая работа [3,6 M], добавлен 16.07.2016Разработка эскизного и технического проектов программы, ее назначение и область применения, описание алгоритма, организация входных и выходных данных. Выбор состава технических и программных средств, разработка рабочего проекта, спецификация программы.
курсовая работа [700,6 K], добавлен 26.01.2010Выбор состава технических и программных средств для создания данного приложения "Экзаменатор", использование среды разработки Borland Delphi. Основные компоненты и спецификация программы. Используемые технические средства, описание и запуск программы.
курсовая работа [540,8 K], добавлен 18.07.2012Особенность формирования реляционной модели данных. Создание таблиц в программе. Характеристика разработки web-интерфейса. Анализ вывода информации о каждом сотруднике. Образование листинга программных кодов. Суть удаления и редактирования извещений.
курсовая работа [621,5 K], добавлен 14.01.2018Понятие технологии проектирования информационных систем. Создание Web-приложения по подготовке школьников к написанию научных проектов с использованием различных диаграмм, наглядно отображающих структуру приложения. Методология моделирования IDEFX.
курсовая работа [1,8 M], добавлен 07.01.2014Разработка Web-приложения для ООО "Научно-производственная фирма по применению информационных технологий в электрических сетях". Техническое задание, проектирование процессов, создание базы данных, разработка дизайна, тестирование и отладка сайта.
дипломная работа [3,8 M], добавлен 24.06.2011Анализ создания виртуального окружения для разработки. Установка фреймворка Flask. Особенность настройки аутентификации и привилегий. Создание Python-файла и написание в нем простого веб-приложения. Запуск и проверка работоспособности приложения.
лабораторная работа [2,1 M], добавлен 28.11.2021Разработка приложения, которое будет выполнять функции показа точного времени и точной даты. Определение дополнительных функций разработанного приложения. Рассмотрение основных этапов создания программного продукта. Результаты тестирования приложения.
курсовая работа [2,2 M], добавлен 14.04.2019Классификация служебных программных средств. Файловая структура операционных систем. Основы графического интерфейса пользователя Windows XX. Анализ алгоритмов решения задач. Описание процесса разработки программного обеспечения и результатов работы.
курсовая работа [2,4 M], добавлен 14.11.2016Мониторинг сервисов веб-приложения. Проблема отслеживания большого количества сервисов, поддерживающих работу веб-приложения, ее решение с помощью "Service discovery"-инструментов. Применение программного инструмента Consul как клиент-серверной системы.
статья [184,4 K], добавлен 10.12.2016Интегрированная среда разработки Lazarus. Среда программных продуктов Lazarus, объекты программных компонентов. Палитра компонентов Standard, Additional. Разработка справочной системы: структура проекта, интерфейс программы, компоненты приложения.
курсовая работа [695,2 K], добавлен 08.01.2023Разработка приложения с помощью среды Microsoft Visual Studio 2010 Express. Интерфейс приложения. Разработка конечного программного продукта, демонстрирующего работу многопоточного приложения, использующего взаимоисключение на основе критической секции.
лабораторная работа [300,4 K], добавлен 21.07.2012Изучение предметной области и выявление основных задач Интернет-магазинов. Выбор средств разработки системы, базы данных, инфологической и даталогической моделей. Разработка программного приложения, программных модулей, представленных экранными формами.
дипломная работа [4,2 M], добавлен 22.04.2015Основные этапы разработки web-сайта факультета информатики: структурная схема функционирования, разработка интерфейса (регистрация посетителей, просмотр новостей, просмотр информации о факультете). Прописывание основных программных кодов приложения.
контрольная работа [4,9 M], добавлен 02.12.2009Исследование спецификации логической игры "Сапёр". Системное и функциональное проектирование приложения. Разработка программных модулей. Обзор классов, необходимых для создания интерфейса данного приложения. Инструменты для реализации логической игры.
курсовая работа [1,2 M], добавлен 13.01.2016Изучение основ программирования и создание полноценного приложения в среде программирования Delphi. Разработка эскизного и технического проектов программы. Внедрение выполнения программы. Разработка рабочего проекта, спецификация и текст программы.
курсовая работа [560,1 K], добавлен 18.07.2012Классификация пользователей проекта Web-приложения "Такси "Люкс". Выбор основных методов и средств разработки. Описание дизайна сайта. Исходный код обработчиков основных событий на страницах. Расчет себестоимости разработки программного продукта.
дипломная работа [2,5 M], добавлен 26.06.2012Функциональные возможности графического редактора Paint. Устройства персонального компьютера и их назначения. Стандартные программы операционной системы Windows. Приложения системы графического редактора к решению задач графики, теоретической механики.
курсовая работа [156,5 K], добавлен 05.12.2008Проектирование вариантов использования приложения. Анализ существующей версии приложения. Обоснование выбора инструментальных программных средств. Проектирование интерфейса пользователя. Адаптация под мобильные устройства. Описание программного продукта.
курсовая работа [2,8 M], добавлен 25.06.2017