Votação Bebê Hipoglós Amêndoas 2011 - Analisando o sistema de votação
Leonel Fraga de Oliveira 10/11/2011 14:11
Hotsite Bebê Hipoglós 2011

Olá caro leitor do NM Tech! Você, como desenvolvedor de sistemas, já precisou desenvolver um sistema de votação eletrônica pela Web? Se sim, você já parou para pensar qual seria a carga de acessos deste sistema e uma forma de permitir uma votação segura e confiável?

Algumas amigas minhas inscreveram seus filhos para participarem do Concurso “Bebê Hipoglós 2011”, onde a criança irá ser o “bebê-propaganda” do referido produto. Para votar basta entrar no site http://bebehipoglos2011.com.br/, escolher o bebê, clicar no ícone “Votar”, preencher um captcha e dar OK. Sim, é só isso mesmo.

Ah, Léo.. você fazendo jabá da promoção aqui no NM Tech? Epa, calma lá, rapá! Agora vou responder as duas perguntas que fiz acima: Sim, eu já desenvolvi um sistema de votação eletrônica que era aberto ao público e que a carga era moderada. E a votação era segura e confiável graças a alguns mecanismos que foram implementados.

Continuando no caso do site Bebê Hipoglós 2011, a página da campanha no Facebook (http://www.facebook.com/bebehipoglos) está cheia de comentários negativos à respeito do sistema de votação. Muitas pessoas estão reclamando que o site cai toda hora e que em pouco tempo de promoção existem crianças com mais de 10 mil votos.

Sim, constatei por mim mesmo que o sistema está sobrecarregado, e uma das coisas que me chamaram a atenção nos meus comentários foi:

“Olá pessoal estou desde as 07:15 da manhã consegui votar 511 x na minha filha mas realmente esta muito complicado votar”

Isso mesmo, a MESMA pessoa votando várias vezes em seu bebê. Então COMO as pessoas querem que a votação seja confiável e que o sistema não tenha sobrecarga? Não foi só essa pessoa que teve essa ideota de jênio*, né?

E para votar, como eu disse anteriormente, o sistema pede para preencher um captcha, muito tosco, facilmente decodificável por ferramentas de OCR, e como sabemos, já existem robôs que possuem esta funcionalidade. Com um (um não, vários... muitas pessoas podem ter tido essa idéia) robô desses fazendo várias requisições ao servidor Web, não há estrutura que aguente.

Nenhuma forma de identificação do votante é requerida.

No sistema de eleição que fiz, antes de votar o usuário tinha que preencher seus dados, confirmá-los no sistema e aí sim escolher seu candidato. Tal sistema NÃO permite que o mesmo usuário vote novamente. E mesmo com o cadastro, o voto era computado de forma totalmente anônima, sendo IMPOSSÍVEL saber quem votou em quem.

Por que não implementar, como disse um comentarista no Facebook, um passo onde o usuário registraria alguns dados pessoais e o CPF (obrigatório) antes de votar e permitisse apenas UM voto por CPF? Aí sim aumentaria e muito a confiabilidade do sistema e a farra dos robôs diminuiria bastante. Bloqueio de voto por IP não resolveria, já que muitas casas hoje em dia já contam com uma pequena rede onde a conexão à Internet é compartilhada.

Quer ver como isso é uma coisa SIMPLES de ser implementada? Vou mostrar um modelo básico, com 2 tabelas e os passos necessários (não código) para realizar a votação: image

Veja só: apenas duas tabelas, e não há ligação nenhuma entre elas. Para gravar um voto, crie uma StoredProcedure no banco de dados com os parâmetros de entrada do eleitor (Nome, CPF, Email e o ID do candidato que ele votou) Coloque o modo de isolação de transação no modo Repeatable Read (recomendado), abra uma transação, faça um select no eleitor baseando-se no CPF para verificar se ele já já existe na tabela “Eleitor” (se sim, dispare uma exceção informando a interface desta situação), dê um select no candidato baseando-se no ID passado como entrada (para travar o registro, já que isolamos a transação como Repeatable Read), faça um Update no Candidato, incrementando 1 no campo “QtdVotos”, faça o Insert na tabela Eleitor e dê commit na transação.

Simples assim, não? Ah, e antes que venham com o “Ah, mas o DBA ou outra pessoa pode alterar o campo QtdVotos e tal...”, não estou contando que esta intervenção humana venha a acontecer, por que daí já é caso de Justiça e tal, são outros quinhentos.

Isso vai burocratizar o processo de votação? SIM. E este é o preço a pagar por uma maior confiabilidade no sistema de votação. O que é mais vantajoso para a sua empresa: Um sistema que é um pouco “chato” para votar porém os usuários falam que é confiável ou um totalmente escancarado dando margem para inúmeras reclamações quanto a idoneidade do concurso? Lembrem-se que um comentário negativo viaja milhares de vezes mais rápido que um positivo! E se não fossem pelos comentários negativos (que minhas amigas que inscreveram seus bebês fizeram e fui conferir o sistema), nem escreveria este post!

Eu não me conformo como um sistema que dá uma premiação em dinheiro, mexe com as emoções de milhares de mães/pais que cadastraram seus filhos (sim, porque as crianças ainda não entendem) na expectativa de vê-los em um comercial de TV e se tornarem famosos, ser modelado de uma forma TÃO TOSCA???

Um abraço!!!

*com “J” de JUMENTO :P

Leonel Fraga de Oliveira Leonel Fraga de Oliveira é formado em Processamento de Dados na Faculdade de Tecnologia de São Paulo (FATEC-SP - 2002) e anteriormente em Técnico em Eletrônica, pela ETE Professor Aprígio Gonzaga (lá em 1999).
Atualmente trabalha como Analista de Sistemas na Prefeitura Municipal de São Caetano do Sul - SP
Tem como hobbies DJing (também trabalha como DJ freelancer) e ciclismo, além da manutenção dos sites NeoMatrix Light e NeoMatrix Tech.
Gosta de música eletrônica, tecnologia, cinema (super fã de Jornada nas Estrelas), gastronomia e outras coisas mais.


Compartilhe nas redes sociais

   

Deixe seu comentário

comments powered by Disqus