SlideShare uma empresa Scribd logo
1 de 34
uma nova técnica ágil: Programação em
pares evoluída pela engenharia simultânea.
Herez.Kattan (skype)
@herezkattan (twitter)
Dois programadores trabalham colaborativamente na mesma atividade,
sentado lado a lado em um único computador.
Enquanto uma pessoa está escrevendo o código, por exemplo,
a outra observa atentamente o trabalho produzido, buscando defeitos e
sugestões de melhoria.
A programação em pares estimula a disseminação do conhecimento,
reduz a quantidade de defeitos e gera software com mais qualidade
(BEGEL; NAGAPPAN, 2008).
–Pares de programadores produzem código de melhor qualidade
(Jeffries 2001).
–Pois todo o código é revisado por pelo menos um programador,
é mais livre de defeitos (Muller 2003),
–Não despende significativamente mais tempo que o código produzido
por apenas uma pessoa,
–Integrantes da equipe exercem todas as funções:
análise, projeto, teste e programação,
–Tipicamente, um par é dividido em uma pessoa produzindo código ou
casos de testes, enquanto que a outra pessoa revisa e pensa.
Não é possível escrever código em pares, vai ser lento. E se as
pessoas não se derem bem?
–O padrão de código garante a qualidade mínima
–Todos estão descansados e a discussão é proveitosa
–Os testes são escrito em conjunto, alinhando o entendimento
–A metáfora forma a base para o entendimento comum
–Os pares trabalham em um design simples
Maior diversidade de idéias, técnicas, algoritmos.
Enquanto um escreve, o outro pensa em contra-exemplos,
problemas de eficiência, etc.
Vergonha de escrever código feio (hacking) na frente do seu par.
Pareamento de acordo com especialidades.
–Ex.: Sistema de Tempo Real Orientado a Objetos
Ref.: Dyba, T. Et all. On the Effectiveness of Pair Programming.
IEEE SOFTWARE November/December 2007
Artigo revisa 15 estudos sobre programação em pares,
normalizado os resultados na tentativa de uma conclusão
O estudo se concentra nos aspectos:
–Duração – tempo do calendário do desenvolvimento
–Esforço – HH requerido
–Qualidade – quanto melhor ficou o produto final
A pergunta de pesquisa:
A PP pode produzir um código de qualidade em menos tempo,
com esforço menor?
Referencias anteriores indicavam que pequenos grupos eram
improdutivos
Normalizando os resultados :
–A duração do PP é menor
–O esforço é um pouco maior
–A qualidade é um pouco melhor
 Código de melhor
qualidade
 Menor número de
defeitos
 Aumenta o esforço
HH(hora de
trabalho do
desenvolvedor(a))
do projeto
Kent Beck @KentBeck3 Oct
pair programming works best with a large uncertain search
space of problems and solutions. the closer to a solved problem,
the less it helps
Engenharia Simultânea (ES), ou mais modernamente,
Desenvolvimento Integrado de Produto e Processo
(Integrated Product and Process Development - IPPD) é uma
filosofia que na verdade envolve mais do que
Engenharia.
No início o objetivo era o projeto simultâneo do produto e dos
respectivos processos de manufatura.
O objetivo cresceu passando a incluir todas as etapas do ciclo
de vida do produto, desde a sua concepção até a
sua retirada de serviço, sua destinação final, após transcorridos
seu período de vida útil (BENNETT; LAMB, 1995).
Assim como o “Just-in-Time”, a Engenharia simultânea é uma
filosofia e não uma tecnologia. Engenharia
Simultânea usa tecnologia para atingir seus objetivos.
O principal objetivo da Engenharia Simultânea ou
Desenvolvimento Integrado de Produto e Processo é a
diminuição do tempo desde o pedido até a entrega, para um
novo produto, com custo mais baixo e maior
qualidade. Isto é alcançado através do desenvolvimento paralelo,
ao invés de seqüencial, das diferentes etapas
que compõem o Projeto do Produto, com o emprego de times ou
equipes multidisciplinares (“cross-functional
teams”) (BENNETT; LAMB, 1995).
“Engenharia Simultânea é uma abordagem sistemática para o
projeto integrado e concorrente de produtos e de
seus processos relacionados, incluindo manufatura e suporte.
Esta abordagem intenciona provocar que os
desenvolvedores, desde o início, considerem todos os elementos
envolvidos no ciclo de vida do produto desde a
sua concepção até o seu descarte, fim de sua vida útil, incluindo
qualidade, custo, prazos e os requisitos dos
clientes” (WINNER et al., 1988).
E a definição do “Concurrent Engineering Research Center”
(CERC):
“Engenharia Simultânea é uma abordagem sistemática para o
desenvolvimento integrado de um produto e os
processos relacionados, que enfatiza a responsabilidade para
com as expectativas do consumidor e incorpora os
valores de cooperação dos times, confiança e compartilhamento,
de uma maneira tal que a tomada de decisões
se processa com largos intervalos de trabalho paralelo,
englobando todas as perspectivas do ciclo de vida do
produto, de uma maneira sincronizada, por meio de diálogo
para obtenção de consenso” (CERC, 1992).
|Segundo Syan (1994) estes time deve conter pessoas de vários
departamentos da empresa, incluindo os principais fornecedores e clientes.
1. Formar Pares: Revezamento quando possível para disseminar
conhecimento.
2. Par é responsável pela tarefa: Não precisa sentar junto o
tempo todo.
3. Dois teclados: Ideal no início para trocar idéias(maior
número de algoritmos e soluções) e dividir a tarefa,
lembrando que deverá juntar no final (+ qualidade, efeito
“hacking”, + produtividade, 2 teclados).
4. V&V: Na junção da tarefa um revisa o trabalho do outro,
ambos integram e testam tudo.
Homebroker – Permite operar no mercado de ações, derivativos.
Facebroker – Homebroker dentro do facebook.
Farejador – baseado em análise gráfica para buscar as melhores
Oportunidades tanto de compra quanto de venda
Homebroker – Diversas funcionalidades desenvolvidas usando
Programação em pares e solo.
Facebroker – Desenvolvedores experientes dividiram as tarefas no
Início, mas houve problema na hora de juntar, houve retrabalho.
Farejador – Desenvolvido usando programação solo.
0
2
4
6
8
10
SOLO
PP
PSP
PSP, exigiu menos HH,
melhorou densidade de desvio de padrão de código, taxa de
comentários, defeitos por LOC e LOC por pessoa/hora (tempo
calendário desenvolvimento)
As equipes precisam realmente se encontrar para colaborar efetivamente?
Experimento em empresa de desenvolvimento de software:
Pares não estavam na mesma dependência física:
Solução DMA – para visualização de cotações de derivativos e roteamento
de ordens.
Linguagem C++ usando Qt para compilar em Mac, Linux e Windows
Reunião inicial presencial, trocar experiências, dividir tarefa
Skype, durante o dia a dia para comunicação
GitHub, como repositório único
Google Drive, Cacoo, para documentação mínima exigida
SOLO
0
5
10
SOLO
PSP
PSP, exigiu menos HH,
melhorou densidade de desvio de padrão de código, taxa de
comentários, defeitos por LOC e LOC por pessoa/hora (tempo
calendário desenvolvimento)
Arquitetura de agilidade –em iteração de arquitetura, par mais experiente
em arquitetura trabalhou nesta primeira iteração deste software;
Controvérsias sobre o papel da arquitetura de software nos métodos ágeis.
Arquitetos duvidam da escalabilidade de processos que não dão atenção
especial para a arquitetura
Métodos ágeis são dirigidos pelos usuários, que não veem valor,
diretamente, na arquitetura.
A arquitetura é um subproduto do projeto, e não um requisito essencial
Ref. 1. : Abrahmsson, P. Babar, M.A.; Kruchten, P.
Agility and Architecture: Can they coexist? IEEE Software March/April 2010.
Arquitetos podem trazer agilidade e práticas de arquitetura visando
equilibrar pragmaticamente negócios e prioridades de arquitetura
ao entregar ambos com agilidade.
Ref. 1. : James Madison –
Agile–Architecture Interactions IEEE Software March/April 2010.
Arquitetura foi elaborada usando PSP. Melhorou a disseminação do
conhecimento, efeito secundário: melhorou a Produtividade, diminuiu
Esforço, pois todos desenvolvedores entenderam melhor a arquitetura
do software que estavam desenvolvendo.
Atividades de desenvolvimento foram realizadas usando programação
solo, em pares e simultânea em pares.
0
2
4
6
8
10
SOLO
PP
PSP
PSP, exigiu menos HH,
melhorou densidade de desvio de padrão de código, taxa de
comentários, defeitos por LOC e LOC por pessoa/hora (tempo
calendário desenvolvimento)
• A Conclusão dos experimentos demonstrou que 2
desenvolvedores programando simultaneamente em 2 teclados
foram mais produtivos se comparados com 2 desenvolvedores
em 1 teclado ou desenvolvendo sozinhos sem PSP.
•PSP aumentou a produtividade, ajudou a cumprir o prazo.
•PSP manteve o ganho de qualidade da PP.
•PSP diminuiu o custo se comparados com PP ou programação
solo, pois diminuiu o esforço, mensurado em HH(hora de
trabalho do desenvolvedor(a)).
Programação em pares evoluída pela engenharia simultânea

Mais conteúdo relacionado

Mais procurados

Praticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de SoftwarePraticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de SoftwarePaulo Moura
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Letticia Nicoli
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agiledayCarlos Felippe Cardoso
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisLorival Smolski Chapuis
 
TDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquiteturaTDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquiteturaEric Lemes
 
Desenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaDesenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaCarlos Felippe Cardoso
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no designFelipe Benevides
 
A integração contínua pode te dar metricas de graca - SGRIO 2014
A integração contínua pode te dar metricas de graca - SGRIO 2014A integração contínua pode te dar metricas de graca - SGRIO 2014
A integração contínua pode te dar metricas de graca - SGRIO 2014Carlos Felippe Cardoso
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Marcio Miyamoto
 
DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?Carlos Felippe Cardoso
 
Agile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xAgile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xLuca Bastos
 
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?tdc-globalcode
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareAdolfo Neto
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começarAdriano Tavares
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareLucas Teles
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal EngineAdolfo Neto
 

Mais procurados (20)

Praticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de SoftwarePraticas Ágeis para desenvolvimento de Software
Praticas Ágeis para desenvolvimento de Software
 
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de SoftwarePesquisa em Métodos Ágeis para o Desenvolvimento de Software
Pesquisa em Métodos Ágeis para o Desenvolvimento de Software
 
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
Generalização prematura e complexidade acidental, a raiz do mal de todo sof...
 
Introdução a DevOps e Continuous delivery agileday
Introdução a DevOps e Continuous delivery   agiledayIntrodução a DevOps e Continuous delivery   agileday
Introdução a DevOps e Continuous delivery agileday
 
Coding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios ÁgeisCoding Dojo - Aplicando Princípios Ágeis
Coding Dojo - Aplicando Princípios Ágeis
 
TDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquiteturaTDC 2014 - A influência dos processos de desenvolvimento na arquitetura
TDC 2014 - A influência dos processos de desenvolvimento na arquitetura
 
Desenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvidaDesenvolvimento Ágil e a mudança de mindset envolvida
Desenvolvimento Ágil e a mudança de mindset envolvida
 
TDD e sua influência no design
TDD e sua influência no designTDD e sua influência no design
TDD e sua influência no design
 
A integração contínua pode te dar metricas de graca - SGRIO 2014
A integração contínua pode te dar metricas de graca - SGRIO 2014A integração contínua pode te dar metricas de graca - SGRIO 2014
A integração contínua pode te dar metricas de graca - SGRIO 2014
 
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
Desenvolvimento de software de forma rápida e sem bugs - Introdução a TDD e S...
 
DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?DevOps é cultura, processo ou cargo ?
DevOps é cultura, processo ou cargo ?
 
Agile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10xAgile br2011 lucabastos-prog10x
Agile br2011 lucabastos-prog10x
 
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
TDC2016POA | Trilha Ruby - Hora da aventura! Vamos melhorar seu código?!?
 
Cultura DevOps
Cultura DevOpsCultura DevOps
Cultura DevOps
 
Metodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de SoftwareMetodologias Ágeis para o Desenvolvimento de Software
Metodologias Ágeis para o Desenvolvimento de Software
 
DevOps, por onde começar
DevOps, por onde começarDevOps, por onde começar
DevOps, por onde começar
 
Testes automatizados - Agile Day
Testes automatizados -  Agile DayTestes automatizados -  Agile Day
Testes automatizados - Agile Day
 
Generalização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo softwareGeneralização prematura e complexidade acidental, a raiz do mal de todo software
Generalização prematura e complexidade acidental, a raiz do mal de todo software
 
Coding Dojo - Unreal Engine
Coding Dojo - Unreal EngineCoding Dojo - Unreal Engine
Coding Dojo - Unreal Engine
 
Arquitetura Limpa em .NET Core
Arquitetura Limpa em .NET CoreArquitetura Limpa em .NET Core
Arquitetura Limpa em .NET Core
 

Semelhante a Programação em pares evoluída pela engenharia simultânea

Semelhante a Programação em pares evoluída pela engenharia simultânea (20)

eXtreme Programming
eXtreme ProgrammingeXtreme Programming
eXtreme Programming
 
Desenvolvimento Ágil
Desenvolvimento ÁgilDesenvolvimento Ágil
Desenvolvimento Ágil
 
Open Up – Gerenciando Projetos Sob Principios Ágeis
Open Up – Gerenciando Projetos Sob Principios ÁgeisOpen Up – Gerenciando Projetos Sob Principios Ágeis
Open Up – Gerenciando Projetos Sob Principios Ágeis
 
Gt 2 – ferramentas
Gt 2 – ferramentasGt 2 – ferramentas
Gt 2 – ferramentas
 
Introdução: eXtreme Programming
Introdução: eXtreme ProgrammingIntrodução: eXtreme Programming
Introdução: eXtreme Programming
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
Metodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de SoftwareMetodologias Ágeis de Desenvolvimento de Software
Metodologias Ágeis de Desenvolvimento de Software
 
APS - RAD x Ágeis
APS - RAD x ÁgeisAPS - RAD x Ágeis
APS - RAD x Ágeis
 
Subm_SamuelPereira_FINAL
Subm_SamuelPereira_FINALSubm_SamuelPereira_FINAL
Subm_SamuelPereira_FINAL
 
Aula 1 Analise e Projeto
Aula 1   Analise e ProjetoAula 1   Analise e Projeto
Aula 1 Analise e Projeto
 
Aula 1 analise e projeto
Aula 1   analise e projetoAula 1   analise e projeto
Aula 1 analise e projeto
 
eXtreme Programming (XP)
eXtreme Programming (XP)eXtreme Programming (XP)
eXtreme Programming (XP)
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 
XP Programming
XP ProgrammingXP Programming
XP Programming
 
eXtreme Programming (xp)
eXtreme Programming (xp)eXtreme Programming (xp)
eXtreme Programming (xp)
 
XP - Extreme Programming
XP - Extreme ProgrammingXP - Extreme Programming
XP - Extreme Programming
 
Programacao Extrema
Programacao ExtremaProgramacao Extrema
Programacao Extrema
 
Extreme programming
Extreme programmingExtreme programming
Extreme programming
 
Xp Comdex
Xp ComdexXp Comdex
Xp Comdex
 
Extreme Programming
Extreme ProgrammingExtreme Programming
Extreme Programming
 

Mais de Herez Moise Kattan

Software Development Practices Patterns: from Pair to Mob Programming
Software Development Practices Patterns: from Pair to Mob ProgrammingSoftware Development Practices Patterns: from Pair to Mob Programming
Software Development Practices Patterns: from Pair to Mob ProgrammingHerez Moise Kattan
 
Mob Programming: the State of the Art and 3 Case Studies of Open Source Software
Mob Programming: the State of the Art and 3 Case Studies of Open Source SoftwareMob Programming: the State of the Art and 3 Case Studies of Open Source Software
Mob Programming: the State of the Art and 3 Case Studies of Open Source SoftwareHerez Moise Kattan
 
Software development practices patterns
Software development practices patternsSoftware development practices patterns
Software development practices patternsHerez Moise Kattan
 
Paper abstract - Impact of Peer Code Review on Peer Impression Formation
Paper abstract - Impact of Peer Code Review on Peer Impression FormationPaper abstract - Impact of Peer Code Review on Peer Impression Formation
Paper abstract - Impact of Peer Code Review on Peer Impression FormationHerez Moise Kattan
 
Software Development Practices Patterns
Software Development Practices PatternsSoftware Development Practices Patterns
Software Development Practices PatternsHerez Moise Kattan
 

Mais de Herez Moise Kattan (7)

Software Development Practices Patterns: from Pair to Mob Programming
Software Development Practices Patterns: from Pair to Mob ProgrammingSoftware Development Practices Patterns: from Pair to Mob Programming
Software Development Practices Patterns: from Pair to Mob Programming
 
Mob Programming: the State of the Art and 3 Case Studies of Open Source Software
Mob Programming: the State of the Art and 3 Case Studies of Open Source SoftwareMob Programming: the State of the Art and 3 Case Studies of Open Source Software
Mob Programming: the State of the Art and 3 Case Studies of Open Source Software
 
Software development practices patterns
Software development practices patternsSoftware development practices patterns
Software development practices patterns
 
Paper abstract - Impact of Peer Code Review on Peer Impression Formation
Paper abstract - Impact of Peer Code Review on Peer Impression FormationPaper abstract - Impact of Peer Code Review on Peer Impression Formation
Paper abstract - Impact of Peer Code Review on Peer Impression Formation
 
Software Development Practices Patterns
Software Development Practices PatternsSoftware Development Practices Patterns
Software Development Practices Patterns
 
Samsung apple herez
Samsung apple herezSamsung apple herez
Samsung apple herez
 
Herez ubuntu mobile
Herez ubuntu mobileHerez ubuntu mobile
Herez ubuntu mobile
 

Programação em pares evoluída pela engenharia simultânea

  • 1. uma nova técnica ágil: Programação em pares evoluída pela engenharia simultânea.
  • 3.
  • 4. Dois programadores trabalham colaborativamente na mesma atividade, sentado lado a lado em um único computador. Enquanto uma pessoa está escrevendo o código, por exemplo, a outra observa atentamente o trabalho produzido, buscando defeitos e sugestões de melhoria. A programação em pares estimula a disseminação do conhecimento, reduz a quantidade de defeitos e gera software com mais qualidade (BEGEL; NAGAPPAN, 2008).
  • 5. –Pares de programadores produzem código de melhor qualidade (Jeffries 2001). –Pois todo o código é revisado por pelo menos um programador, é mais livre de defeitos (Muller 2003), –Não despende significativamente mais tempo que o código produzido por apenas uma pessoa, –Integrantes da equipe exercem todas as funções: análise, projeto, teste e programação, –Tipicamente, um par é dividido em uma pessoa produzindo código ou casos de testes, enquanto que a outra pessoa revisa e pensa.
  • 6. Não é possível escrever código em pares, vai ser lento. E se as pessoas não se derem bem? –O padrão de código garante a qualidade mínima –Todos estão descansados e a discussão é proveitosa –Os testes são escrito em conjunto, alinhando o entendimento –A metáfora forma a base para o entendimento comum –Os pares trabalham em um design simples
  • 7. Maior diversidade de idéias, técnicas, algoritmos. Enquanto um escreve, o outro pensa em contra-exemplos, problemas de eficiência, etc. Vergonha de escrever código feio (hacking) na frente do seu par. Pareamento de acordo com especialidades. –Ex.: Sistema de Tempo Real Orientado a Objetos
  • 8. Ref.: Dyba, T. Et all. On the Effectiveness of Pair Programming. IEEE SOFTWARE November/December 2007 Artigo revisa 15 estudos sobre programação em pares, normalizado os resultados na tentativa de uma conclusão O estudo se concentra nos aspectos: –Duração – tempo do calendário do desenvolvimento –Esforço – HH requerido –Qualidade – quanto melhor ficou o produto final A pergunta de pesquisa: A PP pode produzir um código de qualidade em menos tempo, com esforço menor?
  • 9.
  • 10.
  • 11. Referencias anteriores indicavam que pequenos grupos eram improdutivos Normalizando os resultados : –A duração do PP é menor –O esforço é um pouco maior –A qualidade é um pouco melhor
  • 12.  Código de melhor qualidade  Menor número de defeitos  Aumenta o esforço HH(hora de trabalho do desenvolvedor(a)) do projeto
  • 13. Kent Beck @KentBeck3 Oct pair programming works best with a large uncertain search space of problems and solutions. the closer to a solved problem, the less it helps
  • 14.
  • 15.
  • 16. Engenharia Simultânea (ES), ou mais modernamente, Desenvolvimento Integrado de Produto e Processo (Integrated Product and Process Development - IPPD) é uma filosofia que na verdade envolve mais do que Engenharia. No início o objetivo era o projeto simultâneo do produto e dos respectivos processos de manufatura. O objetivo cresceu passando a incluir todas as etapas do ciclo de vida do produto, desde a sua concepção até a sua retirada de serviço, sua destinação final, após transcorridos seu período de vida útil (BENNETT; LAMB, 1995).
  • 17.
  • 18. Assim como o “Just-in-Time”, a Engenharia simultânea é uma filosofia e não uma tecnologia. Engenharia Simultânea usa tecnologia para atingir seus objetivos. O principal objetivo da Engenharia Simultânea ou Desenvolvimento Integrado de Produto e Processo é a diminuição do tempo desde o pedido até a entrega, para um novo produto, com custo mais baixo e maior qualidade. Isto é alcançado através do desenvolvimento paralelo, ao invés de seqüencial, das diferentes etapas que compõem o Projeto do Produto, com o emprego de times ou equipes multidisciplinares (“cross-functional teams”) (BENNETT; LAMB, 1995).
  • 19.
  • 20. “Engenharia Simultânea é uma abordagem sistemática para o projeto integrado e concorrente de produtos e de seus processos relacionados, incluindo manufatura e suporte. Esta abordagem intenciona provocar que os desenvolvedores, desde o início, considerem todos os elementos envolvidos no ciclo de vida do produto desde a sua concepção até o seu descarte, fim de sua vida útil, incluindo qualidade, custo, prazos e os requisitos dos clientes” (WINNER et al., 1988).
  • 21. E a definição do “Concurrent Engineering Research Center” (CERC): “Engenharia Simultânea é uma abordagem sistemática para o desenvolvimento integrado de um produto e os processos relacionados, que enfatiza a responsabilidade para com as expectativas do consumidor e incorpora os valores de cooperação dos times, confiança e compartilhamento, de uma maneira tal que a tomada de decisões se processa com largos intervalos de trabalho paralelo, englobando todas as perspectivas do ciclo de vida do produto, de uma maneira sincronizada, por meio de diálogo para obtenção de consenso” (CERC, 1992).
  • 22. |Segundo Syan (1994) estes time deve conter pessoas de vários departamentos da empresa, incluindo os principais fornecedores e clientes.
  • 23. 1. Formar Pares: Revezamento quando possível para disseminar conhecimento. 2. Par é responsável pela tarefa: Não precisa sentar junto o tempo todo. 3. Dois teclados: Ideal no início para trocar idéias(maior número de algoritmos e soluções) e dividir a tarefa, lembrando que deverá juntar no final (+ qualidade, efeito “hacking”, + produtividade, 2 teclados). 4. V&V: Na junção da tarefa um revisa o trabalho do outro, ambos integram e testam tudo.
  • 24. Homebroker – Permite operar no mercado de ações, derivativos. Facebroker – Homebroker dentro do facebook. Farejador – baseado em análise gráfica para buscar as melhores Oportunidades tanto de compra quanto de venda
  • 25. Homebroker – Diversas funcionalidades desenvolvidas usando Programação em pares e solo. Facebroker – Desenvolvedores experientes dividiram as tarefas no Início, mas houve problema na hora de juntar, houve retrabalho. Farejador – Desenvolvido usando programação solo.
  • 26. 0 2 4 6 8 10 SOLO PP PSP PSP, exigiu menos HH, melhorou densidade de desvio de padrão de código, taxa de comentários, defeitos por LOC e LOC por pessoa/hora (tempo calendário desenvolvimento)
  • 27. As equipes precisam realmente se encontrar para colaborar efetivamente? Experimento em empresa de desenvolvimento de software: Pares não estavam na mesma dependência física: Solução DMA – para visualização de cotações de derivativos e roteamento de ordens. Linguagem C++ usando Qt para compilar em Mac, Linux e Windows
  • 28. Reunião inicial presencial, trocar experiências, dividir tarefa Skype, durante o dia a dia para comunicação GitHub, como repositório único Google Drive, Cacoo, para documentação mínima exigida
  • 29. SOLO 0 5 10 SOLO PSP PSP, exigiu menos HH, melhorou densidade de desvio de padrão de código, taxa de comentários, defeitos por LOC e LOC por pessoa/hora (tempo calendário desenvolvimento)
  • 30. Arquitetura de agilidade –em iteração de arquitetura, par mais experiente em arquitetura trabalhou nesta primeira iteração deste software; Controvérsias sobre o papel da arquitetura de software nos métodos ágeis. Arquitetos duvidam da escalabilidade de processos que não dão atenção especial para a arquitetura Métodos ágeis são dirigidos pelos usuários, que não veem valor, diretamente, na arquitetura. A arquitetura é um subproduto do projeto, e não um requisito essencial Ref. 1. : Abrahmsson, P. Babar, M.A.; Kruchten, P. Agility and Architecture: Can they coexist? IEEE Software March/April 2010.
  • 31. Arquitetos podem trazer agilidade e práticas de arquitetura visando equilibrar pragmaticamente negócios e prioridades de arquitetura ao entregar ambos com agilidade. Ref. 1. : James Madison – Agile–Architecture Interactions IEEE Software March/April 2010. Arquitetura foi elaborada usando PSP. Melhorou a disseminação do conhecimento, efeito secundário: melhorou a Produtividade, diminuiu Esforço, pois todos desenvolvedores entenderam melhor a arquitetura do software que estavam desenvolvendo. Atividades de desenvolvimento foram realizadas usando programação solo, em pares e simultânea em pares.
  • 32. 0 2 4 6 8 10 SOLO PP PSP PSP, exigiu menos HH, melhorou densidade de desvio de padrão de código, taxa de comentários, defeitos por LOC e LOC por pessoa/hora (tempo calendário desenvolvimento)
  • 33. • A Conclusão dos experimentos demonstrou que 2 desenvolvedores programando simultaneamente em 2 teclados foram mais produtivos se comparados com 2 desenvolvedores em 1 teclado ou desenvolvendo sozinhos sem PSP. •PSP aumentou a produtividade, ajudou a cumprir o prazo. •PSP manteve o ganho de qualidade da PP. •PSP diminuiu o custo se comparados com PP ou programação solo, pois diminuiu o esforço, mensurado em HH(hora de trabalho do desenvolvedor(a)).