Escolar Documentos
Profissional Documentos
Cultura Documentos
W W W. D O M I N A N D OT I .CO M . B R W W W. D O M I N A N D OT I .CO M . B R
Acesse nosso site em
WWW.DOMINANDOTI.COM.BR
Curta o Dominando TI no
e receba nossas dicas sobre concursos!
W W W. D O M I N A N D OT I .CO M . B R
Integração Contínua - Conceito
2. Obter token
7. [Opciona]Deploy
7. Compilação e
testes
3. Update
5. Commit
Servidor de IC
1.
Desenvolvimento 6. update
+ compilação+
testes unitários
CruiseControl (open-source)
Hudson X Jenkins
Team Foundation (comercial – Micro$oft)
TeamCity (comecial - Jetbrains)
Rational Team Concert (comercial)
AntHill (comercial)
Continuum (open-source – Apache Foundation)
Bamboo (comercial)
LuntBuild (open-source) X QuickBuild
Professor Marcelo Pacote - @professorpacote 6 W W W. D O M I N A N D OT I .CO M . B R
Integração Contínua - Exemplo
Ten-minute build
Integração em vários estágios
Necessário: compilação, testes de unidade, integração
Secundário: testes de desempenho, carga e estabilidade
Elementos essenciais para IC
Sistema de controle de versão
Construção em dez minutos
Por que um servidor de integração contínua?
Prova que o sistema funciona em qualquer ambiente
Exemplo: commit de um arquivo é esquecido
W W W. D O M I N A N D OT I .CO M . B R W W W. D O M I N A N D OT I .CO M . B R
TDD – Motivação
1. Pense
Novo
Pequenos incrementos por vez teste
2. Vermelho (falha)
Escreva um teste que falha Refatore Falha
3. Verde (sucesso)
Escreva código para passar nos testes Sucesso
4. Refatore
Revise e código e faça melhorias
5. Repita
Reinicie o ciclo. O segredo são os pequenos incrementos.
Professor Marcelo Pacote - @professorpacote 12 W W W. D O M I N A N D OT I .CO M . B R
TDD – Exemplo
Tarefa:
Cálculo de Fatorial
Exemplos:
0! = 1 1! = 1
2! = 2 x 1 = 2 3! = 3 x 2 x 1 = 6
JUnit
assertEquals(“Teste”,”test”); //falha
assertEquals(32, 32); //sucesso
0! é 1
1! é 1
2! é 2
“limpar” o código
Escrever o teste
Teste
xUnit
nome genérico para qualquer estrutura de testes
automáticos unitários.
Junit (java)
Nunit (.net)
TestNG
Exemplos de ferramentas
Mockito
EasyMock
JMock
W W W. D O M I N A N D OT I .CO M . B R W W W. D O M I N A N D OT I .CO M . B R
Refatoração
Vantagens:
Melhora o projeto de software.
Torna o software mais fácil de entender.
Ajuda a encontrar falhas.
Ajuda a programar mais rapidamente.
Momento:
Quando acrescentar funções.
Quando corrigir uma falha.
Quando revisar código.
Código duplicado:
Resultado de copy and paste programming.
Principal problema gerado é a dificuldade de manutenção: alteração em
vários pontos de código.
Também pode ocorrer por duplicação de funcionalidade
Refatoração: extrair classe, extrair método, substituir algoritmo (e outros ...)
Lista de parâmetros longa
Baixa legibilidade
Refatoração: Substituir parâmetros por método, preservar objeto inteiro e
introduzir objeto parâmetro
Alterar o corpo
de um método
com um novo
algoritmo.
Métodos longos
Comandos Switch:
Use polimorfismo.
Hierarquias paralelas de herança.
Ao criar uma subclasse em uma hierarquia é obrigatório a criação de outra
subclasse em outra hierarquia.
Classe ociosa.
Generalidade especulativa.
Atributo temporário.
Cadeia de mensagens .
Intermediário:
Um objeto recorre a outro objeto para responde a uma requisição.
Intimidade inadequada.
Classes alternativas com interfaces diferentes:
Métodos que façam a mesma coisa, mas que tenham assinaturas diferentes.
Biblioteca de classes incompleta.
Introduzir um método em uma classe da biblioteca.
Herança recusada:
Métodos e atributos herdados ficam sem uso
(TJ-PI/2009/FCC/Analista/An. Sistemas) B
(Basa/2012/Cespe/An. Sistemas) certo
(TRE/SP/2012/FCC/Prog. Sistemas) D
(PEFOCE/CE /2012/Cespe/Perito) errado
(Petrobras/2007/Cespe/An. Sistemas) certo
(Bacen/2010/Cesgranrio/Desv ) D
(Petro/2010/Cesgranrio/Proc. Negócio) B
W W W. D O M I N A N D OT I .CO M . B R W W W. D O M I N A N D OT I .CO M . B R
Maven
Super POM
Todos os POMs herdam de algum outro
Ciclos de vida
Sequência de fases que definem a ordem que goals são executados.
Ciclos de vida: clean, default (build) e site
Plugins
Profiles
Configurações que sobrescrevem comportamentos padrão do Maven.
remoto
remoto
Escopo Descrição
compile (default) indica que a dependência está disponível no classpath do
projeto
provided dependência provida pelo JDK ou Container em tempo de execução.
test dependência utilizada apenas por testes (compilação e execução)
runtime Não é necessário para compilação, apenas para execução.
W W W. D O M I N A N D OT I .CO M . B R W W W. D O M I N A N D OT I .CO M . B R
Compondo Métodos (Composing Methods)
int getRating() {
return (moreThanFiveLateDeliveries()) ? 2 : 1;
}
boolean moreThanFiveLateDeliveries() {
return _numberOfLateDeliveries > 5;
}
int getRating() {
return (_numberOfLateDeliveries > 5) ? 2 : 1;
}
if (notSummer(date))
charge = winterCharge(quantity);
else charge = summerCharge (quantity);
double disabilityAmount() {
if (isNotEligableForDisability()) return 0;
// executa algo
double getPayAmount() {
if (_isDead) return deadAmount();
if (_isSeparated) return separatedAmount();
if (_isRetired) return retiredAmount();
return normalPayAmount();
};
Reading lastReading() {
return (Reading) readings.lastElement();
}
Substituir Código de Erro por Exceção - Replace Error Code with Exception
int withdraw(int amount) {
if (amount > _balance) return -1;
else {
_balance -= amount;
return 0;
}
}
Professor Marcelo Pacote - @professorpacote 77 W W W. D O M I N A N D OT I .CO M . B R
Tornando as Chamadas de Métodos mais Simples -
Making Method Calls Simpler
Substituir Exceção por Teste - Replace Exception with Test
double getValueForPeriod (int periodNumber) {
try {
return _values[periodNumber];
} catch (ArrayIndexOutOfBoundsException e) {
return 0;
}
}
Uma classe que excuta várias atividades, pelo menos parte dele
através de declarações condicionais.
Criar uma hierarquia de classes na qual cada subclasse
represente um caso.