Total de visualizações de página

segunda-feira, 7 de dezembro de 2015

Resultado Final do Trabalho Prático

O trabalho foi avaliado, principalmente, com relação a aderência a um processo e justificativas das tomadas de decisão para formatação e execução desse processo. Mais do que seguir um "estilo de processo" já definido (XP, SCRUM, RUP, etc) como algo pronto, foi avaliada a capacidade da equipe em moldar seu próprio processo de acordo com as características do trabalho, da equipe e do produto, bem como as dificuldades encontradas durante a execução do mesmo.
Independente do estilo adotado, um conjunto de temas são comuns a todo processo de desenvolvimento de software, tais como: gerencia de requisitos, planejamento e estimativa das atividades, preocupação com testes, adequada documentação, comunicação, gerencia de riscos, etc. A presença/ausência de indícios que demonstrassem o adequado tratamento de tais pontos foi o que mais pesou na avaliação do processo.
Para avaliação desse processo era essencial a adequada documentação de todas as atividades utilizando  o blog. Nesse ponto, muitos grupos falharam, tanto por quantidade, como por qualidade das informações postadas. Outro ponto observado foi a constância/frequência com que esses posts foram realizados. O correto seria o registro das atividades a medida que essas fossem realizadas, com a atualização do blog pelo menos semanalmente (acredita-se que toda semana tenha tido atividade). Entretanto, em alguns casos o que foi observado foi a publicação de vários posts em intervalos curtos, de  um a dois dias, normalmente próximo às apresentações, e semanas sem nenhum registro de atividades.

Por fim, apesar das falhas apontadas anteriormente, foi possível observar o empenho das equipes em se organizar e lidar com os desafios de desenvolver um software em equipe. Mesmo com todas essas dificuldades, conseguiram ao final entregar um produto funcional que atende “minimamente” os requisitos.

*As notas foram divulgadas no moodle.

quinta-feira, 3 de dezembro de 2015

Grupo 5 - A Resistência - Corrida 3 - Relatório Final

Chegamos ao fim da terceira corrida e conseguimos os seguintes resultados a partir dela:

Em relação as histórias de usuário propostas na iteração, foram implementadas as seguintes:

  • Eu, como jogador, desejo que meu desempenho seja salvo a cada nova pontuação.
  • Eu, como jogador, devo poder me cadastras no jogo para ter um perfil com meu desempenho salvo, mostrando meu desempenho e o ponto onde parei.
  • Eu, como jogador, devo me logar ao jogo, para que o sistema carregue meus dados salvos para que eu possa retomar uma partida do ponto onde parei.
  • Eu, como jogador, desejo que a cada pontuação mínima atingida, seja desbloqueado um novo nível do jogo.
  • Eu, como jogador, desejo ver um ranking com a pontuação de todos os jogadores cadastrados.
  • Eu, como jogador, desejo que o jogo seja bem dimensionado em telas de computador, tablets e celulares.
  • Eu, como jogador, poderei jogar em até 5 níveis diferentes
  • Eu como jogador, acesso um jogo que tem um nome

As tarefas foram distribuídas através da ferramenta Trello e podem ser conferidas clicando aqui.

O Trello nos possibilitou verificar o andamento do desenvolvimento do jogo e a verificar quais tarefas foram designadas a cada um dos integrantes, conseguindo verificar o que já estava concluído, em progresso ou pendente.

Foram realizados testes de unidade, e para isso foi utilizado o framework Mocha JS  e a biblioteca de asserções SuperTest, que serve para fazer teste de requisições HTTP em NodeJS. Mais informações sobre o Mocha JS e SuperTest podem ser obtidas acessando estes dois links: Mocha JS e SuperTest. No total foram efetuados 31 testes e todos obtiveram sucesso.

Continuamos realizando muitas refatorações nesta terceira corrida. Foi necessário refatorar a consulta de rotas, o banco de dados, telas, níveis, logins, desafios, etc. para adequar ao novo formato utilizado no desenvolvimento.

Para o controle de versão, continuamos a utilizar o GitHub que pode ser acessado clicando aqui.

O nosso banco de dados foi implementado utilizando SQLite devido ao fato de ser simples de implementar, administras e manter, tirando a necessidade de um SGBD robusto para efetuar estar tarefas.

O diagrama de entidade relacional ficou da seguinte forma:

ER.png

O esquema relacional mapeado a partir dele pode ser visualizado abaixo:

relacional.png

Foram implementados mais 4 níveis, totalizando 5 níveis, 15 desafios, 3 por nível, e um total de 95 palavras-chave como respostas de cada um dos desafios.

A release com o produto final já foi entregue ao cliente e ela pode ser acessada aqui. Vale ressaltar que nosso jogo está online e pode ser acessado no sítio:



A aplicação cliente foi implementada em HTML5, Twitter Bootstrap e AngularJS e a a aplicação backend em NodeJS com ExpressJS e, como dito anteriormente, SQLite3. Para maiores informações, acesse o README do nosso repositório, onde colocamos bastante informações.

9Group - Vídeo Demonstrativo

Vídeo demonstrativo de início ao fim do jogo 9Game.

https://drive.google.com/file/d/0B5gHyBhXw52kYVZ3ekN2ZU1ITUU/view?usp=sharing
Versão para download com melhor resolução

9 Group - Relatório Final




brasao_online.png
Engenharia de Software

Prof. Rodolfo Resende

Grupo 3 - 9Group
Francisco Henrique M. B. Lima
2012049502
Guilherme M. M. de Oliveira
2012049545
Henrique Furtado Machado
2012049618
Henrique Nicolas dos S. Pereira
2012075570
José Ricardo Gonçalves
2012072555
Julio Cesar T. Guimaraes
2012049669
Leandro Noman Ferreira
2012049707
Marina Santos Oliveira
2012049820
Rafael Luís Caldas Almeida
2012072580



Trabalho Prático

Relatório Final



  • Primeira Corrida
História:
O jogo teria várias posições, e os jogadores teriam que responder perguntas referentes à disciplína Engenharia de Software para poder avançar no tabuleiro, com isso o grupo teve como tarefa o levantamento de perguntas com boa qualidade que seriam utilizadas no jogo.
A seguir estão as histórias tomadas inicialmente para a primeira corrida.
Eu, como jogador, devo ter um turno no qual eu posso realizar uma jogada.
Eu, como jogador, no meu turno, posso lançar o dado, mover-me no tabuleiro e responder as perguntas a mim assinaladas.
Eu, como jogador, para receber um Bonus por Acertos Consecutivos (BAC) em pontuação, devo acertar perguntas consecutivamente.
O jogador vencedor será aquele com maior pontuação final.

Tarefas executadas:
  • Criação da reserva de requisitos
  • Reunião com o cliente
  • Criação de prévias, imagens, do tabuleiro
  • Divisão das tarefas em trios e definição dos trios de desenvolvimento
  • Seleção de sites para escolha de perguntas
  • Seleção de perguntas do tema Engenharia de Software
  • Divisão das perguntas por níveis, tendo como critério a porcentagem de acertos disponibilizada nos sites de onde foram selecionadas as perguntas
  • Seleção de 20 perguntas por nível de dificuldade
  • Criação do banco de dados, com as perguntas selecionadas
  • Desenvolvimento de uma fase do jogo


  • Segunda Corrida
    Primeira Metade:
Cada casa do tabuleiro possui associada a ela um tema de engenharia de software e todas as perguntas serão problemas de múltipla escolha com cinco alternativas cada. A associação de casas do tabuleiro e temas de engenharia de software será feita de forma aleatória.
Houve a decisão de dividir o desenvolvimento do jogo no modelo MVC e trabalhar com 3 trios para o desenvolvimento de cada parte, Modelo, visão e controle.

Modelo:
  • Definir a posição atual do jogador;
  • Avançar uma casa no tabuleiro;
  • Retroceder uma casa no tabuleiro (no caso de erro);
  • Voltar ao inicio do tabuleiro;
  • Verificar a resposta certa ou errada, se estiver certo avançar, senão retroceder.

    Visão:
  • Criar o desenho do tabuleiro;
  • Fazer o deslocamento do jogador no tabuleiro (visualmente);
  • Tela para as perguntas e respostas;
  • Enviar resposta do jogador para o controlador;

    Controle:
  • Verificar a resposta do usuário com a resposta correta;
  • Obter nova pergunta
    • se o usuário acertou e não passou de nível, então enviar nova pergunta aleatória;
    • se o usuario acertou e passou de nível, então enviar nova pergunta do próximo nível;
    • se o usuário errou e retrocedeu para o mesmo nível, então enviar nova pergunta aleatória;
    • se o usuário errou e retrocedeu para o nível anterior, então enviar nova pergunta do nível anterior;

Segunda Metade:
Durante o desenvolver da segunda corrida, percebemos que era necessário a modificação de alguns requisitos para que o jogo ficasse interessante para o usuário e que assim o jogador fosse incentivado a aprender mais sobre o tema central.
O jogador não iria retroceder caso errasse a pergunta, porém teria 3 tentativas para cada casa do tabuleiro. Se o jogador não conseguir, terá de reiniciar o jogo.
O jogo comportará um jogador por vez, em vez de ser multiplayer. Cada jogador jogará isoladamente e ao fim do jogo, será ranqueado com outros jogadores e/ou outras partidas jogadas pelo mesmo em função das pontuações.
O jogador terá sua posição indicada no tabuleiro em função da casa atual apresentar uma cor diferente das outras do tabuleiro. E não mais um símbolo ou desenho indicando o jogador no jogo. Haverá assim, três grupos de cores no tabuleiro que indicam as casas já percorridas, a posição presente e as casas ainda não percorridas.
Haverá casas específicas para mudanças de cada nível, localizadas nas curvas do tabuleiro. Na mudança do nível 3 para o 4, a casa de mudança de nível que corresponde a uma encruzilhada terá, em vez de uma pergunta referente ao nível atual, uma questão sobre ética no desenvolvimento de software, no qual dependendo da sua resposta ele seguirá por um caminho diferente. Dependendo da resposta escolhida, o restante do percurso terá bonificações - no caso da resposta ser ética - ou penalizações - caso a resposta escolhida ser antiética.


Requisitos abordados na corrida:
  • Formato tabuleiro
  • Representação Jogador e Sua movimentação (mudança nas cores e o avançar das peças)
  • Mudanças de níveis
  • Encruzilhada
  • Alteração no banco de questões

Histórias da Corrida
Neste jogo irei percorrer um tabuleiro no formato de um 9, começando pela extremidade inferior esquerda.
A cada curva que passo, caso acerte a pergunta de mudança de nível, avanço um nível.
Eu como jogador devo, ao acertar uma questão, avançar para a próxima casal e ter como identificar em qual casa estou e quais casas já passei, através de cores.

Tarefas executadas:
  • Mudanças na reserva de requisitos
  • Remontagem do banco de perguntas reescalonando as dificuldades para os 6 níveis
  • Implementar mudança de cor das casas do tabuleiro, em um esquema de três cores: uma para as casas passadas, uma para a casa atual e uma para as casas não alcançadas.
  • Ação de mover o jogador no tabuleiro
  • Alterar o formato do tabuleiro para o formato do 9 do 9gag
    • O trabalho com um formato como o do 9gag complicaria o produto. Preferimos manter um 9 com curvas de 90 graus e direções vertical e horizontal.





  • Terceira Corrida
Na terceira corrida foram mantidas algumas mudanças da segunda corrida e assim as definições do jogo ficaram baseadas nas histórias abaixo.
Além disso, a forma de pontuação do jogo foi redefinida: ocorrerá com base no tempo gasto para resposta das perguntas durante a partida.

Histórias:
Eu, como jogador, posso selecionar a casa atual e responder a pergunta referente a ela. Caso acerte, passarei para a casa seguinte.
Eu, como jogador, tenho direito a três tentativas para vencer uma casa. A cada tentativa, será sorteada uma nova pergunta.
A cada erro ou desistência da pergunta, haverá uma penalização na pontuação.
Eu, como jogador, posso ver as regras do jogo, os créditos e o ranking sempre que estiver na tela principal.
Eu, como jogador, posso responder a pergunta relacionada à ética como bem entender, sem que isso aumente ou diminua o caminho rumo à casa final.
Eu, como jogador, devo, ao vencer a casa final, fornecer um nome para minha representação no Ranking.

Requisitos abordados na corrida:
  • Definir sistema de tempo;
  • Definir sistema de pontuação, sendo que o tempo será utilizado para a definição do mesmo;
  • Definir como será feita a penalidade, feita ao errar a pergunta da “encruzilhada”, com tema Ética;
  • Definir como o tempo será afetado caso ocorra o erro de alguma pergunta;
  • Definir como o tempo será afetado caso o usuário erre a pergunta sobre Ética, feita na “encruzilhada”;
  • Seleção de perguntas com tema Ética, que serão utilizadas na “encruzilhada”;
  • Modificar o banco de perguntas, acrescentando as perguntas selecionadas sobre Ética;
  • Modificação da tela inicial, que deve conter botões com Ranking, Créditos e Regras do jogo;
  • Criação da tela de créditos;
  • Criação da tela com ranqueamento;
  • Criação da tela Regras do jogo;
  • Definir como será feito o “login”, que será utilizado no discernimento dos usuários na tela de ranqueamento;
  • Criação do Manual do usuário, que será apresentado na tela de Regras do jogo, que deve ser de fácil compreensão e apresentar todos os pontos chave para entendimento de como ocorre o funcionamento do jogo;
  • Dividir tarefas entre os trios de programação;
  • Efetuar todos os teste, mesmo que já o tenha feito, e efetuar a inspeção do código.


Tarefas Executadas:
  • Seleção de perguntas com tema Ética, que serão utilizadas na “encruzilhada”;
  • Modificar o banco de perguntas, acrescentando as perguntas selecionadas sobre Ética;
  • Modificação da tela inicial, que deve conter botões com Ranking, Créditos e Regras do jogo;
  • Criação da tela de créditos;
  • Criação da tela com ranqueamento;
  • Criação da tela Regras do jogo;
  • Definir como será feito o “login”, que será utilizado no discernimento dos usuários na tela de ranqueamento;
  • Criação do Manual do usuário, que será apresentado na tela de Regras do jogo, que deve ser de fácil compreensão e apresentar todos os pontos chave para entendimento de como ocorre o funcionamento do jogo;
  • Definir sistema de tempo;
  • Definir sistema de pontuação, sendo que o tempo será utilizado para a definição do mesmo
  • Definir como será feita a penalidade, feita ao errar a pergunta da “encruzilhada”, com tema Ética;
  • Definir como o tempo será afetado caso ocorra o erro de alguma pergunta;
  • Definir como o tempo será afetado caso o usuário erre a pergunta sobre Ética, feita na “encruzilhada”;

  • Reunião de fechamento
Houve diversas dificuldades no decorrer do projeto. O grande número de integrantes do grupo e a dificuldade de encontrarmos horários em comum para as reuniões, as ferramentas desconhecidas, a divisão das tarefas e o trabalho em equipe foram algumas.
O GitHub, escolhido para o controle de versão dos códigos, era desconhecido pela maioria do grupo. Gerando dificuldades com o seu uso. Com a ajuda do integrante do grupo que era familiarizado com a ferramenta e tutoriais online, conseguimos contornar essa dificuldade.
O Android Studio para Sistema Operacional Linux exigiu tempo para ser instalado, por possuir algumas dependências e pacotes que devem ser instalados para que tudo ocorra de forma esperada. O uso da IDE para o desenvolvimento do jogo foi bem difícil, inicialmente, tanto em função da falta de familiaridade de todos os membros do grupo com o mesmo, quanto em função da falta de conhecimento de alguns sobre a linguagem JAVA.
Nesse trabalho tivemos a oportunidade de nos deparar com um desafio que é desenvolver um projeto de software por um grupo de pessoas. Ao aplicar as metodologias vistas e discutidas em sala de aula, conseguimos facilmente perceber como realmente a engenharia de software se difere de outras engenharias, e como é importante termos conhecimentos dos métodos e processos, além da natureza mutável das formas de desenvolvimento.
Até então os métodos agéis possuem grandes vantagens no que se refere ao desenvolvimento do produto e como ele irá corresponder com o esperado pelo cliente. São, inclusive, para o tempo que tivemos para desenvolvimento, o método mais indicado, pois cada corrida possui um curto espaço de tempo.
Por fim o projeto foi concluido com o resultado muito gratificante por parte de todos os contribuintes, pois colocamos em prática muitos conhecimentos teóricos e aproveitamos a oportunidade de aprender sobre diversos aspectos da Engenharia de Software.

  • Jogabilidade, usabilidade e funcionalidades
O jogo tem tres botões na parte superior, que oferecem acesso ao Ranking, Regras e Créditos, bastando clicar (tocar) em cada um deles para acessar cada uma dessas funcionalidades.
O tabuleiro é composto por casas quadradas dispostas no formato do número 9. A cor verde indica a casa atual, a cor amarela indica as casas ainda não alcançadas e a cor cinza indica as casas já vencidas. O caminho vai da casa no canto esquerdo inferior, imediatamente superior à base, até a casa mais alta e mais à esquerda. Passando, assim, por uma bifurcação onde se encontra a pergunta de ética. Há, então, dois caminhos de mesma extensão da casa inicial à final.
O jogador tem direito a acessar a casa atual e pode fazer isso através de um clique (toque) sobre a mesma. Ao acessá-la, receberá uma pergunta e, caso acerte a resposta, avançará uma casa, vencendo a casa atual e passando a casa atual para a seguinte. Caso erre a resposta, o jogador permanecerá na mesma casa.
Há a opção durante o jogo de desistir da pergunta atual e sortear uma próxima, do mesmo nível. Esta opção é indicada por um botão na tela do jogo onde está o tabuleiro. Caso o jogador decida efetuar esta ação, haverá uma penalização na sua pontuação (no caso no tempo de jogo).
O tempo gasto durante o jogo irá estar disponível apenas ao fim do mesmo. Se durante o andamento do jogo, o jogador acessar outras telas, como a tela de Regras, o tempo parará de ser incrementado, até que o usuário volte à tela onde o tabuleiro está.
Abaixo temos duas imagens de como é a tela do jogo, a primeira é a tela inicial com o tabuleiro, em que a peça cinza é a que o jogador já passou, a verde é a casa atual e as amarelas são as fases que serão jogadas ainda, além disso temos os botões de ranking, regras e créditos que o jogador pode acessar a qualquer momento sem que sua pontuação seja alterada. A segunda imagem é a tela quando a tecla da casa atual é tocada, tem a pergunta e suas alternativas com o botão para enviar a resposta escolhida pelo jogador.