Rodrigo Branas - @rodrigobranas – http://www.agilecode.com.br




                Modelagem Ágil
http://www.slideshare.net/rodrigobranas
@rodrigobranas
  rodrigo.branas@gmail.com
 http://www.agilecode.com.br
Formação Acadêmica
Ciências da Computação – UFSC
Gerenciamento de Projetos - FGV

Certificações

SCJA, SCJP, SCJD, SCWCD, SCBCD, PMP, MCP e CSM
Rodrigo Branas – rodrigo.branas@gmail.com
10 anos de experiência na plataforma Java
1000 horas em sala de aula
Mais de 50 palestras em eventos

Líder da área de desenvolvimento na Gennera
Autor da revista Java Magazine
Palestrante
Instrutor da Academia Java e Agile da Globalcode
Criador dos treinamentos de Clean Code, Selenium e
Maven da Agile Code

Trabalhou com as empresas:
EDS, HP, GM, Citibank, OnCast, Globalcode, V.Office, Dígitr
o, Softplan, Unimed, Suntech, Vale do Rio
Modelagem Ágil é uma atitude
Apoiada em valores e princípios
Com foco no que é suficiente
Não é um processo prescritivo
Não é uma metodologia
Deve ser utilizado em conjunto com
um outro método (XP, Scrum, FDD)
Estimula o trabalho em equipe
Funciona na prática, não na teoria
           acadêmica
Valores da Modelagem Ágil
O que é um valor?
“Uma concepção do desejável
explícita e implícita, característica
de um indivíduo ou grupo, e que
     influencia a seleção dos
  modos, meios e fins da ação“

  (Clide Kluckhon, antropólogo)
“Um valor é uma crença em que o
 homem se baseia para atuar por
           referência“

     (Alpport, psicólogo)
Comunicação
Simplicidade
Over-Architecture pensando em um
          possível futuro
Aplicar padrões de projeto
  complexos muito cedo
Generalidade especulativa
Condensar hierarquia quando
  houver classes abstratas
      desnecessárias
Internalizar classe quando houver
  uma delegação desnecessária
Deletar métodos e variáveis que
      não forem utilizadas
YAGNI (You Ain’t Gonna Need It)

- Tempo gasto adicionando, testando e
corrigindo novas funcionalidades.
- Novas funcionalidades precisam ser
debugadas, documentadas e suportadas.
- Seu código ocupa espaço e aumenta a
complexidade do software como um todo.
- Novas funcionalidades geram novas
necessidades e o efeito snowball.
"Always implement things when you
  actually need them, never when
   you just foresee that you need
               them.“

          (Ron Jeffries)
YAGNI (You Ain’t Gonna Need It)

- Tempo gasto adicionando, testando e
corrigindo novas funcionalidades.
- Novas funcionalidades precisam ser
debugadas, documentadas e suportadas.
- Seu código ocupa espaço e aumenta a
complexidade do software como um todo.
- Novas funcionalidades geram novas
necessidades e o efeito snowball.
YAGNI (You Ain’t Gonna Need It)

- Tempo gasto adicionando, testando e
corrigindo novas funcionalidades.
- Novas funcionalidades precisam ser
debugadas, documentadas e suportadas.
- Seu código ocupa espaço e aumenta a
complexidade do software como um todo.
- Novas funcionalidades geram novas
necessidades e o efeito snowball.
YAGNI (You Ain’t Gonna Need It)

- Tempo gasto adicionando, testando e
corrigindo novas funcionalidades.
- Novas funcionalidades precisam ser
debugadas, documentadas e suportadas.
- Seu código ocupa espaço e aumenta a
complexidade do software como um todo.
- Novas funcionalidades geram novas
necessidades e o efeito snowball.
YAGNI (You Ain’t Gonna Need It)

- Tempo gasto adicionando, testando e
corrigindo novas funcionalidades.
- Novas funcionalidades precisam ser
debugadas, documentadas e suportadas.
- Seu código ocupa espaço e aumenta a
complexidade do software como um todo.
- Novas funcionalidades geram novas
necessidades e o efeito snowball.
Feedback
Desenvolver o modelo em grupo
Revisar o modelo com a audiência
Implementar o modelo
Derrubando os servidores
Coragem
Humildade
O que são modelos ágeis?
Cumprem seu propósito
São compreensíveis
Quem é a sua audiência?
São suficientemente
precisos, consistentes e detalhados
Mais simples possível
Realmente é necessário utilizar uma
    ferramenta mais complexa?
Que tipo de ferramentas vocês
   utilizam para modelar?
Código-fonte é um modelo? É um
          modelo ágil?
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Ferramentas simples

- Priorizam a comunicação
- São baratas, flexíveis e inclusivas
- Utilização rápida e portável
- Podem ser combinadas com
outras mais complexas
- Promovem o desenvolvimento
iterativo e incremental
Agile Draw
Prototipação em papel
Image Box
UML em cores
Conceitos errados sobre modelagem
Modelo == Documentação
Sempre conseguimos modelar tudo
            no início
Modelar é obrigatoriamente um
      processo pesado
Você deve utilizar uma ferramenta
       CASE para modelar
Modelar é uma grande perda de
            tempo
Todos os desenvolvedores sabem
            modelar
Princípios da Modelagem Ágil
Assuma a simplicidade
Abrace as mudanças
Enabling the next effort is your
        secondary goal
Incremental change
Maximaze stakeholder ROI
Modele com um propósito
Utilize múltiplos modelos
Obtenha feedback rapidamente
Seu objetivo principal é software
          funcionando
Travel light
Conteúdo é mais importante do que
          representação
Se comunique de maneira aberta e
            honesta
Práticas da Modelagem Ágil
Participação ativa dos stakeholders
O modelo deve ser coletivo
Crie vários modelos em paralelo
Exponha os modelos publicamente
Itere para outro artefato
Modele em conjunto
Comprove com código
Use a ferramenta mais simples
Jogue fora os modelos temporários
Update Only When It Hurts
Just barely good enough artifacts
Model storming

Modelagem Ágil