Blog da Improve It

Documentação Ágil

Publicado por Vinicius Manhães Teles há aproximadamente 1 ano.

Documentação é assunto que as pessoas vivem me perguntando nas palestras sobre XP. Por exemplo, como fica a documentação em um projeto XP, ou em qualquer metodologia ágil?

O vídeo abaixo é uma tentativa de responder esta questão.


Documentação Ágil from Vinicius Teles on Vimeo.

Link direto para o vídeo.

PS: Amigos com iPhone, não fiquem bravos comigo. Eu sei que vocês preferem que o vídeo esteja no YouTube, para que possam ver no iPhone. Mas, dessa vez ainda não deu. Este vídeo ficou um pouco maior do que eu gostaria, de modo que ultrapassa o limite de upload do YouTube. Uma alternativa é usar o Google Video, que permite vídeos maiores, e você também consegue ver através do cliente YouTube do iPhone. Eu tentei fazer upload para o Google Vídeo, mas ainda não ficou legal. Então, vou continuar tentando obter um resultado satisfatório no Google Video, e assim que alcançar, eu coloco o link aqui no blog. Mas, para adiantar, já estou publicando o vídeo no Vimeo.

Tags , , , , , , , , , , ,  | 16 comentários

Improvecast 19: XP na Ancar

Publicado por Vinicius Manhães Teles há mais de 2 anos.

Acaba de ser publicado o podcast mais divertido que já gravei: o Improvecast 19. Dessa vez entrevistei a equipe de desenvolvimento da Ancar (veja as fotos), que atua na gestão de shopping centers e é cliente dos serviços de mentoring da Improve It. A Ancar vem trabalhando com XP desde o início de 2005. Durante dois anos os esforços de desenvolvimento estiveram concentrados em Java e mais recentemente a equipe passou a utilizar também Ruby on Rails.

Bob Esponja: gestor de integração contínua na Ancar.

Dessa vez, além do podcast, você também pode ler o estudo de caso da Ancar e ver as inúmeras fotos da equipe da Ancar trabalhando com XP. São nada menos que doze álbuns de fotos da Ancar. Aproveite!

Esses foram os assuntos tratados no Improvecast 19:

Ancar2go.
Tela do Ancar2Go com a planta de um dos shoppings administrados pela Ancar.

Além de escutar o podcast, veja as fotos. E lembre-se, quem quer aprender mais sobre desenvolvimento ágil deve ficar atento. Em breve lançaremos nossos primeiros treinamentos abertos ao público. Fique sabendo de todos os detalhes mais cedo e concorra a descontos. Basta cadastrar seu email para receber todos os detalhes. Cadastre-se.

Tags , , , , , , , ,  | 3 comentários

Improvecast 18: conheça o Oi Paggo

Publicado por Vinicius Manhães Teles há mais de 2 anos.

Acaba de ser publicado o Improvecast 18 que traz o surpreendente relato de um cliente dos serviços de mentoring da Improve It, a Paggo, que desenvolveu um sistema de cartão de crédito usando Extreme Programming do início ao fim. Entrevistei Mauricio Hermogenes, Diretor de Tecnologia da Paggo. Ele descreveu o Oi Paggo, um sofisticado sistema de "cartão" de crédito utilizando celulares desenvolvido em parceria com a operadora de telefonia Oi.

Foto de Mauricio Hermogenes

O Oi Paggo foi desenvolvido sobre a plataforma Java e XP foi usado como metodologia de desenvolvimento, o que, segundo a Paggo, permitiu que o sistema fosse implementado em tempo recorde. O Oi Paggo já está em uso em diversas cidades brasileiras e sua receptividade está superando as próprias expectativas da Paggo, como o Mauricio explica no podcast.

Oi Paggo
Fonte: http://www.oipaggo.com.br

O Oi Paggo talvez seja hoje um dos produtos mais amplamente utilizados desenvolvidos em XP no Brasil. Trata-se de um projeto inédito, tanto em termos do negócio (cartão de crédito via celular), quanto em termos da metodologia de desenvolvimento. Portanto, esse podcast, além de ser muito instrutivo, é também um ótimo case para demonstrar o potencial do Extreme Programming no mercado brasileiro.

Esses foram os assuntos tratados no Improvecast 18:

Tags , , , ,

Improvecast 17: Entrevista com Bruno Siqueira na Série Experiências Ágeis

Publicado por Vinicius Manhães Teles há mais de 3 anos.

Há pouco mais de um mês eu e minha esposa fomos a uma festa onde encontramos com um velho amigo em comum, Bruno Siqueira. Embora o Bruno, minha esposa e eu tenhamos todos formação na área de TI, nós nos conhecemos em outro contexto completamente diferente: a dança de salão. Então, raramente conversamos com o Bruno sobre Informática. Porém, dessa vez acabamos falando um pouco sobre isso e fiquei sabendo que ele tinha saído, há pouco tempo, de uma empresa que implantou ISO, MPS.BR e CMMI. Hoje em dia ele trabalha com Scrum. Uma mudança significativa que, obviamente, merecia ser discutida em um novo Improvecast.

Foto de Bruno Siqueira

Clavius Tales, da Fortes Informática, falou, no último podcast, sobre a experiência de ter passado pelo MPS.BR e depois abandoná-lo em prol do XP. Dessa vez é o Bruno que conta como foi deixar para traz ISO, MPS.BR e CMMI. Atualmente, ele trabalha com Scrum no Tecgraf, Grupo de Tecnologia em Computação Gráfica, criado em 1987 em parceria com o Cenpes (Centro de Pesquisas da Petrobras).

Nessa entrevista, Bruno afirma que aprendeu bastante com os modelos de qualidade, mas depois de ter a oportunidade de trabalhar com Scrum, acredita que está obtendo resultados iguais ou superiores ao que tinha antes, porém com maior velocidade e muito menos esforço. Se depender dele, modelos de qualidade, tais como o que ele tinha que usar no passado, permanecerão sendo apenas parte do seu passado.

Esses foram alguns dos assuntos tratados no Improvecast 17:

Tags , , , , , ,  | nenhum comentário

Improvecast 16: Entrevista com Clavius Tales na Série Experiências Ágeis

Publicado por Vinicius Manhães Teles há mais de 3 anos.

É cada vez mais comum discutirmos sobre as diferenças e semelhanças entre abordagens ágeis de desenvolvimento de software e outras mais tradicionais, tais como o MPS.BR e o CMMI. Entretanto, poucas pessoas tiveram a chance de vivenciar os dois mundos para poder relatar o que aprenderam com cada abordagem.

Ilustração de Clavius Tales

Clavius Tales, Diretor de Desenvolvimento da Fortes Informática, é uma dessas poucas pessoas. Ele participou ativamente do processo de implantação do MPS.BR na Fortes Informática. Segundo ele, sua empresa colheu ótimos frutos da utilização dos conceitos trazidos pelo MPS.BR. Entretanto, depois que sua equipe adotou o Extreme Programming, os ganhos foram ainda maiores. Por conta disso, a empresa substituiu as práticas do MPS.BR pelas do Extreme Programming com excelentes resultados.

O relato do Tales acaba de ser publicado no Improvecast 16 que, devido ao tamanho, foi dividido em duas partes.

Esses foram alguns dos assuntos tratados no podcast:

Na implantação do Extreme Programming, a Fortes Informática contou com treinamento e apoio da Improve It. Veja algumas fotos do treinamento e o que nossos clientes acham dos treinamentos.

Finalmente, veja abaixo algumas fotos de uma reunião de planejamento realizada na Fortes Infomática há um mês.

Jogo do Planejamento, com clientes, na Fortes Informática (12/07/2007).
Jogo do Planejamento, com clientes, na Fortes Informática (12/07/2007).
Jogo do Planejamento, com clientes, na Fortes Informática (12/07/2007).
Jogo do Planejamento, com clientes, na Fortes Informática (12/07/2007).
Jogo do Planejamento, com clientes, na Fortes Informática (12/07/2007).

Tags , , , , , , , , , , , ,  | 2 comentários

Improvecast 15: Entrevista com Daniel Wildt na Série Experiências Ágeis

Publicado por Vinicius Manhães Teles há mais de 3 anos.

Essa semana temos inúmeros podcasts para colocar no ar. E só tem coisa boa! :-) Começamos nesta segunda-feira com o podcast do Guilherme Silveira e agora, acaba de ser publicado o Improvecast 15 no qual entrevistei Daniel Wildt, desenvolvedor de software de Porto Alegre, que tem forte atuação nas comunidades de Delphi, Java e desenvolvimento ágil.

Daniel Wildt

Esses foram alguns dos assuntos tratados no podcast:

Tags , , , , ,  | nenhum comentário

Entrevista com Alisson Vale na Série Experiências Ágeis

Publicado por Vinicius Manhães Teles há mais de 3 anos.

Acaba de ser publicado o Improvecast 13 no qual entrevistei Alisson Vale, Diretor da Phidelis Tecnologia e Líder de Projeto do Phidelis Acadêmico. Alisson utiliza XP desde 2003 e liderou a construção de um sistema web bastante grande, completamente desenvolvido em XP. Essa é uma das entrevistas mais notáveis até o momento, na Série Experiências Ágeis, já que aborda a utilização de XP, com sucesso, durante os últimos quatro anos.

Alisson Vale

Esses foram alguns dos assuntos tratados no podcast:

Esse podcast foi gravado no dia 12 de julho de 2007 e só está sendo publicado agora, mais de duas semanas depois. Houve várias razões para essa demora. A principal delas foi que estive extremamente atarefado nessas últimas semanas o que me impediu de trabalhar na edição. Para agravar o problema, a conexão da rede não estava muito boa no dia. Isso dificultou a conversa pelo Skype e causou problemas em vários pontos da gravação, tornando a edição muito mais lenta e trabalhosa. O resultado final ficou um pouco comprometido, mas acredito que está compreensível na maior parte. Peço a compreensão e a paciência de vocês para que façam um esforço de escutar até o fim. A experiência do Alisson é valiosa. Trata-se de uma verdadeira aula que merece ser escutada com atenção.

Tags , , , , , ,  | nenhum comentário

Errata

Publicado por Marcos Tapajós há mais de 3 anos.

Estou escrevendo essa errata pois algumas pessoas utilizam RSS e podem não ler a correção que eu fiz no meu ultimo post.

Escrevi:

1 - Algo impossível (nunca consegui fazer) em java e simples em Ruby é testar métodos estáticos.

Mas o que eu realmente quis dizer foi:

1 - Algo impossível (nunca consegui fazer) em java e simples em Ruby é "mockar" métodos estáticos.

Tags , ,  | 3 comentários

Ruby, Ágil ou RAD ?

Publicado por Marcos Tapajós há mais de 3 anos.

Ontem recebi um e-mail do meu amigo Mestre, também conhecido como Rodrigo Lemos, me questionando sobre Ruby ser ágil ou RAD e então se iniciou um bate papo bem legal sobre essa linguagem e sobre o framework rails. Pensei em escrever um artigo sobre isso mas achei mais válido compartilhar com vocês apenas retirando o nome do lugar onde ele trabalha e de onde trabalhamos juntos.

E-mail original:

As pessoas costumam confundir muito os dois conceitos (Ágil X RAD). Aqui no meu trabalho tem um pessoal que AMA Delphi sobre todas as coisas. Daí eu resolvi dizer que preferia as plataformas "ágeis" e começaram a dizer que não havia nada mais "ágil" do que Delphi, que era muito mais "ágil" do que Java (em tempo: Java sozinho não é ágil; só o é em conjunto com outras tecnologias, tipo junit, cruisecontrol, mock objects, IDE com refactoring, entre outras ferramentas).

O exemplo típico que essa tribo dá pra dizer que isso Delphi é "ágil" é dizer que é possível montar uma aplicação com cadastro completo (Create, Read, Update, Delete), validação de dados e emissão de relatórios com meia-dúzia de cliques, em 5 minutos.

Só que esta é, na verdade, a descrição de RAD (Rapid Application Development é você conseguir montar uma aplicação em pouquíssimo tempo, com pouquíssima redundância de codificação; é algo típico de ferramentas visuais em que você arrasta meia dúzia de controle e preenche umas propriedadezinhas).

Daí expliquei que "desenvolvimento ágil" era algo muito maior, que era agilidade na hora de fazer uma modificação monstruosa num sistemão que já está no ar, funcionando há séculos. Acho que sempre funcionou muito bem no caso do nosso antigo trabalho: Java (biblioteca maravilhosa) + Eclipse (refactoring) + jUnit/dbUnit/easyMock/cruisecontrol (bateria de testes automatizados) + ant (automação) + CVS/Subversion (controle de alterações). Sempre fizemos modificações estruturais importantíssimas, que simplesmente não dá pra fazer nessas aplicaçõezinhas RAD geradas literalmente PELO Delphi. Essas tralhas RAD, uma vez que tenha sido feito, é quase impossível modificar porque fica tudo quebrado. No máximo fazem modificações de labels, fórmulas de validação simples etc.

No final se convenceram que Delphi não é "ágil" (pode ser como uma palavra genérica da língua portuguesa, que quer dizer algo como "rápido"... mas definitivamente não no conceito de desenvolvimento de software).

Também aqui no meu trabalho usa-se muito desenvolvimento de sistemas sobre Lotus Notes. Que é muito ruim. As ferramentas de edição são uma porcaria (muito mais porcaria que o Delphi). O modelo de dados é horrível e ultrapassado. Mas o pior de tudo, pior de tudo mesmo é que esta é RAD.

Ou seja, provavelmente um despreparado veio aqui no trabalho e mostrou pra não sei quem (um diretor, superintendente ou coisa que o valha) como era possível fazer "aplicações" no Notes em 10 minutos. Claro. É ridículo montar uma aplicação do zero no Notes. É realmente muito rápido: basta criar meia-dúzia de forms, colocar validação e uns botões de ação e pronto. Tá tudo pronto. Ele faz toda a renderização, armazenamento e recuperação, criação e remoção de registros, impressão de formulários, visões de resumo, envio de e-mail e um monte de outras coisas.

O problema que temos é: vai mudar tudo o que foi feito.... I-M-P-O-S-S-Í-V-E-L. Não tem como. É tudo amarrado demais e ao mesmo tempo mal-amarrado. Dá medo (muito medo) de mudar uma vírgula de lugar, porque ninguém sabe o que vai acontecer no resto do "sistema".

Aí, quando recebi seu e-mail, lembrei que esse tipo de apresentaçãozinha mostrando como montar uma aplicação em Ruby (ferroviário ou não) em 5 minutinhos era a forma mais comum de mostrar seus pontos fortes. Como não conheço nada de Ruby, fiquei pensando se não era só mais um hype, como foi o Notes, e como ainda é o Delphi (na minha humilde opinião). Por isso te perguntei.

E volto a perguntar: e aí, Ruby é RAD ou Ágil? A plataforma Ruby suporta os processos de desenvolvimento ágil (teste, refactoring etc.)? É fácil fazer uma mudança estrutural (ou seja, uma mudança gigante) e garantir que tudo continua funcionando? Ou depende só do talento/experiência do programador (como era há 30 anos atrás no mainframe)?

Minha resposta:

Muito boa sua explicação e melhor ainda o seu questionamento. Acho que o Ruby é tanto RAD quanto Ágil!

O Ruby, assim como o java, possui uma ótima ferramenta de testes que trás todas as vantagens que a gente já sabe.

Quando se fala de rails as coisas melhoram ainda mais, pois não só existe a parte de testes como ele já tem na sua estrutura tudo organizadinho para os testes, com separação de testes unitários, funcionais e de aceitação.

Existe ainda o conceito de fixtures que nada mais é do que aqueles cenários de testes que a gente escrevia em XML no nosso antigo trabalho só que com o formato YAML. Sem contar que com o uso de um plugin você passa a ter testes no selenium com a possibilidade de escrevê-los em Ruby usando recursos não disponíveis quando se escreve em html.

Existe o mocha, que é o equivalente ao Easy Mock, para auxiliar nos testes. Devido a característica dinâmica da linguagem podemos fazer algumas coisas em testes que em java ou não são possíveis ou são muito complexas. Para exemplificar:

1 - Algo impossível (nunca consegui fazer) em java e simples em Ruby é "mockar" métodos estáticos.

2 - É possível trocar a visibilidade dos métodos privados facilmente e assim testa-los. Em java é possível, mas muito chato pois envolve reflexão. Para finalizar em Ruby existe o cruisecontrol.rb que é exatamente a mesma coisa que o de java só que com uma interface web mais bonitinha.

Bem, acho que na parte de testes podemos dizer que é Ágil, de acordo ?

Agora com relação a ferramenta de refactoring realmente o Ruby ainda deixa a desejar pois não faz as coisas de forma tão automatizada quanto o java. Por exemplo, não existe como extrair um trecho de código para um método de forma automática.

Isso é chato? SIM, muito! Porém não é o fim do mundo pois temos o suporte dos testes e como escrevemos MUITO menos código isso acaba ficando mais simples de se fazer.

Então nesse aspecto Ruby não é tão ágil assim mas também não deixa de ser por isso! Certo?

Na parte de automação existe o RAKE que é um similar ao ANT só que novamente o XML é deixado de lado e escrevemos nossas tasks em Ruby mesmo. Acho que nessa parte podemos dizer que é Ágil.

A parte de controle de versão nem precisamos discutir.

Expliquei o porquê considero Ruby ágil, agora tenho que explicar porque ele também seria RAD.

Creio que o Ruby sozinho não seria RAD mas o framework Ruby On Rails definitivamente é. Realmente aquelas apresentações que escrevem aplicações em 10,20 ou 25 minutos deveriam ser encaradas como uma motivação e não para mostrar tudo da linguagem nem do framework pois em quase todas esses aspectos que você questionou são deixados de lado.

É perfeitamente possível se escrever aplicações de forma rápida e bem estruturada com testes, integração continua automatizada e muito mais.

É provável que você não entenda como isso é possível por não conhecer muito a fundo o Ruby e o rails mas vou te explicar umas coisinhas para você ficar mais dentro do contexto.

Um dos principais fatores que permite esse desenvolvimento rápido é o principio de Convention over Configuration onde poupamos muito tempo com configurações simplesmente por obedecer padrões bem simples, como localização de classes, nome de métodos, tabelas e assim por diante.

Além disso o Ruby possui algumas bibliotecas que facilitam muito o nosso trabalho e vou destacar duas que estão presentes no rails (na verdade elas vieram do rails).

1 - Active Record: Ele nos permite relacionar nossas classes de modelo com o nosso banco de dados. Seria algo semelhante ao EJB, HIBERNATE só não é necessário fazer nenhum mapeamento com XML, basta criar a classe com nome composto pelo singular do nome da tabela e herdar do Active Record. Mas isso não é tão engessado como pode parecer, podemos não usar plural e singular, assim como usar um nome de tabela diferente mudando-se duas linhas de código. Ele também permite o mapeamento de relacionamentos de forma bem simples.

Não é necessário mapear os campos com get and set pois ele utiliza o conceito de method_missing para descobrir diretamente no banco de dados os campos e gerar em tempo de execução. Só para você entender um pouco melhor vou te dar o exemplo de duas classes que estão relacionadas e de uma operação de Create.

class Estate < ActiveRecord::Base belongs_to :city validatespresenceof :city_state, :message => "Cidade inválida" end

class City < ActiveRecord::Base has_many :estate end

e = Estate.new e.name = "Blah" e.city = City.find_by_name("Rio de Janeiro") e.save

Com relação ao find usado é semelhante a historia do get and set, ele te disponibiliza em tempo de execução métodos findby_campo. Para resolver o problema do relacionamento basta que na tabela Estate exista a coluna cityid.

2 - Action Pack: Com ele temos uma junção do seu chamelleon com o LABASE, onde temos os conceitos de controller e actions e ao mesmo tempo podemos ter um, ou mais, layouts que dá a cara geral da aplicação e onde só escrevemos o trecho de tela que nos interessa. Ele nos oferece vários helpers para facilitar a construção das nossas views que são chamadas de rhtml e são similares ao JSP e as telas de PHP.

Acho que vale destacar também que em Ruby existe o RJS, onde escrevemos código em Ruby e eles são transformados em javascript tornando mais fácil fazer determinadas coisas em AJAX. Falando em AJAX ele já tem todo o suporte ao scriptaculos, tornando trivial gerar uma tela usando AJAX.

Mestre, eu achei realmente válido esse seu questionamento e espero ter explicado um pouquinho de várias coisas e que você entenda que não é apenas hype, a coisa é realmente boa!

Várias pessoas criticam e defendem outra linguagem sem conhecer e você foi bem coerente em questionar sobre alguma coisa que você não conhece tão a fundo.

Resposta dele:

Ah bom. Legal que as coisas sejam assim. É que eu fico muito, muito preocupado mesmo com o hype que se cria em torno de uma nova tecnologia. E fico com a pulga atrás da orelha sempre que vejo essas apresentações RAD, que pra mim parecem uma enganação (não que o fato de ser RAD em si seja ruim; acontece que estamos fartos de sistemas que começam RAD e viram uma dor-de-cabeça, uma âncora que arrasta uma instituição). Eu gostaria até de sugerir, mais pra vocês do que pra mim (que dificilmente vou usar Ruby algum dia por aqui), que façam apresentações mostrando o lado ágil da plataforma; que comecem com um sistema pronto, que seja grande, e façam alterações PROFUNDAS no mesmo, pra mostrar que aquilo não vai virar um peso com o tempo. Da minha parte (ok, sou uma minoria aqui), eu olharia com bons olhos uma tecnologia que começasse a ser apresentada desta forma, e não da forma RAD.

É uma pena não ter ainda a parte de refactoring bem resolvida. Na verdade, Java também não tem refactoring, quem tem é o Eclipse, o IDEA (será que o JBuilder já tem alguma coisa) etc. O povo do Eclipse não está fazendo nada pra Ruby não?

Quanto ao "Convention over Configuration", já tinha notado que algumas tecnologias caminhavam nesta direção (por exemplo, o XDoclet, que "infere" coisas a partir da cara da classe, mesmo que não estejam explicitamente configuradas como tags). Acho que podiam avançar ainda mais.

Sobre o ActiveRecord, muito legal que uma camada de persistência possa ser construída de forma tão simples. É realmente algo de que qualquer linguagem carece... e o pior é que persistência nem é um problema novo nem raro... TODOS os sistema de informações (e HÁ DÉCADAS) PRECISAM persistir informações. Meu sonho era que isso fosse ainda mais um passo adiante: que só o fato de existir uma tabela no banco de dados já criasse a classe on-the-fly (obviamente com a possibilidade de se programar algum comportamento específico de validação/verificação/aviso/notificação para alteração/criação/remoção de registros) sei lá de que forma, seja por uma máquina virtual pirada, ClassLoader malandreado ou sei lá o quê.

Mas, ainda sobre o ActiveRecord, me chama atenção a necessidade de herdar de uma classe. Espero que Ruby tenha herança múltipla (uma grande falha do Java); porque se só for permitida a herança simples, então o conceito de "super-classe" é um artigo de luxo (já que cada classe pode possuir apenas uma super-classe) e não deveria ser desperdiçado na implementação de um aspecto puramente tecnológico (ao invés disso, esse artigo de luxo deve ser gasto para fins mais nobres, como a implementação da verdadeira hierarquia objetos do mundo real no modelo de dados da aplicação). Obviamente essas considerações morrem se for permitida herança múltipla.

Valeu pelos esclarecimentos.

Mais uma resposta minha:

Mestre, em Ruby existe um conceito de mixin que permite que você faça a herança múltipla. Então esse problema estaria resolvido. Vou bolar um exemplinho e te mando em breve. Me cobra !

Com relação ao seu sonho de on-the-fly ele existe em Ruby! Existe um plugin chamado Magic Model que permite isso.

Tags , , , ,  | 9 comentários

Análise de cobertura de testes com Rcov

Publicado por Marcos Tapajós há mais de 3 anos.

Colocamos no ar um novo artigo que explica como usar o Rcov para analisar a cobertura de testes automatizados.

O artigo tem o formato de um tutorial e explica como usar o Rcov passo-a-passo, através de exemplos práticos. Confira!

Tags , ,  | nenhum comentário

Artigos antigos: 1 2