Gerenciamento de Configuração: controle de versão, automação de

Propaganda
Gerenciamento de Configuração
Adriano J. Holanda
17/10/2016
Gerenciamento de Configuração
Definição
Gerenciamento de Configuração se refere a um conjunto de
procedimentos para controlar a evolução de um sistema/software.
Tipicamente inclui as seguintes tarefas:
▶
Controle de versão;
▶
Automação da montagem do sistema;
▶
Automação dos testes e rastreio de bugs (bug-tracking);
▶
Controle do lançamento de versões.
Controle de Versão
Sistema de Controle de Versão
Vantagens
▶
Permite mais de um desenvolvedor trabalhar no mesmo
código;
▶
Versões mais antigas são facilmente recuperáveis;
▶
Mantém registro das modificações;
▶
Permite comparação das diferenças entre as versões;
▶
Permite ramificações (branches) e versões múltiplas do
mesmo projeto.
Sistema de Controle de Versão Centralizado
Exemplos: Subversion, CVS, Bazaar,
Computador A
Arquivo
Servidor
Versão 3
Versão 2
Computador B
Arquivo
Versão 1
Fonte: Vídeo do youtube: “Introduction to Git with Scott Chacon of GitHub.”
Sistema de Controle de Versão Distribuído
Exemplos: Git, Mercurial,
Servidor
Computador A
Computador B
Versão 3
Versão 3
Versão 3
Versão 2
Versão 2
Versão 2
Versão 1
Versão 1
Versão 1
Arquivo
Arquivo
Fonte: Vídeo do youtube: “Introduction to Git with Scott Chacon of GitHub.”
Sistema de Controle de Versão Distribuído
Vantagens
▶
Cada desenvolvedor pode ter sua cópia do projeto de software.
▶
Não sobrecarrega a rede a cada alteração e consolidação do
código modificado.
▶
As ramificações (branches) são locais e podem ser fundidas
com o repositório central.
▶
Os desenvolvedores podem compartilhar código entre si antes
de transferir para o repositório central.
Automação da Montagem do Sistema
Automação da Montagem do Sistema
A automação da montagem do sistema permite que tarefas como
compilação e vinculação de bibliotecas dinâmicas, instalação do
software e até mesmo implantação sejam realizadas sem a
intervenção do desenvolvedor, seguindo regras de execução e
ordem de dependências.
As ferramentas mais comuns para a realização destas tarefas são:
▶
GNU make
▶
CMake
▶
Apache Ant
▶
Microsoft.Build
GNU make
Exemplo de arquivo de configuração para o GNU make.
Makefile
objects = main.o kbd.o command.o display.o \
insert.o search.o files.o utils.o
edit : $(objects)
cc -o edit $(objects)
$(objects) : defs.h
kbd.o command.o files.o : command.h
display.o insert.o search.o files.o : buffer.h
Fonte: https://www.gnu.org/software/make/
Apache Ant
Utilizado principalmente em projetos na linguagem Java. Segue
exemplo de arquivo de configuração:build.xml
<project>
<target name="clean">
<delete dir="build"/>
</target>
<target name="compile">
<mkdir dir="build/classes"/>
<javac srcdir="src" destdir="build/classes"/>
</target>
<target name="jar">
<mkdir dir="build/jar"/>
<jar destfile="build/jar/HelloWorld.jar" basedir="build/classes">
<manifest>
<attribute name="Main-Class" value="oata.HelloWorld"/>
</manifest>
</jar>
</target>
<target name="run">
<java jar="build/jar/HelloWorld.jar" fork="true"/>
</target>
</project>
Fonte: http://ant.apache.org/
Automação de testes
Testes de Unidade
▶
Testes são uma forma antiga de assegurar que algumas
alterações no código não tenham modificado a saída esperada
para determinadas funcionalidades.
▶
O Teste de Unidade (Unit Testing) foi definido para ser
parte integrante da metodologia ágil Extreme Programming
(XP), com o objetivo de verificar se as unidades selecionadas
para teste, sejam elas módulos, classes ou métodos, retornam
os resultados esperados após alteração no código. Caso
contrário, a construção do software irá falhar, indicando que
houve inserção de bug.
Exemplo de Teste usando JUnit
1
2
3
4
5
6
7
8
9
public class Calculadora {
public int somar(int x, int y) {
return x + y;
}
public int dividir (int num, int den) {
return num/den;
}
}
Para compilar: $ javac Calculadora.java
Exemplo de Teste usando JUnit, cont.
1
2
import static org. junit .Assert.assertEquals;
import org.junit .Test;
3
4
5
public class TesteCalculadora {
Calculadora calc = new Calculadora();
6
@Test
public void testeSoma() {
int esperado = 7;
int res = calc.somar(3, 4);
assertEquals(”somando␣3␣+␣4”, esperado, res);
}
7
8
9
10
11
12
13
@Test
public void testeDivisao() {
int esperado = 4;
int res = calc. dividir (8, 2);
assertEquals(”dividindo␣8␣/␣2”, esperado, res);
}
14
15
16
17
18
19
20
}
Para compilar:$ javac -cp .:junit-4.12.jar TesteCalculadora.java Calculadora.java
Para executar: $ java -cp .:junit-4.12.jar:hamcrest-core-1.3.jar org.junit.runner.JUnitCore
TesteCalculadora
Download