Escolar Documentos
Profissional Documentos
Cultura Documentos
Engenharia Informática
Engenharia Software
António Gouveia e António Mesquita
Autores
Lara Santos – 68584
Rui Valente - 68636
1. Introdução ...............................................................................................................1
4. Desenvolvimento .....................................................................................................3
Requisitos ................................................................................................................4
5. Bibliografia ...........................................................................................................25
1. Introdução
2. Enquadramento Teórico
Os diagramas de atividades são técnicas utilizadas que permitem modelar o fluxo das
ações que fazem parte de um sistema. Estes normalmente são usados para abordar de uma
forma melhor o funcionamento de certos casos-de-uso especificando a interação que certos
atores têm na realização destes casos-de-uso.
Estes diagramas de atividades são normalmente focados em dar a informação
necessária e clara relativa às atividades pretendidas. A mensagem pretendida com estes
diagramas deve ser simples de se interpretar.
Estes diagramas são poderosas ferramentas de comunicação. Quanto às suas
componentes principais:
1
Mostram onde o fluxo da atividade começa e termina;
O objeto da atividade;
Objetivo geral:
-Criação de um sistema para E-Voting;
2
Objetivos secundários:
-Compreensão das interações de alguns atores no desenvolvimento de certas atividades do
sistema;
-Criação de relações de interação entre atores no desenvolvimento de certos casos-de-uso;
-Elaboração dos diagramas de atividades;
-Elaboração dos diagramas de estados.
4. Desenvolvimento
3
Os diferentes tipos de eleições inseridas no sistema são:
• Europeias
• Autárquicas
• Legislativas
• Presidências
• Referendos
4.1 Requisitos
Requisitos funcionais:
RF1 O sistema E-Voting deverá ter operações de CRUD dos ciclos eleitorais
RF2 O sistema E-Voting deverá ter operações de CRUD dos tipos de votação
RF3 O sistema E-Voting deverá ter operações de CRUD dos tipos de eleição
RF4 O sistema E-Voting deverá ter operações de CRUD dos tipos de referendo
RF5 O sistema E-Voting deverá ter operações de CRUD dos tipos de candidatos
RF6 O sistema E-Voting deverá ter operações de CRUD dos tipos de perfis
RF7 O sistema E-Voting deverá ler dados da base de dados do governo/CNE
RF8 O sistema E-Voting deverá armazenar os dados na urna eletrónica
RF9 O sistema E-Voting deverá autenticar os eleitores
RF10 O sistema E-Voting deverá gerar boletins de voto
RF11 O sistema E-Voting deverá submeter o voto
RF12 O sistema E-Voting deverá permitir inserção de votos manualmente
RF13 O sistema E-Voting deverá autenticar moderadores e admin
RF14 O sistema E-Voting deverá contabilizar os votos
RF15 O sistema E-Voting deverá imprimir os resultados após eleição
RF16 O sistema E-Voting deverá efetuar relatórios estatísticos
RF17 O sistema E-Voting deverá aceder e armazenar os dados da votação na base de dados
governamental
RF18 O sistema E-Voting deverá efetuar uma prova de consistência
RF19 O sistema E-Voting deverá abrir a eleição
RF20 O sistema E-Voting deverá fechar a eleição
4
Requisitos não funcionais:
RNF1 O sistema E-Voting deverá apresentar um leque de cores adaptado para pessoas
daltónicas.
RNF2 O sistema E-Voting deverá apresentar texto com a Font Impact.
RNF3 O sistema E-Voting deverá agradecer pelo voto.
RNF4 O sistema E-Voting deverá ser programado em Phynton.
RNF5 O sistema E-Voting deverá funcionar no sistema operativo Linux.
RNF6 O sistema E-Voting deverá aceitar a submissão se tiver sido escolhida apenas uma
opção de voto.
RNF7 O sistema E-Voting deverá submeter automaticamente após 1 minuto de inatividade.
RNF8 O sistema E-Voting deverá apresentar uma fotografia ou um logotipo dos
candidatos.
RNF9 O sistema E-Voting deverá imprimir todos os votos no fecho da eleição para
contagem.
RNF10 O sistema E-Voting deverá ter diferentes menus para cada utilizador
RNF11 O sistema E-Voting deverá ter diferentes menus para cada tipo de eleição
RNF12 O sistema E-Voting deverá dar a opção de voto em branco
RNF13 O sistema E-Voting deverá ter um sistema de segurança no hardware e no software
5
Diagrama caso de uso
TEMPO
IMPRIMIR
CONTAGEM DOS FECHAR ABRIR
VOTOS VOTAÇÕES VOTAÇÕES
INSPETOR
INSERÇÃO DE IMPRIMIR
CONTABILIZAR
VOTOS RELATÓRIO
MANUALMENTE OS VOTOS
ESTATÍSTICOS
PROVAR A
CONSISTÊNCIA ADMIN
AUTENTICAR OS CRUD CIRCULOS
ELEITORES ELEITORAIS
ELEITOR
INCLUDE MODERADOR
INCLUDE
Extend
AUTENTICAR
FORNECER BASE
MODERADORES
ENVIAR VOTOS PARA A DE DADOS
E ADMIN
BASE DE DADOS CNE
GOVERNAMENTAL
6
Descrição dos casos de uso
7
Caso de uso: Atualizar o tipo de referendo
ID: RF4
Atores: Admin
Pré-condições:
Fluxo de eventos principais:
1 - O admin atualiza os tipos de referendo
Fluxo alternativo:
Exceções:
Pós condições: Tipo de referendo atualizado
Fluxo alternativo:
Exceções:
Fluxo alternativo:
Exceções:
8
Caso de uso: Remover utilizadores
ID: RF6
Atores: Admin
Pré-condições: Despedimento de funcionários (moderadores e admins)
Fluxo de eventos principais:
1 - O admin remove utilizadores ao sistema
Fluxo alternativo:
Exceções:
Pós condições: Utilizadores removidos
9
Caso de uso: Autenticar dos eleitores
ID: RF9
Atores: Moderador
Pré-condições: Os cidadãos têm que apresentar um documento comprovativo de
identidade
Fluxo de eventos principais:
1 - O cidadão chega à mesa de autenticação
Fluxo alternativo:
Exceções:
Pós condições: O cidadão está autenticado e pronto a exercer o seu voto
Fluxo alternativo:
Exceções:
Pós condições: A lista é apresentada ao eleitor
10
Caso de uso: Submeter voto
ID: RF11
Atores: Eleitor, Sistema
Pré-condições: O eleitor deverá votar
Fluxo de eventos principais:
1- Após o eleitor votar, deverá escolher a opção de submeter
Fluxo alternativo: O próprio sistema do quiosque submete o voto após curto período,
caso o eleitor não o faça
Exceções:
Pós condições: O voto é guardado e é impresso o comprovativo de voto.
11
Caso de uso: Autenticar Moderadores e Admin
ID: RF13
Atores: CNE
Pré-condições: Criação de moderadores de diferentes partidos e admin
Fluxo de eventos principais:
1 - Os moderadores e admin são autenticados na base da CNE
Fluxo alternativo:
Exceções:
12
Caso de uso: Imprimir relatórios estatísticos
ID: RF16
Atores: Sistema
Pré-condições: As votações têm de estar encerradas e os votos contados
Fluxo de eventos principais:
1 - A urna imprime relatório estatístico sobre os resultados da votação
Fluxo alternativo:
Exceções:
Pós condições: Relatórios impressos
13
Caso de uso: Provar a consistência
ID: RF18
Atores: Inspetor
Pré-condições:
Fluxo de eventos principais:
1 - O inspetor verifica a consistência dos votos, isto é, verifica se o número de votantes
é igual ao número de votos.
Fluxo alternativo:
Exceções:
14
Diagrama de classes
Cartão de
Pessoa 1 1
TipoPessoa CRUDS
Cidadão
1 1
Eleitor Tempo CNE TipoCNE
1 1
Votação TipoVotacao
or or
1
1
Voto Referendo Eleicao
PartidoCandidatos TipoEleicao
Urna
15
Diagrama de objetos
Cartão de Cidadão
Nif: 12345
Nid:12345
Nsc:12345 Pessoa TipoPessoa
Nus:12345
Nome: Jacinto Leite Id: 420 Eleitor:1
Sexo:M Cne:1
Mês:4 CRUDS
Dia:25
Ano:1974 Id:69
CNE
Id:1
Votomanual:0
Eleitor Tempo Permissaovoto:1 TipoCNE
Id:180 Horadeincio:8
Comprovativodevotacao:1 Horadefecho:19 Moderador:1
Admin:0
Inspetor:0
Votacao
Cicloeleitoral:país TipoVotacao
Localização:Vizela
Questões:0
PartidoCandidato:1
or or
Voto
Referendo Eleicao
Id:74
Escolha:António de Pergunta: Id:2020
Oliveira Salazar Opcoes:
Urna
PartidoCandidatos TipoEle icao
Id:12
Resultado:António Nomecandidato:António Legislativas:0
de Oliveira de de Oliveira Salazar Europeia:0
Salazar Fotocandidato:https:// Autarquica:0
Nvotos:8000000000 bit.ly/35jH6KY Presidencial:1
Partido:AngolaNossa
Pessoa
-id: int
+Pessoa()
+Pessoa(id: int)
+SETid(id: int)
+GETid(): int
+MaiorDeIdade():bool
16
CartãoCidadão
-nif:int
-nid:string
-nsc:int
-nus:int
-nome:string
-sexo:char
-mês:int
-dia:int
-ano:int
+CartaodeCidadao()
+CartaodeCidadao(nif: int, nid: string, nsc: int, nus: int,
nome: string, sexo: char, mês: int, dia: int, ano: int)
+SETdatadenascimento(dia: int,mês: int,ano: int)
+CalcularIdade():int
+GETnif():int
+GETnid():int
+GETnsc():int
+GETnus():int
+GETnome():string
+GETsexo():char
TipoPessoa
-eleitor: boolean
-cne: boolean
+TipoPessoa()
+TipoPessoa(eleitor: boolean, cne: boolean)
+Geteleitor(): boolean
+Getcne(): boolean
+Seteleitor(eleitor: boolean)
+Setcne(eleitor: boolean)
17
Eleitor
-id:int
-comprovativodavotacao: boolean
+Eleitor()
+Eleitor(id: int, comprovativodavotacao: boolean)
+Getid(): int
+Getcomprovativodevotacao(): boolean
+Setid(id:int)
+Setcomprovativodavotacao(comprovativodavotacao:
boolean)
CNE
-id: int
-votomanual: boolean
-permissaovoto: boolean
+CNE()
+CNE(id: int, votomanual: boolean, permissaovoto:
boolena
tipoCNE
-moderador: boolean
-administrador: boolean
-inspetor: boolean
+TipoCNE()
+TipoCNE(moderador: boolean, administrador:
boolean, inspetor: boolean)
+Getmoderador(): boolean
+Getadministrador(): boolean
+Getinspetor(): boolean
18
+Setmoderador(moderador: boolean)
+Setadministrador(administrador: boolean)
+Setinspetor(inspetor: boolean)
CRUDS
-id: int
+CRUDS()
+CRUDS(id:int)
+AdicionarCandidato(): string
+AtualizarCandidato(candidato: string)
+AdicionarReferendo(): string
+AtualizarReferendo(referendo: string)
+RemoverReferendo(referendo: string)
+AdicionarEleitor(): string
+AtualizarEleitor(eleitor)
+AdicionarModerador(): string
+AtualizarModerador(moderador: string)
+AdicionarAdministador(): string
+AtualizarAdministrador(administrador: string)
+AdicionarTipoVotacao(): string
+AtualizarTipoVotacao(tipovotacao: string)
+AdicionarTipoEleicao(): string
+AtualizarTipoEleicao(tipoeleicao: string)
+AdicionarCicloEleitoral(): string
+AtualizarCicloEleitoral(cicloeleitoral: string)
+AtualizarTipoDePerfil(perfil:string)
+AdicionarTipoDePerfil(): string
Tempo
-horadeinicio: float
-horadefecho: float
19
+Tempo()
+Tempo(horadeinicio: float, horadefecho: float)
+Iniciarvotacao(horadeinicio: float)
+Fecharvotacao(horadefecho: float)
+Gethoradeinicio(): float
+Gethoradefecho(): float
+ Sethoradeinicio(horadeinicio: float)
+ Sethoradefecho(horadefecho: float)
Votação
-cicloeleitoral: string
-localizacao: string
+Votacao()
+Votacao(cicloeleitoral: string, localizacao: string)
+Getcicloeleitoral(): string
+Getlocalizacao(): string
+Setcicloeleitoral(cicloeleitoral: string)
+Setlocalizacao(localização: string)
Eleicao
-id: int
+Eleicao()
+Eleicao(id: int)
+Getid(): int
+SETid(id: int)
20
TipoEleicao
-legislativas: boolean
-europeias: boolean
-autarquicas: boolean
-presidenciais: boolean
+TipoEleicao()
+TipoEleicao(legislativas: boolean, europeias:
boolean, autarquicas: boolean, presidenciais: boolean)
+Getlegislativas(): boolean
+Geteuropeias(): boolean
+ Getautarquicas(): boolean
+ Getpresidencias(): boolean
+Setlegislativas(legislativas: boolean)
+Seteuropeias(europeias: boolean
+Setautarquicas(autarquicas: boolean)
+Setpresidenciais(presidenciais: boolean)
Voto
-id: int
-escolha: string
+Voto()
+Voto(int: id, escolha: string)
+Escolha(opções: string)
+GetEscolha(): string
TipoVotacao
-questoes: boolean
-partidocandidatos: boolean
+TipoVotacao()
+TipoVotacao(questões: boolean, partidocandidatos:
boolean)
+Getquestoes(): boolean
+Getpartidocandidatos(): boolean
21
+Setquestoes(partidocandidatos: boolean)
+Setpartidocandidato(partidocandidatos: boolean)
Referendo
-pergunta: string
-opcoes: string
+Referendo()
+Referendo(pergunta: string, opcoes: string)
+GetPergunta(): string
+SetPergunta(pergunta: string)
+GetOpcoes(): string
+SetOpcoes(opcoes: string)
PartidoCandidatos
-nomecandidato: string
-fotocandidato: string
-partido: string
+PartidoCandidato()
+PartidoCandidato(nomecandidato: string,
fotocandidato: string, partido: string)
+GetNomecandidato(): string
+GetFotoCandidato(): string
+GetPartido(): string
+SetNomeCandidato(nomecandidato: string)
+SetFotoCandidato(fotocandidato: string)
+SetPartido(partido: string)
Urna
-id: int
-resultado: string
-nvotos: int
+Urna()
+Urna(id: int, resultado: string, nvotos: int)
22
+ContarVotos(voto: voto)
+Estatitiscas(candidatos[]: PartidoCandidatos, voto:
voto)
+GetId():int
+SetId(id: int)
+GetResultado():string
+SetResultado(resultado: string)
+GetNvotos():int
+SetNvotos(nvotos: int)
Diagramas de atividades
Autenticação
Entregar
Autenticar
documento de
eleitor
indetificação
Dar acesso ao
boletim de voto
23
Votação manual Votação
Eleitor Moderador Eleitor Adminstrador
Escolher a Contabilizar
Autenticação Recolher voto
opção de voto voto
Inserir voto
Voto(num
manualmente Submeter voto
boletim físico)
nos sistemas
Contagem
Adminstrador
Gerar relatório
estatistico
Imprimir
resultados
24
Diagramas de estados
Pessoa Votação
Há Internet?
Autenticar();
true false
true false
Moderador Eleitor
Adminstrador
5. Bibliografia
www.cne.pt
Apontamentos teóricos e acetatos fornecidos pelo professor;
Protocolo de projeto;
25