Download - Integração Contínua
Integração ContínuaIntegração ContínuaAs possibilidades da automatizaçãoAs possibilidades da automatização
Victor Hugo GermanoVictor Hugo Germano
Eu? Quem?Eu? Quem?
Victor Hugo GermanoVictor Hugo Germano
● Ciência da Computação – UFSCCiência da Computação – UFSC● Gestão Estratégica de TI – UNIVALIGestão Estratégica de TI – UNIVALI● Audaces Automação IndustrialAudaces Automação Industrial● Colunista da Revista Visão ÁgilColunista da Revista Visão Ágil● Autor: A Maldita ComédiaAutor: A Maldita Comédia● Coding Dojo FloripaCoding Dojo Floripa
http://malditacomedia.blogspot.com
AgendaAgenda
● MitosMitos● PrincípiosPrincípios● O Processo de ICO Processo de IC● Controle de VersãoControle de Versão● TestesTestes● InspeçãoInspeção● ServidoresServidores● FeedbackFeedback● DesafioDesafio
http://malditacomedia.blogspot.com
Def
iniç
ão d
e re
quis
itos
Aná
lise
e D
esig
n
Des
envo
lvim
ento
Tes
te/C
orre
ção
Tempo
Integração de SoftwareIntegração de Software
““No final é só juntar tudo e liberar No final é só juntar tudo e liberar uma versão”uma versão”
Subestimado por:Subestimado por:
● GerentesGerentes
● Desenvolvedores Desenvolvedores
● ClientesClientes
E a realidade?E a realidade?
http://malditacomedia.blogspot.com
Integração de SoftwareIntegração de Software
● Riscos são subestimadosRiscos são subestimados
● Dependências de subsistemasDependências de subsistemas
● Interpretação errada de requisitos Interpretação errada de requisitos
● Incompatibilidade entre interfacesIncompatibilidade entre interfaces
● Testes demoram demaisTestes demoram demais
● Correções demoram mais aindaCorreções demoram mais ainda
● Atrasos tornamse comunsAtrasos tornamse comuns
● O caos está instaladoO caos está instalado
http://malditacomedia.blogspot.com
ComunicaçãoComunicação
http://malditacomedia.blogspot.com
Velocidade + Qualidade + Feedback = Valor de NegócioVelocidade + Qualidade + Feedback = Valor de Negócio
Para o Cliente:Para o Cliente:
● Resultados rápidosResultados rápidos
● Aderência a regras de negócioAderência a regras de negócio
● Funcionamento correto da aplicaçãoFuncionamento correto da aplicação
● Satisfação Satisfação
http://malditacomedia.blogspot.com
Princípios ÁgeisPrincípios Ágeis
Agile Manifesto Principles
● Satisfação do ClienteSatisfação do Cliente como prioridade máxima, através da como prioridade máxima, através da
entrega contínua de valor agregadoentrega contínua de valor agregado
● A principal medida de progresso é A principal medida de progresso é software funcionandosoftware funcionando
● Grupos interdisciplinares trabalham em conjunto com o cliente Grupos interdisciplinares trabalham em conjunto com o cliente
para o sucesso do projetopara o sucesso do projeto
● Equipes autogerenciáveis, indivíduos motivados, comunicação Equipes autogerenciáveis, indivíduos motivados, comunicação
e simplicidade são valores importantese simplicidade são valores importantes
● Melhoria Contínua para maximizar a produtividade e Melhoria Contínua para maximizar a produtividade e
excelência da equipeexcelência da equipe
http://malditacomedia.blogspot.com
Integração Contínua?Integração Contínua?
● Desenvolvedores sincronizam códigos produzidos ao menos Desenvolvedores sincronizam códigos produzidos ao menos
uma vez ao diauma vez ao dia
● Testes garantem a consistência da base de código unificadaTestes garantem a consistência da base de código unificada
● Métricas são aferidasMétricas são aferidas
● Relatórios geradosRelatórios gerados
● Uma versão compilada, testada e pronta para uso é criadaUma versão compilada, testada e pronta para uso é criada
● Qualquer problema na construção da versão possuí Qualquer problema na construção da versão possuí
prioridade máximaprioridade máxima
● O código é constantemente revisado em busca de melhoriasO código é constantemente revisado em busca de melhorias
Paul Duval – Continuous Integration, 2007
O ProcessoO Processo
http://malditacomedia.blogspot.com
ObjetivosObjetivos
● Redução de RiscosRedução de Riscos
● Automatização de processos repetitivosAutomatização de processos repetitivos
● Gerar Software funcionandoGerar Software funcionando
● Ampliar a confiança no produtoAmpliar a confiança no produto
● Ampliar a visibilidade do projetoAmpliar a visibilidade do projeto
http://malditacomedia.blogspot.com
Elementos do ProcessoElementos do Processo
Controle de VersãoControle de Versão
http://malditacomedia.blogspot.com
Ainda existem empresas sem controle de versão!!!Ainda existem empresas sem controle de versão!!!
● CVSCVS● SubversionSubversion● SVKSVK● MercurialMercurial● BazaarBazaar● MonotoneMonotone
Testes AutomatizadosTestes Automatizados
““Desenvolver software sem testes automatizados é irresponsabilidade profissional”Desenvolver software sem testes automatizados é irresponsabilidade profissional”Bob Martin, 2008Bob Martin, 2008
http://malditacomedia.blogspot.com
JunitJunit
<junit fork="yes" printsummary="no" haltonfailure="no"> <batchtest fork="yes" todir="${reports.test}"> <fileset dir="${classesDir}">
<include name="**/*Test.class" /> </fileset> </batchtest> <formatter type="xml" /> <classpath refid="classpath.test" /> </junit> <junitreport todir="${reports.test}"> <fileset dir="${reports.test}">
<include name="TEST*.xml" /> </fileset> <report todir="${reports.test}" /> </junitreport>
SeleniumSelenium
●Grava NavegaçãoGrava Navegação
●Simples de UsarSimples de Usar
●Integração com FirefoxIntegração com Firefox
FitnesseFitnesse Wiki para Testes de AceitaçãoWiki para Testes de Aceitação
Teste!! Teste!! Teste!!Teste!! Teste!! Teste!!
● JMeterJMeter
● HttpUnitHttpUnit
● SQLUnitSQLUnit
● Ejb3UnitEjb3Unit
● DBUnitDBUnit
● dbMonsterdbMonster
http://javasource.net/opensource/testingtoolshttp://javasource.net/opensource/testingtools
Auditoria de códigoAuditoria de código
FindbugsFindbugs
CheckstyleCheckstyle
Padronização:Padronização:
● Convenções de nomenclaturaConvenções de nomenclatura
● Tamanho de métodosTamanho de métodos
● Notação Javadoc Notação Javadoc
● Duplicação de CódigoDuplicação de Código
● Complexidade de branchesComplexidade de branches
Quantas linhas de código são exercitadas por testes automatizados?Quantas linhas de código são exercitadas por testes automatizados?
PMDPMD
● Possíveis Bugs – blocos try/catch/finally/switch vaziosPossíveis Bugs – blocos try/catch/finally/switch vazios● Dead code – variáveis, parametros e métodos não utilizadosDead code – variáveis, parametros e métodos não utilizados● Expressões muito complexas – blocos if desnecessários para Expressões muito complexas – blocos if desnecessários para laços for que poderiam ser laços whilelaços for que poderiam ser laços while● Customização de regras:Customização de regras:
Um grande número de métodos públicos e atributos declarados em uma Um grande número de métodos públicos e atributos declarados em uma classe pode significar que a classe precisa ser quebrada já que um esforço classe pode significar que a classe precisa ser quebrada já que um esforço mais será necessário para testála.mais será necessário para testála.
E como juntar tudo isso??E como juntar tudo isso??
Servidores de BuildServidores de Build
Topa um desafio?Topa um desafio?
Reduza o tempo de criação de uma versão!Reduza o tempo de criação de uma versão!
● Testes unitários realizados Testes unitários realizados
● Documentações geradasDocumentações geradas
● Métricas de qualidade aferidasMétricas de qualidade aferidas
● Script de banco de dados adequado Script de banco de dados adequado
● Testes de integração realizadosTestes de integração realizados
Dúvidas?Dúvidas?