quarta-feira, 8 de junho de 2011

Enxuto ou Úmido?

Tive a oportunidade de participar do 3o. Forum Nacional de Lean em Recife, neste dia de 23/05/2011.

Foi uma feliz surpresa em constatar que a multiplicidade cultural do nosso país se reflita também na excelente competência dos nossos profissionais em qualquer que seja a região. As paletras foram muito boas. Ver cases de empresas de empresas como Bombril com o desafio de reestruturar a principal linha de produção da sua fábrica, as ponderações de como entre entregar valor concreto para a alta direção mesclando resultados tangíveis de curto e longo prazo. Assistir ao compartilhamento da experiência de consultores de empresas como Honsha, SIQ, Aliada ou UNESP indo da gestão do conhecimento aos desafios de implementações Lean ao redor do mundo foi muito bom. A propósito, as apresentações estarão disponíveis aqui.


Um ponto que me chamou atenção foi que as apresentações sempre foram recheadas com números e, indo além, usando indicadores padronizados. Os profissionais de todas as empresas presentes entendiam o significado desses indicadores, dando margens a comentários comparativos.

Enquanto isso o pessoal de software ainda fica brigando para ver se vai ou não usar um quadro branco, se deve ou não fazer as reuniões diárias, censurando ou não a participação dos clientes. Talvez o foco esteja errado. Nós precisamos dos números, dos indicadores. Onde eles estão? O nosso espelho não é a linha de montagem, mas sim a área de criação de produtos. Entendam que não fazemos sistemas de contabilidade em série. Ou você faz?

Quando você vê um vídeo mostrando o antes e o depois de uma revisão no layout de uma célula de trabalho, com o pessoal realizando o trabalho uns dos outros, faz refletir sobre a importância do entendimento do real significado do Enxuto (a.k.a. Lean). Ficar lutando com o cliente para que ele ajude a implementar melhor o software dele, tem que estar errado. Insistir que qualquer um pode implementar o software sem o entendimento adequado do negócio, tem que estar errado.

Quando a turma do software vai se preocupar em fazer as perguntas certas como: Quais os indicadores do meu trabalho? Como alguém que contrata meus serviços pode comparar com outro fornecedor? Como produzir software com uma participação real do dono do produto? O que deve ser entregue a empresa que produz o software e a quem compra? O que, afinal de contas, se espera de quem produz o software, o pobre do desenvolvedor?

Alguém poderia dizer (na verdade disse :)) "não seria interessante responder as perguntas que você faz, ou então dar dicas de onde encontrar?"

Ok! Desafio aceito. Missão para o próximo post!

Abraços,

Wesley

quarta-feira, 13 de abril de 2011

Qualidade de Serviços (ou Oportunidades para Serviços)

Veja você... dia desses estava num shopping desses da vida e resolvi comer no Subway que, como vocês sabem vende sandwiches bem generosos. Chegando ao balcão para o atendimento, fui surpreendido com a seguinte frase:

"-Boa noite, estamos sem pão no momento. Só estamos montando salada."

Fiquei olhando perplexo para a moça que me atendeu, pensando em tudo que poderia falar a ela, em outras tantas coisas que não deveria.

...

Ela emendou:

"-O Pão vai ficar pronto em uns 15 minutos."

Inspirado, falei: "-Você perdeu a venda."

* * *

Outro dia, sentei com outros 3 colegas num galeto, mas desses com mesa, não um "bumbum-de-fora". Passou um garçon, passou outro, um terceiro, um quarto que limpava a mesa de trás olhou para nós, fingiu que não viu e continuou a sua atividade. Cansado dos bons 15 min. sem qualquer atenção - e insistindo no restaurante - praticamente laçamos uma atendente.
-Por favor, estamos aqui há uns 15 min e ninguém veio nos atender. Queremos fazer o pedido!
-Aqui tá meio confuso hoje. É que estamos "sem sistema".


Não há necessidade de nenhum comentário adicional.

* * *

Quando me deparo com situações como essas o primeiro pensamento que tenho é um binômio Carência x Oportunidade.

Isso parece ser algo congênito no nosso Brasil e mais aflorado em algumas cidades ou regiões e é impressionante o desrespeito com o cliente. Mas não vou seguir por esse caminho dos coitadinhos.

O donos dos negócios tem uma carência enorme de pessoas bem capacitadas, com habilidade de liderança, que conheçam do negócio e sejam flexíveis. Que possam, em situações fora do caminho normal, serem capazes de lidar. Lidar não, agir naquele momento importante e crítico e não ficarem travadas, desesperadas, andando em círculos. Como diz um amigo meu, "na reta todo motorista é bom e rápido, quero ver é fazer as curvas".

Essa carência não está limitada aos botecos, restaurantes e lojas de roupas. Ela é vista em diversos lugares, mas principalmente no setor de serviços. Vamos retirar da equação as indecisões dos clientes e em como eles não se preocupam com definir suas solicitações, exigindo medinuidade dos prestadores de serviços :)

O quanto você tem se preocupado com a sua formação nessas outras áreas de conhecimento fora do técnico? Claro que o conhecimento técnico especializado é premissa, ou seja, você tem que ter. Mas e liderança, relacionamento interpessoal, um pouco de finanças...

Existem habilidades que são exigidas no dia a dia, mas que não são citadas nas entrevistas ou nas descrições de vagas internet a fora. Você ter uma oratória boa, conseguindo se expressar em público ou não, ter competência para organizar uma idéia em um texto (leia sumário executivo), sabendo pesquisar um assunto. Entender o quanto custa determinada ação da empresa e conseguir demonstrar isso para o "dono" do negócio, com certeza vai separar os meninos dos homens (ou as meninas das mulheres :)). Existem livros, cursos dos mais diversos preços, palestras, filmes etc.

As opções existem. Mas você sabe que elas estão lá?

sexta-feira, 8 de abril de 2011

Bobyshop - ao pé da letra: Loja de Corpos


Kombi lotada

Recentemente tive a oportunidade de trabalhar com Cláudio Pires e, apesar da sua imensa experiência profissional e dedicação ao estudo da engenharia de software, até então não tinha tido o contato com o modelo de bodyshop, o que causou estranheza e até uma certa revolta. Como este modelo é um velho conhecido meu, vou tentar ajuda-lo a desvendar um pouco esse, digamos, modo de trabalho.

* * *

O Bodyshop é um modelo de negócio e ponto. Como um modelo que se preze ele tem algumas características e fomato que é facilmente replicado.

Sobre modelos, vou falar rapidamente sobre uma entrevista que assisti um vez do presidente da Volkswagen do Brasil. Em certo momento da entrevista ele foi questionado sobre a Kombi e o porque de não moderniza-la, com ar-condicionado, vidros elétricos etc. Sim a velha Kombi que vemos em alguns filmes com hippies e que fazem lotadas pelas nossas cidades. Com muita calma, ele respondeu que as características da Kombi, o público alvo e a sua faixa de preço a colocam em um nicho de mercado, pois essas mesmas características representam um. Se outras montadoras quiserem concorrer com a Kombi, elas que venham para esse nicho.


A Loja


Voltando a nossa loja. Esse modelo é usado quando uma empresa - geralmente de médio para grande porte - precisa terceirizar parte da sua estrutura (no nosso caso: TI) ampliando o seu quadro de profissionais, de maneira geral durante um período limitado de tempo. Para isso a tal empresa recorre a outra empresa especializada que disponha de profissionais capacitados para suprir tal demanda. Fácil, né? E é. Essa idéia fortaleceu no Brasil por volta da década de 90 do século passado com as empresas se especializando em seu negócio, pois não fazia muito sentido uma empresa de egração de energia ter cozinheiros em seu quadro de funcionários, por exemplo.



Este modelo tem três partes muito fortes: A empresa Cliente, a empresa especializada e o funcionário especializado da empresa especializada.

Empresa cliente - Tem a demanda e o dinheiro para contratar. Ela estrutura essa demanda, identifica a quantidade e perfil de profissionais necessários a ela e faz uma concorrência - geralmente por preço (vamos tocar nesse ponto mais adiante). Classicamente a gestão dos profissionais fica com essa empresa cliente.

Empresa especializada - Uma empresa de TI em sua mais ampla definição - desenvolvimento, suporte e outros bichos -, que possui funcionários capacitados e busca demandas para disponibilizar a clientes que necessitem de equipe especializada. Ela sabe quanto custa cada profissional e, basicamente a conta do preço é: Custo de cada profissional * Qtd de profissionais * tempo da prestação de serviço * margem = Preço. Eu disse basicamente.

Funcionário especializado da empresa especializada - O profissional com cursos, certificações que conhece o tipo de serviço a ser executado, naturalmente em diversos níveis - pleno, júnior, estagiário, e até sêniors, que vai trabalhar em uma empresa especializada em busca de aprimoramento profissional, uma carreira e, claro, participar de projetos interessantes.

Simples, né? Não é.

Atrás do balcão



A empresa cliente não sabe exatamente o que quer ou o que precisa, sofrendo de falta de planejamento crônico. De maneira geral, "estima" uma quantidade de pessoas para fazer "um serviço" por tanto tempo quanto seja necessário. Para completar, tem dificuldade de diferenciar atividades estratégicas de desenvolvimento corriqueiro, não consegue avaliar produção e entregas de seus fornecedores; espera pela capacitação adequada, mas não necessariamente solicita isso de forma clara e objetiva. Para aliviar um pouco a qualificação da contratação "exige" CMMI´s e cia. além de certificações dos profissionais. Não sabe exatamente do que precisa, mas se recusa a falar isso abertamente com seus fornecedores.

A empresa especializada não tem os profissionais. Na maioria dos casos ele consegue o contrato e depois os profissionais que não rara as vezes são contratados diretamente para atender a empresa cliente. Na prática, muitas dessas "empresas especializadas" são verdadeiros setores de Recursos Humanos especializados em profissionais de TI. Na composição do preço, quando se contrata profissionais CLT, deve estar previsto os encargos trabalhistas com demissões, férias e outros, fazendo que a margem não seja tão grande assim. O resultado vem mais ao fim do contrato, com as substituições dos profissionais, negociações com valores um pouco menores do que o contrato. Verdade seja dita: não é tão simples. Para um resultado bom, precisa de volume.

Já o funcionário especializado da empresa especializada, quer trabalhar da melhor maneira possível, usando as melhores técnicas. Muitas vezes está em busca de oportunidades e tem muitas idéias. Porém, em muitos casos, esbarra nas limitações do cliente, não tem nenhuma referência da "sua empresa", fica em busca de uma identidade que, na prática não existe. A sua empresa oferece pouco - ou nenhum suporte -, muitas vezes é apenas "a boca do caixa". Enquanto o cliente, não raras vezes, deixa claro que ele é Terceiro (quando na verdade não é Quarteirizado). Em vários momentos quem defende o funcionário é alguém da empresa cliente, pedindo aumento por ele numa inversão total. Quando quer se aprimorar tecnicamente, existem perguntas que lhe são feitas: "-Quem pagará por isso A empresa ou o cliente?", "-Como será o faturamento dos dias ou horas em que você não estiver presente?", "-Passagem aérea, hospedagem? Para que é esse congresso?". Nesse momento esquece-se de que o modelo tem 3 partes interessadas e os questionamentos são colocados como somente uma (o funcionário) quisesse "se dar bem". É nessa hora que a falta de especificação por capacitação do cliente, a ausência de um planejamento mais amplo da empresa aflora e, quem sofre com isso é o funcionário.

Um parênteses. Não ache você que sou do tipo romântico e com visão de esquerda paternalista onde a empresa deve pagar por tudo. A formação é sim obrigação do profissional. Mas o ponto é, ninguém quer negociar, ninguém quer ser parceiro nessa hora e é quase uma gincana conseguir uma liberação de 1 ou 2 dias. Por ninguém entenda o cliente e a empresa especializada. Fecha parênteses.




Além o horizonte



Antes que você desista de atuar nesse formato, primeiro que você tem que aceitar que esse é um modelo de negócio real, que é largamente praticado e que é responsável por muitos salários de muitos profissionais.

O ambiente do cliente, por muitas vezes te dá condições e acesso a vários contatos com pessoas influentes, clientes, parceiros de negócio, fornecedores, permitindo que você vá a lugares que não tinha idéia de existir. O você acha que conseguiria facilmente bater um papo com um arquiteto de software classe mundial de uma empresa de três letrinhas?

Esse ambiente do cliente também tem seus rigores posistivos como, não poder fazer horas extra. Com isso, você pode avançar naquela pós ou permitir que você conclua sua graduação, ir a academia ou dar mais atenção a seus filhos. Decidiamente não estamos falando do inferno na terra.

Agora, você de maneira nehuma é obrigado a trabalhar só nesse formato, mas conheço pessoas que estão felizes há mais de 10 anos no mesmo cliente, na mesma empresa especializada.

Bem verdade também que esse modelo abre oportunidades, como espaço para você se especializar em um determinado negócio ou, principalmente, buscar como gerar valor agregado ao negócio, pois essa preocupação dificilmente está presente nesse modelo.


Abraços,

Wesley


p.s.: Cláudio, obrigado pelo incentivo para esse post e boa sorte no seu novo caminho! Seja Feliz!

terça-feira, 8 de fevereiro de 2011

Desvendando o negócio - ou onde está o dinheiro na informática?

Cenário 1: Indo ao site da OAB você vai encontrar uma lista de referência de valores a serem cobrados pelos advogados. Referência, pois não é uma tabela de preços, pois a OAB não obriga o advogado a cobrar o valor. Olhando a lista, alguns tipos de causas tem como sugestão um percentual do valor em questão.

Cenário 2: Depois de terminada a proposta para a grande concorrência, totalmente dentro do prazo, basta entregar o envelope lacrado no endereço destino. O gerente comercial chama o motoboy e paga o valor da corrida até o destino.

Cenário 3: Um especialista "sujeito-homem" é chamado para avaliar uma linha de produção para melhorar a eficiência dela. Depois de uma avaliação ele declara: Vamos medir a sua linha de produção. Não te cobro nada pelo serviço e você me dá 10% do ganho ao longo de 24 meses. Topa?

Interessante observar que, nós da área de informática, vivemos uma realidade paralela em relação ao restante do Brasil. Temos uma rápida curva de crescimento de remuneração mas, da mesma forma, chega-se a um teto virtual com relativa facilidadee aí começa um quê de insatisfação. Antes de prosseguir, se você discorda dos valores, compare quanto tempo um contador - trabalhando como funcionário - demora a atingir R$ 4.000,00.

Essa sedução ajuda você a entrar no jogo, mesmo sem saber exatamente das regras. Pois bem, a nossa área tem por característica primordial ser uma área meio, ou seja, ajuda outras áreas a atingirem seus objetivos. Isso você já sabia, podia não se lembrar... Para não nos dispersarmos vamos desconsiderar o pessoal que trabalha fazendo software pelo software, como sistemas operacionais e cia.

Voltando ao jogo, as "consultorias" - a.k.a. Fábricas de Software -, oferecem o serviço de fazer qualquer software, baseando-se basicamente no prazo necessário, de acordo com a quantidade e custo dos analistas de sistemaS envolvidos. Como não existe uma única empresa no mercado, elas disputam - em geral - pelo menor preço. Do outro lado, os clientes compram os serviços para fazer qualquer software. Existem alguns temperos extras como certificações para valorizar os serviços, mas não muda o jogo.

No meio do jogo, os analistas de sistemaS (o "S" assim é de propósito pois, afinal, fazemos qualquer sistema) querendo um bom ambiente de trabalho, um plano de carreira... Ou querer fazer o novo grande site da internet, querendo fazer valer tudo que estudou nos cursos e na faculdade: algoritmos, linguagens de programação, banco de dados, alguma coisa de modelagem, matemáticas e uma ou outra variação.

Qual é a pergunta certa a ser feita? A verdade é que aprendemos muita matemática e não a fazer conta.

Indo a pergunta:

Se a minha atividade é meio para outra, quanto ofereço para a atividade fim que apóio?

Essa é uma pergunta interessante. Talvez no caminho para responder a esta pergunta fique mais claro porque ofertas de serviços como ERP sejam mais caras, ou melhor, mais fáceis de colocar valor. Os tais dos ERPs talvez sejam mais inteligentes em indicar o ganho para o negócio, pois, ao menos, conhecem melhor um sistemA.

Precisamos entender muito melhor o que é um processo de negócio, o quanto esse processo vale para o cliente e, principalmente, quanto ofereço a esse negócio. Devemos nos afastar do motoboy e nos aproximarmos mais do especialista, visto que para o advogado a mensagem é clara: Se você vai ganhar muito dinheiro e precisa de mim para isso, nada mais justo que ter uma participação nesse ganho.

E você, ainda está perto do motoboy sem se preocupar com o que tem no envelope?

Um abraço e até a próxima.

Wesley

p.s.: Esse texto não teve a intenção de diminuir nenhuma profissão.

sexta-feira, 21 de janeiro de 2011

There is no silver bullet

Esta frase é muito antiga na engenharia de software e diz muito. A "bala de prata" refere-se a uma solução única e definitiva para a fonte geradora de todos os problemas.

Apesar de ser um tópico conhecido, é impressionante como essa bala é perseguida com afinco, gana e muita vontade, mais ou menos como o pote de ouro no fim do arcoíris (daí a brincadeira com o título desse blog :-D).

Para incrementar o caldo, o mercado de uma maneira geral, distorce a produção de software, vendendo que as fábricas de software podem produzir em série. Porém um pequeno detalhe não é dito de forma clara: Produzir software é muito mais a criação de uma receita do que executar receitas prontas (vide: Lean Software Development: An toolkit). Ou normalmente as fábricas de software produzem vários "sistemas de contabilidade"?

Por outro lado, os compradores de serviços de produção de software, não sabem comprar o valioso produto. Aproveito para insistir em um ponto: a culpa é de quem vende software! Assim, em diversos casos o que vemos é a compra de software "a quilo" disfaçadas pelo formato de negócio bodyshop.

O avanço nas técnicas e ferramentas disponíveis no mercado cada vez mais caminham para oferecer resultados tangíveis o mais rápido possível, evitando atividades e trabalhos desnecessários. COntudo o que tenho visto é uma tentativa de fazer tudo da mesma maneira que sempre feito. A tal bala de prata.

* * *

Este post com uma tempestade de informação é o reinício de atividades neste blog. Espero que gostem.

Abraços,

Wesley

quarta-feira, 16 de setembro de 2009

DevInRio - Eu estive lá!


Nesta segunda, dia 15/09 estive no Dev In Rio.

Depois de um longo inverno, tivemos aqui no Rio um evento para os desenvolvedores. E que promete.

O Dev do título já mostra o foco. Com a participação de palestrantes internacionais e brazucas, além de uma trilha em paralelo de Dojo para degustação de algumas tecnologias, fui um dia muito agradável com cerca de 400 pessoas a fim de ouvir, trocar idéias, ver coisas novas.

O tom foi desenvolvimento ÁGIL, mas essa galera que escreve-testa-e-entrega, também foi dito coisas sobre produto, negócio - ainda que de forma leve - mas colocando na pauta que o software por si só pode não gerar tanto retorno financeiro (isso tem muito haver com a cultura brasileira, tema que conversarei em breve...)

O fato é o seguinte a base da pirâmde está se mexendo para aprender coisas novas, agir diferente. E a história conta que diversos grandes movimentos começaram por aí.

Como muita gente já "tuitô" e "blogô" por aí, vou me limitar a um breve resumo do que eu vi:
  • Joomla - Ryan Ozimek falando sobre o ecosistema dessa ferramenta de portal e como ele é um negócio open source;
  • O Java está Morto? - O pessoal da Caleum representados pelo Nico e pelo Guilherme falando como a plataforma Java está evoluindo prmitindo o uso de várias linguagens como Ruby, Scala, Python, Groovy... e até Java. O foco é usar o melhor de cada linguagem para resolver cada problema.
  • Ruby - Fábio Akita falando um pouco (ou muito) sobre Ruby (Com certeza está na minha pauta!).
  • Software como Produto - Jeff Patton falando de um jeito fácil sobre preocupações que você deve ter quando pensa em criar um produto. Excelente!
  • (DJango - Essa palestra eu não assisiti)

Alguns links e outros bichos falados ao longo do dia:
  • 17/11/2009 - Caelum Day (Aqui no Rio!)
  • 13 e 14/10 RailsSummit - SP
  • www.latinoware.com
  • http://www.guanabara.info/
  • akitaonrails.com (slideshare.net/akitaonrails)
  • http://gettingreal.37signals.com/
  • http://ruby-toolbox.com/
  • rubylearning.com
  • agileproductdesign.com
Abraços,

Wesley

quarta-feira, 3 de junho de 2009

Inovação Pouca é Bobagem

Dia desses estava navegando na internet pelo site Omelete - site sobre entretenimento de forma geral - quando li - e vi - uma notícia que me chamou muito atenção.

Filme como "Star Wars" e "Star Trek" sempre foram verdadeiras referências para o tema ficção científica, colocando na grande tela coisas que que, de certo modo, só poderiam ter sentido naquele mundo ficcional, o que acabava deixando a nossa realidade a anos-luz daquela (não resisti ao trocadilho infame).


Não me refiro apenas as viagens no tempo as armas laser, mas a pequenos elementos corriqueiros daqueles personagens como: comando vocal a um robô ou a um computador para fazer "quase" tudo, uma vídeo conferência entre duas naves, uma projeção holográfica para uma mensagem, um comunicador "sem fio" que cabe na mão, um reconhecimento de expressões que estimulem o ambiente a acalmar o personagem, por exemplo. Filmes/séries da década de 60/70 do século passado!


É claro que se procurarmos pela internet conseguiremos diversas listas com esses elementos, mas o ponto que me chamou a atenção foi o grau de sofisticação da interação homem-computador para ser usado dentro de casa (!!), não em um centro de pesquisa ou um departamento de tecnologia avançada em algum país de "1o. mundo".

Vamos ao link para continuarmos o papo: nesta página no omelete tem o link para alguns vídeos, mas bastam os dois primeiros.

Uau! Caraca! E outras interjeições foram proferidas por mim e por alguns cologas que viram esses vídeos.

Sinceramente não pensei que fosse ver esse tipo de tecnologia tão cedo. Estou com meus 33 anos e, inocentemente, achei que demoraria bem mais - 20 anos? - para testemunhar esse grau de interação.

O último degrau de avanço recente que vi foi o Wii da Nintendo e, inocente de novo, achei que as "novidades" viriam nesse patamar. Já dava isso como certo quando o iPhone "inovou" na mesma direção.

Pois é! Mas a Microsoft levou a conversa para uma outra ordem de grandeza. Todo o reconecimento de movimentos de corpo inteiro, facial, vocal, scanner em 3 dimensões, reconhecimento de imagem... tudo em tempo real sem o "loading" (ao menos nas demonstrações...) é no mínimo impressionante!

E os nossos tímidos sistemas de informação com telas e bancos de dados?... Não sei! Mas que a evolução está a nossa volta e bem mais próxima do que imaginamos, isso não resta dúvida. Fica no ar aquela velha pergunta:O que VOCÊ está fazendo a esse respeito?

Um abraço,

Wesley

segunda-feira, 16 de março de 2009

Ainda sobre a Nova(?) Ordem

No final de 2008, os bancos entraram em greve. Creio que tenha muita gente que não percebeu o evento, mas como eu trabalho no centro do Rio, podia ver representantes do sindicato acampados nas portas dos diversos bancos existentes na Rio Branco e adjacências. Realmente não sei quantos dias exatos foram, mas a história rendeu bem mais que 4 semanas!

Se o mesmo evento tivesse ocorrido no final da década de 80 - do século passado - provavelmente as manchetes de jornais e telejornais não se cansariam de anunciar o feito e as consequências negativas para o comércio, a vida de cada um dos clientes. Enfim essas coisas. Mas isso não ocorreu.

O que isso tem haver com o nosso desenvolvimento de software? Tradicionalmente somos atividade meio para a realização de negócios. Vejamos que lições interessantes podemos observar:

1) Diversos dos serviços bancários vem sendo terceirizados e distribuídos por empresas "parceiras" procurando viabilizar a continuidade dos negócios, minizando seus riscos. Essa terceirização cobre, por exemplo, a guarda e distribuição do dinheiro.

2) Os bancos criaram diversos canais alternativos a agência física para que os cliente possam realizar o seu auto-atendimento como os caixas eletrônicos, as centrais telefônicas, os home bankings, o celular...

Ora ambos os cenários estão fora das asas sólidas dos sindicatos que querem se manifestar da mesma forma que faziam no século passado. Eles não tem como impedir a empresa de valores de carregar um caixa eletrônico, não podem impedir uma pessoa de pagar uma conta pela internet ou evitar que uma ordem de pagamento agendada seja realizada. Bom, as empresas não ficaram paradas.

Por esses canais "novos" (ao menos para os sindicatos são, pois parecem que não se deram conta da sua existência) passam sistemas de informação e tecnologias que são cada vez mais baratas e, principalmente, mais urgentes nas vantagens competitivas dessas organizações “capitalistas”.

Fazer software requer cada vez mais atenção ao negócio, ou seja, aos motivos reais da criação daquele software. Porque ele tem que existir? Mas isso não é coisa nova, não coisa de "agilista", isso é tema na engenharia de software a muitas décadas, mas parece que muitos de nós não se deram conta ainda que, atividades econômico-financeiras devem gerar resultados positivos, ou seja, dinheiro.

Os sindicatos estão com alguma dificuldade de perceber que os tempos mudaram. E o seu desenvolvimento de software está com a mesma visão há quanto tempo?

Até a próxima,

Wesley

Nova (?) Ordem aqui, ali e aí


Recentemente li o livro Wikinomics - Como a colaboração em massa pode mudar seu negócio.

O livro de um texto fácil e muito interessante é resultado de uma ampla pesquisa coordenada pelos autores desde 2000, envolvendo as cifras de US$ 9 milhões. Ou seja eles viram a internet evoluir, crescer e... 2.0!

O texto não se prende a internet como algo distante, mas cerca os conceitos colaborativos colocando-a como infra-estrutura de trabalho e, principalmente demonstrando como esses conceitos acontecem em empresas bem reais e concretas como Boeing, BMW, IBM, Lego, Apple, Prefeituras... só para citar algumas.

Conforme o livro vai evoluindo por cada um desses conceitos vai ficando claro que uma boa infra pode - e deve - dar um excelente suporte ao negócio, gerando economia e resultado financeiro positivo para a(s) empresa(s). Uso de blogs, wiki´s, estímulo a colaboração premiada (sim tem dinheiro envolvido para quem colabora), estímulo a comunidades; são exemplos dessa infra.

Como nem tudo são flores, o texto também cita efeitos colaterais, problemas reais que são e podem ser enfrentados, sempre cercado por "ilustrações" reais. Essa atitude só valoriza ainda mais o livro.

Recomendo a leitura para aqueles que estão no mercado e principalmente para os que ainda pretendem ficar mais algum tempo. Ah, não só para quem é da área de tecnologia, porque negócio é negócio em qualquer área.

Até a próxima,

Wesley

segunda-feira, 4 de agosto de 2008

Reflexão sobre o nosso mercado

Recentemente teve um papo legal no RioJUG e fiz uma colaboração que achei interessante deixá-la aqui...



O mercado de trabalho mudou muito da década de 70/80 até hoje. Antigamente não existia a enorme oferta de cursos técnicos, faculdades, cursos livres que hoje há; o que significa duas coisas básicas: 1) O mercado era extremamente carente de mão-de-obra qualificada; 2) Para as empresas andarem, elas precisaram absorver essa responsabilidade. Provavelmente esse cenário foi o de alguns de nossos pais e, conseqüentemente, o que ouvimos em casa e temos como referência.

Hoje em dia pré-requisitos como cursos técnicos, inglês, graduação em contratações/ concursos/ processos seletivos em geral é algo normal e impensável nas décadas passadas. O que para nós significa que essa responsabilidade pela boa formação agora é de cada profissional e não das empresas.

Outro ponto interessante a ser observado é que na nossa área de desenvolvimento de software vive um universo paralelo, ao menos em relação a realidade do Brasil (tem dias que o e-panelinha publica +50 oportunidades) , e com isso existe muita oferta o que nos leva ao ponto-chave: O que cada um de nós pode fazer?

Ora, como primeira ação, que tal se nós fossemos mais rigorosos na hora de escolher a empresa para onde vamos antes de mudar de chapéu por alguns poucos reais? São só alguns reais a mais que nos interessam? O que esperamos para nós daqui a 3, 5 anos? Se as empresas "ruins" não conseguirem reter ou captar talentos, elas é que terão que mudar revendo sua forma de atuação e relacionamento com seus colaboradores.



Abraços,

sábado, 26 de abril de 2008

HCL - Senac - Download de Apresentações

Pessoal,

Estou disponibilizando as apresentações demo´s da palestra de ontém no Senac sobre ASP.NET MVC e ASP.NET DYNAMIC DATA.

 

São dois PPTs e dois demos. Subi também o script sql para geração do banco de dados para o demo do ASP.NET MVC.

 

Clique na pasta abaixo para acessar.

 

 

 

Abraços!

segunda-feira, 21 de abril de 2008

Evento no SENAC - Framework MVC, Scaffolding no ASP.NET Extensions

Pessoal,

Na próxima sexta-feira, 25/04, estarei palestrando sobre o ASP.NET MVC incorporado nas extensões do ASP.NET. Também falarei sobre Dynamic Data, conhecido também como Scaffolding.

 

Para maiores informações e inscrição, clique aqui.

 

Abraços!

sábado, 29 de março de 2008

HCL Franca - Links para as Apresentações

Pessoal,

Segue o link para download das apresentações do evento de Franca, HCL.

Apesar de não ter dado tempo para falar sobre Enterprise Library, disponibilizei esta apresentação tb.

Clique aqui :-)

 

Até!

domingo, 16 de março de 2008

HCL em Franca, como foi?

Olá Pessoal,

Estou muito contente como evento ocorrido em Franca .

Após 11 horas de viagem (isso mesmo!) cheguei em Franca e durante a sexta-feira preparei alguns "demos" restantes. Conheci a Universidade que possui uma infra-estrutura bem legal e fizemos testes para evitarmos contratempos de última hora. É claro, também conheci o Shopping de Franca e fiz umas comprinhas, afinal ninguém é de ferro né?! rs

Quem me apresentou Franca e a Universidade foi o Professor Jorge, que foi muito receptivo e me auxiliou em tudo que precisava, garantindo o sucesso do Evento! Obrigado, Professor.

Bom, no Sábado chegamos a Unifran por volta das 8 da matina para preparar o ambiente e refazermos os testes.

Tudo preparado e....... casa MUITO CHEIA, o auditório tinha capacidade para 208 e apenas algumas cadeiras vazias! Foram 201 presentes. Muito legal, contando que estava chovendo e um Sábado pela Manhã! Abaixo uma foto do auditório.

 Auditório da Unifran

A primeira etapa foi uma primeira palestra da Microsoft, transmitida via Webcast. Aúdio e PPT perfeitos, o vídeo não veio, infelizmente. Pela manhã estava tudo OK, apenas um pouco lento. Isto não atrapalhou a mensagem. :)

Chegou a minha vez, já sabendo que seria um dia cansativo, pois o evento foi até pouco mais das 17 horas e sendo eu o único palestrante.  A primeira palestra falei sobre as novidades do Visual Studio 2008 (algumas já citadas na apresentação da Microsoft) e da versão 9 do Visual Basic, sempre com uma Demo associada a cada novidade (extensions, queries, tipos anônimos, declaração implícita e etc). Eu queria ter falado sobre o Enterprise Library ainda pela manhã, mas acabei falando muito e não houve tempo. :-( Ah... falei também sobre  o Team System, ultrapassando a fronteira dos desenvolvedores.

Após o almoço, achamos que várias pessoas deixariam o evento, o que não ocorreu. :) CASA cheia novamente. Comecei falando sobre o LINQ, um pouco mais aprofundado do que pela manhã e desenvolvemos duas demos, através de console e windows forms, tentando utilizar sempre as facilidades da IDE (datasources, server explorer...).

Após o LINQ, falei um pouco de WCF que no Visual Studio 2005 era doloroso (criação de hosts na mão, sem editor de configuração e aí vai, levantado a necessidade de utilizarmos o Web Service Software Factory). No Visual Studio 2008 as coisas simples, agora, ficaram simples. :) Escrevi um serviço (tentando utlizar todos as anotações - datacontract, datamember e etc) e publiquei. Para acessar criamos duas aplicações, uma Forms e outra Web c/ Ajax mostrando que a camada de negócio/ serviço em nada foi modificada, apenas reutilizada. :-)

Na terceira palestra, falei sobre AJAX e sobre as melhorias na IDE para desenvolvimento Web, depuração javascript, split view, intellisense de javascript melhorado e etc. Aproveitei para demonstrar o consumo de banda que é economizado quando utilizamos Ajax. Usando o Web Development Helper para o Internet Explorer.

Por fim, falamos do WPF e Silverlight. Comecei apresentando a aplicação Health para uma introdução. :-) Depois falamos sobre alguns conceitos de WPF, diferenciamos WPF de Silverlight e etc.

Para brincar com a platéia, comecei a desenvolver uma aplicação Windows Forms sob os conceitos atuais (listbox, textbox e compania). Criei uma textbox (nome do cliente), uma listbox (com itens sala, cozinha, banheiro - usando LINQ é claro) e uma outra textbox para indicar a cor, através do ColorDialog. A idéia é que o usuário escolha o ambiente da casa e a cor para pintura. Executei a aplicação e perguntei se todos concordavam com o atendimento aos requisitos. :) Aí....... abrir o Blend e mostrei o "sample" Color Watch.... aff... riram da minha aplicação. :-( Nem ficaram tão diferente colocada lado a lado. rsss

Após a brincadeira, apresentei o Microsoft Expression Blend desenvolvi um demo com alguma animação usando o storyBoard e eventos javascript. Infelizmente o tempo foi curto e não consegui demostrar a última demo no Visual Studio 2008, que é muito mais fácil trabalhar com eventos.  Também mostrei um pouco de como trabalhar com vídeo + Silverlight.

Finalizando, sorteamos os brindes, através de uma aplicação web ajax.

Bom, Franca, gostei muito de estar aí e apesar de cansativo repetiria tudo de novo. A recepção de vocês foi muito agradável e a cidade é muito bonita, lembra um pouco Brasília. E como falei com vocês, o interesse que demonstraram nos dá uma impressão que uma comunidade aí seria muito ativa e colaboraria muito para novos eventos na cidade.

Obrigado e espero que tenham gostado! :-)

 

Obs: Estarei publicando os PPTs no próximo post no blog.

 

Abraços e até a próxima. :-)

quinta-feira, 6 de março de 2008

"Heroes" Community Launch

A Microsoft está promovendo um grande evento de lançamento dos novos produtos, incluindo o Visual Studio 2008.

Este evento será composto por palestras em todo o país, em inúmeras cidades. Os locais podem ser consultados através do Virtual Earth através do link Locais das Palestras.

Eu estarei palestrando em Franca, SP (15/03/2008) sobre diversas tecnologias da Microsoft como: LINQ, Entity Framework, WCF, WPF e das boas práticas do Enterprise Library. Para se inscreverem no evento, Clique aqui.

Temos um blog para as notícias do evento no MeioBit, acessem:
Blog HCL.

Espero que gostem! :-)

Abraços

quinta-feira, 21 de fevereiro de 2008

SCEA, Eu passei!

O título do post pode parecer a primeria vista um tanto quanto egoísta ou simplesmente para "aparecer", mas na verdade ele tem uma motivação: O processo para esta certificação segue um caminho diferente do comum (simulado-algum estudo-prova) e, dessa forma, creio que a experiência possa ter utilidade para alguém no futuro.

Já haviam alguns anos eu pensava em fazer a prova de arquiteto java da sun , mas por diversos motivos a iniciativa foi adiada. Eis que no final de 2007, lá pelos idos de setembro (se não estou enganado) numa navegação inocente pela internet num domingo deparei-me com um post informando que a Sun estava abrindo a partir de segunda-feira dia (dia seguinte a navegação) inscrições para a prova beta do tal objeto de desejo. Como estava fazendo uns trabalhos com o uso de especificações ligadas a jee5, achei que este era o momento. Na manhã seguinte falei com meu amigo Fernando e não perdemos tempo e nos inscrevemos.

Um pequeno parênteses: Para os que desconhecem o significado de "prova beta" aí vai. Antes de lançar uma prova para certificar profissionais em sua tecnologia, grandes fornecedores (Oracle, Sun, Microsoft, Cisco, ...) preparam um grande conjunto de questões e submetem a pessoas ao redor do mundo para que a tal prova possa ser calibrada (quais questões são mais fáceis, quais são mais defíceis, quais todos erram e por aí vai) conseguindo também definir a a nota de corte. Além disso, os candidatos devem se sujeitar ao calendário do fornecedor. Em palavras miúdas "você não tem o tempo que quiser para estudar". A contrapartida é que, geralmente, custo para realizar a prova é 0 (zero). Fecha parênteses.

Essa certificação é divida em três provas a saber: Uma prova teórica com todo o conteúdo proposto, uma prova prática com a realização de um projeto baseado numa especificação (casos de uso, diagrama de classes preliminar) e uma prova teórica sobre a prova prática. Não bastasse o calendário apertado, o conteúdo está espalhado pois a "prova" não existe ainda, ou seja, não tem um livro ou simulado. A referência básica é a versão anterior da prova, que nesse caso, mudou muito.

Prova 1
A prova foi composta por 153 questões me levando a ficar na sala da prometric por cerca de 4hs, com o tempero que o resultado não sai na hora. A prova está sendo calibrada a nota de corte ainda não é conhecida... Muitas questões do tipo "Você é um arquiteto numa empresa e ela está escolhendo uma solução XPTOyz. Qual ua recomendação considerando vxvxvxv?" e é claro o que vale é "melhor" resposta.

Ela será enviada... Quando? Um primeiro suplício, pois a data de envio do resultado é planejada, mas nesse caso foi cumprida.


Recebi três e-mails da Sun: Um dando o resultado da prova, informando a aprovação e esclarecendo que receberia mais dois e-mails. No segundo correio veio com o projeto em formato PDF e orientações básicas para a execução da prova. Finalmente, no terceiro e-mail veio o voucher para a realização da terceira prova a ser marcada no representante prometric mais próximo.

Prova 2
A execução da segunda prova, com certeza é a mais difícil. Eu e Fernando havíamos passado na primeira mas, como era de se esperar, nossos projetos eram diferentes. Até aí, uma situação normal, mas qual o grau de detalhamento que o projeto deve ter? até onde ir? o que poderia ser considerado gordura? No PDF tinha mais informações sobre o que era esperado na prova: Diagrama de classes, de sequência, de componentes, indicação de design patterns utilizados, lista de riscos e premissas assumidas. POis é. Assim como na vida real, algumas decisões tem que ser tomadas e, nesse caso, o bom e velho usuário não existe! Então o herói da vez precisa dizer como está preenchendo as lacundas que não estão na especificação. A propósito, o tamanho útil da especificação é de cerca de 3 páginas entre contextualização, diagramas de caso de uso e de classe, especificações dos casos de uso que no meu caso foram 5. Como pode ser percebido muita coisa para pouco espaço.

Na internet mais dúvidas que respostas "Posso usar struts na minha solução?" "Como faço para representar a tomada de decisão X?" "A quantidade de métodos da minha classe está muito grande?". Por sorte a Mundo Java havia publicado em sua última edição uma matéria com várias dicas sobre a certificação o que ajudou muito, mas memso tendo um amigo fazendo a prova em paralelo com você o conflito e as dúvidas são muito particulares. Troca de idéia sempre acontece, mas é no frio da noite iluminada pelo monitor que essas dúvidas explodem feito pipoca. Muito pareto (regra dos 80/20) durante as atividades e vamos que vamos!

Uma vez formatada a prova, ela é envida para a Sun e marca-se a terceira na Prometric.

Prova 3
Nesta última prova, foram respondidas 8 questões discursivas em inglês (só para deixar claro para os mais desavisados) basicamente perguntando "Explique como você tomou a decisão para XPTO". De novo o detalhamento da resposta assombrou. Será que estou falano pouco? Será que estou sendo claro o suficiente na meu texto?

A prova em si não é a pior parte. Mas sim o resultado. A última prova foi feita em /12/2007 e o resultado planejado era para 15/02/2008. As provas 2 e 3 são corrigidas em conjunto e como são discursivas naturalmente não teria como o resultado chegar na hora. Mas e que tal no prazo? Infelizmente, o resultado demorou e a ansiedade tomou conta. No java ranch a responsável sobre certificações da sun colocou um post informando que o resultado estaria no dia 18 no banco de dados da Sun, segundo prometera a Prometric (o curioso é que o post estava no java ranch e não na própria Sun). Nada. Um outro post dizia que o resultado só sairia dia 29/02.

Então uma luz clareou tudo. No dia 19/02 recebi um e-mail confirmando minha aprovação. Uma felicidade só!

Mas... e o Fernando fiel companheiro da empreitada? O e-mail dele não chegou. Indo até o banco de dados de certificação da Sun estava lá indicado que ele fora aprovado na terceira prova e a primeira estava sem resultado, mas como o resultado tinha vindo pelo correio, ele também conseguiu! Só resta agora alguma buracracia para correção dos dados dele.

Então pessoal, depois de uma longa jornada conseguimos o tão sonhado prêmio: SCEA

Um abraço a todos e até a próxima.

p.s.: Sei que tem alguns links quebrados em alguns posts, tentarei resolver isso o mais breve possível.

quinta-feira, 13 de dezembro de 2007

O Arquivo da(s) Apresentações - Finalmente!

Olá Pessoal,

Segue o link do pdf da apresentação realizada no Natal Java Day e no Rio Java Developers.

Fiquem a vontade para comentar a apresentação.

Em breve concluo os comentários sobre ela.

Abraços.

sexta-feira, 7 de dezembro de 2007

Ops! Mais um evento (agora no Rio)

Olá Pessoal,

É rápido.

Evento de java amanhã no centro do Rio. Inscrições e maiores informações
no site do evento.

Estarei por lá paresentando novamente a palestra de EJB3/JPA

Até lá!

Abraços.

quinta-feira, 22 de novembro de 2007

Feliz, Natal!

Após uma curta temporada em Natal estou de volta ao Rio. Com algumas horas a mais do que deveria de vôo, retorno bastante satisfeito, pois o principal motivo da minha viagem a Noiva do Sol foi a participação no III Natal Java Day onde tive o prazer de apresentar uma palestra sobre EJB e JPA. O outro motivo foi descansar um pouco, pois ninguém é de ferro...

Fiquei muito feliz ao ver cerca de 400 pessoas preenchendo as cadeiras do CEFET às 08:30 a manhã no meio de um feriado. Impressionante! Impressionante também foi a organização do pessoal do Jug JavaRN (aos mais desavisados: Java User Group): até transmissão pela internet o evento teve. Coisa de profissinal.

Como nem todos tiveram o prazer de acompanhar o evento, darei um breve resumo da minha palestra aqui.

Comecei falando do histórico da tecnologia java o ponto de vista de iniciativas da comunidade que acabaram influenciando diretamente a sua evolução. Foram citados XDoclet (annotations), Hibernate (JPA), Struts (JSF), Spring (Injeção de depedência, uso intensivo de POJO).

Na seqüência, falei um pouco sobre JPA - talvez o principal avanço da JEE5. Foi apresentado o conjunto dos elementos principais dessa especificação: EntityManagerFactory, EntityManager, Interface Query, ....... Apresentei um pequeno código de um simples CRUD (acrônimo para Create, Retrieve, Update e Delete ou o bom e velho lê-esquece-grava-apaga). Complementei com os prós e contras das estratégias de mapamento objeto-relacional: Um atabela por toda a família de classes, uma tabela por classe concreta e uma tabela por classe com joins.

Como as consultas são umas das facilidades da nova especificação, com a turbinada que a EJB-QL (finalmente) recebeu, citei as consultas simples, nomeadas - aquelas que são "fixas" e com um sentido em definido no sistema, como "pessoasRicas" - usando objetos para facilitar a escrita das Querys. Não foi esquecido o uso das consultas netivas usando o bom e velho SQL, além da citação dos avanços nas funçoes de agregação, subconsultas e afins.

No uso de injeção de dependência foi mostrado a grande facilidade que é o seu uso, assim como o contra-ponto de que as dependências a serem injetadas tem que estar no JNDI. Explico os palavrões:
.Injeção de Dependência - Quando dependências para que sua classe funcione são disponibilizadas para você sem que haja preocupação com a forma de como essas dependências chegam. Um exemplo simples de uma dependência é um EntityManager. Quem providencia isso? O Container.
.JNDI - Java Naming Directory Interface - Uma API padronizada para acesso a serviços de diretórios nomeados como LDAP ou AD. Um conainer tem que prover esse tipo de serviço onde, a partir de um nome, uma busca retorna o objeto.
Com isso até faz sentido o uso de objetos no JNDI para a injeção, já que ele é onipresente enquanto o container estiver no ar.

Os interceptors não foram esquecidos. Essas classes qie ficam na frente de EJBs com comportamento inspirado na AOP (Aspect Oriented Programming - Programação orintada a aspetos) possibilita que interesses interceptem as chamadas aos ejbs e processem permitindo uma centralização desse processamento em uma classe ao invés de estar espalhado por vários lugares colaborando para duplicação de código. No exemplo da apresentação foi considerado o interesse da saber quanto tempo o métodp gasta para processar. O que há de ruim nisso? A classe a ser interceptada precisa conhecer o seu interceptador, o que bate de frente com a proposta da AOP de que o interceptador é que conhece o interceptado. Bola Fora.

Como uma das bases da facilidades da especificação são as anotações, elas foram citadas o tempo todo e, sempre qie possível, ressaltando que os comportamentos padrões tendem a minimizar a escrutade código. Como toda a parametrização feita com anotações pode ser feita também com XML, essas duas opções foram comparadas.

Ainda faltam falar de alguns tópicos...

Procurei fazer uma palestra refletindo pontos fortes e fracos para apoiar a tomada de decisão dos desenvolvedores, não sendo mais uma palestra de EJB3. Espero ter conseguido atingir o objetivo colaborando para o bom uso da tecnologia. A apresentação? Está disponível aqui.

Como não bastasse, após a minha apresentação bati um excelente papo com o Daniel Oliveira do DFJug sobre "Comunidades". Mas isso é um outro post...

Alguns links interessantes:


Abraços.

quinta-feira, 15 de novembro de 2007

III Natal Java Day

Pessoal,

Nos dias 16 e 17 de novembro ocorrerá a terceira edição do Natal Java Day, evento anual promovido pelo Grupo de Usuários JavaRN que reúne estudantes e profissionais de TI que utilizam Java para o desenvolvimento das mais diversas aplicações.

E no 2.º dia teremos inúmeras palestras interessantes, e eu também estarei lá, apresentando os novos horizontes para aplicações usando EJB3/JPA. :-)

Quem quiser comparecer é só acessar o site http://www.jeebrasil.com.br/nataljavaday/index.jsp e realizar a inscrição.

 

Após o evento postaremos mais notícias, fotos e curiosidades! :-O

Conto com a sua presença.

Abraços

quarta-feira, 24 de outubro de 2007

A Fábula dos Elefantes

Era uma vez um grupo de elefantes que viviam em uma pequena clareira. Ao seu redor existiam pequenos eco-sistemas que coexistiam com os paquidermes - alguns arbustos com pássaros, formigueiros, colméias... Vez por outra um novo elefante chegava no grupo ou um antigo saía, mas sempre que algum deles se movimentava, alguns eco-sistemas corriam o risco de serem esmagados, de modo que essas pequenas comunidades precisavam estar sempre atentas ao donos da clareira.

Estive no Microsoft Track (10/10) aqui no Rio. O Evento foi muito interessante, principalmente por assistir a mudança de discurso da Microsoft em relação ao mundo open-source e a comunidades ao redor de suas tecnolgias, mesmo que seja um discurso atrasado pelo menos 3 anos.

O fato é que um dos elefantes está se mexendo e isso merece atenção.

Agrdecimento especial a Otávio Coelho por me apresentar a fábula aqui descrita.

Abraços.

terça-feira, 18 de setembro de 2007

Preparando o Terreno para o Selenium

A importância da realização dos testes em um sistema não é motivo de discussão, mas sem o apoio de ferramenta para automatizar esses testes, essa atividade pode tornar-se um verdadeiro calvário. Ainda mais se houver a necessidade que essa execução ocorra várias vezes ao longo do cilo de vida da aplicação.

Se pensarmos de forma simplista temos duas abordagens para testes:
1 - Dada uma entrada, existe uma saída esperada
2 - Dada uma entrada, observar como será o comportamento do sistema

Nos prendamos a primeira abordagem.

O princípio básico dos testes unitários com o junit se dá através de afirmações (assertions), ou seja, você programa várias afirmações para suas classes através de seus métodos: "dado duas entradas 1 e 1, é esperado que a soma seja 2" e assim por diante.

O Selenium usa esse mesmo princípio realizando testes em função dos resultados respondidos pelo sistema, com o seguinte tempero: Os testes dizem respeito ao sistema como um todo - tipicamente são testes funcionais. Um simples navegar de telas pode reprentar a realização de um cálculo complexo. E é justamente neste ponto que precisamos ter atenção.

Vamos a um exemplo simples: Uma calculadora de Horas extras para profissionais CLT. Dado um volume de horas trabalhadas e seu salário, a calculadora responde quanto você deve receber. Para este simples exemplo temos alguns cenários possíveis:

a) As horas trabalhadas foram durante a semana;
b) As horas trabalhadas foram num feriado;
c) As horas trabalhadas foram de um dia até o outro.

Esse tipo de cálculo prevê uma série de adicionais que devem incidir sobre o cálculo de suas horas, de modo que para este exemplo simples os dados existentes para o sistema acabam ganhando uma importância grande.

Num sistema de maior complexidade o conhecimento prévio desses dados ganha um nível a mais. Dessa forma é muito importante que tenhamos conhecimento prévio dessa massa de dados para os casos de testes que serão executados principalmente porque, dado o automatismo, a possibilidade de repetição é fundamental para um boa produtividade na criação de códigos com qualidade.

Seguindo o princípio K.I.S.S. (Keep It Stupidly Simple), podemos criar facilmente uma classe que carregue o banco de dados a partir de um arquivo .SQL onde cada linha tem um comando SQL:



public class CarregaMassaDados {
   public static void cargaDados(String arquivoSql) {
      String stm = "";
      BufferedReader in = null;
      Connection connection = null;
      Statement stmt = null;
      if ((arquivoSql == null) ("".equals(arquivoSql))) {
         throw new RuntimeException("O Parâmetro arquivoSql deve ser informado");
      }
      try {
         Class.forName("org.postgresql.jdbc3.Jdbc3ConnectionPool");
         connection =
            DriverManager.getConnection(
            "jdbc:postgresql://127.0.0.1:5432/BDAplicacao",
            "LOGIN",
            "SENHA");
         in = new BufferedReader(new FileReader(arquivoSql));
         stmt = connection.createStatement();
         String sql;
         while ((sql = in.readLine()) != null) {
            stmt.executeUpdate(sql);
         }
      } catch (ClassNotFoundException e) {
         throw new RuntimeException("Database driver não encontrado.");
      } catch (SQLException e) {
         throw new RuntimeException("Database não conectado.");
      } catch (IOException e) {
         throw new RuntimeException("Impossivel ler o arquivo.");
      } finally {
         try {
            if (in != null) in.close();
            if (stmt != null) stmt.close();
            if (connection != null) connection.close();
         } catch (IOException e) {
            throw new RuntimeException("Impossivel ler o arquivo.");
         } catch (SQLException e) {
            throw new RuntimeException("Database não conectado.");
         }
      }
   }
}

A chamada a carga de dados pode ser colocada no início dos seus testes, permitindo que a sua massa de dados seja conhecida garantido assim a repetividade de seus testes.

Abraços.

segunda-feira, 10 de setembro de 2007

SOA, Java e Paixão

No ano passado estivemos no Sun Tech Days 2006 em São Paulo. Lá tivemos a oportunidade de conhecer em algumas das palestras uma figura muito peculiar que, inclusive pode ser vista em uma bela performance em http://www.youtube.com/watch?v=BXHE4SktsbM .

O dançarino em questão é Sang Shin, evangelista da Sun que apresentou uma bela palestra sobre SOA com objetividade e didática suficientes para romper qualquer barreira que o idioma pudesse causar. Nessa palestra (estou procurando o link, mas fiquem com este por enquanto) ficou muito claro o propósito de SOA e que ele não é Webservice :-) Ainda falaremos um pouco sobre SOA, mas no momento gostaria de ressaltar a paixão desse profissional.

Preocupado em compartilhar conhecimento, ele mantém um site - o www.javapassion.com - através do qual é possível se inscrever em alguns dos vários cursos que ele ministra. O custo? De graça e eles são em inglês.

Abraços.

sábado, 8 de setembro de 2007

Testes Funcionais na Web - Selenium

Quem está procurando uma ferramenta para testes funcionais (de tela) que:

  • não seja preciso "decorar" mais uma linguagem ou 1001 novos comandos;
  • siga um padrão, xunit por exemplo;
  • seja possível integrar os scripts a um repositório de gerência de configuração para integração contínua;
  • possa ser criado por equipe de testes, não necessariamente por programadores;
  • não seja preciso escrever uma linha de código;
  • não tenha custo de aquisição "grátis";
  • execução totalmente automática.

Esté querendo muito?! Não, existe uma ótima ferramenta chamada Selenium (http://www.openqa.org/selenium/), que é grátis e open-source.

A idéia deste post é mostrar alguns benefícios e na prática esta suite. Digo suite, pois há diversos projetos em paralelo (não é fácil de entender) que podem ser utilizados em conjunto para um melhor resultado.

A seguir vamos criar um passo a passo de utilização, que está misturado com um processo que pode ser adaptado de acordo com as suas necessidades. Lembre-se que a ferramenta pode ser utilizada em qualquer processo desde CMMi até processos Ágeis.

Vamos a nossa receita de bolo...

Passo 1 - Criando um plano de testes (trabalho árduo)

Neste passo é onde os analistas do negócio ou sistemas descrevem as entradas de testes necessárias e os resultados esperados para que o atendimento a um requisito seja corretamente satisfeito.

Passo 2 - Automatizando o plano de testes

A partir do plano de testes criado é necessária a automatização de cada entrada de teste. No Selenium esta automatização é realizada através de uma IDE extremamente simples e robusta.

A ferramenta integra um plugin ao Mozila Firefox. Isto não quer dizer que os testes são executados apenas sob o Firefox, a IDE é apenas um adicional que afeta a produtividade na implementação dos testes.

Você pode baixar o Mozilla Firefox em http://www.mozilla.com/en-US/firefox/, recomendo o uso da versão 2.0 pois foi a versão que utilizei para avaliação da ferramenta. E para baixar o XPI (plugin para o firefox) do Selenium acesse a url http://www.openqa.org/selenium-ide/.

O objetivo do Selenium IDE é provê interface amigável para gravação dos testes através de toda ação do usuário à aplicação web. Estas ações são gravadas como um roteiro, baseado em HTML, que pode ser exportado em inúmeras linguagens (próximo passo).

Abaixo a tela principal do Selenium IDE para gravação dos testes, simples e poderosa. Digo poderosa porque é possível alterar ordem das ações, consultar todas as funções disponíveis (asserts, verify, alerts) e ainda incluir ações não gravadas.

Passo 3 - Exportando testes automatizados

Os testes automatizados através do auxílio da IDE no Mozilla Firefox são gravados no formato tabular - HTML (usado no método de testes FIT, talvez um próximo post).

Este formato não é ideal, visto que é necessário o auxílio da IDE ou utilização de um outro projeto chamado Selenium TestRunner.

Desta forma, o ideal é que tenhamos o teste escrito em linguagens flexíveis e extensíveis como: Java, C#, PHP ... O Selenium IDE oferece exportação dos testes nestas várias linguagens e estruturado de acordo com o respectivo xUnit (jUnit, nUnit...). E acreditem, oferece suporte a extensibilidade, ou seja, podemos colaborar com novas linguagens. :-)

Uma observação importante é que o script em HTML também deve ser salvo para futuras manutenções nos testes sem a necessidade de re-gravação, o Selenium IDE só lê neste formato e exporta "n" outros.

Passo 4 - Adaptando os testes

Não vamos nos enganar, o script gravado pelo Selenium IDE não é perfeito. Desta forma, é necessário que refinemos geralmente nos seguintes pontos:

  • As vezes é necessário incluir entre ações "tempo de espera", pois depende da velocidade que o navegador executou a ação naquele momento. O ideal é que sempre entre requests tenhamos um wait para garantir.
  • Sempre que exportamos na linguagem que desejamos o Selenium IDE usa hard-coded para informação de servidor, abrir página inicial, usuário e senha de acesso e etc. Recomendo que seja criada uma classe base para tratar situações que valem para todos os testes da aplicação.

Assim, recomendo que do conteúdo exportado pelo Selenium IDE sejam copiados os test cases (métodos de testes) ajustados e depois é só colar na sua IDE preferida.

Crie uma classe de teste que pode ser em qualquer linguagem. Em qualquer?! Sim, até mesmo se for diferente da sua aplicação. Lembre-se o Selenium testa somente aplicações web.

Cole o teste e adapte-o de acordo com as nossas dicas.

É claro que o Selenium estende os frameworks xUnit das linguagens específicas, ou seja, ele estende o jUnit, nUnit e etc. Então, é necessário que façamos a inclusão das dependências. Este já é um outro projeto no site do Selenium, chamado de Remote Control. Baixe-o a partir da url: http://www.openqa.org/selenium-rc/download.action. Neste projeto temos as extensões para cada linguagem (.NET, Java...) e o server (já já explico).

Passo 5 - Executando a classe de testes

Bom, aqui nós chegamos a etapa final: execução dos testes. Diferente de inúmeras ferramentas de testes de aplicações web onde são enviados requests e recebidos responses do servidor (parse para lá, parse para cá) o Selenium trabalha usando o próprio browser. Isso mesmo, terceiriza o serviço mais difícil: eventos em páginas web, navegação, renderização e tudo mais. Esta é uma grande vantagem em relação a outras ferramentas como o jWebUnit.

Aí surgem algumas perguntas:

Eu só posso testar em um browser? Não, você escolhe o browser em que deseja executar os testes, ou seja, podemos executar os mesmos testes no Internet Explorer e Firefox, testando assim a compatibilidade cross-browser.

Fico dependente do browser, ou seja, meu teste é mais lento e não posso executar testes em paralelo? Verdade, o teste fica lento, preciso de ambiente gráfico para execução e só é possível executar um teste por vez (por enquanto!).

Então, a cada entrada de teste o browser é aberto e ações externas são realizadas sobre ele. O responsável por realizar estas ações é o Selenium Server, aplicação console, que inicia um serviço que recebe as requisições e as envia ao browser. Também é responsável por capturar eventos e traduzí-los em teste de sucesso ou falha. O Selenium Server vem junto com o pacote do Remote Control. Este server é implementado em Java e precisa da máquina virtual para rodar. Exemplo de linha de comando para executá-lo:

java -jar selenium-server.jar -interactive

Após iniciar o servidor, basta executar os testes da sua IDE de preferência.

Problemas conhecidos

  • Utilize a opção multiwindow para iniciar o servidor do Selenium. Esta opção resolve problema quando a aplicação possui frames. A utilização de frames causa instabilidade no Selenium que utiliza um frame para execução dos seus comandos.
  • A ferramenta apresentou problemas para executar em um ambiente com proxy no meio. Se você tiver executando teste em aplicação web, na internet, e tenha um proxy no caminho poderá ter problemas. No site do Selenium informa que é compatível, testei mas não funcionou. Quem souber, pode comentar!

Conclusão

Este foi um breve post sobre esta ferramenta maravilhosa para testes funcionais na Web. Após várias pesquisas esta ferramenta foi a que mais se aproximou de critérios como teste de qualidade, facilidade, produtividade e estabilidade.

Bom galera, é isso aí. O post ficou um pouco longo mas objetivo. Prentendo incluir mais algumas informações práticas. Talvez um próximo post faço um exemplo de ponta a ponta de alguns testes em uma aplicação web por aí. Sugestões são aceitas.

Abraços e até a próxima!

quarta-feira, 5 de setembro de 2007

O início

Neste blog conversaremos sobre problemas rotineiros ligados a desenvolvimento de software, passando por dicas de linguagens, programação, frameworks, orientação a objetos... Essas conversas serão protagonizadas por Fernando Bichara, Wesley Gonçalves e, claro, quem mais quiser...

Sejam benvindos!