Download - 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
• 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
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
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]
Fonte: Joaquim Lopes Jú[email protected]
1º Encontro PHPMG/2009
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
Vamos a elas:Scrum e XP
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.
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
Product backlog
Burndown Chart
Planejamento do Sprint
Scrum Diário
Revisão do Sprint
Retrospectiva do Sprint
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
Extreme Programming
“Jeito leve, eficiente, de baixo risco, flexível, previsível, científico e divertido de desenvolver
software” - KentBeck
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?
“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
PROGRAMAÇÃO EM PAR
PLANNING POKER
TDD Integração contínua Pequenas liberações Refactoring Padrões de Código e código de vários donos
“Contrate bons profissionais, dê a eles ferramentas e treinamentos para que façam o
trabalho, depois saia da frente deles”Dave Thomas – OBT
Linguagens e Frameworks
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.
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.
Desenvolvendo Ágil
Testes Automatizados, TDD e BDD, Refatoração, CI
Improve it
“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
“To me, legacy code is simply code without tests.”
Working Effectively With Legacy Code - Michael C. Feathers
De autoria do desenvolvedor
Escritos durante o desenvolvimento
Casos de teste Sucesso Falha Especificação Assert
Frameworks: Junit EasyMock Selenium Rspec Cucumber
Pedaços de código Métodos classes
Exemplo:Class matematica def soma(a,b)
a+b endend
class TestMatematica def test_soma math = Matematica.new result = math.soma(2, 2) assert_equal(result, 4) endend
def test_parsearquivo = File.new(“tests/arquivo.txt”)parser = Parser.newparsed_content = parser.parse(arquivo)assert_equal(parsed_content, “teste”)
end
def cliente_nao_deve_ser_salvo_sem_nome cliente = Cliente.new(:nome =>’’)
salvo = cliente.saveassert !salvo
end
Funcionalidades Interação Fluxo Robôs
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
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
Módulos Banco de Dados WebServices RMI
Fixtures Dados utilizados nos testes Simulam dados reais Independente de esquema
TDD não é descrever testes, é descrever um comportamento.
Testar Antes Codificar depois Codificar somente o necessário para o teste
passar Falha do teste indica próximo passo de
codificação
Se você escrever testes antes, irá codificar melhor depois.
Teste Falha Teste passa Refatorar
Ciclo do TDD
Usando TDD, quando acabamos, realmente acabamos.
DSL - Domain Specific Language Especificar um comportamento Especificar o sistema
Exemplo com Rspec
describe Userend
Usuário não existe!
class usuarioend
OK!
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!
Class Usuariodef no_papel?(papel)end
end
Método “no_papel?” retornou nulo mas deveria ter retornado verdadeiro!
Class Usuariodef no_papel?(papel)
trueend
end
OK!
describe usuarioit “deve estar no papel atribuido a ele” do
usuario= Usuario.new usuario.should be_no_papel(“papel atribuido”)end
end
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!
Class Usuariodef no_papel?(papel)trueenddef atribuir_papel(papel)end
end
OK!
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
Class Usuariodef no_papel?(papel)papel == “papel atribuido”enddef atribuir_papel(papel)end
end
OK!
Hora de refatorar!
Class Usuario@papeldef no_papel?(papel)@papel ==papelenddef atribuir_papel(papel)@papel = papelend
end
OK!
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
Assuntos Pendentes
CI – Integração Contínua Repositório de codigo Build automático Execução de testes Controle de releases Deploy
CI – Integração Contínua Diminui o tempo de integração Ambiente de build controlado Detecção de bugs Reduz riscos
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
Considerações Finais Testes especificam o software Testes aumentam a qualidade Testes melhoram o design Testes provêem segurança Testes dão liberdade
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
Criar grupos Trocar conhecimentos Aprender coisas novas Estar sempre atualizados Participar de eventos Assistir palestras
E depois, porque não:Um Happy Hour!!
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
@abacrazytech@thiagocifani