Mind Scape

Fonte: Wikiversidade

Plano de Gerência de Configuração de Software[editar | editar código-fonte]

Introdução[editar | editar código-fonte]

Neste documentos serão descritas as principais atividades a serem realizadas no contexto da disciplina de Gerência de Configuração de Software.

Objetivo[editar | editar código-fonte]

O objetivo do projeto é realizar a aplicação de técnicas, e utilização de ferramentas e conhecimentos aprendidos ao longo da disciplina. Com isto, objetiva-se um melhor aprendizado e melhoria do produto alvo.

Contexto geral[editar | editar código-fonte]

Os projetos serão realizados utilizando como produto os jogos desenvolvidos pelos alunos da Universidade de Brasília, na matéria de Introdução aos Jogos Eletrônicos. Estes jogos, em geral, não tem uma boa Gerência de Configuração de Software, e por este motivo acabam por tornar difícil sua distribuição e instalação, uma vez que é difícil entrar em contato com as equipes que desenvolveram os jogos, e o conhecimento para a utilização dos jogos se perde.

Contexto do projeto[editar | editar código-fonte]

Para este projeto, serão aplicados os conhecimentos de Gerência de Configuração de Software utilizado o jogo MindScape, que está sendo desenvolvido na matéria de Introdução aos Jogos Eletrônicos, no semestre 1.2017.

Escopo[editar | editar código-fonte]

  1. Criar políticas de colaboração: Estabelecer políticas de colaboração a serem utilizadas pelos desenvolvedores, ou outros que estejam interessados em colaborar com o jogo;
  2. Gerar pacote .deb do jogo: Empacotar jogo para distribuições baseadas em Debian;
  3. Gerar pacote .rpm do jogo: Empacotar jogo para distribuições Red Hat;
  4. Estruturar Manual de configuração: Criar na wiki do GitHub, a documentação necessária para facilitar a contribuição e instalação do jogo;

Atividades principais[editar | editar código-fonte]

Criar políticas de colaboração:

  • Criar política de commits
  • Criar politica de utilização de branches

Gerar pacote .deb do jogo:

  • Estudar passos para realização do empacotamento
  • Configurar ambiente virtual para empacotamento
  • Criar pacote .deb do jogo

Gerar pacote .rpm do jogo:

  • Estudar passos para realização do empacotamento rpm
  • Configurar ambiente virtual para empacotamento rpm
  • Criar pacote .rpm do jogo

Estruturar Manual de configuração:

  • Documentar passos para colaboração com o projeto
  • Documentar passos para instalação do jogo

Ferramentas[editar | editar código-fonte]

Ferramenta Função
Git Será utilizado para controle de versão e gerenciamento de mudanças no código fonte do jogo
GitHub É onde será mantido o repositório remoto do projeto e a documentação do jogo
Vagrant + Virtual Box Essas ferramentas serão utilizadas pra criação de ambientes Debian e RedHat, para realização do empacotamento do jogo

Papeis e Responsabilidades[editar | editar código-fonte]

Papel Responsabilidades Responsável
Desenvolvedor Desenvolver o jogo Luan Guimarães, Victor Navarro, Matheus Miranda e Lucas Souza
Gerente de Configuração de Software Analisar necessidades do projeto, Criar plano de GCS e Realizar e monitorar atividades definidas Luan Guimarães e Matheus Miranda
Auditor de Configuração de Software; Validar atividades realizadas e artefatos gerados; Matheus Faria

Cronograma[editar | editar código-fonte]

Data Atividade
24/04/2017 Marco: Apresentação dos planos de GCS dos projetos
26/04/2017 - 01/05/2016 Criar políticas de colaboração
26/04/2017 Criar política de commits
29/04/2017 Criar politica de utilização de branches
02/05/2017 - 19/05/2017 Gerar pacote .deb do jogo
02/05/2017 Estudar passos para realização do empacotamento
10/05/2017 Configurar ambiente virtual para empacotamento
13/05/2017 Criar pacote .deb do jogo
20/05/2017 - 09/06/2017 Gerar pacote .rpm do jogo
20/05/2017 Estudar passos para realização do empacotamento
27/05/2017 Configurar ambiente virtual para empacotamento
29/05/2017 Marco: Andamento dos projetos
01/06/2017 Criar pacote .rpm do jogo
10/06/2017 - 18/06/2017 Estruturar Manual de configuração
10/06/2017 Documentar passos para colaboração com o projeto
13/06/2017 Documentar passos para instalação do jogo
19/06/2017 Marco: Apresentação final dos projetos

Execução do planejamento de Gerência de Configuração de Software[editar | editar código-fonte]

Gerenciamento de repositórios[editar | editar código-fonte]

       Serão mantidos dois repositórios principais dentro da organização no GitHUb:

  • [Este repositório](https://github.com/mind-scape/mindscape), sendo o repositório principal, onde é mantido o código fonte do jogo MindScape, e utilizado para controle de versões e desenvolvimento colaborativo deste.
  • O [repositório de suporte](https://github.com/PlataformaJogosUnB), onde serão mantidos arquivos necessários à configuração de ambientes de desenvolvimento e empacotamento do jogo.

Política de Commits[editar | editar código-fonte]

       Os commits realizados no repositório do projeto deverão seguir o padrão definido abaixo: - Mensagem do commit em inglês, com verbo no infinitivo indicando o propósito do commit. Se necessário, utilizar-se de comentário adicionais.

- Ao commitar utilizar-se da linha de comando $git commit -s. Deve-se também citar, utilizando a menção "Signed-off-by", o nome de usuário e email dos membros que colaboraram com o desenvolvimento do código que está sendo commitado.

Política de Branches[editar | editar código-fonte]

       A branch devel será sempre atualizada a partir da branch master deste repositório. As branchs de desenvolvimento das funcionalidades deverão ser criadas sempre a partir da branch devel. Uma vez que as funcionalidades estejam concluídas deve ser aberto o Pull Request para a branch devel.

       Os Pull Requests só serão integrados à branch devel uma vez que o código desenvolvido tenha sido devidamente revisado por pelo menos outro membro da equipe de desenvolvimento.

       Nos pontos de entrega definidos, será aberto um "Pull Request" da branch devel para a branch master do repositório oficial. Desta forma visa-se garantir a estabilidade da branch master do repositório oficial, que será utilizada para empacotamento do jogo.

Utilização das Branches[editar | editar código-fonte]

       Sempre que um ou mais membros da equipe for começar a trabalhar no desenvolvimento de uma nova funcionalidade ,correção de erros ou melhorias no jogo, deve-se criar uma branch a partir da branch devel, com o padrão definido abaixo:

Padrão para novas funcionalidades:

Nome da branch indicando a funcionalidade a ser desenvolvida, com palavras em minúsculo separadas por underline. Ex: game_mechanics;

Padrão para correção de erros ou melhorias:

       Nome da branch com o formato "issue_x_nome_da_issue", onde 'x' indica o número da issue a que está relacionado o que será desenvolvido, essa issue já deve estar mapeada no repositório. O restante do nome da branch será feito a partir de um breve resumo do nome da issue.

   Ex: issue_10_melhorar_privacidade;

Política de aprovação[editar | editar código-fonte]

       Para que o "Pull Request" das funcionalidades seja devidamente aceito, este deve estar devidamente revisado e conforme os padrões de commit e estilo de código definidos.

Uso das Issues[editar | editar código-fonte]

       Durante o desenvolvimento, deverão ser utilizadas issues para mapear as demandas e as funcionalidades, de modo que cada issue deve ser identificada com labels que facilitem o seu mapeamento com as tarefas e funcionalidades sendo desenvolvidas. Labels podem ser criadas de acordo com as necessidades de utilização. Além disso ,devem ser utilizadas as seguintes labels padrão:

   -Engine;
   -Game;
   -Bug;
   -Extra;
   -Enhancement;

       Desta forma, por exemplo, caso uma issue esteja mapeando um bug relacionado à engine, deve adicionar à ela as tags "Bug" e "Engine".

Ferramentas e configuração de ambientes de desenvolvimento e empacotamento[editar | editar código-fonte]

Para utilizar as configurações de ambiente estabelecidas é necessário primeiramente ter as seguintes dependências instaladas:

  • Ruby
  • Chake
  • Vagrant
  • Virtual Box
  • NFS

Para configuração automatizada do ambiente de desenvolvimento foram utilizPython, com utilização do VirtualEnvPython, com utilização do VirtualEnvadas três ferramentas em conjunto, sendo elas: Chef, Chake e Vagrant. Foi construído um 'cookbook' chef com algumas receitas para configuração direta dos ambientes. Essas receitas quando executadas , por default, realizam a instalação e configuração de um ambiente de desenvolvimento com todas as dependências necessárias à utilização das SDL, a biblioteca gráfica utilizada no desenvolvimento do jogo, e à compilação do jogo. Estas foram feitas de forma genérica de modo que, ao executar a receita, o sistema operacional sendo utilizado é identificado e a correspondente configuração é realizada neste.

Além das receitas de configuração de ambientes de desenvolvimento, também foram desenvolvidas receitas para criação de um ambiente para empacotamento do jogo, uma vez que é interesssante haver um ambiente "limpo" para criação e manutenção de pacotes. Para tal utilização basta que o usuário descomente a linha "- role[packager]" no arquivo nodes.yaml, que diz quais conjuntos de receitas devem ser executados ao convergir cada uma das máquinas. Dentro do 'cookbook packager' foram definidas configurações para instalação das dependências necessárias à realização dos empacotamentos .deb e .rpm.

A criação das máquinas virtuais utilizando o Vagrant é bastante simples e demanda apenas uma linha de comando, já que o arquivo de configuração do Vagrant já está editado com as devidas configurações. Com a máquina virtual criada e 'rodando', é utilizado o Chake para execução das receitas 'remotamente' dentro da VM. O Chake funciona exatamente como uma abstração do ChefServer e permite que receitas possam ser executadas em hosts remotamente, bastando para tal, apenas realizar as corretas configurações deste.

Uma vez instaladas as dependências, deve-se seguir os seguintes passos: Clone o código fonte do jogo

   git clone https://github.com/mind-scape/mindscape.git
   cd mindscape

Caso se deseje utilizar uma máquina debian, seja para desenvolvimento, execução ou empacotamento do jogo. Deve ser setado no Vagrant file a VM debian a ser utilizada na linha 'config.vm.box'.

   Ex: "config.vm.box = debian/jessie64"

Caso se deseje utilizar uma máquina Centos, seja para desenvolvimento, execução ou empacotamento do jogo. Deve ser setado no Vagrant file a VM debian a ser utilizada na linha 'config.vm.box'.

   Ex: "config.vm.box = centos7"

Execute o Vagrantfile, subindo a máquina virtual desejada.

   vagrant up

Saia do diretório atual

   cd ..

Clone o repositório de configuração de ambiente

   git clone https://github.com/mind-scape/development-environment.git
   cd development-environment

Execute os cookbooks chef utilizando o chake

   rake preconfig
   rake clean
   rake converge

Empacotamento RPM[editar | editar código-fonte]

Para fazer o empacotamento .rpm, siga as seguintes instruções:

Acesse o repositório de configuração de ambiente

   cd development-environment

Acesse a máquina virtual

   rake login:devenv

Acesse a pasta compartilhada via NFS onde se encontra o código fonte do jogo

   cd /mnt

Gere uma tag para a versão do software

   git tag v0.0.1 #Ou outra versão com o mesmo padrão de escrita

Execute o script de empacotamento

   ./control.sh package --distro redhat --tag v0.0.1 #Ou outra distro (debian)