Skip to content

SMA-building-blocks/simple-voting-structure

Repository files navigation

Estrutura de Votação Simples

Autores

Identificação Nome Formação
André Corrêa da Silva André Corrêa da Silva Graduando em Engenharia de Software (UnB)
Gabriel Mariano da Silva Gabriel Mariano da Silva Graduando em Engenharia de Software (UnB)

Tabela 1: Identificação dos Autores

Métricas do Building Block

Lines of Code Duplicated Lines (%) Reliability Rating

Bugs Security Rating Maintainability Rating

SonarQube Cloud

Descrição

O building block contido neste repositório tem por objetivo a implementação de uma Estrutura de Votação Simples, onde é proposto que o agente mediador escolha um valor numérico inteiro dado um intervalo pré-definido e que os agentes votantes busquem, dentro deste intervalo, escolher um número. O agente votante cuja escolha numérica mais se aproximar do valor definido pelo mediador é estabelecido como o vencedor. Há também a possibilidade de empate.

Inicialmente, o agente creator instancia todo o cenário para a execução das atividades do building block, criando os agentes votantes e o mediador das possíveis votações, para além de enviar uma mensagem de start para um agente votante escolhido randomicamente, a qual desencadeará toda a votação que será realizada.

O agente votante, tendo recebido uma mensagem de start por parte do agente creator, envia ao mediador uma mensagem solicitando a realização de uma votação, a qual é respondida pelo mesmo com um código identificador da votação a ser realizada e os valores mínimo e máximo para a eventual escolha dos votos.

O agente votante que solicitou a eleição, tendo recebido as informações iniciais da mesma pelo agente mediator, envia aos demais agentes votantes um convite para a mesma. Todos os agentes participantes da votação se registram nas páginas amarelas (i.e., no DF) com o código recebido, possibilitando assim a identificação de todos os participantes da mesma. O agente votante também se responsabiliza por informar ao mediador o quórum de agentes votantes convidados para a eleição.

Uma vez que todos os agentes votantes tenham se registrado na votação e informado o mesmo ao agente mediador o mesmo, este então solicita os votos a todos os participantes.

Os agentes votantes então escolhem um número randômico dentre o intervalo inicialmente fornecido e o enviam ao mediador. O agente votante que escolher o número mais próximo ao inicialmente escolhido pelo mediador é declarado o vencedor da votação. Há também a possibilidade de empate.

Por fim, o agente mediador informa os vencedores a todos os agentes votantes participantes e se responsabiliza por apagar todas as informações referentes à votação executada, permitindo assim que outras votações sejam requisitadas.

Diagramação

Abaixo, é apresentado o Diagrama de Classes que visa representar a estrutura e organização das classes que compõem o sistema, para além das relações entre estas.

Diagrama de Classes

Figura 1: Diagrama de Classes da Aplicação

Já abaixo, é apresentado o Diagrama de Sequências, o qual busca apresentar os fluxos de interação e algumas de suas nuances entre todas as classes (instanciadas enquanto agentes) da aplicação desenvolvida.

Diagrama de Sequências

Figura 2: Diagrama de Sequências da Aplicação

Projeto em Execução

Abaixo, na Figura 3, são apresentados os agentes participantes da votação através da visualização fornecida pelo sniffer. Nela, é possível ver o agente creator, o agente mediador e os agentes votantes.

Visualização dos Agentes pelo *Sniffer*

Figura 3: Visualização dos Agentes pelo Sniffer

Já na Figura 4, vista abaixo, é possível ver a mensagem de start enviada do agente votante escolhido para o agente mediador, solicitando assim o início de uma votação.

Mensagem de *Start* Solicitando a Realização de uma Votação

Figura 4: Mensagem de Start Solicitando a Realização de uma Votação

Em seguida, na Figura 5, é possível ver a mensagem retornada do mediator para o agente votante com os dados respectivos à votação a ser realizada (i.e., o código identificador da votação e os limiares inferiores e superiores da votação).

Mensagem com as Informações da Votação

Figura 5: Mensagem com as Informações da Votação

Por fim, é apresentado na Figura 6 a mensagem contendo o voto de um dos agentes participantes da votação, enviado ao agente mediator.

Mensagem com o Voto Enviado ao Mediador

Figura 6: Mensagem com o Voto Enviado ao Mediador

Requisitos Técnicos

  1. Criação de votação: mediante solicitação de um agente votante, é esperado que o agente mediador seja capaz de criar uma votação com um código de identificação único no contexto de execução e um intervalo de valores numéricos definido;
  2. Compartilhamento de votação: mediante recebimento do código de votação do mediador, é esperado que o agente votante que solicitou a votação compartilhe esse código com os outros agentes votantes, os quais devem se registrar no DF com o devido código para a efetiva participação na votação;
  3. Solicitação dos votos: após a visualização no DF dos agentes participantes da votação estabelecida, o agente mediador deve solicitar aos mesmos seus votos;
  4. Fornecimento dos votos: os agentes votantes devem, mediante requisição do agente, enviar seus votos ao agente mediador, os quais devem ser compostos por um número dentro do intervalo proposto;
  5. Contabilização do resultado: após o recebimento dos votos de todos os agentes votantes, o agente mediador deve ser capaz de avaliar os votos recebidos e determinar o vencedor da votação ou o empate da mesma;
  6. Informação do resultado: após a contabilização do resultado, o agente mediador deve informar a todos os agentes votantes participantes o resultado da votação;
  7. Deleção da votação: após a realização da votação, o agente mediador se responsabilizará por remover do DF os nomes dos agentes votantes da votação realizada.

Requisitos para Execução

Para a efetiva execução do building block disposto no repositório, se faz necessária a instalação e configuração do software Maven em sua máquina. Para tal, basta seguir as instruções de instalação dispostas na documentação do Maven. Para o desenvolvimento do building block, foi utilizado o Maven na versão 3.8.7. Além disso, todas as instruções de execução consideram o uso de sistemas operacionais baseados em Linux.

Como Executar?

Para a execução do building block, é possível utilizar-se do Makefile adicionado ao repositório ao seguir os seguintes passos:

  • Primeiramente, clone o repositório em sua máquina:
git clone https://github.com/SMA-building-blocks/simple-voting-structure.git
  • Em seguida, vá para a pasta do repositório:
cd simple-voting-structure
  • Para realizar a build do projeto e executá-lo em seguida, execute o seguinte comando:
make build-and-run

🚨 IMPORTANTE: Ao executar o projeto, primeiro será realizada a criação de todos os agentes participantes. Logo após, para a efetiva realização do propósito desejado pelo building block, é necessário pressionar ENTER no terminal para a continuidade da execução do código. Esta decisão foi tomada em prol de uma facilitação do uso do sniffer para a visualização da comunicação entre os agentes participantes.

  • É possível realizar apenas a build do projeto com o seguinte comando:
make build
  • Similarmente, é possível rodar o projeto após a geração de sua build com o seguinte comando:
make run
  • É possível alterar a quantidade de agentes participantes ao passar a variável QUORUM seguida do número desejado, como pode ser visto abaixo (onde N representa o número desejado de agentes):
make build-and-run QUORUM=N
  • Por fim, para apagar os arquivos derivados da build do projeto, execute o seguinte comando:
make clean
  • Para ter acesso a uma série de informações úteis para a execução do building block, basta executar o seguinte comando:
make help

Fontes e Referências

Jade Project.
Maven.

About

Building Block of a Simple Voting Structure under MAS Paradigm

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Contributors 2

  •  
  •