Imagina na Copa

Fonte: Wikiversidade
Saltar para a navegação Saltar para a pesquisa

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

O seguinte plano de gerenciamento de configuração de software descreve os principais objetivos e requisitos do projeto, e quais os passos que serão seguidos para a conclusão do plano.

Tema[editar | editar código-fonte]

Imagina na Copa (InC) é um projeto iniciado e concluído durante a disciplina de Introdução à Jogos Eletrônicos no primeiro semestre de 2014. Tal projeto consolidou um produto: Um jogo plataforma/shooter para um ou dois jogadores.

Entretanto, a distribuição atualmente é feita através da cópia do código fonte do projeto. O usuário que deseja jogar InC deve utilizar da ferramenta make, disponível no repositório do projeto, para compilar e gerar o executável do jogo.

Objetivos[editar | editar código-fonte]

  1. Identificar itens de configuração do projeto
  2. Formalizar estado atual do projeto
  3. Gerar distribuição para Windows, Debian-based e RedHat-based Linux distros

Project Backlog[editar | editar código-fonte]

Duas categorias de requisitos são definidas para este plano: Épicos e Tarefas.

Épicos são conjuntos de tarefas que, ao serem realizadas, agregam grande valor ao projeto. Épicos possuem o prefixo Ei, onde i é o identificador do épico. Tarefas são atividades que, ao serem realizadas, contribuem para o desenvolvimento do épico. Tarefas possuem o prefixo EiTjk, onde i é o identificador do épico de origem, e jk o identificador da tarefa.

  • E1: Criar Método de Gerenciamento de Configuração de InC
 E1T01: Catalogar itens de configuração
 E1T02: Validar itens de configuração
 E1T03: Gerar issues para correção de eventuais discrepâncias
 E1T04: Criar manuais de configuração
 E1T05: Definir suíte de integração contínua
  • E2: Aplicar Método de Gerenciamento de Configuração de InC
 E2T06: Configurar Chef
 E2T07: Aplicar suíte de integração contínua
 E2T08: Desenvolver Cmake
  • E3: Gerar Sistema de Distribuição de InC
 E3T09: Gerar build DEB
 E3T10: Gerar build RPM
 E3T11: Gerar instalador Windows

Roadmap[editar | editar código-fonte]

  • Método de Gerenciamento de Configuração de InC
 Data-Limite: 08/05/2017
 Versão: 1.1
 Tarefas: E1T01, E1T02, E1T03, E1T04, E1T04, E1T05
  • Projeto Configurado e Gerenciado
 Data-Limite: 22/05/2017
 Versão: 1.2
 Tarefas: E1T06, E1T07, E1T08
  • Projeto com Distribuições Prontas
 Data-Limite: 12/06/2017
 Versão: 1.2 STABLE
 Tarefas: E3T09, E3T10, E3T11

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

Itens de Configuração[editar | editar código-fonte]

Baseline 1.0[editar | editar código-fonte]

  • Código-Fonte do Projeto
    • Descrição: Conjunto de arquivos de código que definem o comportamento do sistema e é o insumo para a compilação do código binário do jogo
    • Mantido em: Github
    • Acesso ao estado final: 1.0
    • Última data de atualização: 10/07/2014
    • Mantenedores: Jonathan Moraes e Luciano Almeida
  • Game Design Document
    • Descrição: Documento que descreve com detalhes o jogo, conforme planejado
    • Mantido em: Localmente
    • Acesso ao estado final: Não encontrado
    • Última data de atualização: Não consta
    • Mantenedores: Iago Mendes, Jonathan Moraes, Luciano Almeida
  • Sprites
    • Descrição': Arquivos de imagem que definem os elementos gráficos do jogo
    • Mantido em: Github
    • Acesso ao estado final: 1.0
    • Última data de atualização: 10/07/2014
    • Mantenedores: Jonathan Moraes, Luciano Almeida
  • Sound Effects
    • Descrição': Arquivos de aúdio que definem os elementos de efeitos de aúdio do jogo
    • Mantido em: Github
    • Acesso ao estado final: 1.0
    • Última data de atualização: 09/07/2014
    • Mantenedores: Jonathan Moraes, Luciano Almeida, Lucian Lorens
  • Background Music
    • Descrição': Arquivos de aúdio que definem as músicas de fundo do jogo
    • Mantido em: Github
    • Acesso ao estado final: 1.0
    • Última data de atualização: 10/07/2014
    • Mantenedores: Jonathan Moraes, Luciano Almeida, Lucian Lorens

Baseline 1.01 (Atual)[editar | editar código-fonte]

  • Código-Fonte do Projeto
    • Descrição: Conjunto de arquivos de código que definem o comportamento do sistema e é o insumo para a compilação do código binário do jogo
    • Mantido em: Github
    • Acesso ao estado atual: 1.01
    • Última data de atualização: 05/06/2017
    • Mantenedores: Jonathan Moraes, Laércio Jr.
  • Game Design Document
    • Descrição: Documento que descreve com detalhes o jogo, conforme planejado
    • Mantido em: Github (Wiki)
    • Acesso ao estado atual: 8.0
    • Última data de atualização: 22/05/2017
    • Mantenedores: Jonathan Moraes
  • Sprites
    • Descrição': Arquivos de imagem que definem os elementos gráficos do jogo
    • Mantido em: Github
    • Acesso ao estado atual: 1.0
    • Última data de atualização: 10/07/2014
    • Mantenedores: Jonathan Moraes
  • Sound Effects
    • Descrição': Arquivos de aúdio que definem os elementos de efeitos de aúdio do jogo
    • Mantido em: Github
    • Acesso ao estado atual: 1.0
    • Última data de atualização: 09/07/2014
    • Mantenedores: Jonathan Moraes
  • Background Music
    • Descrição': Arquivos de aúdio que definem as músicas de fundo do jogo
    • Mantido em: Github
    • Acesso ao estado final: 1.0
    • Última data de atualização: 10/07/2014
    • Mantenedores: Jonathan Moraes
  • Documento de Gerência de Configuração do Projeto
    • Descrição: Documento que contempla o planejamento e a execução de gerência de configuração do projeto.
    • Mantido em: Aqui
    • Mantenedores: Jonathan Moraes, Laércio Jr

Deployment[editar | editar código-fonte]

CMake[editar | editar código-fonte]

Primeiramente para rodar o CMake é necessário ter ele instalado, para instalar basta executar os comandos:

Ubuntu/Debian[editar | editar código-fonte]

sudo apt-get update
sudo apt-get install -y --force-yes cmake

Fedora[editar | editar código-fonte]

sudo yum -y install cmake

Após ter executado os comandos de instalação vá até onde foi realizado o clone do projeto "InC", configure compilador para g++.

cd InC
cmake -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_INSTALL_PREFIX:PATH=$(readlink -e $(pwd)/..) ..

No arquivo "CMakeList.txt" irá existir o seguinte arquivo:

 1 cmake_minimum_required(VERSION 2.8)
 2 project(InC CXX)
 3 
 4 set(CPPFLAGS "-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -Wextra -Wshadow")
 5 add_definitions(-std=c++11)
 6 set( ROOT "${CMAKE_CURRENT_SOURCE_DIR}" )
 7 set( SRC_DIR "${ROOT}/src")
 8 set( LIB_DIR "${ROOT}/include")
 9 
10 file( GLOB LIBS ${LIB_DIR}/)
11 file( GLOB LIBS ${LIBS_DIR}/*.h)
12 include_directories(${LIBS_DIR})
13 set(CMAKE_CXX_FLAGS ${CPPFLAGS} ${LDFLAGS})
14 file( GLOB SRCS ${SRC_DIR}/*.cpp)
15 
16 add_executable(InC ${LIBS_DIR} ${SRCS})
17 
18 INCLUDE(FindPkgConfig)
19 
20 PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
21 PKG_SEARCH_MODULE(SDL2_IMAGE REQUIRED SDL2_image)
22 PKG_SEARCH_MODULE(SDL2_TTF REQUIRED SDL2_ttf)
23 PKG_SEARCH_MODULE(SDL2_MIXER REQUIRED SDL2_mixer)
24 
25 INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS} ${SDL2_MIXER_INCLUDE_DIRS})
26 TARGET_LINK_LIBRARIES(InC ${SDL2_LIBRARIES}  ${SDL2_IMAGE_LIBRARIES} ${SDL2_TTF_LIBRARIES} ${SDL2_MIXER_LIBRARIES})

Rode o comando para executar o CMakeList:

cmake .

A saída será algo parecido com:

-- The CXX compiler identification is GNU 4.8.4
-- Check for working CXX compiler: /usr/bin/c++
-- Check for working CXX compiler: /usr/bin/c++ -- works
-- Detecting CXX compiler ABI info
-- Detecting CXX compiler ABI info - done
-- Found PkgConfig: /usr/bin/pkg-config (found version "0.26")
-- checking for one of the modules 'sdl2'
-- checking for one of the modules 'SDL2_image'
-- checking for one of the modules 'SDL2_ttf'
-- checking for one of the modules 'SDL2_mixer'
-- Configuring done
-- Generating done
-- Build files have been written to: /vagrant/InC

Pronto um arquivo Makefile já foi gerado, com isso podemos realizar o build do projeto, com o seguinte comando:

make

Após isso é só executar o jogo com o comando:

./InC

Chef[editar | editar código-fonte]

Primeiramente para rodar o Chef é necessário ter ele instalado, para instalar basta executar os comandos:

Ubuntu/Debian[editar | editar código-fonte]

sudo apt-get update
sudo apt-get install -y --force-yes chef

Fedora[editar | editar código-fonte]

sudo yum -y install chef

A receita está contida no seguinte arquivo (InC-environment.rb):

 1 execute 'apt-get update'
 2 ## Libary SDL2
 3 execute 'apt-get install -y --force-yes libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev'
 4 ## Git for clone
 5 execute 'apt-get install -y --force-yes git'
 6 ## Clone project
 7 execute 'git clone https://github.com/ImaginaNaCopa/InC.git'
 8 execute 'cd InC'
 9 ## Build essential
10 execute 'apt-get -y --force-yes install build-essential'
11 ## Cmake for build
12 execute 'apt-get -y --force-yes install cmake'
13 ## Set compiler g++ for c++ (files *.cpp)
14 execute 'cmake -DCMAKE_CXX_COMPILER=$(which g++) -DCMAKE_C_COMPILER=$(which gcc) -DCMAKE_INSTALL_PREFIX:PATH=$(readlink -e $(pwd)/..) ..'

Para executar a receita digite o seguinte comando:

sudo chef-apply InC-environment.rb

Após o comando ser concluído, o ambiente estará pronto para ser usado.

Continuous Integration[editar | editar código-fonte]

A ferramenta selecionada para a integração contínua é Circle CI. O script da integração pode ser visto à seguir:

 1 dependencies:
 2   pre:
 3     - if ! chef -v; then
 4         if ! [ -f chefdk_0.3.5-1_amd64.deb ]; then
 5           wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.5-1_amd64.deb;
 6         fi;
 7         sudo dpkg -i chefdk_0.3.5-1_amd64.deb;
 8       fi
 9 
10 test:
11   override:
12     - sudo chef-apply InC-environment.rb

Tal script prepara um ambiente Ubuntu para executar receitas Chef e requisita a execução da receita descrita na seção anterior. Se não ocorrer erros, a suíte valida a versão.

Empacotamento[editar | editar código-fonte]

Para Distros Debian[editar | editar código-fonte]

Os arquivos de configuração para distribuições debian pode ser visto na branch debian do projeto, são eles:

- changelog:

1 inc (1.01-1) UNRELEASED; urgency=medium
2 
3   * Initial release. (Closes: #XXXXXX)
4 
5  -- Jonathan Moraes <arkyebr@gmail.com>  Thu, 08 Jun 2017 06:46:04 -0300

- compat:

1 10

- control:

 1 Source: inc
 2 Section: games
 3 Priority: optional
 4 Homepage: http://github.com/ImaginaNaCopa/InC
 5 Maintainer: Jonathan Moraes <arkyebr@gmail.com>
 6 Standards-Version: 3.9.2
 7 Build-Depends: debhelper (>= 7.0.50~),
 8  build-essential,
 9  libsdl2-dev,
10  libsdl2-image-dev,
11  libsdl2-ttf-dev,
12  libsdl2-mixer-dev
13 
14 Package: inc
15 Architecture: all
16 Depends:
17  ${shlibs:Depends},
18  ${misc:Depends},
19  build-essential,
20  libsdl2-dev,
21  libsdl2-image-dev,
22  libsdl2-ttf-dev,
23  libsdl2-mixer-dev
24 Description: Platform/Shooter Game
25  InC is a Platform/Shooter game created using SDL.

- copyright:

This package was Debianized by Jonathan Moraes <arkyebr@gmail.com>,
on Thu Jun 8 08:58:54 BRT 2017.

    This program is free software: you can redistribute it and/or modify
    it under the terms of the GNU General Public License as published by
    the Free Software Foundation, either version 3 of the License, or
    (at your option) any later version.

    This program is distributed in the hope that it will be useful,
    but WITHOUT ANY WARRANTY; without even the implied warranty of
    MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
    GNU General Public License for more details.

    You should have received a copy of the GNU General Public License
    along with this program.  If not, see <http://www.gnu.org/licenses/>.

On Debian GNU/Linux systems, the complete text of the GNU General
Public License can be found in `/usr/share/common-licenses/GPL'.

- rules:

1 #!/usr/bin/make -f
2 %:
3 	dh $@
4 
5 override_dh_auto_install:
6 	$(MAKE) DESTDIR=$$(pwd)/debian/inc prefix=/usr install

- source/format:

1 3.0 (native)

- makefile:

 1 # Folders containing files
 2 INCLUDES	:= include
 3 SOURCES		:= src
 4 RESOURCES	:= res
 5 BUILD		:= build
 6 
 7 prefix = /usr/local
 8 bindir = $(prefix)/bin
 9 sharedir = $(prefix)/share
10 
11 # Compiler
12 export LD := $(CXX)
13 # Compiler flags
14 CPPFLAGS=-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -std=c++0x -Wextra -Wshadow
15 # Linking flags
16 LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer
17 
18 # Target program name
19 TARGET := inc
20 # Automatically build a list of object files
21 CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
22 HPPFILES := $(foreach dir,$(INCLUDES),$(wildcard $(dir)/*.h))
23 # Object files
24 export OFILES := $(addprefix $(BUILD)/,$(CPPFILES:.cpp=.o))
25 
26 # Source files
27 CPPFILES := $(addprefix $(SOURCES)/,$(CPPFILES))
28 # Build a list of include paths
29 export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) -I$(CURDIR)/$(BUILD)
30 
31 all: main
32 
33 install: all
34 	install inc $(DESTDIR)$(bindir)
35 
36 cr: clean run
37 
38 run: main
39 	./$(TARGET)
40 
41 main:$(OFILES) $(HPPFILES)
42 	@mkdir -p $(BUILD)
43 	@echo Linking necessary libraries...
44 	@$(LD) $(OFILES) $(CPPFLAGS) $(LDFLAGS) -o $(TARGET)
45 	@echo Built executable "$(TARGET)"
46 
47 $(BUILD)/%.o:$(SOURCES)/%.cpp
48 	@mkdir -p $(BUILD)
49 	@echo Building $^ ...
50 	@$(LD) $(CPPFLAGS) -c $^ -o $@ $(INCLUDE)
51 
52 clean:
53 	@echo Cleaning...
54 	@rm -rf $(BUILD)/
55 	@rm -f $(TARGET)
56 	@rm -f $(TARGET).exe
57 	@rm -f *.dll
58 	@rm -f LICENSES.txt

Ferramentas[editar | editar código-fonte]

  1. Empacotador RPM - RPM Development Tools
  2. Empacotador DEB - DPKG
  3. Empacotador Windows - NSIS
  4. CMake
  5. Chef
  6. Vagrant