Application Lifecycle Management
                    Vinicius Senger

@vsenger
                                       Globalcode – Open4education
Agenda

      Introdução a Application Lifecycle Management
      A.L.M. open source
      Arquétipos & A.L.M.
      Demonstrações práticas




 @vsenger
                                          Globalcode – Open4education
Vinicius Senger
        vinicius@globalcode.com.br
        @vsenger
 Fundador da Globalcode
 Programador
        Desenvolvimento e Pesquisas
        Open-source hardware developer
        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).
        Sou beta forever!
 @vsenger
                                                 Globalcode – Open4education
A.L.M.
 • Application Lifecycle Management: gerenciamento
   contínuo do software;
 • Casamento da gestão de negócio com engenharia de
   software;
 • Requer ferramentas integradas para gerenciar:
    Requisitos / backlog / projeto;
    Repositório de código;
    Construção integrada;
    Arquitetura e codificação;
    Testes e qualidade;
    Gerenciamento de versões e componentes;
 @vsenger
                                            Globalcode – Open4education
A.L.M.
 • Independente de metodologia, arquitetura e tecnologia
   TODA EMPRESA PRECISA DE A.L.M.
 • ALM = é como álbum de fotografia do seu software, com
   retratos tirados automaticamente a cada mudança, falha,
   novo requisito, novo release, etc.
 • Maior exposição da T.I. para líderes;
 • Todo mundo sai ganhando!




 @vsenger
                                              Globalcode – Open4education
A.L.M. - vantagens
 • Vantagens na adoção:
    • Rastreabilidade e dados post-hoc;
    • Cultura de planejamento de releases / backlog;
    • Gerenciamento integrado;
    • Simplificação nos processos;
    • Agilidade na construção do software;
    • Conseqüente aumento na cultura de testes;
    • Aumento da reusabilidade;
    • Agilidade na prática!

 @vsenger
                                              Globalcode – Open4education
Gestão de Arquitetura
 • Expõe os ciclos de vida do software, facilitando e
   motivando sua a gestão:
    • Requisitos / Backlog / Atividade / User Story
    • Documentação (wiki / files) e suporte (fórum)
    • Versionamento, tags, brunches, ..
    • Gestão de Componentes e repositórios
    • Arquétipos e Templates de Arquitetura
    • Construção
    • Testes – Homologação - Produção
    • Deployment
 @vsenger
                                                Globalcode – Open4education
A.L.M. open-source
 Gestão de componentes              Nexus
 Gerenciamento de Requisitos        Redmine
 Gestão de código / versionamento   SVN, GIT, ...
 Construção e dependências          Maven / Ant
 Gerenciamento de arquétipos        Maven
 Gestão de componentes              Nexus
 Teste Carga / Regressivo           Jmeter / Selenium

 Inspeção                           Sonar
 Integração Contínua                Jenkins




 @vsenger
                                               Globalcode – Open4education
• Oferece esta pilha como SaaS rodando na Amazon
• Mais vantagens ainda:
   • Você tem o ambiente montado em 24hs
   • Você não vai ganhar novos servidores na sua
     empresa!
   • Softwares atualizados pela ToolsCloud e suporte
   • Redmine, SVN, GIT, Hudson, Nexus integrados com
     LDAP é um enorme diferencial


@vsenger
                                            Globalcode – Open4education
A.L.M.
                         1 Novo projeto


   2 RedMine             2    SVN              2   Hudson


   3 Requisitos          4 Codificação     5 Build & Testes

                                               6 Inspeção
        Bugs
  10 e Melhorias
                                               7   Nexus


            9 Produção         8 Homologação

 @vsenger
            Deployment Contínuo                     Globalcode – Open4education
Redmine
• Gerenciamento de Requisitos com:
    • Gestão de pendências;
    • Gerenciamento de horas gastas / time tracking;
    • Integração com SCM;
    • Conceito de projetos e sub-projetos;
    • Fórum, wiki, arquivos, news, calendário, gantt chart e
      sistema de segurança;
• Software open-source construído em Ruby on Rails;
• Centenas de plug-ins e módulos adicionais;
• Muitas possibilidades de customização;
 @vsenger
                                               Globalcode – Open4education
Redmine
• Download e Instalação
    • www.redmine.org
    • Precisa de Ruby 1.8, Rails 2.3.5, Rack 1.0.1,
      RubyGems 1.8, Rake, i18n, libmysql-ruby, libopenssl-
      ruby1.8;




 @vsenger
                                              Globalcode – Open4education
DEMONSTRAÇÃO




 @vsenger
               Globalcode – Open4education
Versionamento
• Temos dezenas de opções de controladores de versões
  de arquivos no mercado:
    • Subversion / SVN
    • CVS
    • GIT
    • Microsft Sourcesafe e TFS
    • Borland Starteam
    • Clearcase



 @vsenger
                                          Globalcode – Open4education
Versionamento
• No mundo open-source os destaques são:
    • CVS: sistema mais antigo e precário, porém, ainda
      muito utilizado. Trabalha com protocolo proprietário;


    • Subversion: evolução do CVS com disponibilização
      via HTTP (além de protocolo proprietário) e alta
      performance para versionamento;


    • GIT: mais moderno ainda, por se tratar de um
      repositório distribuído. Tem muitas vantagens, mas
      demanda mais conhecimento do usuário;
 @vsenger
                                                Globalcode – Open4education
Versionamento
• “Qualidade” dos commits
• Cuidar bem das mensagens
• GIT File System?
• Hooks & ALM




 @vsenger
                             Globalcode – Open4education
Integração com Redmine
• O Redmine pode ser integrar com seu sistema de ;
• Para isso, clique nos Settings do Projeto e, em seguida,
  escolha Repository:




 @vsenger
                                              Globalcode – Open4education
Integração com Redmine
• Ao vincular o projeto a um repositório você terá algumas
  integrações;
• Últimas mudanças e commits no item Activities




 @vsenger
                                              Globalcode – Open4education
Integração com Redmine
• Navegar nos arquivos do SVN via Web clicando no item
  Repository:




 @vsenger
                                           Globalcode – Open4education
Integração com Redmine
• O recurso mais útil é a possibilidade de você referenciar
  as Issues nas mensagens de commit;

 cd /home/almadmin/projetos-svn/projeto1/trunk
 touch novo-arquivo.txt
 svn commit –m “Correçao de problema de encoding da IssueID #2”




 @vsenger
                                                    Globalcode – Open4education
Integração com Redmine
• Você pode configurar as palavras que serão detectadas
  nas mensagens de commit em:
 Redmine –> Administration –> Settings -> Repositories

                               Configuramos as palavras de referência aqui




                          Fixing keywords podem mudar o status da Issue!
 @vsenger
                                                    Globalcode – Open4education
Integração com Redmine
 cd /home/almadmin/projetos-svn/projeto1/trunk
 touch novo-arquivo.txt
 svn commit –m “Correçao de problema closes #2”




 @vsenger
                                                  Globalcode – Open4education
Maven (Java)
 • Gestão de dependências e build do seu software Java;
 • Obriga a declaração das dependências de JAR's;
 • É uma “clínica de softwares dependentes”;
 • Torna seu projeto Java 100% independente de IDE!
 • Representa o elo entre Integração Continua, gestão de
   componentes, modularidade avançada, testes e +;
 • É chato, mas necessário! Alternativa? Gradle.
 • TODA plataforma tem problemas com dependências!
 • Conceito de arquétipos de projetos é excelente;

 @vsenger
                                               Globalcode – Open4education
Nexus (Java)
 • O Maven pode baixar automaticamente bibliotecas da
   Internet (se open-source);
 • Isso é excelente para o desenvolvimento de pequenos
   times, agora se tivermos um time de 100
   desenvolvedores criando projetos Maven que fazem
   downloads da Internet?
 • Fatalmente teremos um problema de rede até que todos
   os Mavens terminem seus downloads!




 @vsenger
                                            Globalcode – Open4education
Introdução Nexus (Java)
 • Para ajudar a solucionar este tipo de problema contamos
   com Gerenciadores de Repositórios, que
   desempenham um papel de proxy para os demais:

            Developer                      Hudson


                        Build com Maven


               jar: log4j, hibernate, spring etc.


                            Nexus


 @vsenger                   Internet
                                                    Globalcode – Open4education
Introdução ao Nexus (Java)
 • O Nexus faz o download centralizado dos componentes
   fazendo um cache que ele utilizará para servir aos
   demais desenvolvedores;


 • Além do papel de cache, o Nexus também pode
   catalogar o componentes e artefatos da sua empresa, do
   seu negócio;


 • Isso facilita bastante o reuso entre equipes;


 • Maven + Nexus + Hudson: parceria perfeita!
 @vsenger
                                                   Globalcode – Open4education
Configurando Maven (Java)
 • Devemos adicionar esta configuração em um arquivo
   settings.xml que ficará no diretório .m2 do usuário:




 @vsenger
                                              Globalcode – Open4education
Configurando Maven (Java)
 • Para que o Maven possa fazer deployment de artefatos
   no Nexus:




 @vsenger
                                            Globalcode – Open4education
Introdução ao Jenkins
 • Jenkins é um servidor open-source de integração
   continua;
 • Um “Continous integration server / CI server” pode
   desempenhar várias tarefas como:
    • Checkout de código-fonte;
    • Build e teste;
    • Publicação de resultados;
    • Comunicação com membros do time;
 • Na prática o Jenkins é um agendador de tarefas de
   construção de softwares altamente customizável;

 @vsenger
                                               Globalcode – Open4education
Introdução ao Jenkins
 • Fácil instalação e configuração;
 • Interface é web based;
 • Pode fazer builds distribuídos;
 • Relatório de teste unitário;
 • Notificação do estado dos builds;
 • Notificação em caso de quebra;




 @vsenger
                                       Globalcode – Open4education
Introdução ao Jenkins
 • Arquitetura extensível baseada em plugins com mais de
   150 de plugins disponíveis;
 • Por padrão vem com 4 plugins instalados:
    • CVS
    • SVN
    • Maven
    • SSH




 @vsenger
                                              Globalcode – Open4education
Instalação e inicialização
 • O Hudson pode funcionar de três formas:
    • Stand-alone: java –jar hudson.war


    • JNLP: https://hudson.dev.java.net/hudson.jnlp


    • JavaEE container: fazendo deploy do hudson.war
      Glassfish, Jboss, Tomcat, Jetty, Winstone,
      Websphere;



 @vsenger
                                              Globalcode – Open4education
Configuração
 • Para fazer as configurações iniciais devemos clicar em
   Manage Hudson




 @vsenger
                                               Globalcode – Open4education
Configuração
 • Em seguida Configure System teremos acesso as
   principais configurações do Hudson:




  Representa o no. de
  executores de builds.
 @vsenger
                                          Globalcode – Open4education
Configuração
 • Após a instalação é importante configurar o local onde
   estão instalados JDK, Maven e Ant (se usar);




 @vsenger
                                               Globalcode – Open4education
Configuração
 • A outra configuração importante é uma conta de e-mail
   funcionando para o Hudson poder se comunicar com
   equipes:




 @vsenger
                                              Globalcode – Open4education
Dashboard
• O dashboard traz as informações sobre os diversos jobs /
  projetos configurados;
• Este ícone indica a estabilidade dos builds:




 @vsenger
                                                 Globalcode – Open4education
Selenium
• Testes regressivos de aplicativos Web;
• Capaz de abrir diferentes navegadores, entrar com dados
  em formulários e analisar a resposta;
• Selenium IDE: plug-in para firefox que permite gravar
  scripts de testes;
• Selenium WebDriver: API Java para executar scripts
• Selenium Server: testes remotos
• Selenese: DSL para simulação
• DEMO


 @vsenger
                                              Globalcode – Open4education
Arquétipo
• Representa o template de arquitetura;
• Contém os principais elementos de arquitetura;
• Gestão de arquétipos é muito importante para grande
  cenários multi-arquitetura;
• Com maven podemos escolher centenas de diferentes
  arquétipos existentes:
   – mvn archetype:generate




 @vsenger
                                              Globalcode – Open4education
Conclusões

 • Tem que ser gostoso modularizar, implantar, testar,
   integrar, simular!
 • Todas as ferramentas apresentadas são open-source;
 • Podem funcionar com Delphi, C, C++, Ruby, entre outras
   plataformas;
 • Muitas possibilidades de customização;
 • Para pessoal de Java,




 @vsenger
                                              Globalcode – Open4education
Obrigado!
 vinicius@globalcode.com.br
 @vsenger




 @vsenger
                              Globalcode – Open4education

Introdução a Application Life-cycle Management Open Source

  • 1.
    Application Lifecycle Management Vinicius Senger @vsenger Globalcode – Open4education
  • 2.
    Agenda Introdução a Application Lifecycle Management A.L.M. open source Arquétipos & A.L.M. Demonstrações práticas @vsenger Globalcode – Open4education
  • 3.
    Vinicius Senger vinicius@globalcode.com.br @vsenger Fundador da Globalcode Programador Desenvolvimento e Pesquisas Open-source hardware developer 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). Sou beta forever! @vsenger Globalcode – Open4education
  • 4.
    A.L.M. • ApplicationLifecycle Management: gerenciamento contínuo do software; • Casamento da gestão de negócio com engenharia de software; • Requer ferramentas integradas para gerenciar: Requisitos / backlog / projeto; Repositório de código; Construção integrada; Arquitetura e codificação; Testes e qualidade; Gerenciamento de versões e componentes; @vsenger Globalcode – Open4education
  • 5.
    A.L.M. • Independentede metodologia, arquitetura e tecnologia TODA EMPRESA PRECISA DE A.L.M. • ALM = é como álbum de fotografia do seu software, com retratos tirados automaticamente a cada mudança, falha, novo requisito, novo release, etc. • Maior exposição da T.I. para líderes; • Todo mundo sai ganhando! @vsenger Globalcode – Open4education
  • 6.
    A.L.M. - vantagens • Vantagens na adoção: • Rastreabilidade e dados post-hoc; • Cultura de planejamento de releases / backlog; • Gerenciamento integrado; • Simplificação nos processos; • Agilidade na construção do software; • Conseqüente aumento na cultura de testes; • Aumento da reusabilidade; • Agilidade na prática! @vsenger Globalcode – Open4education
  • 7.
    Gestão de Arquitetura • Expõe os ciclos de vida do software, facilitando e motivando sua a gestão: • Requisitos / Backlog / Atividade / User Story • Documentação (wiki / files) e suporte (fórum) • Versionamento, tags, brunches, .. • Gestão de Componentes e repositórios • Arquétipos e Templates de Arquitetura • Construção • Testes – Homologação - Produção • Deployment @vsenger Globalcode – Open4education
  • 8.
    A.L.M. open-source Gestãode componentes Nexus Gerenciamento de Requisitos Redmine Gestão de código / versionamento SVN, GIT, ... Construção e dependências Maven / Ant Gerenciamento de arquétipos Maven Gestão de componentes Nexus Teste Carga / Regressivo Jmeter / Selenium Inspeção Sonar Integração Contínua Jenkins @vsenger Globalcode – Open4education
  • 9.
    • Oferece estapilha como SaaS rodando na Amazon • Mais vantagens ainda: • Você tem o ambiente montado em 24hs • Você não vai ganhar novos servidores na sua empresa! • Softwares atualizados pela ToolsCloud e suporte • Redmine, SVN, GIT, Hudson, Nexus integrados com LDAP é um enorme diferencial @vsenger Globalcode – Open4education
  • 10.
    A.L.M. 1 Novo projeto 2 RedMine 2 SVN 2 Hudson 3 Requisitos 4 Codificação 5 Build & Testes 6 Inspeção Bugs 10 e Melhorias 7 Nexus 9 Produção 8 Homologação @vsenger Deployment Contínuo Globalcode – Open4education
  • 11.
    Redmine • Gerenciamento deRequisitos com: • Gestão de pendências; • Gerenciamento de horas gastas / time tracking; • Integração com SCM; • Conceito de projetos e sub-projetos; • Fórum, wiki, arquivos, news, calendário, gantt chart e sistema de segurança; • Software open-source construído em Ruby on Rails; • Centenas de plug-ins e módulos adicionais; • Muitas possibilidades de customização; @vsenger Globalcode – Open4education
  • 12.
    Redmine • Download eInstalação • www.redmine.org • Precisa de Ruby 1.8, Rails 2.3.5, Rack 1.0.1, RubyGems 1.8, Rake, i18n, libmysql-ruby, libopenssl- ruby1.8; @vsenger Globalcode – Open4education
  • 13.
    DEMONSTRAÇÃO @vsenger Globalcode – Open4education
  • 14.
    Versionamento • Temos dezenasde opções de controladores de versões de arquivos no mercado: • Subversion / SVN • CVS • GIT • Microsft Sourcesafe e TFS • Borland Starteam • Clearcase @vsenger Globalcode – Open4education
  • 15.
    Versionamento • No mundoopen-source os destaques são: • CVS: sistema mais antigo e precário, porém, ainda muito utilizado. Trabalha com protocolo proprietário; • Subversion: evolução do CVS com disponibilização via HTTP (além de protocolo proprietário) e alta performance para versionamento; • GIT: mais moderno ainda, por se tratar de um repositório distribuído. Tem muitas vantagens, mas demanda mais conhecimento do usuário; @vsenger Globalcode – Open4education
  • 16.
    Versionamento • “Qualidade” doscommits • Cuidar bem das mensagens • GIT File System? • Hooks & ALM @vsenger Globalcode – Open4education
  • 17.
    Integração com Redmine •O Redmine pode ser integrar com seu sistema de ; • Para isso, clique nos Settings do Projeto e, em seguida, escolha Repository: @vsenger Globalcode – Open4education
  • 18.
    Integração com Redmine •Ao vincular o projeto a um repositório você terá algumas integrações; • Últimas mudanças e commits no item Activities @vsenger Globalcode – Open4education
  • 19.
    Integração com Redmine •Navegar nos arquivos do SVN via Web clicando no item Repository: @vsenger Globalcode – Open4education
  • 20.
    Integração com Redmine •O recurso mais útil é a possibilidade de você referenciar as Issues nas mensagens de commit; cd /home/almadmin/projetos-svn/projeto1/trunk touch novo-arquivo.txt svn commit –m “Correçao de problema de encoding da IssueID #2” @vsenger Globalcode – Open4education
  • 21.
    Integração com Redmine •Você pode configurar as palavras que serão detectadas nas mensagens de commit em: Redmine –> Administration –> Settings -> Repositories Configuramos as palavras de referência aqui Fixing keywords podem mudar o status da Issue! @vsenger Globalcode – Open4education
  • 22.
    Integração com Redmine cd /home/almadmin/projetos-svn/projeto1/trunk touch novo-arquivo.txt svn commit –m “Correçao de problema closes #2” @vsenger Globalcode – Open4education
  • 23.
    Maven (Java) •Gestão de dependências e build do seu software Java; • Obriga a declaração das dependências de JAR's; • É uma “clínica de softwares dependentes”; • Torna seu projeto Java 100% independente de IDE! • Representa o elo entre Integração Continua, gestão de componentes, modularidade avançada, testes e +; • É chato, mas necessário! Alternativa? Gradle. • TODA plataforma tem problemas com dependências! • Conceito de arquétipos de projetos é excelente; @vsenger Globalcode – Open4education
  • 24.
    Nexus (Java) •O Maven pode baixar automaticamente bibliotecas da Internet (se open-source); • Isso é excelente para o desenvolvimento de pequenos times, agora se tivermos um time de 100 desenvolvedores criando projetos Maven que fazem downloads da Internet? • Fatalmente teremos um problema de rede até que todos os Mavens terminem seus downloads! @vsenger Globalcode – Open4education
  • 25.
    Introdução Nexus (Java) • Para ajudar a solucionar este tipo de problema contamos com Gerenciadores de Repositórios, que desempenham um papel de proxy para os demais: Developer Hudson Build com Maven jar: log4j, hibernate, spring etc. Nexus @vsenger Internet Globalcode – Open4education
  • 26.
    Introdução ao Nexus(Java) • O Nexus faz o download centralizado dos componentes fazendo um cache que ele utilizará para servir aos demais desenvolvedores; • Além do papel de cache, o Nexus também pode catalogar o componentes e artefatos da sua empresa, do seu negócio; • Isso facilita bastante o reuso entre equipes; • Maven + Nexus + Hudson: parceria perfeita! @vsenger Globalcode – Open4education
  • 27.
    Configurando Maven (Java) • Devemos adicionar esta configuração em um arquivo settings.xml que ficará no diretório .m2 do usuário: @vsenger Globalcode – Open4education
  • 28.
    Configurando Maven (Java) • Para que o Maven possa fazer deployment de artefatos no Nexus: @vsenger Globalcode – Open4education
  • 29.
    Introdução ao Jenkins • Jenkins é um servidor open-source de integração continua; • Um “Continous integration server / CI server” pode desempenhar várias tarefas como: • Checkout de código-fonte; • Build e teste; • Publicação de resultados; • Comunicação com membros do time; • Na prática o Jenkins é um agendador de tarefas de construção de softwares altamente customizável; @vsenger Globalcode – Open4education
  • 30.
    Introdução ao Jenkins • Fácil instalação e configuração; • Interface é web based; • Pode fazer builds distribuídos; • Relatório de teste unitário; • Notificação do estado dos builds; • Notificação em caso de quebra; @vsenger Globalcode – Open4education
  • 31.
    Introdução ao Jenkins • Arquitetura extensível baseada em plugins com mais de 150 de plugins disponíveis; • Por padrão vem com 4 plugins instalados: • CVS • SVN • Maven • SSH @vsenger Globalcode – Open4education
  • 32.
    Instalação e inicialização • O Hudson pode funcionar de três formas: • Stand-alone: java –jar hudson.war • JNLP: https://hudson.dev.java.net/hudson.jnlp • JavaEE container: fazendo deploy do hudson.war Glassfish, Jboss, Tomcat, Jetty, Winstone, Websphere; @vsenger Globalcode – Open4education
  • 33.
    Configuração • Parafazer as configurações iniciais devemos clicar em Manage Hudson @vsenger Globalcode – Open4education
  • 34.
    Configuração • Emseguida Configure System teremos acesso as principais configurações do Hudson: Representa o no. de executores de builds. @vsenger Globalcode – Open4education
  • 35.
    Configuração • Apósa instalação é importante configurar o local onde estão instalados JDK, Maven e Ant (se usar); @vsenger Globalcode – Open4education
  • 36.
    Configuração • Aoutra configuração importante é uma conta de e-mail funcionando para o Hudson poder se comunicar com equipes: @vsenger Globalcode – Open4education
  • 37.
    Dashboard • O dashboardtraz as informações sobre os diversos jobs / projetos configurados; • Este ícone indica a estabilidade dos builds: @vsenger Globalcode – Open4education
  • 38.
    Selenium • Testes regressivosde aplicativos Web; • Capaz de abrir diferentes navegadores, entrar com dados em formulários e analisar a resposta; • Selenium IDE: plug-in para firefox que permite gravar scripts de testes; • Selenium WebDriver: API Java para executar scripts • Selenium Server: testes remotos • Selenese: DSL para simulação • DEMO @vsenger Globalcode – Open4education
  • 39.
    Arquétipo • Representa otemplate de arquitetura; • Contém os principais elementos de arquitetura; • Gestão de arquétipos é muito importante para grande cenários multi-arquitetura; • Com maven podemos escolher centenas de diferentes arquétipos existentes: – mvn archetype:generate @vsenger Globalcode – Open4education
  • 40.
    Conclusões • Temque ser gostoso modularizar, implantar, testar, integrar, simular! • Todas as ferramentas apresentadas são open-source; • Podem funcionar com Delphi, C, C++, Ruby, entre outras plataformas; • Muitas possibilidades de customização; • Para pessoal de Java, @vsenger Globalcode – Open4education
  • 41.
    Obrigado! vinicius@globalcode.com.br @vsenger @vsenger Globalcode – Open4education

Notas do Editor

  • #4 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.