Arquivo da categoria ‘modelagem’

Rodrigo Yoshima

O que matou o RUP pode matar o Agile

Desde algumas polêmicas que ocorreram no Scrum Gathering neste ano, tenho discutido em diversos fóruns de discussões e eventos sobre o que tem ocorrido com a nossa comunidade de desenvolvimento ágil. Eu temo pelo o que pode ocorrer com o Agile aqui no Brasil. O que matou o RUP pode também matar o Agile.

Quando eu estava no começo da minha carreira, no início dos anos 90, por incrível que possa parecer os métodos eram ágeis. O cliente e os reais usuários eram muito próximos e participavam ativamente do projeto. O ciclo, apesar de não ter formalidades iterativas, era focado em entregas frequentes. Apesar das arquiteturas fracas, a qualidade era boa e a satisfação dos usuários era maior. Trabalhei com Clipper, Visual Basic 3-6, Mumps e outras coisas da época - além de administrar redes Novell 3.12 e Lantastic. Os projetos eram divertidos, focados em resultados e na maioria das vezes o financiador ficava no seu pé. Eu me lembro do Tonhão, o gerente financeiro da Rede America Burger & Pasta, meu primeiro (e único) emprego como programador CLT. O Tonhão todas as sextas batia na minha mesa no CPD e perguntava: “-E aí Japa, tá pronto?”. Todas as sextas, religiosamente às 15:00 o Tonhão cobrava sobre aquele sistema de controle de caixa das lojas que acabou com os disquetes e com muita burocracia, pois usava comunicação via modem.

Nos meados de 1996 recebí uma ligação de um amigo meu do colégio técnico dizendo que as consultorias estavam pagando R$ 22,00 a hora para projetos do Bug do Milênio em COBOL. Bem, para a época esse valor era bastante significativo, topei na hora e lá fui eu ter a experiência de uma empresa grande. Se existe uma coisa que você pode responsabilizar sobre a bagunça que existe no mercado de TI hoje essa coisa é O BUG DO MILÊNIO. Eu estranhei muito trabalhar em consultorias nessa época. Os projetos chegavam e nem tinha uma única reunião com o cliente. Na maioria das vezes tinha um gerente-proxy entre a equipe e os clientes. Os projetos Y2K eram ainda mais peculiares. Teve projetos que o trabalho era passar uma ferramenta de detecção de problemas Y2K, ir até o código indicado pela ferramenta e fazer as alterações, mas sem recompilar e sem qualquer teste. Eu me sentia um digitador. Levei até uma bronca de um coordenador por tentar compilar o projeto para ver se nossas alterações ao menos geravam os binários. Meu coordenador gritou que aquilo não era escopo do projeto. Nesse momento eu ví que qualidade não era uma preocupação central das consultorias.

Passada a fase Y2K, começaram os projetos Internet e de sistemas periféricos de grandes implementações ERP. O problema é que o desenvolvimento de software empírico (que eu apliquei nos meus estágios e lá na Rede America) não atendia às necessidades de projetos outsourcing. Gerentes queriam controles, relatórios e Gantt Charts. A preocupação maior era a mesma dos projetos Y2K - O ESCOPO. Se você estivesse numa consultoria no final dos anos 90, você compreenderia perfeitamente o mindset do SEI com o seu CMM. Os gerentes de consultorias buscavam algo que amarrasse a equipe ao contrato com o cliente. Meio por fora de tudo isso comecei a estudar Orientação a Objetos, OMT, Booch, e mais pra frente, a UML e o RUP. Minha primeira experiência prática com o RUP foi num projeto internacional para a Phillips Medical Systems em 1999.

Esse projeto da Phillips era um sistema orçamentário empresarial que integrava vários departamentos, inclusive a matriz em Rotterdam. Foi desenvolvido em Visual Basic, Orientado a Objetos e banco de dados Oracle. Quando olhei o RUP pela primeira vez gostei de Casos de Uso, Iteratividade e o foco Arquitetural. Neste projeto a equipe variou entre 3 a 5 pessoas. No início estabelecemos uma Visão para definir o problema junto aos usuários, o ciclo iterativo era de 30 dias e tinha perto de 15 casos de uso (que escrevemos de maneira correta). Usamos o famigerado Visual SourceSafe (o supra-sumo da época) e somente uns 6 ou 7 diagramas UML foram mantidos como artefatos (além do MER). O foco sempre era entregar o produto e não preencher artefatos. A gente até tinha alguns testes automatizados, mas a maioria dos testes era manual. Entregamos o projeto após 3 ou 4 iterações e foi um sucesso! A satisfação dos usuários foi além das expectativas. A partir desse projeto, o modo que eu instancio o RUP é assim: Iterativo, Orientado ao Usuário (Casos de Uso) e centrado em Arquitetura.

Quando voltei desse projeto para a consultoria um dos meus gerentes queria saber como foi o processo. Eu comecei a falar que o cliente participou bastante e que as entregas a cada 30 dias foram determinantes para diminuir os riscos. E a pergunta que se seguiu traduz bastante o mindset de um gerente (da época ou de hoje): “- Legal, legal, Rodrigo, mas quais eram os documentos que vocês preenchiam?”. Aí eu falei que usamos a Visão, os Casos de Uso, a UML, o MER… logo em seguida veio a pergunta número 2: “- Você poderia me dar um exemplo de cada um para usar no projeto XPTO?”. Hoje eu vejo que ele estava buscando respostas fáceis. Na época eu poderia ter dado minha cópia do livro sobre Unified Process dos Três Amigos, porém, o que eu fiz foi copiar um disquete com os artefatos. Ainda hoje ainda me culpo por ter feito aquilo, mas eu era ainda um profissional inexperiente, com pouco mais de 5 anos de estrada. Colaborei para a ilusão daquele gerente por respostas fáceis. Me desculpe se você era um dos desenvolvedores do projeto XPTO na virada do ano 2000. Me desculpe se um dia, um gerente chegou para você entregando um disquete dizendo: “- Olha, o preenchimento desses artefatos garantirão o sucesso do projeto.”

Na virada do Milênio, eu ví pessoas e empresas buscando processos como o RUP e outros pela motivacão errada. Eles achavam que a maneira “falar com o usuário - implementar - entregar” era pouco controlada. O pensamento era: “Ninguém assina nada?”. Nessa época os gerentes voluntariamente queriam uma burocratização. Era proibido falar as palavras empírico e pragmático nesta época. Não importando o Manifesto Ágil publicado em 2001, aqui no Brasil o que eu ví foi adoção de processos por pura burocratização.

No ano de 2003 eu ví a primeira palestra de um “especialista” falando absurdos sobre o RUP, no melhor estilo Waterfall. Ele disse coisas do tipo “Levantar todos os requisitos na concepção”, “Modelar tudo na fase de elaboração”, e principalmente, o cara pregava descaradamente a errônea sequência Casos de Uso - UML - Codificação - Testes, e uma irracional separação de papéis que está em uso até hoje. Ele teve até tempo de mostrar como preenchia alguns artefatos. Nesse tempo eu não era tão crítico como hoje, e nem mesmo para os meus amigos que assistiram a palestra eu alertei contra as falácias daquele fanfarrão.

A cada dia que se passou desde então, ví mais e mais pessoas falando absurdos do RUP. Quando se diz RUP atualmente no mercado muitos torcem o nariz, associam com cascata, associam com artefatos, associam com ferramentas Rational, e principalmente, associam com esse pensamento burocrático da virada do milênio. Muitos dos que criticam são agilistas famosos, mas que não tem mais de 10 anos de experiência. Eu queria que a maioria desses consultores e especialistas Agile estivessem lá nos anos 90, reclamando da implementação OO nos produtos base da Microsoft, tentando entender Objective-C e vendo uma esperança OO mais simples no Delphi como alternativa. A gente acreditava que a Orientação a Objetos resolveria todos os nossos problemas, mas 15 anos depois ainda temos modelos anêmicos e pessoas sem a mínima noção do que são dependências ou mensagens querendo discutir OO em fóruns colocando sua pilha de certificações na sua assinatura de e-mail.

Em 2003-2004 eu tive o primeiro contato com o Extreme Programming num projeto J2EE para um grande Call Center Vendas, um projeto único no mundo, clusterizado, distribuído, Swing e mensageria. Sobre o XP, quer saber? Não ví quase nada de novo. Agora Casos de Uso são User Stories menores, o ciclo iterativo é mais curto, o desenvolvimento é orientado a testes (isso sim achei uma boa idéia, apesar de não compreender bem nos primeiros projetos) e a programação é em par (isso também geralmente não é uma azeitona fácil de engolir logo de primeira). Eu particularmente tenho dificuldade em parear com algumas pessoas devido ao meu déficit de atenção. Eu olhei para o XP e no primeiro momento ví que muito do que diziam do XP era algo parecido com o que a gente fazia nos anos 90, principalmente a parte do cliente presente. Todos os meus clientes no início dos anos 90 eram presentes. Comparado com a visão do desenvolvimento de software das consultorias o XP era o cúmulo da controvérsia. Já na mentalidade de um desenvolvedor de software dos anos 90, o XP faz todo sentido do mundo. Meu primeiro contato com o Scrum foi em 2005. E mais uma vez tive aquele sentimento: Sim, é bem diferente das práticas erradas do mercado, porém, não é muito diferente do RUP. Ele diz mais sobre ROI e sobre um importante Product Owner, mas também me lembro do Tonhão como um Product Owner nato nos anos 90. Em 2005 o Scrum era o cúmulo do descontrole de custos do projeto, por conta do seu escopo aberto e por conta do mindset PMBOK, mas para um desenvolvedor dos anos 90, simplesmente é o retorno aquilo que a gente já fazia: nos anos 90 não tinha pressão para se entregar tudo, mas havia pressão para resolver os problemas de negócio do cliente. E eu me lembro do Tonhão todas as sextas me cobrando aquilo que estava pronto, doido para colocar a aplicacão no ar só para ter certeza que ninguém na rede estava roubando ele.

A grande questão sobre o Agile Movement é sua mudança cultural. Infelizmente são poucas as pessoas que se divertiram fazendo software nos anos 90 - se você costuma tratar os desenvolvedores como crianças, lentamente eles se convencem que são crianças. O manifesto é um grito contra as coisas erradas do mercado. É uma emancipação dos desenvolvedores que não querem ser crianças. É uma injeção pragmática contra o pensamento pseudo-tradicionalista, controlador e traumatizado que existe hoje no mundo empresarial, especialmente na indústria do desenvolvimento de software.

O que vocês devem estar se perguntando é: O que matou o RUP e pode matar o Agile? Como eu falei, eu temo pelo movimento Agile. Assim como foi em 2003, em 2009 eu ví o primeiro pseudo-especialista Agile falando absurdos - violando valores. A partir do momento que eu vejo a comunidade Agile discutindo e dando importância demais a post-its, quadro de tarefas e cartinhas de planning poker, eu temo pelo movimento Agile. Quando eu vejo a comunidade Agile buscando certificações, preocupados em como casar Agile com CMMI ou como adaptar Agile à contratos de escopo fechado, eu temo pelo movimento Agile. Sempre que eu vejo isso no mundo Agile, me transporto a 10 anos atrás e me lembro das discussões sobre templates de casos de uso, definições de padrões de modelagem UML, pensamento linear, check-lists de artefatos, uso incorreto de ferramentas, falta de compreensão sobre fases e o pior de todos: o departamento que cuida dos processos de desenvolvimento. Resumindo, quando vejo esse mindset de besteirols e libertinagens Agile, eu me lembro do mindset burro e burocrático que contaminou o RUP.

O que matou o RUP foi a falta de entendimento, e isso é o que vai matar o Agile. Lean é o próximo da fila. Escreva aí: em 5 anos, dependendo dos ventos da economia e do clima empresarial, muitos vão estar criticando Agile do mesmo modo que hoje criticam o RUP, sem autoridade de causa. Tudo vai depender do mindset vigente no momento. Tudo depende do mindset: se você der o Scrum e XP para um “tradicionalista” ele não vai mudar seu mindset, mas sim adaptar o Scrum e o XP às suas “crenças”. Se você der o RUP para um pragmático, ele também não muda o seu mindset, mas sim, adapta o RUP à sua realidade. Você pode decidir o seu mindset: ou você realmente acredita nos 4 valores e 12 princípios ágeis e adota este estilo, ou você se enche de penduricalhos ágeis só para ficar na modinha.

Mais sobre o assunto “queda do Agile”:

Agile está morto! D-us salve o Agile! - José Papo
The Decline and Fall of Agile - James Shore
Por que dizemos não à certificação de Scrum Master - Vinicius Teles
A Completa Irrelevância do Certified Scrum Master - Philip Calçado
Flaccid Scrum - Martin Fowler

Esse artigo e a palestra que ministro com mesmo título é inspirado em “What Killed Smalltalk Could Kill Ruby, Too”, Keynote do Robert Martin (ou Uncle Bob) na RailsConf ‘09. Uma das melhores palestras que já ví. Veja abaixo:

Rodrigo Yoshima

Repositórios: pra que te quero?

Domain-Driven Desing não é sobre padrões - isso gera muita discussão. Domain-Driven Design (ou simplesmente DDD) é sobre fazer software de maneira mais simples - e sei que muitos não vão concordar com isso, pois “parece” que é mais fácil e muitos se sentem muitos produtivos ligando Table Modules diretamente às telas e abusando de Transaction Scripts.

O objetivo deste artigo não é falar sobre o que a literatura diz sobre repositórios e nem tenho a pretensão de escrever o “post definitivo sobre Repositórios”. O objetivo aqui é demonstrar como tenho aplicado Repositórios nesses 3 anos de experiência em aplicação e ensino de DDD.

O que são Repositórios afinal?

Antes de mais nada, orientamos a aplicação ao domínio. O exemplo que vou montar aqui não é real, mas é bem próximo daquilo que apliquei em alguns projetos. Orientar a aplicação ao domínio significa que seu código será limpo e principalmente sua camada de negócios demonstrará o NEGÓCIO, suas regras, seu estado e suas associações. Se sua aplicação é de vendas, é esperado que o vocabulário do domínio “vendas” seja encontrado nas suas classes. As classes do domínio também não devem ser poluídas com o domínio técnico: o domínio “vendas” não sabe o que são tabelas, filas, sistema de arquivos e nem SMTP. O domínio técnico e do domínio do negócio tentam ao máximo não se misturar numa aplicação Domain-Driven.

Se minhas classes de negócio traduzem a linguagem de vendas, quero que você tente pensar num modelo que resolva os seguintes requisitos:

1. Um pedido de vendas possui cliente e itens
2. O valor total do pedido é a soma do valor dos itens
3. Somente produtos disponíveis podem ser vendidos

Imagine agora, como um ator Vendedor utilizaria o sistema. Ele criaria um pedido, colocaria alguns itens com produtos disponíveis e finalizaria este caso de uso. Quero que você pense bastante em como você resolveria o requisito número 3. No meu código, surgiria algo deste tipo:

ddd diag 1 1 - ddd diag 1 1

A primeira pergunta natural é: Por que o repositório está como uma interface? Muitas vezes o Repositório simplesmente é uma abstração do domínio cuja responsabilidade é representar coleções de entidades, porém, ele ainda é um elemento do domínio. Muitas vezes nós temos um elemento que realiza esta interface para fornecer implementação para essas buscas.

ddd diag 2 1 - ddd diag 2 1

Usar repositórios como interfaces é bom para a saúde da testabilidade da sua aplicação e ainda posso me beneficiar de injeção de dependência. Isso facilita o uso de Mocks e Stubs para testes unitários ou de integração, além de deixar seus objetos desacoplados.

Teve algumas situações peculiares onde a interface TodosProdutos era um elemento do domínio e a implementação TodosProdutosImpl era puramente infra-estrutura. Neste caso, TodosProdutos (a interface) estava empacotada no domínio (geralmente uso o nome domain) e a TodosProdutosImpl estava empacotado como infra-estrutura.

De qualquer forma, para a discussão aqui, simplesmente destaco que o repositório TodosProdutos é algo puramente do vocabulário de negócios. “Todos os Produtos” é algo que o meu usuário sabe o que significa. E TodosProdutos.getDisponiveis - a minha operação - faz mais sentido ainda para os usuários, pois eles também sabem o que são produtos disponíveis para venda (se isso para eles é uma interface ou uma classe isso é completamente irrelevante).

Repositórios como Coleções Parciais

Teve uma certa aplicação que desenvolvi que nas conversas com os especialistas de negócio um determinado termo era muito recorrente. Eles se referiam a um determinado conjunto de entidades com um nome especial: pedidos faturados. E nesse sistema, os “pedidos faturados” tinham uma força tão grande na Ubiquitous Language da DDD que passou a ser um contexto separado.

ddd diag 3 - ddd diag 3

Várias vezes mostrei esse diagrama a arquitetos e programadores e muitos não entenderam isso facilmente. É bastante comum as pessoas associarem um repositório por entidade, enxergando-os como 1 para 1 com DAOs. Muitos desses programadores que não entendem DDD questionaram: - Por que separar isso? Minha resposta: - Não fui eu que separei isto… no domínio do negócio isso é separado. Não é uma opção arquitetural, somente estou transparecendo o domínio.

A maioria das respostas sobre a camada de negócios numa aplicação Domain-Driven é dada pelos usuários e especialistas do domínio e não pelos arquitetos e programadores.

O nome não deve ser XptoRepository?

Durante algum tempo, seguindo a linha do Hibernate, minhas classes de busca eram [NomeDaEntidade]DAO. Depois de um tempo meus DAOs eram repositórios, mas continuava chamando-os de DAOs, pois odeio o nome Repository dentro do meu código. Acho pior ainda o nome “Repositório” - que é uma tradução livre corrente. O nome Repositório é bem pouco expressivo em português (que raios é repositório?) - o termo em inglês é mais claro.

Ao fim de tudo isso, vejo que é bem pouco proveitoso chamar uma classe de domínio de PedidoRepository ou PedidoRepositorio. Teve uma aplicação que chamei meus repositorio de “Pedidos”, mas últimamente tenho usado mesmo “TodosPedidos”, “TodosClientes”, “PedidosFaturados”, “ClientesInadimplentes” e etc… Uso esses termos pois são mais próximos do domínio e não vejo a mínima razão para ter o nome do padrão no nome ou empacotamento das classes.

Pedido é uma entidade, nem por isso o chamamos de PedidoEntity, o mesmo vale para Value Objects, Services e Repositórios. O BufferedInputStream do Java é um Decorator, nem por isso chamamos ele de BufferedInpuStreamDecorator.

Repositórios mais Complexos

Associar repositórios com buscas nem sempre é verdadeiro. Repositórios respondem por conjuntos de entidades, não importando a dificuldade de se obter esse conjunto. Há repositórios que podem ter código de negócio complexo em sua execução onde determinadas operações podem à primeira vista aparentar simplesmente uma busca. Você deve levar em consideração se há inteligência de domínio envolvida, caso afirmativo seu repositório deverá ter essa inteligência embutida. Vamos colocar mais requisitos:

4. Se o pedido é para entrega imediata, os produtos disponíveis são aqueles que eu tenho em estoque no momento da venda
5. Se o pedido é para entrega futura, os produtos disponíveis são aqueles que estarão em estoque na data de entrega

ddd diag 4 - ddd diag 4

Neste “TodosProdutos” refatorado, para obter os produtos disponíveis na data da entrega é necessário pegar o saldo atual do estoque, subtrair os pedidos de venda já comprometidos (saídas) e somar os pedidos de compra (entradas) até a data desejada. Tudo isso é inteligência de domínio que não deve ser delegado para o banco de dados. É um repositório que tem regras e pode até orquestrar junto a outros repositórios e services para cumprir o seu propósito.

Um ponto importante a destacar é que muitas outras variações de implementações de repositórios existem. O objetivo do artigo é somente destacar algumas implementações interessantes que implementei em alguns projetos.

É lícito acessar o EntityManager diretamente?

Discussões sobre Domain-Driven e implementações de respositórios são muito recorrentes em listas de discussões, principalmente no GUJ e na DotNetArchitects (sou novo nessa lista).

Uma das perguntas comuns é: “É licito eu acessar diretamente o EntityManager ou Sessão do Hibernate?”. Particularmente eu sou da opinião que se você está fazendo buscas que não são importantes para o negócio não há problemas acessar diretamente seu framework de persistência. Logicamente que isso não deve ser levado a ferro e a fogo, testabilidade e complexidade são pontos a considerar.

Um exemplo seria: imagine que para emitir o pedido eu tenha que preencher um combo com o tipo de venda (um dado simplesmente informativo). Se é uma busca de uma entidade fraca, que significa muito pouco para o domínio, para reduzir a complexidade, o repositório pode ser descartado sem muito prejuízo para a testabilidade.

Rodrigo Yoshima

OOAD e Scrum na MicroPower

micropower logo - micropower logo
Neste mês de Julho estive na empresa MicroPower ministrando nosso curso UML e também o curso de Scrum.

A MicroPower é uma empresa especializada em soluções focadas em gestão do ensino/aprendizado de empresas, tendo produtos próprios para Gestão de Treinamentos e também serviços sob medida como a criação de conteúdo para treinamentos à distância.

Gostaria de parabenizar a todos da MicroPower pelo excelente nível da turma e desejar muito sucesso, principalmente na adoção das práticas ágeis/iterativas de desenvolvimento.

micropower - micropower
Turma concentrada!!!

Rodrigo Yoshima

Rails + Agile na DDWorks

Antes de mais nada deixa eu avisar: eu estou vivo! Tirei um tempo de férias de escrever (aqui e na MundoJava), mas agora estou de volta! E para aquecer, vou relatar um projetinho divertido que participei.

Uma das maiores convicções que tenho sobre desenvolvimento de software é que não existem fórmulas mágicas, nem processos mágicos e nem certificações mágicas… O máximo de “mágico” que pode existir em desenvolvimento de software são alguns profissionais mágicos (infelizmente alguns são adeptos de magia negra). Além disso, “Processo Padrão” é uma coisa que não existe.

O projeto da DDWorks começou de maneira interessante. Numa dessas quintas-feiras de verão, um dos sócios me ligou e disse: “- Quero colocar um e-commerce no ar na semana que vêm”. (nem sei se ainda se usa a palavra e-commerce, mas ele disse assim!)

As condições são:

1. Nós não temos tempo de negociar, não temos tempo de firmar contrato, não temos tempo nem de “planejar” o projeto

2. Tem que estar no ar e vendendo até sexta-feira da semana que vem

3. Tem que ter integração com e-payment ainda a ser definido (no fim optamos pelo PagSeguro)

4. O desenvolvedor tem que estar aqui presente. Vamos dar todos os subsídios e decisões em tempo hábil

5. Já falei que tem que estar no ar na semana que vem?

Qualquer pessoa poderia falar que isso é impossível, porém, o cliente estava disposto a fazer o que fosse necessário para atingir esse objetivo, e nenhum outro fornecedor deu atenção a esse projeto. Eles acharam isso “impossível”. Eu até imagino aqueles vendedores acompanhados de gerentes de projeto (ambos de gravata) dizendo “- Vamos com calma!”, “- Precisamos planejar direitinho.”, “- Vamos detalhar mais…”. O mercado está cansado dessas ladainhas! Como seria um desafio interessante topei na hora. Traçamos alguns objetivos juntos e marcamos uma reunião de planejamento na segunda-feira às 9:00.

Planejamento Inicial de projeto é uma das coisas que mais gosto de fazer. Como o dead-line já estava definido (sexta-feira!!!) essa reunião seria importante para definirmos SOMENTE o que era necessário para VENDER. Toda e qualquer firula a mais deveria ser posta de lado. Este planejamento inicial não tomou mais de 30 minutos, pois o cronometro de 40 horas já estava ticando. O objetivo do projeto era “vender pela Internet”. Planejamentos exigem modelagem, então nós modelamos….

IMG 6230 - IMG 6230

Para iniciar qualquer trabalho nós fizemos um Mapa de Navegação seguindo algo parecido com um diagrama de atividades, mas sem formalidade alguma. Nós precisamos desse modelo para saber o mínimo necessário para “vender”. Além disso nós também usamos esse modelo para saber quais telas eram mais complexas para iniciar o projeto por elas, diminuindo o risco. Sim, esse rascunho era nosso “Product Backlog” para os CSMs de plantão.

Como seriam só 5 dias as iterações eram diárias. Para o projeto, o fim da quarta-feira (a terceira iteração) era o momento crítico. Apesar de ter outras pessoas gerando conteúdo, imagens e modelos, somente eu estava programando no Rails.

Uma das perguntas que faço para meus alunos no curso Scrum da Aspercom é: Com relação a pessoas, o que você precisa para desenvolver software? Pare de ler este artigo e tente responder isso mentalmente. Se você perguntar para um gerente de fábrica de software ele vai responder algo como “1 analista de negócio, 2 analistas de sistemas, 4 programadores e 1 tester”. Acredite, eu já ouvi isso de um deles. Espero que você não tenha respondido isso mentalmente. Mas a resposta correta é que para desenvolver software você precisa de dois tipos de pessoas:

a. Alguém que sabe do negócio
b. Alguém que sabe desenvolver software

No caso da DDWorks, com iterações diárias, praticamente nós fizemos um desenvolvimento conjunto entre os caras de negócio e o programador (eu). Um “pair programming” do Developer com o Product Owner. A adoção do Rais foi definitiva para que cada pedaço de funcionalidade incrementado em 3 minutos fosse rapidamente testado junto ao cliente. Feedback rápido foi determinante para o sucesso. Eu acredito que o futuro do desenvolvimento de software é algo parecido com isso: programadores armados até os dentes com arquiteturas ágeis e clientes participando ativamente do projeto ao ponto de participar de “pair programming”.

escolher modelos - escolher modelos

Durante essa semana nós fizemos muita inspeção e adaptação. Muitas coisas nós mudamos durante o desenvolvimento. O próprio cliente teve que fazer concessões sobre alguns detalhes (eles são uma agência de design, assim, teve alguns desgastes sobre o tempo investido na “beleza” do site). Não achem que foi “fácil”, quer dizer, programar foi fácil, mas fazer cada detalhe solicitado caber no prazo e no orçamento sem comprometer o objetivo é que foi dureza. Na quarta-feira fizemos o primeiro deployment na Locaweb…. na sexta-feira o site estava no ar!!!! Acessem aí:

http://www.docstyles.com.br

(veja a página “aprenda mais” para saber o que a DDWorks faz)

Uma coisa que achei bastante interessante nesse projeto: nós não usamos Stories, não usamos reuniões, não usamos ScrumMaster, não usamos Kanban, não usamos “Test First”. Não teve qualquer besteirol Agile. Você considera esse projeto ágil?

Guarde esse princípio: Para coisas simples as soluções são simples.

Gostaria agradecer ao pessoal do Brazilian Rails. A contribuição de vocês ajudou muito e poupou um bocado de tempo.

Antes de mais nada quero me desculpar com os leitores pois o blog ficou jogado às moscas. Isso porque trabalhei muito, me meti em projetos e muitos treinamentos também.

logo crivo - logo crivo
A Crivo é uma das empresas que dá gosto de ver. No mês de outubro o Alberto, ScrumMaster, me ligou pedindo um treinamento focado em User Stories, Modelagem Ágil e Domain-Driven Design. Nas palavras dele: “Scrum nós já estamos aplicando muito bem aqui”. De fato, a Crivo possui um time muito consistente e os bate-papos durante o curso foram muito enriquecedores.

Eles possuem uma solução muito interessante que é comercializada como serviço e desenvolvida em .NET (mas sem Dataset pra cá e pra lá) Baseada na consistente formação e experiência em TI de seus sócios, a Crivo desenvolveu um software que veio a se tornar a melhor e mais completa solução para aperfeiçoar e automatizar a concessão de crédito e a administração de risco nas organizações.

Treinamentos customizados são excelentes! É interessante ver como nós já temos empresas que estão maduras em boas práticas de desenvolvimento de software, estão ganhando dinheiro com isso, têm equipes unidas e precisam somente melhorar algumas práticas pontuais.

Vamos às fotos:
IMG 2793 - IMG 2793
Isso sim é um Scrum-Ban

IMG 2796 - IMG 2796
Escrevendo Stories com a menor caneta do mundo

IMG 2797 - IMG 2797

IMG 2798 - IMG 2798

IMG 2799 - IMG 2799

IMG 2801 - IMG 2801

IMG 2802 - IMG 2802

IMG 2803 - IMG 2803

Parabéns a todos da Crivo pelo excelente treinamento e muito sucesso em 2009. Empresas como a de vocês nos dão esperança: realmente existem gestores sensatos no nosso mercado.

;)

Rodrigo Yoshima

Requisitos Executáveis com FIT

logo - logo
Na edição 29 da revista MundoJava escreví sobre o dia a dia de um agilista. Continuando uma série sobre TDD na Revista MundoJava nesta edição escreví um artigo sobre a ferramenta FIT para automação de testes. O artigo teve participação de Ivan Sanchez e James Shore.

O Ivan Sanchez foi o cara que fez o treinamento CSM junto comigo no início de 2007, e teve o azar de cair no mesmo grupo comigo! O Ivan é um agilista e grande evangelista de Coding Dojos. Atualmente trabalha na Signature Technologies no Reino Unido.

James Shore (Jim) é lider do projeto FIT (criado por Ward Cunningham), atua em projetos ágeis desde 1999 (sim, existem projetos ágeis antes do Manifesto Ágil) e escreveu o livro “The Art of Agile Development“.

Uma das coisas legais de escrever na MundoJava é ter contato com esses caras lá de fora e poder trazer estes conteúdos para nossa comunidade. Escrever com o Scott Ambler e o Jon Kern foi muito legal. Este artigo com o James Shore também foi especial. Infelizmente eu recebo mais não do que sim, mas ainda vou continuar insistindo com os mestres! Ah… vocês querem o trecho grátis do artigo, certo? Então aí vai:

Uma das questões comuns é: Quem escreve os dados de teste? Pela estratégia do FIT, os dados de teste são escritos a “oito mãos”. É comum que tudo inicie com o usuário ou cliente e com o analista de negócios, capturando cenários de teste iniciais que formatam alguns critérios de aceitação. Depois disso, um desenvolvedor pode verificar a formatação das tabelas, referenciar as Fixtures e assim obter o RED do ciclo TDD. Ao mesmo tempo os testers podem participar colocando mais cenários. Logicamente, o FIT é uma ferramenta ágil. É importante uma rica colaboração face a face de todos os envolvidos para que exista sucesso na adoção dessa abordagem.

Uma atenção especial deve ser dada ao trabalho do analista de negócios. Atualmente é comum que esses profissionais capturem requisitos em documentos texto e alguns diagramas. Geralmente este tipo de abordagem é muito pobre para o desenvolvedor, principalmente se não existe uma comunicação rica entre eles. Comunicação com documentos é uma forma muito pobre de comunicação (veja artigo “Modelagem Ágil”, MJ 27). Um modelo de requisitos em texto é muito deficiente na maioria das vezes. Pare para pensar: Não existe teste sobre documentos em texto e nem compilador para diagramas!
Rodrigo Yoshima

O que é o FIT e porque se importar com ele? O FIT é parte do seu arsenal ágil de prevenção de bugs. Diferente da abordagem tradicional para a qualidade, onde focamos em encontrar e remover defeitos, as práticas ágeis focam-se primeiramente em previnir que bugs sejam criados. Isso nos leva a alguns resultados impressionantes. Times ágeis experientes produzem poucos bugs por mês.

As “práticas ágeis de engenharia” pregadas pelo Extreme Programming (XP) são parte da solução. Essas técnicas como Test-Driven Development (TDD), programação aos pares, propriedade coletiva do código, design simples e trabalho energizado previne a maioria dos erros de programação. Elas garantem que o código faz exatamente o que os programadores pretendiam que ele fizesse.
James Shore

FIT ou Framework for Integration Testing é uma ferramenta excepcional no auxílio ao desenvolvimento de um software. O cliente (ou analista de negócio) escreve tabelas mostrando o que o sistema deve fazer através de exemplos. O desenvolvedor escreve o código das fixtures, que são as classes que ligam as tabelas com o sistema que está sendo implementado. A partir daí as tabelas se tornam “executáveis” e as regras definidas podem ser validadas de maneira automatizada.

FitNesse é a implementação mais popular de FIT, que funciona na forma de um wiki. Cada página representa um teste executável e é possível executar múltiplas páginas para validar um sistema como um todo. Além disso, por se tratar de um wiki, favorece a colaboração entre cliente e desenvolvedores, podendo servir como uma ótima base de conhecimento sobre o sistema que está sendo construído.
Ivan Sanchez

O FIT é uma ferramenta muito interessante: Uma coisa que chama a atenção em projetos onde utilizamos o FIT é que produzir as tabelas com os dados de teste é uma atividade de modelagem intensa. Modelar não é fazer diagramas, é muito mais profundo do que isso!

Já nas bancas!

Rodrigo Yoshima

Um poster bem ágil

Na edição atual da MundoJava (número 30) não teve artigo meu. Pedi “férias” exatamente para organizar este blog e colocar algumas outras coisas em ordem. Mesmo sem artigo tivemos na Aspercom a missão de fazer um poster com práticas ágeis para o pessoal da revista.

Nunca tinha feito um poster desses na vida, mas sabia que era um trabalho criativo, artístico… não muito diferente de modelar software e escrever linhas de código. Porém, além do poster passar informações importantes ele deveria ser bonito!

Antes de começar qualquer coisa, precisaríamos definir o que colocar no poster. O poster tem limitação de espaço e gostaríamos colocar as práticas mais importantes e não todas elas! Para fazer isso, definimos alguns post-its com o conteúdo. Decidimos colocar basicamente as práticas do Scrum.

Tinha visto algumas apresentações em eventos mostrando que o processo ágil é cíclico e não linear, assim como o famoso poster da VersionOne. O processo cíclico é uma das características mais importantes de qualquer processo ágil e não podia ficar de fora!

IMG 1400 - IMG 1400

Estou viciado em modelagem ágil para fazer muitos tipos de trabalho. Fui influenciado pelos conceitos do Design Thinking para elaborar este poster: “Pense no processo como um conjunto de espaços e não uma sequência de passos predeterminados”. Tentamos vários “modelos” e usar post-its para testar o conteúdo na disposição do poster foi determinante. Após várias “versões” para escolher e vários rascunhos em papel A4, decidimos o melhor.

Eu e a Patricia (minha esposa, sócia da Aspercom e responsável pela parte de mídia) sentamos num único micro com o CorewDraw para passar aquilo para meio eletrônico em pair programming (neste caso, pair drawing), aonde também decidimos a imagem do fundo. Depois, foi só juntar tudo, descobrir como fazer algumas coisas no Corel, adaptar algumas idéias que não deram certo e testar o desenho o tempo todo. O resultado final foi muito bom.

IMG 1403 - IMG 1403

Creio que na minha caixa de email deve ter pelo menos umas 300 mensagens de leitores da MundoJava e de participantes da UML-BR pedindo informações sobre a certificação UML. Como repito as mesmas coisas a cada mail que respondo creio que passar este post em link vai me ajudar um pouco a dar uma resposta melhor. :)

Valor de Mercado

Na minha opinião é até meio sem sentido. A certificação OCUP da OMG é uma certificação originalmente direcionada a Tool Vendors (os caras que criam ferramentas UML), mas o mercado é meio viciado em certificação, principalmente as certificações “raras”, então, a certificação UML da OMG é bem valorizada. Creio que fui um dos primeiros a obtê-la aqui no Brasil.

UML Cert 2 - UML Cert 2
Como “peso” de conhecimento na minha opinião a certificação IBM Rational Solution Designer é muito melhor. Tem muito conhecimento da prova da OMG que simplesmente é dispensável para o nosso dia a dia. Geralmente digo que prova não prova nada, por esta razão, não critico tanto a certificação CSM da ScrumAlliance (a não ser pelo preço, acredite, tem gente lá fora ficando rico com isso). A certificação OCUP da OMG não prova que você sabe o que é orientação a objeto, nem que é um bom modelador. Só prova que você conhece a especificação da UML 2.

Existem 3 níveis de certificação UML: Fundamental, Intermediate e Advanced. A Fundamental representa os famosos 20% da UML que é utilizada em 90% dos projetos [Jacobson] e creio que seja o nível que todos os profissionais aqui do Brasil possuem. Não vejo muita utilidade e nem tanto valor de mercado em investir mais do que a Fundamental.

Como é a prova OM0-100 (Fundamental)?

São 84 questões onde somente 80 valem para a avaliação. As 4 questões que não valem pontos são logo no início da prova e simplemente é uma pesquisa (não perca muito tempo com elas). Todas as questões são múltipla escolha, porém, tem aquelas famosas questões onde você deve assinalar mais de uma como correta. Exemplo: What applies to a Package? (mark 2).

A prova é bem conceitual. Ela valida bem o conhecimento da UML e as perguntas são baseadas na UML Superstructure Specification, v2.0 (05-07-04). A prova não é baseada na versão mais atual da UML2.

O que cai na prova Fundamental são conceitos básicos, diagrama de classes, diagrama de atividades, diagrama de sequências e diagrama de casos de uso. Se quiser fazer a prova, preste muita atenção no seu plano de estudos porque para o nível Fundamental não é tudo que cai na prova sobre cada diagrama. Como exemplo, sobre diagrama de atividades, Forks e Joins é um assunto que não cai na prova do nível Fundamental. No site de certificação existe um PDF que diz exatamente o que cai em cada nível baseado na Superstructure. Preste atenção exatamente no que cai para não estudar mais que o necessário.

A maior dificuldade da prova é o tempo. Minha recomendação é que se você sabe um pouco sobre UML não tente fazer a prova na caruda achando que UML é fácil. A prova é baseada na especificação da UML e não simplesmente diagramas onde você vai responder “Qual elemento é o ator?” ou “O que aquela linha com seta vazada significa?”. Vou dar o meu relato: já trabalho com “UML” deste o método Booch e a OMT (alguém se lembra do CoolJex?) mesmo assim não sobrou tempo. São 80 questões para responder em 90 minutos e algumas questões sobre diagrama de sequências e casos de uso você realmente precisa parar para pensar! Uma outra recomendação é que se você tem um inglês fraco pense duas vezes antes de fazer a prova. A prova é conceitual e o inglês é formal e técnico. O tempo é o maior desafio nessa prova.

Sugestão de estudo

Um ponto interessante é que literaturas tradicionais de UML (Ambler, Fowler, “Três Amigos”, Larman) vão te ajudar muito pouco. São ótimos livros, mas não para a certificação. Uma literatura que não existia na época que me certifiquei é o UML 2 Certification Guide: Fundamental & Intermediate Exams. Não posso comentar sobre este livro pois não lí. O livro que estudei para a certificação é o UML Bible do Tom Pender. É uma literatura bem completa que uso como referência muitas vezes. Aborda questões da Superstructure, tem exemplos e fala também da UML 1.X.

Se quiser estudar pelo Tom Pender meu guia de estudo é esse:

Conceitos Gerais: Capítulo 1 a 4
Diagrama de Classe: Capítulo 5 e 6 e Diagrama de Objetos do Capítulo 7.
Diagrama de Interação: Capítulo 9 (até Interaction Occurence)
Diagrama de Use-Case: Capítulo 12
Diagrama de Atividade: Capítulo 13

Independente da literatura que você escolher, a idéia é olhar o programa da prova citado, estudar primeiramente por algum livro e logo após estudar pela própria UML Superstructure Specification, v2.0 (05-07-04). O estudo pela Superstructe é obrigatório. Mas a Superstructure é um texto bem chato de ler.

O estudo pela Superstructure é importante por duas razões. A prova é baseada nesse texto e algumas perguntas como “What is a Namespace?” não constam em literatura nenhuma. Só está na especificação. Em segundo lugar algumas questões da prova apresentam diagramas que constam na especificação. Saber os diagramas exemplo que estão na Superstructure pode ser a chave para ir bem na prova.

O curso UML da Aspercom

Nosso curso UML 2.0 não é focado em certificação, mas fornece uma boa base para a prova se você não quiser estudar sozinho pela literatura indicada. Nosso curso é mais focado em demonstrar 3 bases importantes para análise e design de projetos orientado a objeto: Requisitos com Casos de Uso, Modelagem e Arquitetura. Um dos nossos alunos, o Daniel Guttermeyer (Iconophobia), relatou na lista UML-BR que obteve a certificação fazendo nosso curso e estudando pela Superstructure.

A Aspercom não é uma empresa muito fã de certificações, apesar de não ser 100% contra. Somos fãs de conhecimento. Isso pode ser constatado na nossa Visão e Missão.

Simulados

Buscando por “UML” no http://exams.googletoad.com/ achei dois simulados da OM0-100 (Fundamental): O da Pass4sure e o da ActualTests. Dei uma olhada bem por cima e creio que esses simulados podem ser uma referência sobre as questões que caem na prova. Não se assuste. Como disse a prova não é ver um diagrama e mostrar qual elemento é uma classe!

Mais informações:

O preço de cada prova de certificação é US$ 200. O centro de certificação é a PearsonVue. Para mais informações visitem os links abaixo:

http://www.omg.org/uml-certification/
http://www.pearsonvue.com/omg
http://exams.googletoad.com/?examsQ=uml

Rodrigo Yoshima

Modelar é intuitivo!!! Scrum na VM2

logo vm2 - logo vm2
Nesta semana ministrei nosso curso Scrum para a animada equipe da agência VM2. A VM2 é uma empresa especializada em projetos de design e mídia on-line em geral. Possui uma vasta carteira de produtos e já entregou mais de 750 projetos.

É interessante ver como uma empresa que veio do mundo da publicidade é bem diferente de empresas que simplesmente são produtoras de software. No trabalho da VM2 existe o trabalho artístico de design e também o dia a dia do desenvolvedor de software, lidando com integrações, frameworks, patterns, modelagem, testes e etc… A empresa deseja utilizar o Scrum para ter uma visão única do projeto, adotando a característica multi-disciplinar da metodologia.

Uma das coisas legais do nosso workshop é o exercício de levantar as User Stories de um projeto de rede social empresarial. Nós fazemos o planejamento de um projeto partindo do zero: eu faço o papel de cliente e os alunos fazem parte do corpo técnico.

Nesta atividade os alunos devem achar as User Stories conforme a conversa com o cliente se desenvolve. Não é a primeira vez que ví um aluno fazendo isso, mas dessa vez conseguí pegar um deles no flagra.

IMG 0925 - IMG 0925

Nós também temos atividades de modelagem ágil na concepção deste projeto, porém, intuitivamente este aluno (ele se chama Everton) estava modelando um mapa de navegação do sistema só para compreender melhor o problema, na melhor forma do “modelar com um propósito” da Agile Modeling. Ninguém tinha pedido pra ele fazer modelo algum, mas ele o fez por necessitar dele. Ele fez para o propósito de ter uma melhor visão sobre as Stories.

Creio que este é um bom exemplo dos benefícios de modelar. Um modelo não é uma especificação. Modelar deve ser uma atividade intuitiva e não uma obrigação. A formalidade do modelo costuma variar conforme a necessidade.

IMG 0929 - IMG 0929
O que está na cartolina azul é um mistério…

Muitos outros alunos fazem outros tipos de diagramas. Alguns deles são completamente indecifráveis para quem não participou da sua elaboração. Nenhum deles são “UML compliant”. Muitos fluxogramas simples costumam aparecer. Outros (como eu) simplesmente precisam de um papel para rabiscar coisas enquanto falam.

IMG 0924 - IMG 0924
É só afastar as cadeiras!

IMG 0923 - IMG 0923

IMG 0926 - IMG 0926

Parabéns e obrigado a todos da VM2 pela hospitalidade e pela troca de informações sobre PHP, Web Design, LAMP e etc… Até o próximo treinamento!

Rodrigo Yoshima

Design Thinking: Mais um braço Agile

Nesta semana eu e o Phillip Calçado compartilhamos uma coisa: nós lemos artigos numa revista fora do mundo de tecnologia (se é que existe isso hoje em dia) e achamos conceitos ágeis lá. Veja este post no blog gringo dele:

BigPharma Problems & Solutions: Have You Seen This Before?

Na edição brasileira da Harvard Business Review de junho/2008, Tim Brown escreveu um artigo apresentando o “Design Thinking”. Ao ler o artigo ví que Design Thinking é recheado de conceitos ágeis. Muito recheado! É praticamente uma abordagem ágil para a inovação em todas as esferas empresariais.

A abordagem de [Thomas] Edison é um dos primeiros exemplos do que hoje se chama design thinking - metodologia que imbui todo o espectro de atividades de inovação de um etos de concepção centrado no homem… Edison não era um cientista especializado num campo apenas - era, antes, um generalista com aguçado tino comercial. Em seu laboratório em Menlo Park, New Jersey, Edison se cercava de gente com talento para improviso e experimentação. Na prática, derrubou o mito do “inventor genial e solitário” ao criar uma abordagem de equipe à inovação.

Preste atenção nesta parte:

A idéia era justamente não corroborar hipóteses preconcebidas - mas ajudar o investigador a aprender algo a cada lance iterativo.

(grifo meu)

capa junho08 1 - capa junho08 1
É interessante ver como pragmatismos estão florescendo dentro no mundo empresarial das pessoas espertas e como mais e mais rigidez e controle estão obscurecendo a vida das empresas burras. Design Thinking é uma perspectiva humana para a solução dos problemas. É o envolvimento de cada indivíduo, de cada mente, na busca de uma solução viável e criativa. Isso envolve empatia, raciocínio integrativo, otimismo, experimentação e colaboração. O Design Thinking é a dinâmica de um processo colaborativo de inovação. Relatando um caso de solução para um problema de um grupo de enfermagem da Kaiser (não é a fábrica de cervejas), Tim Brown acrescenta o que colaborou para a solução:

…as equipes de inovação exploraram soluções potenciais por meio de brainstorming e prototipagem rápida… Um teste com protótipos não precisa ser complexo e nem caro. Um protótipo deve consumir apenas a quantidade de tempo, esforço e investimento necessária à geração de um feedback útil a evolução da idéia - nada mais. Quanto mais “acabado” parecer um protótipo, menor a probabilidade de que seus criadores ouçam o feedback - e se valham dele.

Olha que engraçado! A HBR, uma revista tradicionalíssima, está dizendo que meus protótipos visuais estão certos! Quando aquele gerentinho metido torcer o nariz poderei falar: “- Você leu o artigo sobre Design Thinking na Harvard Business Review?” ;)

…o que ocorreu na equipe de enfermagem da Kaiser não foi um avanço súbito e revolucionário, nem o estalo de um gênio - foi fruto do trabalho árduo realçado por um processo criativo de descoberta centrado no ser humano, seguido de ciclos iterativos de testes com protótipos e aperfeiçoamento.

Esta é a parte que mais gostei (comentários meus entre parênteses):

O melhor jeito de descrever o processo de design é metaforicamente (Beck?) - como um sistema de espaços, em vez de uma série predefinida de passos ordenados (Gantt?). Esses espaços delimitam tipos distintos de atividades correlatas que, juntas, formam o continuum da inovação. O Design Thinking pode parecer caótico para um marinheiro de primeira viagem (seu chefe?). Mas, no decorrer de um projeto, os participantes acabam entendendo que o processo faz sentido e produz resultados (um release?), ainda que sua arquitetura seja distinta do processo linear fundado em marcos intermediários característico de outras atividades empresariais.

Este parágrafo no artigo é uma das melhores definições que já ví a respeito da natureza de um processo de design. Desenvolver software é 100% design. Isso foi tão contundente pra mim que contactei o Tim Brown - o autor do artigo - perguntando se ele tinha sido influenciado pelas práticas do Agile Software Development. Veja a resposta dele entre outras coisas:

From: Tim Brown
Date: 2008/7/2
Subject: Re: Article about Design Thinking on Harvard Business Review
To: Rodrigo Yoshima

Hi Rodrigo,
It doesn’t surprise me to hear that software design shares many of the same characteristics as design thinking. You are right that there has not been a lot of interaction between these two communities other than through the computer human interaction folks where I think a lot of these same issues have been discussed.

Thanks for making the link.

Best regards
Tim

On 6/30/08 5:53 PM, “Rodrigo Yoshima” wrote:

> Hi Tim,
> I’ve just read your article about Design Thinking and I’m
> just very very curious about how you put Design Thinking
> pratices together. Design Thinking concepts are very close
> to Agile Software Development Practices. Have you ever
> heard about it? Take a look at www.agilemanifesto.org.
>
> I see that the values of the Agile Manifesto is our flag of
> Design Thinking on Software Development. 100% of the
> software construction is design. Agile Practices are:
>
> - Human centered / Focused on Team Work
> - Iterative / Cyclical / Feed-back based
> - Use a lot of Prototypes / Sketches
> - Empirical
>
> I guess that you can really benefit from the contents
> that our community have being studying for the last 20 years.
>
> Cheers.
>
> Rodrigo Yoshima
> ASPERCOM / MundoJava

Sim! Mais uma vez provamos que o futuro do mundo empresarial é empírico e pragmático. Mais uma vez está provado que rigidez e processos inflexíveis impedem a inovação. Quem só tem martelo na mão só vê pregos pela frente… e sai martelando tudo.

- Próxima Página »