# EuVou

Repositório:https://github.com/IolaneAndrade/TecProg_2016-01

## Introdução
#### Visão Geral

Trata-se da disciplina responsável por prover um "conjunto de atividades projetadas para controlar as mudanças pela identificação dos produtos do trabalho que serão alterados, estabelecendo um relacionamento entre eles, definindo o mecanismo para o gerenciamento de diferentes versões destes produtos, controlando as mudanças impostas, auditando e relatando as mudanças realizadas."(Software Engineering: A Practitioner's Approach. Pressman,Roger). Dessa forma, a gerência de configuração de software auxilia o desenvolvimento de software com versionamento, controle de mudança e auditoria de configurações, e se faz necessária em qualquer software tal como EuVou.

#### Propósito

O propósito desse documento é apresentar o plano e execução de gerencia de configuração de software no projeto EuVou. O projeto em questão não possui GCS.

#### Problema

Não é possível saber qual é a versão estável do sistema;
* Não são documentadas as versões e suas respectivas localizações do código-fonte;
* Não há controle das modificações que são realizadas;
* Os itens de configuração não são listados ou identificados.

#### Escopo

Serão atendidas as seguintes demandas para o projeto EuVou:
* Implantação de integração contínua;
* Configuração de ambiente virtual de desenvolvimento.

#### Definições, Acrônimos e Abreviações

| Termo | Significado |
| Baseline | É um marco a partir da entrega de um ou mais itens de configuração |
| Build de Software | "É a atividade de combinar versões corretas de itens de configuração de software, utilizando dados de configuração apropriados, em programas executáveis a serem entregues ao cliente ou a outro destinatário, como, por exemplo, a atividade de teste." (SWEBOK, tópico 6-11; 2004). |
| Integração Contínua | "Realizar de forma automatizada builds, ou cópias parciais ou totais de softwares que estão em desenvolvimento, realizando testes unitários, testes de integração, testes funcionais, análise estática de código e outras atividades que a ferramenta em questão possa executar de forma automática para garantir a qualidade do produto." (TARGETTRUST, 2016). |
| GCS | Gerência de Configuração de Software |
| EuVou | Software tratado por este documento. Trata-se de um aplicativo android como angenda cultural. Disponível em: https://github.com/italopaiva/EuVou |
Tabela 1 - glossário básico

## Apresentação do Projeto

EuVou é um aplicativo para dispositivos android usado como agenda cultural, que indica quais os possíveis eventos no momento que oaplicativo foi acessado com base na localização do usuário via GPS. Para informações adicionais acesse o Documento de visão

## Cronograma

| Release | Milestone | Sprint | Período | Atividade | Status |
| 1 | Planejamento | 1 | 19 de setembro a 3 de outubro | Redigir plano de GCS | Realizado |
| 1 | Planejamento | 2 | 26 de setembro a 3 de outubro | Selecionar ferramentas a serem utilizadas | Realizado |
| | | | 3 de outubro | Ponto de controle 1 | Realizado |
| 2 | Integração contínua | 3 | 3 a 10 de outubro | Estudar a ferramenta Travis CI | Realizado |
| 2 | Integração contínua | 3 | 3 a 10 de outubro | Configuração da ferramenta Jenkins para teste . | Realizado |
| 2 | Integração contínua | 4 | 10 a 17 de outubro | Gerar builds periodicamnete trazendo report com a cobertura de código. | Realizado |
| 2 | Integração contínua | 5 | 17 a 24 de outubro | Configuração da ferramenta Jenkins para build do código. | Realizado |
| | | | 24 de outubro | Ponto de controle 2 | Realizado |
| 3 | Máquina virtual | 6 | 24 a 31 de outubro | Instanciar máquina virtual (Vagrant) | Realizado |
| 3 | Máquina virtual | 7 | 31 de outubro a 7 de novembro | Criar script de instalação do Android Studio | Realizado |
| 3 | Máquina virtual | 8 | 7 de novembro a 14 de novembro | Possíveis ajustes | Realizado |
| 3 | Máquina virtual | 9 | 14 de novembro a 21 de novembro | Possíveis ajustes | Realizado |
| | | | 21 de novembro | Entrega final | Realizado |
Tabela 2 - Cronograma

## Instalação do Aplicativo

Para instalar o software EuVou é preciso acessar o Google Play e baixar o aplicativo (https://play.google.com/store/apps/details?id=com.mathheals.euvou&hl=pt_BR)

## Ferramentas

| Ferramenta | Descrição |
| Android Studio IDE | IDE utilizado no desenvolvimento da aplicação. |
| Android SDK Tools | Android Software Development Kit |
| SQLite 3.8.9 | SGBD a ser utilizado no projeto. |
| Travis | Ferramenta de integração contínua. |

## Controle de Configuração
### Procedimentos de mudança

Em engenharia de software é muito comum a necessidade de mudanças durante o desenvolvimento de um projeto afinal os requisitos podem ser atualizados a qualquer momento a fim de garantir qualidade do software. Assim, uma solicitação de mudança deve ser aberta conforme descrito no sub-tópico abaixo.

#### Criação de Solicitação de Mudança

As solicitações de mudanças ou funcionalidades devem ser criadas em forma de issues no próprio repositório remoto do GitHub. A issue criada sempre deve conter um título, uma descrição associada, um tipo (b​ug, ​d​uplicate, enhancement, etc)​, uma milestone associada e uma pessoa responsável.

#### Ciclo de vida das Solicitações de Mudança

As issues devem possuir os seguintes estados: aberta (o​pen) ​e fechada (c​losed)​.
Qualquer membro da equipe pode abrir uma i​ssue,​e da mesma forma qualquer membro da equipe pode tomar para si uma issue a​berta. Quando uma i​ssue a​berta for concluída, deve­-se fecha-­la o mais rápido possível.

#### Integração Contínua

A equipe de Gerência de Configuração deve configurar um servidor Jenkins que irá fazer um build do projeto inteiro a cada push no repositório remoto. O Travis também deve informar a cobertura de código atual a cada build.

## Integração contínua: Travis CI

É uma ferramenta de integração contínua com o intuito de tornar mais rápido atividades como compilação de um projeto e execução de seus testes automatizados. Com o Travis configurado, essas tarefas são executadas a cada mudança no repositório de código e, em caso de erros de compilação ou falhas nos testes automatizados, todos os desenvolvedores são alertados rapidamente.

### Passo-a-passo

* Registre-se no Travis CI usando a conta do GitHub para que o Travis CI se sincronize com seus repositórios;
* Acesse a página https://travis-ci.org/profile/;
* Selecione o repositório em que deseja realizar a build;
* Adicione um arquivo .travis.yml ao repositório. Este arquivo contém as informações sobre como realizar a build.
* É necessário realizar um commit e um push para que o Travis CI realize o build;
* Acesse https://travis-ci.org/ para acompanhar o status do build.

#### .travis.yml

Este é um modelo de script do Travis-ci para android que foi utilizado no projeto EuVou.

## Virtualização: Vagrant
### Instalações necessárias

* Vagrant: instalação pode ser feita através da página de downloads do site oficial: https://www.vagrantup.com/downloads.html.
* Virtualbox: será utilizado por ser free e disponível pra maioria das plataformas:https://www.virtualbox.org/wiki/Downloads

## Primeiros passos

1. Crie a máquina virtual que roda o Ubuntu 12.04 LTS 64-bit.
2. O vagrant up instala cada dependência que o seu projeto precisa e configura cada pasta sincronizada.
Após esses dois comando uma máquina virtual Ubuntu 12.04 LTS de 64 bits isolada, com todos os recursos, será executado em segundo plano.
3. Pode ser solicitado que se faça o login numa conta do servidor HashiCorp's Atlas. Registre-se aqui: https://atlas.hashicorp.com/account/new. E então faça o login:

### Principais comandos

* Redirecionar para um console SSH dentro da máquina virtual: você pode fazer qualquer coisa que gostaria aqui, como a instalação de software, modificação de arquivos, ou mesmo remover todo o sistema de arquivos (HASHIMOTO, 2013).
* Se algo der errado, ou se só quiser recomeçar a partir de uma máquina limpa, utilize o vagrant destroy que remove todos os traços do ambiente de desenvolvimento (HASHIMOTO, 2013).
É comum que o desenvolvedor realize alterações no Vagrantfile. Depois de fazer quaisquer modificações, um reload deve ser chamado. (HASHIMOTO, 2013).