Desenvolvendo software com qualidade e agilidade

30
1 Desenvolvendo software com qualidade e agilidade Diogo Augusto Pereira

description

Apresentação de técnicas, processos e ferramentas para a obtenção de maior qualidade e agilidade no desenvolvimento de projetos de software.

Transcript of Desenvolvendo software com qualidade e agilidade

Page 1: Desenvolvendo software com qualidade e agilidade

1

Desenvolvendo software com qualidade e agilidade

Diogo Augusto Pereira

Page 2: Desenvolvendo software com qualidade e agilidade

Tópicos

2

• DevOps

• Continuous Integration

• Continuous Delivery

• Peer review

• Git-flow

• SonarQube

• Métricas e indicadores

Page 3: Desenvolvendo software com qualidade e agilidade

A realidade…

3

Page 4: Desenvolvendo software com qualidade e agilidade

Alguns desafios existentes...

• Setup de ambientes de desenvolvimento e testes.

• Realização de deploys ao longo do projeto.

• Execução de testes de regressão.

• Qualidade e padronização de código.

• Entregas rápidas e assertivas.

4

Page 5: Desenvolvendo software com qualidade e agilidade

Alguns a pontos a considerar...

• Não existe uma solução para todos os problemas.

• É preciso avaliar as prioridades de cada projeto.

• Experiência da equipe.

• Urgência dos problemas.

• Deve ser um processo de melhoria contínua.

• Processos internos, tecnologias adotadas pela empresa, etc.

5

Page 6: Desenvolvendo software com qualidade e agilidade

DevOps

6

Page 7: Desenvolvendo software com qualidade e agilidade

DevOps

•Abrange desenvolvimento de software, operações e serviços de TI.

• Explora a comunicação, colaboração e integração entre as equipes de TI.

•Proporciona entrega de software, teste de qualidade, desenvolvimento, manutenção de release.

•Garante um gerenciamento de releases mais eficaz, com automação de processos e maior flexibilidade.

7

Page 8: Desenvolvendo software com qualidade e agilidade

DevOps e métodos ágeis

8

Page 9: Desenvolvendo software com qualidade e agilidade

DevOps

• Automação de builds:

• Jenkins, Maven, Bamboo, TFS, RTC

• Gerenciamento de configuração:

• Puppet, Chef

• Migração de schemas de banco de dados:

• Flyway

• Provisionamento de ambientes:

• Vagrant, Docker

9

Page 10: Desenvolvendo software com qualidade e agilidade

CI (Continuous Integration)

• Execução contínua de builds e testes unitários.

• Integração constante da versão de desenvolvimento de um produto.

• Pode ocorrer em momentos programados ou a cada commit.

• Garante a estabilidade e saúde do projeto.

10

Page 11: Desenvolvendo software com qualidade e agilidade

CI (Continuous Integration)

• Controle de versão de código.

• Servidor de build.

• Framework de testes unitários.

11

Page 12: Desenvolvendo software com qualidade e agilidade

CD (Continuous Delivery)

• Entrega contínua e automatizada de versões do software.

• Garante velocidade e consistência dos processos.

• Permite releases a cada commit, feature, etc.

• A automação de testes é fundamental: código, funcionais, performance, etc.

12

Page 13: Desenvolvendo software com qualidade e agilidade

CD (Continuous Delivery)

• Controle de versão com processo de branches.

• Servidor de builds e deploys.

• Framework de testes unitários.

13

Page 14: Desenvolvendo software com qualidade e agilidade

CD (Continuous Delivery)

• Gerenciamento de configuração.

• Provisionamento de ambiente.

• Migração de schemas.

• Framework de testes funcionais.

14

Page 15: Desenvolvendo software com qualidade e agilidade

CI & CD

15

Page 16: Desenvolvendo software com qualidade e agilidade

Peer review

• Processo de revisão em pares.

• Revisões rigorosas podem reduzir até 90% de bugs.

• O custo das revisões é menor que o custo dos testes que seriam necessários para encontrar os mesmos erros.

16

Page 17: Desenvolvendo software com qualidade e agilidade

Peer review

Taxa de detecção de defeitos por tipo de inspeção:

• 25% em testes unitários

• 35% em testes funcionais

• 45% em testes de integração

• 55% a 60% em revisões técnicas (código, padrões, arquitetura, etc.)

Fonte: Code Complete, A Practical Handbook of Software Construction - Steve McConnell

17

Page 18: Desenvolvendo software com qualidade e agilidade

Peer review

• Revisões de código não são úteis apenas para encontrar defeitos.

• É um modo de divulgar informações sobre boas práticas de programação, refactorings, etc.

• É uma ferramenta de ensino também!

• É possível aprender e ensinar fazendo peer reviews.

18

Page 19: Desenvolvendo software com qualidade e agilidade

Pull Requests / Peer review

• Code review ou submissão de código para revisão.

• Código somente é integrado após revisão.

• Ferramentas que podem ser usadas:

19

Page 20: Desenvolvendo software com qualidade e agilidade

Git-flow

• Estratégia de branches e gerenciamento de releases.

• Possui biblioteca de sub-comandos git.

• Ferramenta SourceTree compatível com o processo.

• Referência: http://nvie.com/files/Git-branching-model.pdf

20

Page 21: Desenvolvendo software com qualidade e agilidade

Git-flow Branches

• Master: versão de produção.

• Develop: branch de integração.

• Feature: branches de desenvolvimento.

• Release: branches de estabilização de releases.

• Hotfix: branches de correções de erros em produção.

21

Page 22: Desenvolvendo software com qualidade e agilidade

Git-flow Workflow

22

Page 23: Desenvolvendo software com qualidade e agilidade

SonarQube

• Plataforma open source para inspeção de qualidade de código.

• Suporta 20+ linguagens (algumas pagas).

• Históricos e relatórios de métricas:

23

Page 24: Desenvolvendo software com qualidade e agilidade

SonarQube

24

Page 25: Desenvolvendo software com qualidade e agilidade

SonarQube

25

Page 26: Desenvolvendo software com qualidade e agilidade

SonarQube

26

Page 27: Desenvolvendo software com qualidade e agilidade

SonarQube

27

Page 28: Desenvolvendo software com qualidade e agilidade

Métricas e indicadores

28

Indicador Meta% cobertura de testes unitários

> 75%

% conformidade regras (Sonar)

> 95%

% código duplicado < 5%

Page 29: Desenvolvendo software com qualidade e agilidade

Dúvidas

29

Page 30: Desenvolvendo software com qualidade e agilidade

Diogo Augusto Pereira

E-mails:[email protected]@gmail.com

http://br.linkedin.com/in/diogoap82