Android Apps Continuous Integration
Eduardo Carrara
@DuCarrara
Android Developer @ TradeForce
Desafios e Soluções
“Once you stop learning you start dying”
- Albert Einstein
Continuous Integration (CI)
"Sempre que um membro do time fizer um
commit, toda a aplicação deve ser
construída e testada por um conjunto de
testes automatizados; se a build ou testes
falharem o time deve parar e resolver o
problema imediatamente."
Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
Benefícios
Redução de riscos pré-release
Aumento na velocidade e qualidade das entregas
Detecção e correção prematura de bugs
Feedback rápidos aos desenvolvedores time
Antes de Começar...
Tenha um sistema para controle do versionamento
Automatize seu processo de build
Práticas de CI: Desenvolvimento
Faça check in regularmente (diariamente no mínimo)
Sempre esteja pronto para reverter suas alterações
Faça uma gestão adequada do seu ambiente de desenvolvimento
Tente corrigir por um tempo determinado antes de reverter
Práticas de CI: Testes
Crie testes automatizados
Espere o resultado dos testes antes de iniciar uma nova atividade
Sempre rode os testes antes de integrar as alterações
Não comente/desative testes que estão falhando
Práticas de CI: Build
Mantenha o processo de testes e build curtos e rápidos
Nunca vá para casa com uma build quebrada
Não faça check in de uma build quebrada
Assuma a responsabilidade por quebras causadas por suas mudanças
Dicas e Cuidados para Android
Android
Ambiente, API Level e Build Tools
Dependências e Velocidade das Builds
Lint
Automatize o Release e Utilize Ferramentas de Beta
Rode seus Testes
Rode seus testes localmente e no CI
check, connectedAndroidTest, testReleaseUnitTest
As tasks do Gradle são suas amigas
Ferramentas
Um caso
Situação
Legado de ~4 anos com um time novo <1 ano de projeto
Medo de refactoring, baixa cobertura de testes
Github + TeamCity (self hosted)
Falta de visibilidade e rastreabilidade
Ações
Adoção do Git Flow
Uso do Crashlytics Beta
Troca do TeamCity pelo Bitrise.io
Melhoria na cobertura de testes
Desafios & Futuro
Melhorar a cobertura de Testes
Incluir mais ferramentas de análise estática (FindBugs, CheckStyle)
Criar suites de testes de integração e adicioná-los ao Bitrise.io
Pensamentos Finais
Prática simples mas a implementação pode ser complexa
Disciplina e persistência são chave
Android tem suas peculiaridades, fique atento!
“… if you are afraid to change something it is clearly poorly designed.”
- Martin Fowler
Perguntas?
Eduardo Carrara
@DuCarrara
Obrigado!
github.com/ecarrara-araujo
Referências
1. Continuous Integration by Martin Fowler
2. Continuous Integration by ContinuousDelivery.com
3. CI Links by Paul Hammant
4. Large-Scale Continuous Testing in the Cloud by John Penix from Google
5. Continuous Integration: Improving Software Quality and Reducing Risk
6. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment
Automation
7. Why Continuous Integration is so Important by Walmyr Filho
8. Android Apps Continuous Integration (CI) by Eduardo Carrara

Android apps ci

  • 1.
    Android Apps ContinuousIntegration Eduardo Carrara @DuCarrara Android Developer @ TradeForce Desafios e Soluções
  • 2.
    “Once you stoplearning you start dying” - Albert Einstein
  • 3.
  • 4.
    "Sempre que ummembro do time fizer um commit, toda a aplicação deve ser construída e testada por um conjunto de testes automatizados; se a build ou testes falharem o time deve parar e resolver o problema imediatamente." Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation
  • 5.
    Benefícios Redução de riscospré-release Aumento na velocidade e qualidade das entregas Detecção e correção prematura de bugs Feedback rápidos aos desenvolvedores time
  • 6.
    Antes de Começar... Tenhaum sistema para controle do versionamento Automatize seu processo de build
  • 7.
    Práticas de CI:Desenvolvimento Faça check in regularmente (diariamente no mínimo) Sempre esteja pronto para reverter suas alterações Faça uma gestão adequada do seu ambiente de desenvolvimento Tente corrigir por um tempo determinado antes de reverter
  • 8.
    Práticas de CI:Testes Crie testes automatizados Espere o resultado dos testes antes de iniciar uma nova atividade Sempre rode os testes antes de integrar as alterações Não comente/desative testes que estão falhando
  • 9.
    Práticas de CI:Build Mantenha o processo de testes e build curtos e rápidos Nunca vá para casa com uma build quebrada Não faça check in de uma build quebrada Assuma a responsabilidade por quebras causadas por suas mudanças
  • 10.
    Dicas e Cuidadospara Android
  • 11.
    Android Ambiente, API Levele Build Tools Dependências e Velocidade das Builds Lint Automatize o Release e Utilize Ferramentas de Beta
  • 12.
    Rode seus Testes Rodeseus testes localmente e no CI check, connectedAndroidTest, testReleaseUnitTest As tasks do Gradle são suas amigas
  • 13.
  • 15.
  • 16.
    Situação Legado de ~4anos com um time novo <1 ano de projeto Medo de refactoring, baixa cobertura de testes Github + TeamCity (self hosted) Falta de visibilidade e rastreabilidade
  • 17.
    Ações Adoção do GitFlow Uso do Crashlytics Beta Troca do TeamCity pelo Bitrise.io Melhoria na cobertura de testes
  • 18.
    Desafios & Futuro Melhorara cobertura de Testes Incluir mais ferramentas de análise estática (FindBugs, CheckStyle) Criar suites de testes de integração e adicioná-los ao Bitrise.io
  • 19.
    Pensamentos Finais Prática simplesmas a implementação pode ser complexa Disciplina e persistência são chave Android tem suas peculiaridades, fique atento!
  • 20.
    “… if youare afraid to change something it is clearly poorly designed.” - Martin Fowler Perguntas?
  • 21.
  • 22.
    Referências 1. Continuous Integrationby Martin Fowler 2. Continuous Integration by ContinuousDelivery.com 3. CI Links by Paul Hammant 4. Large-Scale Continuous Testing in the Cloud by John Penix from Google 5. Continuous Integration: Improving Software Quality and Reducing Risk 6. Continuous Delivery: Reliable Software Releases through Build, Test, and Deployment Automation 7. Why Continuous Integration is so Important by Walmyr Filho 8. Android Apps Continuous Integration (CI) by Eduardo Carrara