quarta-feira, novembro 30, 2005

Ferramentas integradas para o desenvolvimento de software - Impressões

Caros,

A quantidade de produtos de software voltados para apoiar o desenvolvimento de sistemas é vasta. Às vezes nos vemos inundados pelo número de ofertas e variações de estilos e preços. A realidade é que cada empresa deve analisar quais são os requisitos básicos que ela espera ter em seu ambiente de desenvolvimento, embasada em boas práticas de desenvolvimento de sistemas.

Com base no conjunto de ferramentas que venho analisando, tanto no espectro comercial como open source, posso chegar a algumas conclusões genéricas para dar um vislumbre deste mundo de soluções. Vou usar muito a palavra organização. Assume-se que organização pode ser tanto uma empresa, um departamento ou um projeto específico desta.

Para organizações pequenas a médias com nenhum ou pouco recurso financeiro para investir: Recomendo um ambiente open source como o que estou detalhando na minha série de artigos. Outros sabores de ferramentas que podem ser usadas com as já citadas em meus outros artigos são:

- eGroupWare para colaboração
- Mantis para gestão de issues e bugs
- RT para gestão de issues e bugs
- GForge para um ambiente integrado já empacotado
- XPlanner para gestão de projetos com Extreme Programming
- ScrumWorks para gestão de projetos SCRUM
- Controla para gestão de requisitos em projetos pequenos
- TikiWiki para uma ferramenta Wiki e de colaboração
- SVK para um sistema de controle de versões criado sobre o Subversion que permite a criação de sistemas descentralizados

Para aquelas que podem gastar pouco e precisam gerar documentação formal ou ágil usando a notação UML 2.0 recomendo a compra do Enterprise Architect. Seu valor é razoavelmente barato e permite o uso da UML 2.0 sem altos custos de TCO. Pode inclusive gerar matriz de rastreabilidade de requisitos e modelos (vide detalhes aqui). Para quem necessitar de uma ferramenta de gestão de requisitos mais robusta pode gastar mais um valor pequeno e adquirir o RAQuest da mesma empresa que fabrica o EA.

Para organizações que possuem um orçamento médio e necessitam de soluções mais robustas e que possuam suporte de uma empresa de software estabelecida pode-se partir para uma configuração utilizando o Subversion ou o StarTeam e adquirindo a ferramenta JIRA(possui maior flexibilidade de workflows, na versão Enterprise, como uma vantagem diante de ferramentas open source) para gestão de issues e bugs integrada com a ferramenta colaborativa Confluence.

Já organizações de médio e grande porte com um bom orçamento para adquirir ferramentas podem direcionar suas compras para a nova suite da IBM Rational chamada SDP (Software Development Platform) caso foque na plataforma J2EE. Ou no caso de focar na plataforma .NET adquirir a nova suite da Microsoft chamada Microsoft Visual Studio Team System.

É isso! Acho que a mensagem mais importante que devo deixar é: hoje em dia não há mais desculpas para uma organização de TI não ter um ambiente que pregue e apóie o desenvolvimento sustentável e disciplinado de software. Mesmo que seu departamento ou empresa não possuam orçamento para a aquisição de ferramentas você pode ir na direção do open source. O investimento em tempo dos seus profissionais ou de um consultor especializado que serão consumidos para instalar e configurar o ambiente e treinar os profissionais que usarão o ambiente retornarão em pouquíssimo tempo e a satisfação de seus clientes e colaboradores só irá crescer cada vez mais!

Marcadores:

quinta-feira, novembro 24, 2005

Ferramentas para automação de testes

Mudando um pouco de foco hoje para ferramentas de automação de testes! Acabei descobrindo excelentes ferramentas para automação de testes de aceitação ao começar a ler o livro "Fit for Developing Software : Framework for Integrated Tests". O Fitnesse é uma forma fascinante de você ligar uma página web de um wiki ao seu sistema sob teste, através de classes de negócio ou da interface de usuário. Esse modo de trabalho aumenta colaboração entre clientes e os desenvolvedores do sistema.

Minhas análises acabaram me levando ao encontro do WATIR. Esta é uma biblioteca em Ruby (minha nova paixão em linguagens de programação :-) ) que permite ao analista de testes escrever scripts que executam ações no Internet Explorer. Diferente de frameworks Java como o HttpUnit e o JWebUnit o WATIR realmente ABRE um browser Internet Explorer e vai realizando ações nele utilizando a automação do IE!

Veja este exemplo para verificar como é simples construir um script novo e como a linguagem é simples: http://wtr.rubyforge.org/example_testcase.html . Creio que um analista de testes que conheça automação e um pouco de programação (o verdadeiro tester precisa entender programação!) pode aprender rapidamente como usar o WATIR. No roadmap de novos recursos há idéias de se permitir que o Watir também consiga usar outros browsers, como o Mozilla Firefox. Aliás, uma dica: O Firefox possui uma extensão chamada Web Developer que ajudará muito os desenvolvedores e testers a implementar os testes funcionais... entre outras coisas!!! Outra grande informação sobre o Watir é que um dos seus criadores é Bret Pettichord, um dos autores do excelente livro "Lessons learned in Software Testing".

Eu senti falta de um gerador de relatórios em HTML mas acabei descobrindo um framework chamado test-report que na verdade é um bom add-on para os testes de unidade do Ruby. Fiz uns testes e depois de um pequeno bug que tive de consertar no script consegui executá-lo e gerar um relatório em HTML com os testes. Outro problema com o framework do test-report(não com o Watir!!!) é que parece que ele não está mais sendo mantido.

Mas depois de entrar e enviar uma pergunta para a lista de emails de usuários do Watir comentaram para mim da extensão WET. Ainda não a testei mas além dos relatórios HTML (não me pareceram tão bons quanto os do test-report) ele dá um nível de abstração muito interessante para melhorar o reuso dos testes funcionais.

Após ler alguns artigos que comentam dos riscos e perigos de ferramentas de record/playback (como a dificuldade em se alterar os testes, problemas em automatizar sua execução em ambientes de integração contínua e linguagens scripts proprietárias) o Watir cada vez mais me parece uma boa solução. Vide o artigo de Marick e de Bret Pettichord.

Quem tiver interesse pode analisar também o projeto Selenium. Ainda tem pouquíssima documentação mas me parece que será muito interessante.

Outro bom projeto que possui a filosofia data-driven e não a de record/playback é o da ferramenta para automação de testes para sites Web Canoo WebTest. Ela utiliza como fundamento o HtmlUnit e os testes são escritos através de arquivos XML.

Para terminar então vão as dicas e o nirvana para se atingir um desenvolvimento de software com qualidade alta e testes contínuos durante todo o processo de desenvolvimento: Faça Test-driven development usando um dos frameworks da família xUnit. Depois coloque seus analistas de sistemas e testers para conversar com os clientes e usuários para criar páginas Web no Fitnesse e aos poucos use os desenvolvedores para ligar as páginas ao código das classes de negócio. Por fim, assim que os cenários forem sendo completados pelos desenvolvedores crie scripts de testes funcionais usando o Watir. Coloque todos eles executando numa ferramenta de integração contínua (com no mínimo um build diário) e voilá :-) !!!

Marcadores:

Leituras da Semana IV

Comprei e estou lendo o livro Estimating Software-Intensive Systems de Richard Stutske. Realmente é a bíblia sobre estimativas para o mundo de sistemas de informação. Há técnicas também para estimar implantação dos chamados softwares COTS(Commercial Off The Shelf) como SAP, por exemplo.

Além dos métodos de estimativa, que são muito interessantes de se conhecer e utilizar, gostei de mais um fator nesse livro ( que é parte da coleção do SEI ): a análise também para processos ágeis e os chamados flexíveis. Isso é mais uma demonstração que as metodologias ágeis viraram "mainstream". Só falta agora os compradores de software entenderem melhor porque sistemas com alta volatilidade de requisitos ficam melhor construídos com métodos ágeis e não com projetos de custo fixo e sequenciais.

Outro livro que deixou clara essa tendência do que poderia ser chamada "a velha guarda" dos metodologistas foi o livro "Balancing Agility and Discipline" de Barry Boehm que eu li no ano passado. Altamente recomendável para entender quando usar processos com foco na agilidade e quando usar processos com foco no plano.

Outro fator importante em qualquer projeto de software é uma abordagem dirigida a riscos. Para entender melhor isso recomendo o livro de outro 'papa': "Waltzing with Bears: Managing Risk on Software Projects" de Tom DeMarco.

Marcadores:

sexta-feira, novembro 18, 2005

Ambientes de desenvolvimento de software - Parte V

Finalmente a continuação de nossa série sobre ambientes de desenvolvimento de software open source para o suporte a práticas de engenharia de software e metodologias ágeis e iterativas! Antes de começar gostaria de agradecer pelos comentários já feitos ou emails enviados. Gostaria de receber mais feedbacks daqueles que fizerem a leitura dessa série de artigos e saber se conseguiram realizar todas as atividades relacionadas. Também tenho interesse de saber se as informações lidas aqui foram utilizadas em projetos reais dentro de empresas ou projetos open source. O objetivo é exatamente ajudar nos passos iniciais dessa grande aventura de ajudar pequenas e médias empresas a melhorar seu processo de desenvolvimento de produtos de software com gastos baixos e garantindo realmente um aumento de produtividade e qualidade do software! Podem deixar um comentário aqui e/ou então me mandar um email. Assim inclusive posso dar um retorno e conhecê-los!

Hoje iremos comentar um pouco sobre como usar alguns recursos básicos do Subversion. O foco deste artigo está limitado ao escopo de demonstrar como é possível ter um bom ambiente integrado de desenvolvimento. Portanto não vamos falar em todos os recursos do Subversion e os muito importantes como tags, branches e merges. Falaremos naqueles que nos ajudarão a demonstrar as integrações e também que são utilizados no dia a dia dos desenvolvedores. Para informações detalhadas de cada recurso é possível consultar o livro disponível on-line Version Control with Subversion. Porém o livro que recomendo fortemente para facilitar o uso do Subversion e definir um plano de como realizar a gestão de configuração no projeto é o livro Pragmatic Version Control Using Subversion. Outro que recomendo fortemente é Subversion Version Control : Using the Subversion Version Control System in Development Projects . E é claro que implantar um processo de controle de versões e gestão de configuração requer um time preparado e que entende as necessidades desse tipo de software. Estamos à disposição para treinamentos e mentorings específicos em horários diferenciados :-) !

Primeiro é importante entender o conceito usado pelo Subversion para numerar as versões(chamadas de revisões no Subversion) inseridas no repositório. Os sistemas de controle de versão tipicamente se utilizam de um dos dois tipos de numeração: por arquivo e de repositório. No esquema por arquivo cada arquivo pode estar em uma revisão diferente. Já no esquema de repositório, a qualquer mudança ocorrida o número de revisão do repositório é incrementado. Esse segundo formato é o usado pelo Subversion. Cada um dessas revisões também pode ser chamada de changeset, porque representam um conjunto de mudanças ocorridas em uma revisão. Como será visto pelas análises dos logs e no próximo artigo sobre o WebSVN, essa forma de controlar os fontes facilita e deixa mais claro que mudanças ocorreram de uma revisão a outra.

Mas chega de conversa e vamos iniciar nosso trabalho!!! Inicie abrindo um prompt do DOS e emita os comandos conforme a figura abaixo:



O Subversion criará alguns diretórios dentro do diretório rep_exemplo. Verifique com um dir ou através do Windows Explorer se eles foram criados. Um deles se chama "hooks".

Agora crie um diretório para se tornar sua cópia local do repositório. Eu criei um chamado work_exemplo no diretório C: . Crie três diretórios dentro dele chamados: trunk, tags e branches. Esse é um dos padrões utilizados em diversos projetos open source e comerciais usando o Subversion. Para simular o uso do Subversion também para diretórios crie outros dois diretórios dentro de trunk: source e inc. Sua estrutura ficará como na figura abaixo:



Dentro do diretório source crie três arquivos e no diretório inc crie um quarto. Coloque algum conteúdo dentro destes arquivos. No meu caso criei os arquivos teste1.txt até teste4.txt. Portanto teremos os arquivos conforme a figura abaixo:



Agora vamos clocar os arquivos que estão fora de nosso repositório dentro dele. E para isso já contaremos com a ajuda de nosso TortoiseSVN. Clique com o botão direito no diretório work_exemplo, procure no menu a opção TortoiseSVN e dentro dela haverá a opção "Import...", conforme tela abaixo:



Procure o diretório onde o repositório foi criado e inclua alguma mensagem para histórico. Os arquivos serão então importados para o repositório conforme figuras abaixo:





Agora faremos uma coisa ousada :-) ! Vamos apagar o conteúdo do diretório work_exemplo e ficar com ele apenas vazio. Agora clique com o botão direito no repositório e vá na opção SVN Checkout...

Essa tela será apresentada:



Clique em "Show Log" para ver a mensagem e o histórico da sua importação:



Aceite o checkou e veja a tela:



Abracadabra!!! Agora os nossos diretórios e arquivos reapareceram. O que aconteceu? O TortoiseSVN foi até o repositório e recuperou os arquivos da última revisão (no caso a revisão 1 de importação) e trouxe para sua cópia local. Lembre-se que isso pode estar ocorrendo em uma rede, com o repositório residindo em outra máquina ( há outras configurações que devem ser feitas mas elas não serão abordadas neste artigo. Consulte os livros citados no início ). E no Windows Explorer eles aparecerão com uma marca. Essa marca demonstra que os arquivos não sofreram nenhuma alteração ainda na sua cópia de trabalho.

Vamos testar o comportamento do Subversion? Altere um dos arquivos do diretório source (no meu caso o teste1.txt). Se você verificar no Windows Explorer agora verá que o arquivo modificado fica com outro sinal, demonstrando que ele não está mais coerente com o último checkout feito!



Se você subir os níveis da sua hierarquia de diretórios verá que os diretórios trunk e work_exemplo também estão marcados. Esse é um excelente recurso visual que o TortoiseSVN nos fornece para facilitar a detecção de mudanças. Vamos então colocar nossa alteração no repositório central para que todos os desenvolvedores tenham acesso! Clique com o botão direito e escolha a opção SVN Commit. Coloque algum dado de histórico e clique Ok.





Agora outros desenvolvedores podem ter feito alguma alteração em algum dos códigos. Uma boa prática depois de fazer um commit é então fazer um comando SVN Update. Vamos fazer isso agora e garantir que estamos trabalhando em sincronia com o repositório. Pronto! Nossa cópia está toda "verde"!

Vamos agora ver o que aconteceu? Clique com o botão direito no diretório work_exemplo e escolha a opção Show Log do TortoiseSVN. Clicando em cima de cada revisão que aparece no repositório você verá tudo que ocorreu com cada arquivo e diretório naquela revisão. Agora todo o time, o gerente do projeto e stakeholders interessados podem ter visibilidade do que está acontencendo no dia a dia do projeto!

Outro comando fascinante é o Blame. Este só pode ser usado em um arquivo e não em um diretório. Ele mostra o seu arquivo e em cada linha de código coloca o nome de quem fez a última modificação e em qual revisão esta entrou!

Outro comando do TortoiseSVN é o Revision Graph. Ele mostra de maneira visual as mudanças nas revisões e ainda permite que você faça comparações entre elas. Para fazer isso basta escolher duas revisões, clicar com o botão direito e escolher a opção Compare Revisions.





Pronto! Uma visão rápida do básico do Subversion. No próximo artigo mostraremos como instalar e configurar o WebSVN, uma excelente ferramenta para visualizar repositórios Subversion usando um browser e que será uma base fundamental para uma integração mais interessante entre o sistema de rastreamento e controle de bugs e o Subversion!

Marcadores:

quinta-feira, novembro 17, 2005

Leituras da Semana III

Além das leituras novas resolvi reler alguns livros também nesse período, especialmente após a descoberta de uma ferramenta muito interessante chamada ScrumWorks (para organizar projetos usando a metodologia ágil SCRUM). Escreverei um artigo à parte só para comentar sobre a ferramenta. Vamos agora aos livros!!!

Agile Software Development with SCRUM” - Comprei e li esse livro há pouco menos quatro anos. Naquele período entendi o SCRUM de maneira totalmente diferente e errada :-) . Percebo, depois de uma maior maturidade e outras tantas leituras e análises de ferramentas, como é o mecanismo de funcionamento do SCRUM e como ele realmente possui uma forma de organização do time que faz total sentido para equipes de desenvolvimento de software. Esse é o livro básico para se entender o como e o porquê do SCRUM. Extremamente recomendável.

Agile Project Management with SCRUM” – Este livro é um bom complemento ao primeiro. Ele mostra estudos de caso nos quais Schwaber (um dos criadores do SCRUM) participou. É fundamental pois além das partes boas mostra também o que pode dar errado em um projeto usando o SCRUM e como mitigar esses riscos. Leia este, o livro de cima, use e avalie o software ScrumWorks e comece a se preparar para se tornar um Scrum Master!!!

Agile Web Development with Rails” - Comecei a ler esse livro depois de encontrar artigos no Slashdot e no ServerSide(faça uma busca pela palavra Rails) comentando sobre esse framework construído na linguagem Ruby. Minhas opiniões sobre o Ruby on Rails serão descritas no próximo artigo. Este livro é fantástico pois não começa explicando cada aspecto do framework. Ele inicia já nos forçando a construir uma aplicação de um site de e-commerce completo. Somente a partir do capítulo 13 ele entra em detalhes mais específicos do framework, como por exemplo sobre uma das tecnologias que irá fundamentar a Web 2.0, chamada AJAX. Eu estou lendo e construindo a aplicação ao mesmo tempo, o que torna o livro muito útil e nada maçante. Além disso, o estilo de escrita dos autores e a aplicação do desenvolvimento ágil e iterativo fica claro desde o início neste projeto real. Pelas razões que detalharei em um próximo artigo, recomendo fortemente aos desenvolvedores de aplicações Web e MVC que estudem e conheçam o Ruby on Rails. E a melhor forma de começar é através deste livro!

User Stories Applied” – É o livro que não pode deixar de ser lido por quem já pratica alguma das metodologias ágeis ou então por quem pretende praticá-las! Apesar de falar especificamente de user stories, ele também comenta como aplicar esse tipo de visão dos requisitos com SCRUM. Mas os capítulos que realmente me deixaram mais fascinados foram os relativos a como estimar as estórias, sobre o planejamento de releases e iterações e também o acompanhamento do projeto através dos “burndown charts”. Realmente um livro excelente. Espero que o novíssimo livro de Mike Cohn chamado “Agile Estimating and Planning” seja lançado no Safari Books On-line. Pelas resenhas na Amazon já notei que será outro livro fundamental!

Marcadores:

terça-feira, novembro 01, 2005

Ambientes de Desenvolvimento de Software - Parte IV

Neste quarto artigo aborda-se a instalação dos softwares Subversion e TortoiseSVN. No próximo será criada uma configuração inicial e usaremos alguns comandos básicos para entender o controle de versões do Subversion e nos ajudar a testar nossas integrações posteriores. É importante notar que as ferramentas de suporte ao SCM(Software Configuration Management) possuem um grande número de funcionalidades e o Subversion não escapa disso. Meu objetivo aqui também não é o de descrever os benefícios de se adotar uma ferramenta para SCM robusta. Assumo que os que por aqui se aventurarem já possuem essa visão! Só gostaria de deixar claro que o uso do Subversion foi definido por mim por ser uma proposta muito interessante de trocar o CVS (que está com uma base de código muito complexa e de difícil manutenção) por um sistema de controle de versões iniciando do zero, mas por pessoas que já possuem toda a visão das funcionalidades que um software robusto desse tipo precisa ter.

O intuito dos próximos dois artigos é dar um pontapé inicial, mas indicarei alguns ótimos livros para as pessoas que necessitam de um maior conhecimento nessa ferramenta essencial para o sucesso de projetos de software. E é claro que aqueles que necessitarem de treinamentos, workshops e mentorizações podem entrar em contato através do meu email que se encontra no link do meu perfil completo(agora chega de propaganda e vamos ao que interessa... he, he!).

A instalação na plataforma Windows é muito simples. Como o web site tigris.org é considerado um pouco confuso por algumas pessoas, abaixo já passo o link onde estão os downloads:

Neste endereço se encontra a versão 1.2.3 do Subversion Server e suas ferramentas de linha de comando utilizada nestes artigos. Baixe o svn-1.2.3-setup.exe
http://subversion.tigris.org/servlets/ProjectDocumentList?folderID=91

Neste outro endereço se encontra o TortoiseSVN. É só baixar o msi --> TortoiseSVN-1.2.6.4786-svn-1.2.3.msi
http://sourceforge.net/project/showfiles.php?group_id=138498&package_id=151948

Faça primeiro a instalação do Subversion Server. Como a instalação é praticamente “Next, Next” eu não coloquei as imagens da instalação aqui. Deixei-as no meu álbum de fotos em http://photos.yahoo.com/j_paulop nos álbuns Subversion e TortoiseSVN, para os que quiserem acompanhar.

Recomendo fechar todas as janelas de aplicação abertas, especialmente na instalação do TortoiseSVN. Este inclusive pedirá no final para dar um reboot na máquina. Faça essa operação de reboot para relizarmos um teste básico posterior.

Após reiniciar sua máquina, verifique se o caminho do diretório bin do Subversion se encontra na variável de ambiente PATH. (Vá no menu Start – Settings – Control Panel – System – Aba Advanced – clique em Environment Variables – Procure a variável PATH). Se não estiver adicione o diretório (no meu caso C:\Program Files\Subversion\bin).
Agora podemos fazer o teste básico para confirmar que tudo está funcionando.

Abra um janela de prompt do DOS (Menu Start – Run – digite cmd e )
Digite svnserve -–version . A versão do Subversion deve aparecer.
Para testar a instalação do TortoiseSVN abra o Windows Explorer, clique com o botão direito do mouse em um diretório qualquer. As opções SVN Checkout... e TortoiseSVN devem aparecer, conforme figura abaixo. Entre nas opções do item TortoiseSVN e clique em About. Confirme a versão instalada.





Sua instalação dos softwares Subversion e TortoiseSVN foi feita com sucesso! No próximo artigo teremos algumas noções básicas de ambos os softwares, para posteriormente continuarmos nossa série com o software que permite visualizar um repositório Subversion via Web.

Marcadores:


Veja as Estatísticas