Plano de Gerenciamento de Configuração de Software

editar

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.

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
  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

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
  • 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

Itens de Configuração

editar

Baseline 1.0

editar
  • 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
  • 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

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

Ubuntu/Debian

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

Fedora

editar
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:

cmake_minimum_required(VERSION 2.8)
project(InC CXX)

set(CPPFLAGS "-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -Wextra -Wshadow")
add_definitions(-std=c++11)
set( ROOT "${CMAKE_CURRENT_SOURCE_DIR}" )
set( SRC_DIR "${ROOT}/src")
set( LIB_DIR "${ROOT}/include")

file( GLOB LIBS ${LIB_DIR}/)
file( GLOB LIBS ${LIBS_DIR}/*.h)
include_directories(${LIBS_DIR})
set(CMAKE_CXX_FLAGS ${CPPFLAGS} ${LDFLAGS})
file( GLOB SRCS ${SRC_DIR}/*.cpp)

add_executable(InC ${LIBS_DIR} ${SRCS})

INCLUDE(FindPkgConfig)

PKG_SEARCH_MODULE(SDL2 REQUIRED sdl2)
PKG_SEARCH_MODULE(SDL2_IMAGE REQUIRED SDL2_image)
PKG_SEARCH_MODULE(SDL2_TTF REQUIRED SDL2_ttf)
PKG_SEARCH_MODULE(SDL2_MIXER REQUIRED SDL2_mixer)

INCLUDE_DIRECTORIES(${SDL2_INCLUDE_DIRS} ${SDL2_IMAGE_INCLUDE_DIRS} ${SDL2_TTF_INCLUDE_DIRS} ${SDL2_MIXER_INCLUDE_DIRS})
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

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

Ubuntu/Debian

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

Fedora

editar
sudo yum -y install chef

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

execute 'apt-get update'
## Libary SDL2
execute 'apt-get install -y --force-yes libsdl2-dev libsdl2-image-dev libsdl2-ttf-dev libsdl2-mixer-dev'
## Git for clone
execute 'apt-get install -y --force-yes git'
## Clone project
execute 'git clone https://github.com/ImaginaNaCopa/InC.git'
execute 'cd InC'
## Build essential
execute 'apt-get -y --force-yes install build-essential'
## Cmake for build
execute 'apt-get -y --force-yes install cmake'
## Set compiler g++ for c++ (files *.cpp)
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

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

dependencies:
  pre:
    - if ! chef -v; then
        if ! [ -f chefdk_0.3.5-1_amd64.deb ]; then
          wget https://opscode-omnibus-packages.s3.amazonaws.com/ubuntu/12.04/x86_64/chefdk_0.3.5-1_amd64.deb;
        fi;
        sudo dpkg -i chefdk_0.3.5-1_amd64.deb;
      fi

test:
  override:
    - 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

Para Distros Debian

editar

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

- changelog:

inc (1.01-1) UNRELEASED; urgency=medium

  * Initial release. (Closes: #XXXXXX)

 -- Jonathan Moraes <arkyebr@gmail.com>  Thu, 08 Jun 2017 06:46:04 -0300

- compat:

10

- control:

Source: inc
Section: games
Priority: optional
Homepage: http://github.com/ImaginaNaCopa/InC
Maintainer: Jonathan Moraes <arkyebr@gmail.com>
Standards-Version: 3.9.2
Build-Depends: debhelper (>= 7.0.50~),
 build-essential,
 libsdl2-dev,
 libsdl2-image-dev,
 libsdl2-ttf-dev,
 libsdl2-mixer-dev

Package: inc
Architecture: all
Depends:
 ${shlibs:Depends},
 ${misc:Depends},
 build-essential,
 libsdl2-dev,
 libsdl2-image-dev,
 libsdl2-ttf-dev,
 libsdl2-mixer-dev
Description: Platform/Shooter Game
 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:

#!/usr/bin/make -f
%:
	dh $@

override_dh_auto_install:
	$(MAKE) DESTDIR=$$(pwd)/debian/inc prefix=/usr install

- source/format:

3.0 (native)

- makefile:

# Folders containing files
INCLUDES	:= include
SOURCES		:= src
RESOURCES	:= res
BUILD		:= build

prefix = /usr/local
bindir = $(prefix)/bin
sharedir = $(prefix)/share

# Compiler
export LD := $(CXX)
# Compiler flags
CPPFLAGS=-O2 -g -W -Wall -pedantic -ansi -Wno-long-long -std=c++0x -Wextra -Wshadow
# Linking flags
LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer

# Target program name
TARGET := inc
# Automatically build a list of object files
CPPFILES := $(foreach dir,$(SOURCES),$(notdir $(wildcard $(dir)/*.cpp)))
HPPFILES := $(foreach dir,$(INCLUDES),$(wildcard $(dir)/*.h))
# Object files
export OFILES := $(addprefix $(BUILD)/,$(CPPFILES:.cpp=.o))

# Source files
CPPFILES := $(addprefix $(SOURCES)/,$(CPPFILES))
# Build a list of include paths
export INCLUDE := $(foreach dir,$(INCLUDES), -I$(CURDIR)/$(dir)) -I$(CURDIR)/$(BUILD)

all: main

install: all
	install inc $(DESTDIR)$(bindir)

cr: clean run

run: main
	./$(TARGET)

main:$(OFILES) $(HPPFILES)
	@mkdir -p $(BUILD)
	@echo Linking necessary libraries...
	@$(LD) $(OFILES) $(CPPFLAGS) $(LDFLAGS) -o $(TARGET)
	@echo Built executable "$(TARGET)"

$(BUILD)/%.o:$(SOURCES)/%.cpp
	@mkdir -p $(BUILD)
	@echo Building $^ ...
	@$(LD) $(CPPFLAGS) -c $^ -o $@ $(INCLUDE)

clean:
	@echo Cleaning...
	@rm -rf $(BUILD)/
	@rm -f $(TARGET)
	@rm -f $(TARGET).exe
	@rm -f *.dll
	@rm -f LICENSES.txt

Ferramentas

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