HHD – Help the HelpDesk Análise e Projeto Henrique Borges (hbas@cin.ufpe.br) Igor Marques...

Post on 07-Apr-2016

217 views 3 download

Transcript of HHD – Help the HelpDesk Análise e Projeto Henrique Borges (hbas@cin.ufpe.br) Igor Marques...

HHD – Help the HelpDeskAnálise e Projeto

Henrique Borges (hbas@cin.ufpe.br)Igor Marques (irlm@cin.ufpe.br)Jobson Ronan (jrjs@cin.ufpe.br)

Motivação“Com o crescimento da complexidade do ambiente

tecnológico, o pessoal do Helpdesk passou a dispender muito mais tempo para encontrar soluções, uma vez que os usuários passaram a trazer questões cada vez mais sofisticadas.”

“Sistemas de Gerência de Helpdesk são necessários para proativamente detectar, corrigir e previnir problemas nos sistemas de aplicação.”

Cliff Oxford, fundador e presidente da Support Technologies

RoteiroVisão Geral do SistemaCasos de UsoAnálise de Casos de UsoProjeto de ArquiteturaPadrões de Projeto

Objetivos do SistemaUsuários podem: Realizar pedidos Acompanhar o estado do pedido Acompanhar a lista de todos os pedidos

pendentesAuxiliar no escalonamento da equipe do HelpdeskMelhorar a transparência do setor, permitindo o acompanhamento das tarefas por qualquer usuário do sistema

Casos de UsoAtores Usuário (abstrato)

Requester Helper

Sistema de Email Timer

Casos de UsoCasos de Uso do Usuário

Efetuar Logoff

Efetuar Login

Visualizar Detalhes da Solicitacao

Visualizar Estatisticas Gerais

Visualizar Solicitacoes na Fila de Espera

Visualizar Solicitacoes em Atendimento

Visualizar Solicitacoes Finalizadas

Usuario

Sistema de Email

Enviar Mensagem Sobre Solicitação

<<include>>

Casos de UsoCasos de Uso do Requester

Visualizar Solicitacoes Finalizadas

Usuario

Realizar uma Solicitação

Solicitar Reabertura da Solicitação

<<include>>

Avaliar Atendimento de Solicitação

<<include>>

Requester

Casos de UsoCasos de Uso do Helper

Visualizar Solicitacoes na Fila de Espera

Aceitar Solicitacao

<<include>>

Alterar Estado da SolicitacaoHelper

Visualizar Detalhes da Solicitacao

<<include>>

Usuario

Casos de UsoCaso de Uso do Relógio

Atualizar Estatisticas GeraisRelogio

Análise de Casos de UsoCasos de Uso Selecionados [RF-07] Enviar mensagem sobre

solicitação [RF-11] Realizar uma solicitação [RF-14] Atualizar Estatísticas Gerais

Análise: Enviar mensagem sobre solicitação

Diagrama de Seqüência

: ComunicacaoSistemaDeEmail : Usuario : TelaEnviarMensagem : ControladorEnviarMen...

: CadastroSolicitacoes solicitacao : Solicitacao

enviarMensagem()

enviarMensagem(usuario, idSolicitacao, mensagem)

solicitacao := procurarSolicitacao(idSolicitacao)

adicionarMensagem(mensagem)

atualizarSolicitacao(solicitacao)

msgEmail := criarMsgEmail(MensagemSolicitacao)

enviarEmail(msgEmail)

Análise: Enviar mensagem sobre solicitação

VOPC

Análise: Realizar uma solicitação Diagrama de Seqüência

: Requester : TelaNovaSolicitacao : ControladorNovaSolicit...

: Solicitacao : CadastroSolicitacoes

abrirNovaSolicitacao()abrirNovaSolicitacao(requester, solicitacao)

setRequester(requester)

cadastrarSolicitacao(Solicitacao)

Análise: Realizar uma solicitação VOPC

Análise: Atualizar Estatísticas Gerais Diagrama de Seqüência

: Relogio : InterfaceRelogio : ControladorAtualizarEst...

: CadastroSolicitacoes : CadastroEstatisticas

interrupcao()atualizarEstatisticas()

solicitacoes = listarSolicitacoes( )

estatistica = computarEstatisticas()

cadastrarEstatistica(estatistica)

Análise: Atualizar Estatísticas Gerais VOPC

Estatistica

InterfaceRelogio

interrupcao()

CadastroEstatisticas

cadastrarEstatistica()

<<entity collection>>

0..*1 0..*1

ControladorAtualizarEstatisticas

atualizarEstatisticas()computarEstatisticas()

1

1

1

1

1

1

1

1

CadastroSolicitacoes

listarSolicitacoesEmEspera()atualizarSolicitacao()cadastrarSolicitacao()procurarSolicitacao()listarSolicitacoes()

<<entity collection>>

1

1

1

1

Solicitacao

setHelper()setRequester()

adicionarMensagem()

1

0..*

1

0..*

Mapeamento entre Classes de Análise e Elementos de Projeto

Classes de Análise Elementos de Projeto<<capsule>> TelaAceitarSolicitacao<<protocol>> ProtocoloAceitarSolicitacao<<capsule>> TelaEnviarMensagem<<protocol>> ProtocoloEnviarMensagem<<capsule>> TelaNovaSolicitacao<<protocol>> ProtocoloNovaSolicitacao<<capsule>> Relogio<<protocol>> AtivacaoPeriodica<<capsule>> FachadaISubsistemaComunicacaoEmailFachadaComunicacaoEmailProtocoloComunicacaoEmail

ContaUsuario UsuarioContaHelper HelperContaRequester Requester

CadastroSolicitacoesIRepositorioSolicitacoesRepositorioSolicitacoesBDRCadastroUsuariosIRepositorioUsuariosRepositorioUsuariosBDRCadastroEstatisticaIRepositorioEstatisticaRepositorioEstatisticaBDRFabricaRepositorioFabricaRepositorioBDR

TelaAceitarSolicitacao

TelaEnviarMensagem

TelaNovaSolicitacao

InterfaceRelogio

ComunicacaoSistemaDeEmail

<<entity collection>> CadastroSolicitacoes

<<entity collection>> CadastroContasUsuario

<<entity collection>> CadastroEstatisticas

Projeto de ArquiteturaPrincípios seguidos Divisão em Camadas Inversão de Controle

Projeto de ArquiteturaVisão dos pacotes

controle

ui

subsistemaComunicacaoEmail

<<subsystem>>

usuarios

ISubsistemaComunicacaoEmail

util<<global>>

solicitacoesestatisticas

persistencia

comm

Projeto de ArquiteturaPacote ui

ProtocoloNovaSolicitacao(from comm)

<<protocol>>

TelaNovaSolicitacao

abrirNovaSolicitacao()

<<capsule>>

+protooloNovaSolicitacao

<<port>>

ProtocoloEnviarMensagem(from comm)

<<protocol>>

TelaEnviarMensagem

enviarMensagem()

<<capsule>>

+protocoloEnviarMensagem

<<port>>

ProtocoloAceitarSolicitacao(from comm)

<<protocol>>

TelaAceitarSolicitacao

aceitarSolicitacao()

<<capsule>>

+protocolAceitarSolicitacao

<<port>>

Projeto de ArquiteturaPacote comm

TelaAceitarSolicitacao(from ui)

<<capsule>>TelaEnviarMensagem

(from ui )

<<capsule>>

AtivacaoPeriodica

<<out signal>> interrupcao()

<<protocol>>

ProtocoloAceitarSolicitacao

<<out signal>> aceitarSolicitacao()<<in signal>> solicitacaoAceita()

<<protocol>>

+protocolAceitarSolicitacao

<<port>>

ProtocoloEnviarMensagem

<<out signal>> enviarMensagem()<<in signal>> MensagemEnviada()

<<protocol>>

+protocoloEnviarMensagem

<<port>>

Fachada(from controle)

<<capsule>>

+interrupcao~<<port>>

+protocoloAceitarSolicitacao~

<<port>>

+protocoloEnviarMensagem~

<<port>>

ProtocoloNovaSolicitacao

<<out signal>> novaSolicitacao()<<in signal>> novaSolicitacaoCriada()

<<protocol>>

+protooloNovaSolicitacao~

<<port>>

TelaNovaSolicitacao(from ui)

<<capsule>>

+protooloNovaSolicitacao

<<port>>

Projeto de ArquiteturaPacote controle

ControladorAceitarSolicitacao

aceitarSol icitacao()criarMensagemSolici tacaoAceita()

ControladorNovaSolicitacao

abrirNovaSolicitacao()

ControladorEnviarMensagem

enviarMensagem()criarMsgEmail()

ControladorAtualizarEstatisticas

atualizarEstatisticas()computarEstatisticas()

Relogio<<capsule>>

AtivacaoPeriodica(from comm)

<<protocol>>

<<port>>

+interrupcao

ProtocoloAceitarSolicitacao(from comm)

<<protocol>>

ProtocoloEnviarMensagem(from comm)

<<protocol>>

ProtocoloNovaSolicitacao(from comm)

<<protocol>>

Fachada

getInstance()

<<capsule>>+interrupcao~

<<port>> +protocoloAceitarSolici tacao~

<<port>>

+protocoloEnviarMensagem~

<<port>>

+protooloNovaSolicitacao~<<port>>

Projeto de ArquiteturaSubsistema de comunicação por e-mail Contexto do subsistema

MensagemEmailorigem : Stringdestinatario : Stringdescricao : String

<<entity>>

ControladorEnviarMensagem

ISubsistemaComunicacaoEmail

enviarEmail()

ControladorAceitarSolicitacao

FachadaComunicacaoEmail<<singleton>>

Projeto de ArquiteturaSubsistema de comunicação por e-mail Diagrama de classesISubsistemaComunicacaoEmail

enviarEmail()

MensagemEmailorigem : Stringdestinatario : Stringdescricao : String

ProtocoloComunicacaoEmail

enviarEmail()

FachadaComunicacaoEmail<<singleton>>

Projeto de ArquiteturaPacote estatísticas

EstatisticatotalSolicitacoesAtendidas : IntegertempoAtendimentoCompleto : IntegertempoEmFilaDeEspera : IntegertempoEmAtendimento

IRepositorioEstatisticas

CadastroEstatisticas

cadastrarEstatistica() 1

0..*

1

0..*

RepositorioEstatisticasBDR(from persistencia)

Projeto de ArquiteturaPacote usuarios

Requester Helpernome : Stringcargo : String

Usuariologin : Stringsenha : String

getSenha()

IRepositorioUsuarios<<Interface>>

CadastroUsuarios

procurarUsuario()

1 0..*1 0..*

RepositorioUsuariosDBR(from persistencia)

Projeto de ArquiteturaPacote solicitacoes

RepositorioSolicitacoesBDR(from persistencia)

IRepositorioSolicitacoes

CadastroSolicitacoes

listarSolicitacoesEmEspera()atualizarSolicitacao()cadastrarSolicitacao()procurarSolicitacao()listarSolicitacoes()

MensagemSolicitacaodescricao

Helper(from usuarios)Solicitacao

setHelper()setRequester()adicionarMensagem()adicionarMensagem()

1 0..*1 0..*

1

0..*

1

-mensagens

0..*

10..1

1

-helper

0..1

Requester(from usuarios)

11

1 -requester

1

Projeto de ArquiteturaPacote persistencia

RepositorioEstatisticasBDR RepositorioSolicitacoesBDRRepositorioUsuariosDBR

FabricaRepositorio(from uti l)

<<abstract factory>>

IRepositorioEstatisticas(from estatisticas)

<<Interface>>IRepositorioSolicitacoes

(from solici tacoes)

<<Interface>>IRepositorioUsuarios

(from usuarios)

<<Interface>>

FabricaRepositorioBDR

<<cria>> <<cria>> <<cria>>

Padrões de ProjetoPadrões Estruturais Façade PDCPadrões Criacionais Singleton Abstract Factory Factory Method

Padrões de ProjetoContexto dos padrões Abstract Factory e Factory Method

CadastroEstatisticas(from estatisticas)

IRepositorioEstatisticas

(from estatisticas)

CadastroSolicitacoes(from solici tacoes)

IRepositorioSolicitacoes

(from solicitacoes)

CadastroUsuarios(from usuarios)

IRepositorioUsuarios

(from usuarios)

FabricaRepositorio(from util)

<<abstract factory>>

<<usa>>

<<usa>><<usa>>

<<cria>>

<<cria>><<cria>>

Dúvidas???