Academia do Arquiteto - Implantando A.L.M. em uma semana!

8,157 views
7,971 views

Published on

Apresentação feita no #TDC2011 para mostrar como é possível migrar para um novo paradgima de desenvolvimento de software com maior qualidade, transparência e gestão ágil do time.

Published in: Technology
1 Comment
25 Likes
Statistics
Notes
No Downloads
Views
Total views
8,157
On SlideShare
0
From Embeds
0
Number of Embeds
579
Actions
Shares
0
Downloads
501
Comments
1
Likes
25
Embeds 0
No embeds

No notes for slide
  • abrir falando: eu estou mais motivado que o normal hoje em dia, pois o progresso da tecnologia tem trazido muitas facilidades para desenvolver softwares e eventualmente criar um business ao redor dele.
  • Academia do Arquiteto - Implantando A.L.M. em uma semana!

    1. 1. Primeiros passos com ALM: Implantando um ambiente ALM em uma semana!
    2. 2. Agenda <ul><li>Introdução </li></ul><ul><li>Redmine </li></ul><ul><li>Maven </li></ul><ul><li>Source Code Management </li></ul><ul><li>Hudson </li></ul><ul><li>Nexus </li></ul>
    3. 3. <ul><ul><ul><li>[email_address] </li></ul></ul></ul><ul><ul><ul><li>@vsenger </li></ul></ul></ul><ul><ul><ul><li>Programador </li></ul></ul></ul><ul><ul><ul><li>Fundador da Globalcode </li></ul></ul></ul><ul><ul><ul><li>Autor de cursos e consultor </li></ul></ul></ul><ul><ul><ul><li>Open-source hardware developer </li></ul></ul></ul><ul><ul><ul><li>Entusiasta da vida: beatles, pizza, vinhos, surf, travessias oceânicas, filhos, código, yoga, home-office, violão, robôs (e $ pra sustentar tudo isso). </li></ul></ul></ul>Vinicius Senger
    4. 4. <ul><li>Application Lifecycle Management: gerenciamento contínuo do software; </li></ul><ul><li>Casamento da gestão de negócio com engenharia de software; </li></ul><ul><li>Requer ferramentas integradas para gerenciar : </li></ul><ul><ul><li>Requisitos; </li></ul></ul><ul><ul><li>Repositório de código; </li></ul></ul><ul><ul><li>Construção integrada; </li></ul></ul><ul><ul><li>Arquitetura e codificação; </li></ul></ul><ul><ul><li>Testes e qualidade; </li></ul></ul><ul><ul><li>Gerenciamento de versões e componentes; </li></ul></ul>A.L.M.
    5. 5. A.L.M. <ul><li>Independente de metodologia, arquitetura e tecnologia TODA EMPRESA PRECISA DE A.L.M. </li></ul><ul><li>Não documentar o futuro (Agile / Scrum) é uma coisa, poder rastrear o passado é outra; </li></ul><ul><li>ALM = é como álbum de fotografia do seu software, com retratos tirados automaticamente a cada mudança, falha, novo requisito, novo release, etc. </li></ul><ul><li>Todo mundo sai ganhando: bom para o developer, gerente, arquiteto, Scrum Master, P.O., V.P., CIO, CTO, Asponi, etc. </li></ul>
    6. 6. <ul><li>Vantagens na adoção: </li></ul><ul><ul><li>Rastreabilidade e dados post-hoc; </li></ul></ul><ul><ul><li>Cultura de planejamento de releases / backlog; </li></ul></ul><ul><ul><li>Gerenciamento integrado; </li></ul></ul><ul><ul><li>Simplificação nos processos; </li></ul></ul><ul><ul><li>Agilidade na construção do software; </li></ul></ul><ul><ul><li>Conseqüente aumento na cultura de testes; </li></ul></ul><ul><ul><li>Aumento da reusabilidade; </li></ul></ul>A.L.M. - vantagens
    7. 7. “ Gerenciar sem backlog é como ser um mecânico que recebe carros para conserto sem que expliquem o problema do carro.” A.L.M. - vantagens
    8. 8. <ul><li>Expõe os ciclos de vida do software, facilitando e motivando sua a gestão: </li></ul><ul><ul><li>Requisitos / Backlog / Atividade / User Story </li></ul></ul><ul><ul><li>Documentação (wiki / files) e suporte (fórum) </li></ul></ul><ul><ul><li>Versionamento, tags, brunches, .. </li></ul></ul><ul><ul><li>Gestão de Componentes e repositórios </li></ul></ul><ul><ul><li>Arquétipos Maven </li></ul></ul><ul><ul><li>Construção </li></ul></ul><ul><ul><li>Testes – Homologação - Produção </li></ul></ul><ul><ul><li>Deployment </li></ul></ul>Gestão de Arquitetura
    9. 9. <ul><li>Pilha A.L.M. open-source que usamos: </li></ul>A.L.M. open-source Disciplina Software Gerenciamento de Requisitos Redmine Gestão de código / versionamento SVN e GIT Construção e dependências Maven Gerenciamento de arquétipos Maven Integração Contínua Hudson Repositório de componentes Nexus Ferramenta para desenvolvimento Eclipse IDE com plugins
    10. 10. <ul><li>oferece esta pilha como SaaS rodando na Amazon </li></ul><ul><li>Mais vantagens ainda: </li></ul><ul><ul><li>Você tem o ambiente montado em 24hs </li></ul></ul><ul><ul><li>Você não vai ganhar novos servidores na sua empresa! </li></ul></ul><ul><ul><li>Softwares atualizados pela ToolsCloud e suporte </li></ul></ul><ul><ul><li>Redmine, SVN, GIT, Hudson, Nexus integrados com LDAP é um enorme diferencial </li></ul></ul>
    11. 11. A.L.M. Novo projeto RedMine SVN Hudson Requisitos Codificação Build & Testes Release Nexus Homologação Produção Bugs e Melhorias 1 2 2 2 5 3 4 6 10 9 8 7 Deployment Contínuo
    12. 12. <ul><li>Testes </li></ul><ul><li>Integração contínua </li></ul><ul><li>Gestão de componentes 3os com Nexus </li></ul>A.L.M. em uma semana
    13. 13. <ul><li>Testes regressivos </li></ul><ul><li>Deployment contínuo básico </li></ul><ul><li>Gestão dos seus próprios componentes com Nexus </li></ul>A.L.M. em um mês
    14. 14. <ul><li>Testes avançados </li></ul><ul><li>Deployment contínuo avançado </li></ul><ul><li>Code review contínuo </li></ul>Depois
    15. 15. <ul><li>Gerenciamento de Requisitos com: </li></ul><ul><ul><li>Gestão de pendências; </li></ul></ul><ul><ul><li>Gerenciamento de horas gastas / time tracking; </li></ul></ul><ul><ul><li>Integração com SCM; </li></ul></ul><ul><ul><li>Conceito de projetos e sub-projetos; </li></ul></ul><ul><ul><li>Fórum, wiki, arquivos, news, calendário, gantt chart e sistema de segurança; </li></ul></ul><ul><li>Software open-source construído em Ruby on Rails; </li></ul><ul><li>Centenas de plug-ins e módulos adicionais; </li></ul><ul><li>Muitas possibilidades de customização; </li></ul>Redmine
    16. 16. <ul><li>Download e Instalação </li></ul><ul><ul><li>www.redmine.org </li></ul></ul><ul><ul><li>Precisa de Ruby 1.8, Rails 2.3.5, Rack 1.0.1, RubyGems 1.8, Rake, i18n, libmysql-ruby, libopenssl-ruby1.8; </li></ul></ul>Redmine
    17. 17. <ul><li>Tela de login do Redmine: </li></ul>Redmine
    18. 18. <ul><li>Após login, temos dois principais itens: Projects, para entrar em um projeto e Administration para config. geral: </li></ul>Redmine Home
    19. 19. DEMONSTRAÇÃO
    20. 20. <ul><li>Temos dezenas de opções de controladores de versões de arquivos no mercado: </li></ul><ul><ul><li>Subversion / SVN </li></ul></ul><ul><ul><li>CVS </li></ul></ul><ul><ul><li>GIT </li></ul></ul><ul><ul><li>Microsft Sourcesafe e TFS </li></ul></ul><ul><ul><li>Borland Starteam </li></ul></ul><ul><ul><li>Clearcase </li></ul></ul>Versionamento
    21. 21. <ul><li>No mundo open-source os destaques são: </li></ul><ul><ul><li>CVS : sistema mais antigo e precário, porém, ainda muito utilizado. Trabalha com protocolo proprietário; </li></ul></ul><ul><ul><li>Subversion : evolução do CVS com disponibilização via HTTP (além de protocolo proprietário) e alta performance para versionamento; </li></ul></ul><ul><ul><li>GIT : mais moderno ainda, por se tratar de um repositório distribuído. Tem muitas vantagens, mas demanda mais conhecimento do usuário; </li></ul></ul>Versionamento
    22. 22. <ul><li>“ Qualidade” dos commits </li></ul><ul><li>Cuidar bem das mensagens </li></ul><ul><li>Independente de decisão, escolha entre SVN e GIT! </li></ul><ul><li>GIT File System? </li></ul><ul><li>Hooks & ALM </li></ul>Versionamento
    23. 23. <ul><li>Subversion é um repositório client / server, não distribuído; </li></ul><ul><li>É mantido pelo grupo Apache: </li></ul><ul><ul><li>subversion.apache.org </li></ul></ul><ul><li>Instalação e administração simples; </li></ul><ul><li>Não requer conhecimentos avançados do usuário; </li></ul><ul><li>Excelente performance para gerar versões / cópias; </li></ul><ul><li>Pode disponibilizar dados por protocolo proprietário ou por HTTP / HTTPS; </li></ul>Introdução ao Subversion
    24. 24. Comandos básicos <ul><li>Adicionar um arquivo ou diretório*: </li></ul><ul><li>svn add <arquivo ou diretorio> </li></ul><ul><li>Remover arquivo ou diretório*: </li></ul><ul><li>svn rm <arquivo ou diretorio> </li></ul><ul><li>Mover arquivo ou diretório*: </li></ul><ul><li>svn mv <arquivo ou diretorio> </li></ul><ul><li>Listar conteúdo do repositório: </li></ul><ul><li>svn ls <URL> </li></ul><ul><li>Reverter alterações locais: </li></ul><ul><li>svn revert <arquivo> </li></ul><ul><li>*Arquivos serão adicionados ou removidos no próximo commit </li></ul>
    25. 25. <ul><li>Convencionalmente trabalhamos com: </li></ul><ul><ul><li>trunk (troco) : uma pasta que contém os arquivos de desenvolvimento do projeto. </li></ul></ul><ul><ul><li>branch (galho) : são linhas concorrentes de desenvolvimento do projeto independentes; </li></ul></ul><ul><ul><li>tag (etiqueta) : são versões releases efetivos de um projeto. </li></ul></ul>Estrutura de trabalho Trunk 1 Branch 2 Tag 3
    26. 26. <ul><li>Distribuído: no lugar de checkout você clona o repositório </li></ul><ul><li>Seus commits são locais, portanto você pode trabalhar offline </li></ul><ul><li>Verbos: add commit log diff status branch merge push </li></ul><ul><li>Entre offline e online vários commits! </li></ul><ul><li>GIT ou Subversion? </li></ul>GIT
    27. 27. <ul><li>O Redmine pode ser integrar com seu sistema de ; </li></ul><ul><li>Para isso, clique nos Settings do Projeto e, em seguida, escolha Repository : </li></ul>Integração com Redmine
    28. 28. <ul><li>Ao vincular o projeto a um repositório você terá algumas integrações; </li></ul><ul><li>Últimas mudanças e commits no item Activities </li></ul>Integração com Redmine
    29. 29. <ul><li>Navegar nos arquivos do SVN via Web clicando no item Repository : </li></ul>Integração com Redmine
    30. 30. <ul><li>E o recurso mais útil é a possibilidade de você referenciar as Issues nas mensagens de commit; </li></ul><ul><ul><li>cd /home/almadmin/projetos-svn/projeto1/trunk </li></ul></ul><ul><ul><li>touch novo-arquivo.txt </li></ul></ul><ul><ul><li>svn commit –m “Correçao de problema de encoding da IssueID #2” </li></ul></ul>Integração com Redmine
    31. 31. <ul><li>Você pode configurar as palavras que serão detectadas nas mensagens de commit em: </li></ul><ul><li>Redmine –> Administration –> Settings -> Repositories </li></ul>Integração com Redmine Configuramos as palavras de referência aqui Fixing keywords podem mudar o status da Issue!
    32. 32. <ul><ul><li>cd /home/almadmin/projetos-svn/projeto1/trunk </li></ul></ul><ul><ul><li>touch novo-arquivo.txt </li></ul></ul><ul><ul><li>svn commit –m “Correçao de problema closes #2” </li></ul></ul>Integração com Redmine
    33. 33. <ul><li>Apresentamos o Redmine com SCM integrado. </li></ul><ul><li>Desta forma podemos ter um time de desenvolvimento compartilhando o mesmo servidor SCM para desenvolver as Issues do projeto; </li></ul><ul><li>Será que isso é o suficiente para nossa necessidade? </li></ul><ul><li>NÃO! Imagine que vários desenvolvedores podem fazer commit de código no fim do dia resultando em um código não-compilável; </li></ul>Integração Continua
    34. 34. <ul><li>Hudson é um servidor open-source de integração continua; </li></ul><ul><li>Um “Continous integration server / CI server” pode desempenhar várias tarefas como: </li></ul><ul><ul><li>Checkout de código-fonte; </li></ul></ul><ul><ul><li>Build e teste; </li></ul></ul><ul><ul><li>Publicação de resultados; </li></ul></ul><ul><ul><li>Comunicação com membros do time; </li></ul></ul><ul><li>Na prática o Hudson é um agendador de tarefas de construção de softwares altamente customizável; </li></ul>Introdução ao Hudson
    35. 35. <ul><li>Fácil instalação e configuração; </li></ul><ul><li>Interface é web based; </li></ul><ul><li>Pode fazer builds distribuídos; </li></ul><ul><li>Relatório de teste unitário; </li></ul><ul><li>Notificação do estado dos builds; </li></ul><ul><li>Notificação em caso de quebra; </li></ul>Introdução ao Hudson
    36. 36. <ul><li>Arquitetura extensível baseada em plugins com mais de 150 de plugins disponíveis; </li></ul><ul><li>Por padrão vem com 4 plugins instalados: </li></ul><ul><ul><li>CVS </li></ul></ul><ul><ul><li>SVN </li></ul></ul><ul><ul><li>Maven </li></ul></ul><ul><ul><li>SSH </li></ul></ul>Introdução ao Hudson
    37. 37. <ul><li>O Hudson pode funcionar de três formas: </li></ul><ul><ul><li>Stand-alone : java –jar hudson.war </li></ul></ul><ul><ul><li>JNLP : https://hudson.dev.java.net/hudson.jnlp </li></ul></ul><ul><ul><li>JavaEE container : fazendo deploy do hudson.war Glassfish, Jboss, Tomcat, Jetty, Winstone, Websphere; </li></ul></ul>Instalação e inicialização
    38. 38. <ul><li>Para acessar o Hudson abra um browser e digite a seguinte URL: http://localhost:8080/hudson-2.0.0 </li></ul>Instalação e inicialização Executores de builds. O Hudson vem com 2 executores de builds por padrão. Configurações do Hudson Membros do Hudson e projetos Relacionamento entre projetos Views customizadas
    39. 39. <ul><li>Para fazer as configurações iniciais devemos clicar em Manage Hudson </li></ul>Configuração
    40. 40. <ul><li>Em seguida Configure System teremos acesso as principais configurações do Hudson: </li></ul>Configuração Representa o no. de executores de builds.
    41. 41. <ul><li>Após a instalação é importante configurar o local onde estão instalados JDK, Maven e Ant (se usar); </li></ul>Configuração
    42. 42. <ul><li>A outra configuração importante é uma conta de e-mail funcionando para o Hudson poder se comunicar com equipes: </li></ul>Configuração
    43. 43. Criando Jobs <ul><li>Basicamente o Hudson pode trabalhar com projetos livres ou Maven; </li></ul><ul><li>Maior parte dos casos utilizamos Maven ou Ant; </li></ul><ul><li>Maven é o mais simples de se usar! </li></ul>
    44. 44. Criando Jobs <ul><li>Em seguida configuramos o job indicando principalmente o repositório para checkout do projeto! </li></ul>
    45. 45. Criando Jobs Podemos clicar em Build Now e Hudson vai iniciar o checkout do código e depois vai disparar o build Maven!
    46. 46. <ul><li>O dashboard traz as informações sobre os diversos jobs / projetos configurados; </li></ul><ul><li>Este ícone indica a estabilidade dos builds: </li></ul>Dashboard
    47. 47. <ul><li>O Maven pode baixar automaticamente bibliotecas da Internet (se open-source); </li></ul><ul><li>Isso é excelente para o desenvolvimento de pequenos times, agora se tivermos um time de 100 desenvolvedores criando projetos Maven que fazem downloads da Internet? </li></ul><ul><li>Fatalmente teremos um problema de rede até que todos os Mavens terminem seus downloads! </li></ul>Introdução Nexus
    48. 48. <ul><li>Para ajudar a solucionar este tipo de problema contamos com Gerenciadores de Repositórios , que desempenham um papel de proxy para os demais: </li></ul>Introdução Nexus Developer Hudson Build com Maven jar : log4j, hibernate, spring etc. Nexus Internet
    49. 49. <ul><li>O Nexus faz o download centralizado dos componentes fazendo um cache que ele utilizará para servir aos demais desenvolvedores; </li></ul><ul><li>Além do papel de cache, o Nexus também pode catalogar o componentes e artefatos da sua empresa, do seu negócio; </li></ul><ul><li>Isso facilita bastante o reuso entre equipes; </li></ul><ul><li>Maven + Nexus + Hudson: parceria perfeita! </li></ul>Introdução ao Nexus
    50. 50. <ul><li>Devemos adicionar esta configuração em um arquivo settings.xml que ficará no diretório .m2 do usuário: </li></ul>Configurando Maven
    51. 51. <ul><li>Para que o Maven possa fazer deployment de artefatos no Nexus: </li></ul>Configurando Maven
    52. 52. Conclusões <ul><li>As ferramentas Maven, Nexus, Hudson, Redmine e Subversion formam uma poderosa solução de ALM; </li></ul><ul><li>Todas as ferramentas são open-source; </li></ul><ul><li>Este ambiente pode funcionar para Delphi, C, C++, Ruby, entre outras plataformas; </li></ul><ul><li>Muitas possibilidades de customização; </li></ul><ul><li>A ToolsCloud oferece este ambiente como serviço da nuvem </li></ul>
    53. 53. Obrigado! <ul><ul><ul><li>[email_address] </li></ul></ul></ul><ul><ul><ul><li>@vsenger </li></ul></ul></ul>

    ×