Introdução

editar

Visão Geral

editar

O plano de Gerência de Configuração de Software (GCS) será o guia para implementação das necessidade de GCS no projeto CodeSchool. O projeto consiste no desenvolvimento de uma ferramenta para auxiliar alunos no processo de aprendizagem da disciplina de computação básica. Este visa construir uma plataforma web onde alunos possam interagir com colegas e professores, de modo a facilitar sua capacidade de entendimento durante o período do curso. O projeto conta com alguns módulos que podem ser verificados abaixo:

  • cs\_activities: Reune as atividades propostas pelo professor do curso.
  • cs\_core: Inclui as funcionalidades compartilhadas entre os módulos.
  • cs\_questions: Gerencia a exibição das questões.
  • cs\_auth: Cuida da autenticação, cadastro e manutenção dos usuários.
  • cs\_courses: Gerencia os cursos.

Repositório do projeto

editar

O software CodeSchool pode ser encontrado no link à seguir:

https://github.com/fabiommendes/codeschool.git

Estado atual do projeto

editar

O projeto se encontra em fase inicial de desenvolvimento, por isso ainda não possui muitos processos automatizados. No cenário atual o usuário deve baixar o código do repositório remoto e instalar as dependências utilizando o gerenciador de pacotes pip. Porém, são necessárias outras dependências que devem ser instaladas manualmente como o send\_box. O objetivo desse documento é levantar os principais problemas para criação do ambiente de desenvolvimento e estratégias para solucionar esses problemas.

Propósito

editar

Esse documento tem por objetivo propor um projeto para aplicação de práticas e conceitos de gerência de configuração ao software para o possibilitar que seus desenvolvedores possam estar alinhados com as todas as dependências necessárias do CodeSchool. Esse projeto será desenvolvido durante a disciplina de GCS e tem com principal finalidade contribuir para a melhoria dos processos de desenvolvimento colaborativo do software CodeSchool. Com isso visamos facilitar a criação de ambientes de desenvolvimento em diferentes ambientes e possibilitando uma uniformidade e padronização dos ambientes de desenvolvimento.

Escopo

editar

O software CodeSchool é utilizado como "study case" na disciplina de Programação Web da Faculdade Gama, UnB. Portanto, serão levantados requisitos junto a essa disciplina para o desenvolvimento do projeto possa seguir alinhados com as necessidades da aplicação. Entre as demandas destacadas para atender e facilitar o aprendizado dos alunos da disciplina serão disponibilizadas formas automatizadas de criação de ambiente de desenvolvimento. As principais formas levantadas até o momento e que não se limitam as apresentadas serão:

  • Docker
  • Travis

Cronograma

editar
Sprint Duração Atividade(s) Situação
01 21.04 - 27.04 Levantar informações iniciais, Criar Plano de GCS finalizado
02 28.04 - 04.05 Definir ferramentas para trabalho e parâmetros básicos finalizado
03 05.05 - 11.05 Criação de Docker finalizado
04 12.05 - 18.05 Criação de Docker finalizado
05 19.05 - 25.05 Criação de Docker finalizado
06 26.05 - 01.05 Integração Continua finalizado
07 02.06 - 08.06 Integração Continua finalizado
08 09.06 - 15.06 Integração Continua finalizado
09 16.06 - 21.06
10 22.06 Entrega final

Produtos

editar

Durante a disciplina serão desenvolvidos os seguintes produtos para disponibilização de ambientes de desenvolvimento rápidas e compartilhadas para que o desenvolvedor tenha mais facilidade em manter seu ambiente de trabalho e possa fazer uma recuperação eficiente caso haja necessidade.

Docker

editar

A virtualização simula um ambiente dentro do sistema operacional hospedeiro, assim isola a aplicação do sistema operacional. A vantagem desse recurso é o compartilhamento de recursos físicos entre aplicações. Docker é uma ferramenta que utiliza essa tecnologia para criar ambientes isolados e rodar códigos, ambientes de desenvolvimento e deploy de aplicações. Uma outra vantagem dessa plataforma é a possibilidade de compartilhar esses ambientes através de uma plataforma online. Assim, um usuário pode criar o ambiente virtual e compartilha-lo, sendo uma alteração propagada para todos os outros usuários que possuam esse ambiente. Durante a disciplina será criado um container para o ambiente de desenvolvimento que será disponibilizado no web site: https://hub.docker.com/ que é o repositório central de ambientes. As versões que estão sendo construídas e mantidas podem ser encontradas nesse repositório.

O arquivo abaixo descreve a construção da imagem para o ambiente de desenvolvimento do software Codeschool. A imagem foi construída a partir de uma imagem de Python básica adicionando apenas comandos para a instalação de dependências necessárias para o funcionamento do software Codeschool. O repositório oficial ainda não aceitou a contribuição dos arquivo aqui indicado no código oficial do projeto.

FROM python:3.4-slim
  
COPY freeze-requirements.txt /usr/
  
RUN apt-get update && apt-get install -y  sqlite3 \
                      npm \
                      gettext \
                      gcc
  
RUN pip install --upgrade pip
  
RUN pip install -r /usr/freeze-requirements.txt
  
RUN pip install --no-deps ejudge

RUN npm install -g bower
  
RUN apt-get install -y vim
  
EXPOSE 8000

O desenvolvimento da imagem para o ambiente de virtualização Docker precisa ser atualizada de acordo com as novas dependências que são adicionadas ao projeto, para que a imagem não fique desatualizada e sua manutenção seja bastante simples foi desenvolvido um documento descrevendo a forma de manter e usar a imagem. Uma proposta de melhoria para futuras manutenções é o desenvolvimento de um script capaz de automatizar a geração de novas imagens assim que uma nova dependência for adicionada ao projeto.

Travis

editar

O desenvolvimento descentralizado de projetos requer da gestão de configuração do projeto formas de filtrar as mudanças que serão incorporadas ao código. Uma ferramenta que se responsabilize pela integração contínua das partes que estão sendo adicionadas é a solução mais adequada para o problema em questão. Com essas premissas foi escolhido o Travis-CI para executar tal tarefa. A ferramenta precisa apenas de uma arquivo que especifique como instalar o sofware e suas dependências e aponte os scripts de teste que se deseje executar posteriormente. O arquivo, abaixo, foi desenvolvido e ainda não foi incorporado ao código principal do CodeSchool. O status da build do projeto pode ser acompanhanto aqui.

language: python

python:
  - "3.4"
  - "3.5"

sudo: required 

# command to install dependencies
install:
    - sudo apt-get install npm
    - pip install --upgrade pip 
    - pip install -r requirements.txt
    - pip install --upgrade pytest
    - pip install django-bower    

before_script:
    - npm install -g bower
    
# command to run tests
script:
    - mkdir -p bower
    - tar -zxvf bower_components.tar.gz -C bower/
    - mkdir -p collect/static
    - mkdir -p src/codeschool/bower/
    - tar -zxvf bower_components.tar.gz -C src/codeschool/bower/
    - cd src
    - py.test -runxfail