90

Scrum e o Ambiente de Desenvolvimento Ágil

Embed Size (px)

Citation preview

Page 1: Scrum e o Ambiente de Desenvolvimento Ágil
Page 2: Scrum e o Ambiente de Desenvolvimento Ágil
Page 3: Scrum e o Ambiente de Desenvolvimento Ágil

Indivíduos e Interações mais que processos e ferramentas.

Software funcionando mais que documentação abrangente.

Colaboração com cliente mais que negociação de contratos

Resposta a mudança mais que seguir um plano.

www.agilemanifesto.org

Page 4: Scrum e o Ambiente de Desenvolvimento Ágil
Page 5: Scrum e o Ambiente de Desenvolvimento Ágil
Page 6: Scrum e o Ambiente de Desenvolvimento Ágil

• Effective Smalltalk • Extreme Programming• Junit Pocket guide • Tdd By example• Implementation Patterns•  Refactoring• Domain-Specific

Languages• Patterns of Enterprise

Application Architecture

• UML• Beyond Software

Architecture• Clean Code • Programming in Ruby

Page 7: Scrum e o Ambiente de Desenvolvimento Ágil
Page 8: Scrum e o Ambiente de Desenvolvimento Ágil

São métodos utilizados no intuito de facilitar a adoção de práticas ágeis em processos tradicionais já definidos – não precisa substituir o processo

Algumas são: Extreme Programming – XP Scrum Kanban

Page 9: Scrum e o Ambiente de Desenvolvimento Ágil

PROJETOS DE PONTESPROJETOS DE SOFTWARE

– Prazo – OK ( menos no Brasil )

– Orçamento – OK – Quase nenhuma cai – Ciência Antiga – 4 a 6

mil anos

– Prazo – estoura – Orçamento – estoura – Têm problemas com

freqüência – Ciência nova – 50 anos

Aspectos críticos– Projetos de ponte são engessados e ninguém dá “pitaco”– Projetos de software normalmente precisam suportar mudanças nas regras de negócio– Pontes que caem têm relatórios de erros. Softwares são mascarados eignorados. Não há aprendizado

Fonte: Joaquim Lopes Jú[email protected]

Page 10: Scrum e o Ambiente de Desenvolvimento Ágil

Fonte: Joaquim Lopes Jú[email protected]

1º Encontro PHPMG/2009

Page 11: Scrum e o Ambiente de Desenvolvimento Ágil

Desenvolvimento ágil não garante necessariamente que o projeto terá mais ou menos sucesso

Mas ajuda a descobrir antes que algo não está indo bem – ITERAÇÕES CURTAS E ENVOLVIMENTO DO CLIENTE PARA VALIDAÇÃO

Fonte: Joaquim Lopes Jú[email protected]

1º Encontro PHPMG/2009

Page 12: Scrum e o Ambiente de Desenvolvimento Ágil

Vamos a elas:Scrum e XP

Page 13: Scrum e o Ambiente de Desenvolvimento Ágil
Page 14: Scrum e o Ambiente de Desenvolvimento Ágil
Page 15: Scrum e o Ambiente de Desenvolvimento Ágil

Baseado na teoria de controle de processo industrial– Auto-organização e emergência

Utilizado há 15 anos com sucesso em milhares de projetos, centenas de organizações

É gerencial. Não serve apenas para projetos de software

Scrum é um processo ágil que permite manter o foco na entrega do maior valor de negócio, no menor tempo possível.

Page 16: Scrum e o Ambiente de Desenvolvimento Ágil
Page 17: Scrum e o Ambiente de Desenvolvimento Ágil

Equipes que se auto-organizam Prescreve os papéis de Product Owner (cliente) e

Scrum Master, além da equipe (team) O produto evolui em uma série de “Sprints” mensais Os requerimentos são listados em um “Product

Backlog” Não há prática de engenharia prescrita (o Scrum

adequa-se a todas) Usa regras generativas na criação de um ambiente

ágil para a entrega de projetos

Page 18: Scrum e o Ambiente de Desenvolvimento Ágil
Page 19: Scrum e o Ambiente de Desenvolvimento Ágil

Product backlog

Page 20: Scrum e o Ambiente de Desenvolvimento Ágil
Page 21: Scrum e o Ambiente de Desenvolvimento Ágil

Burndown Chart

Page 22: Scrum e o Ambiente de Desenvolvimento Ágil
Page 23: Scrum e o Ambiente de Desenvolvimento Ágil

Planejamento do Sprint

Scrum Diário

Revisão do Sprint

Retrospectiva do Sprint

Page 24: Scrum e o Ambiente de Desenvolvimento Ágil

Microsoft Yahoo Google Electronic Arts The New York Times Philips Siemens Nokia Globo.com BBC Intuit Nielsen Media

First American Real Estate BMC Software Ipswitch John Deere Lexis Nexis Sabre Salesforce.com Time Warner Turner Broadcasting Oce

Page 25: Scrum e o Ambiente de Desenvolvimento Ágil

Extreme Programming

Page 26: Scrum e o Ambiente de Desenvolvimento Ágil

“Jeito leve, eficiente, de baixo risco, flexível, previsível, científico e divertido de desenvolver

software” - KentBeck

Page 27: Scrum e o Ambiente de Desenvolvimento Ágil
Page 28: Scrum e o Ambiente de Desenvolvimento Ágil

Programadores trabalham em coisas que realmente importam

Cliente tem maior valor agregado possível a cada semana de desenvolvimento

Comunicação: Interna e com o cliente

Simplicidade Não olhar para frente. Para que pensar no trabalho

de amanhã, se amanhã talvez ele não faça mais sentido?

Page 29: Scrum e o Ambiente de Desenvolvimento Ágil

“XP is making a bet. It is betting that it is better to do a simple thing today and pay a little more tomorrow to change it if it needs it, than to do a more complicated thing today that may never

be used anyway.” - Kent Beck

Page 30: Scrum e o Ambiente de Desenvolvimento Ágil
Page 31: Scrum e o Ambiente de Desenvolvimento Ágil
Page 32: Scrum e o Ambiente de Desenvolvimento Ágil

PROGRAMAÇÃO EM PAR

Page 33: Scrum e o Ambiente de Desenvolvimento Ágil

PLANNING POKER

Page 34: Scrum e o Ambiente de Desenvolvimento Ágil

TDD Integração contínua Pequenas liberações Refactoring Padrões de Código e código de vários donos

Page 35: Scrum e o Ambiente de Desenvolvimento Ágil

“Contrate bons profissionais, dê a eles ferramentas e treinamentos para que façam o

trabalho, depois saia da frente deles”Dave Thomas – OBT

Page 36: Scrum e o Ambiente de Desenvolvimento Ágil
Page 37: Scrum e o Ambiente de Desenvolvimento Ágil
Page 38: Scrum e o Ambiente de Desenvolvimento Ágil
Page 39: Scrum e o Ambiente de Desenvolvimento Ágil

Linguagens e Frameworks

Page 40: Scrum e o Ambiente de Desenvolvimento Ágil
Page 41: Scrum e o Ambiente de Desenvolvimento Ágil

Linguagens de alto nível Não são compiladas (em sua maioria) Tipagem dinâmica Duck Type Vantagens e Desvantagens Protocolo de Meta-Objeto (Meta-Object Protocol),

ou MOP. Forte presença no Ambiente ágil de

Desenvolvimento. Algumas Aceitam tipagem estática.

Page 42: Scrum e o Ambiente de Desenvolvimento Ágil

Três principais linguagens Dinâmicas da Atualidade

Ruby e Python Tipagem apenas dinâmica e não compiladas. Mais populares linguagens do Meio ágil Orientadas a objeto Código legível

Groovy Tipagem Dinâmica e Estática. Pode ser Compilada . Solução ágil para plataforma JVM. Grande integração com código Java.

Page 43: Scrum e o Ambiente de Desenvolvimento Ágil

Desenvolvendo Ágil

Page 44: Scrum e o Ambiente de Desenvolvimento Ágil

Testes Automatizados, TDD e BDD, Refatoração, CI

Improve it

Page 45: Scrum e o Ambiente de Desenvolvimento Ágil

“Code without tests is bad code. It doesn’t matter how well written it is; it doesn’t matter how pretty or object orientated or well-

encapsulated it is. With tests, we can change the behavior of our code quickly and verifiable. Without them, we really don’t know if our

code is getting better or worse.”

Working Effectively With Legacy Code - Michael C. Feathers

Page 46: Scrum e o Ambiente de Desenvolvimento Ágil
Page 47: Scrum e o Ambiente de Desenvolvimento Ágil

“To me, legacy code is simply code without tests.”

Working Effectively With Legacy Code - Michael C. Feathers

Page 48: Scrum e o Ambiente de Desenvolvimento Ágil

De autoria do desenvolvedor

Escritos durante o desenvolvimento

Casos de teste Sucesso Falha Especificação Assert

Frameworks: Junit EasyMock Selenium Rspec Cucumber

Page 49: Scrum e o Ambiente de Desenvolvimento Ágil

Pedaços de código Métodos classes

Exemplo:Class matematica def soma(a,b)

a+b endend

Page 50: Scrum e o Ambiente de Desenvolvimento Ágil

class TestMatematica def test_soma math = Matematica.new result = math.soma(2, 2) assert_equal(result, 4) endend

Page 51: Scrum e o Ambiente de Desenvolvimento Ágil

def test_parsearquivo = File.new(“tests/arquivo.txt”)parser = Parser.newparsed_content = parser.parse(arquivo)assert_equal(parsed_content, “teste”)

end

Page 52: Scrum e o Ambiente de Desenvolvimento Ágil

def cliente_nao_deve_ser_salvo_sem_nome cliente = Cliente.new(:nome =>’’)

salvo = cliente.saveassert !salvo

end

Page 53: Scrum e o Ambiente de Desenvolvimento Ágil

Funcionalidades Interação Fluxo Robôs

Page 54: Scrum e o Ambiente de Desenvolvimento Ágil

Exemplos:def test_deve_criar_cliente

assert_difference(‘Cliente.count’)do post :create, :cliente =>{:nome => ‘josé’}

end

assert_redirected_to cliente_path(assigns(:cliente))

end

Page 55: Scrum e o Ambiente de Desenvolvimento Ágil

Exemplos:def test_deve_criar_cliente

assert_difference(‘Cliente.count’)do post :create, :cliente =>{:nome => ‘josé’}

end

assert_redirected_to cliente_path(assigns(:cliente))

end

Page 56: Scrum e o Ambiente de Desenvolvimento Ágil

Módulos Banco de Dados WebServices RMI

Fixtures Dados utilizados nos testes Simulam dados reais Independente de esquema

Page 57: Scrum e o Ambiente de Desenvolvimento Ágil
Page 58: Scrum e o Ambiente de Desenvolvimento Ágil

TDD não é descrever testes, é descrever um comportamento.

Page 59: Scrum e o Ambiente de Desenvolvimento Ágil

Testar Antes Codificar depois Codificar somente o necessário para o teste

passar Falha do teste indica próximo passo de

codificação

Page 60: Scrum e o Ambiente de Desenvolvimento Ágil

Se você escrever testes antes, irá codificar melhor depois.

Page 61: Scrum e o Ambiente de Desenvolvimento Ágil

Teste Falha Teste passa Refatorar

Ciclo do TDD

Page 62: Scrum e o Ambiente de Desenvolvimento Ágil

Usando TDD, quando acabamos, realmente acabamos.

Page 63: Scrum e o Ambiente de Desenvolvimento Ágil

DSL - Domain Specific Language Especificar um comportamento Especificar o sistema

Page 64: Scrum e o Ambiente de Desenvolvimento Ágil

Exemplo com Rspec

describe Userend

Usuário não existe!

Page 65: Scrum e o Ambiente de Desenvolvimento Ágil

class usuarioend

OK!

Page 66: Scrum e o Ambiente de Desenvolvimento Ágil

describe usuarioit “deve estar no papel atribuido a ele” do

usuario= Usuario.new usuario.should be_no_papel(“papel atribuido”)end

end

Método “no_papel?” não existe!

Page 67: Scrum e o Ambiente de Desenvolvimento Ágil

Class Usuariodef no_papel?(papel)end

end

Método “no_papel?” retornou nulo mas deveria ter retornado verdadeiro!

Page 68: Scrum e o Ambiente de Desenvolvimento Ágil

Class Usuariodef no_papel?(papel)

trueend

end

OK!

Page 69: Scrum e o Ambiente de Desenvolvimento Ágil

describe usuarioit “deve estar no papel atribuido a ele” do

usuario= Usuario.new usuario.should be_no_papel(“papel atribuido”)end

end

Page 70: Scrum e o Ambiente de Desenvolvimento Ágil

describe usuarioit “deve estar no papel atribuido a ele” do

usuario= Usuario.newusuario.atribuir_papel(“papel atribuido”)

usuario.should be_no_papel(“papel atribuido”)end

end

Método “atribuir_papel” não existe!

Page 71: Scrum e o Ambiente de Desenvolvimento Ágil

Class Usuariodef no_papel?(papel)trueenddef atribuir_papel(papel)end

end

OK!

Page 72: Scrum e o Ambiente de Desenvolvimento Ágil

describe usuarioit “deve estar no papel atribuido a ele” do

usuario= Usuario.newusuario.atribuir_papel(“papel atribuido”)

usuario.should be_no_papel(“papel atribuido”)endit “não deve estar no papel não atribuido a ele” do

usuario= Usuario.new usuario.should_not be_no_papel(“papel não atribuido”)end

end

Método “in_role” retornou true

Page 73: Scrum e o Ambiente de Desenvolvimento Ágil

Class Usuariodef no_papel?(papel)papel == “papel atribuido”enddef atribuir_papel(papel)end

end

OK!

Page 74: Scrum e o Ambiente de Desenvolvimento Ágil

Hora de refatorar!

Page 75: Scrum e o Ambiente de Desenvolvimento Ágil

Class Usuario@papeldef no_papel?(papel)@papel ==papelenddef atribuir_papel(papel)@papel = papelend

end

OK!

Page 76: Scrum e o Ambiente de Desenvolvimento Ágil

Usuario-deve estar no papel atribuido a ele-Não deve estar no papel não atribuido a ele

Finished in 0.018 seconds2 examples, 0 failures

Page 77: Scrum e o Ambiente de Desenvolvimento Ágil

Assuntos Pendentes

Page 78: Scrum e o Ambiente de Desenvolvimento Ágil

CI – Integração Contínua Repositório de codigo Build automático Execução de testes Controle de releases Deploy

Page 79: Scrum e o Ambiente de Desenvolvimento Ágil

CI – Integração Contínua Diminui o tempo de integração Ambiente de build controlado Detecção de bugs Reduz riscos

Page 80: Scrum e o Ambiente de Desenvolvimento Ágil
Page 81: Scrum e o Ambiente de Desenvolvimento Ágil

Refatoração Pequenas mudanças Preservam o comportamento externo Mudanças estruturais Organizam o código Melhoram o entendimento Facilitam adição de novas funcionalidades

Page 82: Scrum e o Ambiente de Desenvolvimento Ágil
Page 83: Scrum e o Ambiente de Desenvolvimento Ágil

Considerações Finais Testes especificam o software Testes aumentam a qualidade Testes melhoram o design Testes provêem segurança Testes dão liberdade

Page 84: Scrum e o Ambiente de Desenvolvimento Ágil
Page 85: Scrum e o Ambiente de Desenvolvimento Ágil
Page 86: Scrum e o Ambiente de Desenvolvimento Ágil

Está provado que Desenvolvimento Ágil funciona e que é o que o mercado procura

Tendências do Mercado de TI apontam: Programação em nuvem Tecnologias que cortem custos e de retorno rápido

do investimento aplicado Tecnologias OpenSource e Sustentáveis Comunidades coperativas

Ninguém faz nada sozinho Mobilidade

Page 87: Scrum e o Ambiente de Desenvolvimento Ágil

Criar grupos Trocar conhecimentos Aprender coisas novas Estar sempre atualizados Participar de eventos Assistir palestras

E depois, porque não:Um Happy Hour!!

Page 88: Scrum e o Ambiente de Desenvolvimento Ágil
Page 89: Scrum e o Ambiente de Desenvolvimento Ágil

agilemanifesto.org neactar.com ruby-lang.org rubyonrails.pro.br python.org groovy.codehaus.org djangoproject.com scrumalliance.org improveit.com.br/scrum improveit.com.br/xp testdriven.com improveit.com.br/xp/praticas/tdd behaviour-driven.org/ martinfowler.com/articles/continuousIntegration refactoring.com infoq.com/br grails.org

Page 90: Scrum e o Ambiente de Desenvolvimento Ágil

@abacrazytech@thiagocifani

[email protected] [email protected]