SlideShare ist ein Scribd-Unternehmen logo
1 von 26
Desenvolvimento de Software
Uma abordagem sistêmica
Novembro/2014
UDESC – São Bento do Sul
Desenvolvimento de Software: uma abordagem sistêmica
Quem é esse ?
● Rafael Vitor Rodrigues Pina Pereira
– Engenheiro Eletricista, UFSC 1996
– MBA em Tecnologia da Informação, FGV 2003
– Certificação PMP/PMI, 2005
– 20+ anos de experiência em desenvolvimento de software, gestão
de equipes, produtos e projetos de sistemas de missão crítica para
o mercado de telecomunicações e TI
– Gerente de arquitetura de sistemas e hardware – Dígitro Tecnologia
– Professor titular de Engenharia Elétrica, Unisul 2004-2011
Desenvolvimento de Software: uma abordagem sistêmica
Agenda
● Introdução
● Histórico
● Pessoas
● Levantamento de requisitos
● Principais metodologias e frameworks
● Testes
● Refactoring
● Integração contínua
● Certificações
Desenvolvimento de Software: uma abordagem sistêmica
Introdução
● O desenvolvimento de software envolve várias dimensões que
precisam ser consideradas nos projetos;
● Há que se considerar tecnologia, pessoas, estratégia de negócio e
time to market, dentre outras;
● Utilizar um modelo pronto sem a devida adaptação à realidade do
projeto normalmente não apresenta bons resultados, sendo mais
interessante trazer as melhores práticas, técnicas, processos e
métodos disponíveis e então adaptá-las ao ambiente;
● Nessa palestra serão abordadas algumas metodologias, processos e
ferramentas que podem ajudar a obter um melhor resultado nessa
disciplina que mistura técnica e arte.
Desenvolvimento de Software: uma abordagem sistêmica
Pessoas !
● A chave para tudo !
– Por enquanto, o software não
vai se escrever sozinho
● Motivadas, são um motor,
desmotivadas, um freio
● Precisam ser envolvidas nas
definições dos processos e
metodologia
Desenvolvimento de Software: uma abordagem sistêmica
Pessoas
● Desenvolvimento de software é atividade criativa
– É preciso usar o melhor de cada uma
– Integrar diferente papéis e dar autonomia
– Delegar e cobrar resultado
● Um bom técnico não necessariamente será um bom
gestor
● A importância da capacidade técnica nos gestores
próximos à equipe não pode ser negligenciada
Desenvolvimento de Software: uma abordagem sistêmica
Desenvolvimento de Software: uma abordagem sistêmica
Levantamento de requisitos
● A raiz e a solução de boa parte dos problemas
● Ajuda a criar a metáfora do produto
● Requisitos não funcionais são tão importantes
quanto requisitos funcionais
– Usualmente, o cliente não enxerga os não
funcionais, é responsabilidade da equipe
● Validação com os stakeholders é fundamental
– Independentemente da metodologia utilizada !
Desenvolvimento de Software: uma abordagem sistêmica
Levantamento de requisitos
● Backlog do produto
● Backlog da release
● Backlog da interação
O detalhamento vai crescendo, as
estimativas são mais assertivas e
a equipe tem mais precisão sobre
o que será construído
Desenvolvimento de Software: uma abordagem sistêmica
Resultado do relatório Chaos Research de 2004
Desenvolvimento de Software: uma abordagem sistêmica
Métodos tradicionais
● PMI
– Industrial
– Repetitivo
– Software
● Sequêncial, Waterfall, Cascata – Eng.ª Civil !
– Especificação em detalhes
– Contratual
– Larga escala
– Compreensível por analogias com projetos do mundo físico
Desenvolvimento de Software: uma abordagem sistêmica
Premissas
● Linearidade
● Determinismo
● Especialização
● Foco na execução
● Crescimento exponencial do custo de
alteração
Problema:
As premissas não se aplicam ao
desenvolvimento de software :-) !
Desenvolvimento de Software: uma abordagem sistêmica
Será ?
Desenvolvimento de Software: uma abordagem sistêmica
Não mais !
Ou talvez nunca tenha sido
● Fazer software é um processo de descoberta.
Essa curva pressupõe que se sabe tudo no
início, tudo será detalhado e não mudará mais
● Software é diferente do mundo físico !
– O prédio ficou excelente, só o cliente só quer de
outra cor e que esteja dez metros para o lado !
Desenvolvimento de Software: uma abordagem sistêmica
Manifesto ágil
● Indivíduos e interação entre eles mais que processos e ferramentas
● Software em funcionamento mais que documentação abrangente
● Colaboração com o cliente mais que negociação de contratos
● Responder a mudanças mais que seguir um plano
Kent Beck Mike Beedle Arie van Bennekum Alistair Cockburn Ward
Cunningham Martin Fowler James Grenning Jim Highsmith Andrew
Hunt Ron Jeffries Jon Kern Brian Marick Robert C. Martin Steve
Mellor Ken Schwaber Jeff Sutherland Dave Thomas
12 princípios - http://manifestoagil.com.br/principios.html
Desenvolvimento de Software: uma abordagem sistêmica
Extreme Programming
●
Conjunto de valores
●
Negociação constante
● Princípios
– Simplicidade ! Mais de 45 % das funcionalidades nunca são usadas ! 65 % é inútil !
20 % é o que realmente importa ! - tenta minimizar o sistema
– Pair programming
– Testes por todo lado
– Metáforas
– Pessoas !
– Fazer certo a coisa certa. Telefone sem fio !
– Releases curtas
– Iterações mais curtas ainda
– Feedback contínuo
Desenvolvimento de Software: uma abordagem sistêmica
Desenvolvimento de Software: uma abordagem sistêmica
Uma boa mistura
● Olhar o todo com metodologia PMI
● Lidar com o micro, diário, tático e operacional
de forma ágil
Desenvolvimento de Software: uma abordagem sistêmica
Testes !
● Praticamente todas as metodologias ágeis tratam
testes com prioridade
– Tests First: TDD, FDD, BDD
● De todos os tipos: Unitários, integração, manual,
automatizado, caixa preta, stress, robustez, carga,
● XP normalmente produz mais linhas de código de
testes do que funcionalidades
● Testes dão a garantia de que precisamos para fazer
Refactoring !
Desenvolvimento de Software: uma abordagem sistêmica
• A largura da etapa indica a o
esforço aplicado à ela;
• A altura da etapa indica a
importância sob o ponto de
vista de produto;
• A altura indica a importância
sob o ponto de vista de
arquitetura e débito técnico.
•Máximas: Não é possível testar tudo;
Testes tem custo; Testes informam sobre
risco; Desenvolvimento sem testes não
existe.
P - Piloto com usuários reais e ambiente de produção
Validação - Homologação isenta, equipe desacoplada do projeto. Objetiva validar o sistema.
Carga - Robôs de testes exercitando o sistema no seu limite. Executado a cada release.
Caixa Preta - Testes completos de funcionalidades, devem rodar a cada implementação. Pode ser
automatizados ou manuais.
Automáticos - Testes que rodam a cada build para exercitar grupos de métodos ou funcionalidades.
Visam garantir que não há regressão
Unitários - Testes de funções/métodos que rodam a cada compilação. Evitam regressão, rede de
segurança para futuros desenvolvimentos, refactorings, correções.
Testes unitários
Testes automáticos
Testes Caixa Preta
Carga
Validação
Desenvolvimento de Software: uma abordagem sistêmica
Refactoring
● Débito técnico é como juros do cartão de crédito
– Tudo aquilo que é problema estrutural, arquitetural, etc
– A escolha é pagar agora ou depois
● Teoria da janela quebrada
– Conserte enquanto o estrago ainda é pequeno
– Um software ruim tende a ser tratado com desleixo, afinal já é uma bagunça
mesmo...
● Pequenos incrementos
– Garantia do funcionamento dos módulos/classes/funções através dos testes
unitários
●
Grandes mudanças
– Garantia do comportamento do sistema através dos testes de sistema
Desenvolvimento de Software: uma abordagem sistêmica
Integração contínua
● Evolução gradual
● Automatização plena
– Testes, compilação, build
● Cada parte é auto-contida e pode ser entregue
● Antecipação !!!
● Entrega contínua ? Um framework da
Thoughtworks...
Desenvolvimento de Software: uma abordagem sistêmica
Certificações
● Adeque o processo à empresa e não o
contrário
– Estude, traga quem conhece, mas sempre adapte
● Busque valor, não só atender às normas
– O sistema tem que ser usado, deve ajudar
– A metodologia/norma deve se ajustar à realidade
da equipe/empresa
Desenvolvimento de Software: uma abordagem sistêmica
Dúvidas ?
Desenvolvimento de Software: uma abordagem sistêmica
Desenvolvimento de Software: uma abordagem sistêmica
Obrigado !
Eng. Rafael Pina Pereira, MBA, PMP
rpina73@gmail.com

Weitere ähnliche Inhalte

Andere mochten auch (12)

Administração Sistêmica
Administração SistêmicaAdministração Sistêmica
Administração Sistêmica
 
Estilos parentais e práticas educativas
Estilos parentais e práticas educativasEstilos parentais e práticas educativas
Estilos parentais e práticas educativas
 
Mba gestão em_pessoas
Mba gestão em_pessoasMba gestão em_pessoas
Mba gestão em_pessoas
 
Desabafos entre pais...
Desabafos entre pais...Desabafos entre pais...
Desabafos entre pais...
 
Teoria geral de sistemas
Teoria geral de sistemasTeoria geral de sistemas
Teoria geral de sistemas
 
Workshop: Parentalidade Positiva e Educação Parental
Workshop: Parentalidade Positiva e Educação ParentalWorkshop: Parentalidade Positiva e Educação Parental
Workshop: Parentalidade Positiva e Educação Parental
 
Abordagens sistêmica e contingencial
Abordagens sistêmica e contingencialAbordagens sistêmica e contingencial
Abordagens sistêmica e contingencial
 
Teoria Geral de Sistemas - Abordagem Sistêmica da Administração
Teoria Geral de Sistemas - Abordagem Sistêmica da AdministraçãoTeoria Geral de Sistemas - Abordagem Sistêmica da Administração
Teoria Geral de Sistemas - Abordagem Sistêmica da Administração
 
Abordagem sistêmica
Abordagem sistêmicaAbordagem sistêmica
Abordagem sistêmica
 
Abordagem sistêmica
Abordagem sistêmicaAbordagem sistêmica
Abordagem sistêmica
 
Teoria geral de sistemas
Teoria geral de sistemasTeoria geral de sistemas
Teoria geral de sistemas
 
Teoria Geral de Sistemas
Teoria Geral de SistemasTeoria Geral de Sistemas
Teoria Geral de Sistemas
 

Desenvolvimento de software: uma abordagem sistêmica

  • 1. Desenvolvimento de Software Uma abordagem sistêmica Novembro/2014 UDESC – São Bento do Sul
  • 2. Desenvolvimento de Software: uma abordagem sistêmica Quem é esse ? ● Rafael Vitor Rodrigues Pina Pereira – Engenheiro Eletricista, UFSC 1996 – MBA em Tecnologia da Informação, FGV 2003 – Certificação PMP/PMI, 2005 – 20+ anos de experiência em desenvolvimento de software, gestão de equipes, produtos e projetos de sistemas de missão crítica para o mercado de telecomunicações e TI – Gerente de arquitetura de sistemas e hardware – Dígitro Tecnologia – Professor titular de Engenharia Elétrica, Unisul 2004-2011
  • 3. Desenvolvimento de Software: uma abordagem sistêmica Agenda ● Introdução ● Histórico ● Pessoas ● Levantamento de requisitos ● Principais metodologias e frameworks ● Testes ● Refactoring ● Integração contínua ● Certificações
  • 4. Desenvolvimento de Software: uma abordagem sistêmica Introdução ● O desenvolvimento de software envolve várias dimensões que precisam ser consideradas nos projetos; ● Há que se considerar tecnologia, pessoas, estratégia de negócio e time to market, dentre outras; ● Utilizar um modelo pronto sem a devida adaptação à realidade do projeto normalmente não apresenta bons resultados, sendo mais interessante trazer as melhores práticas, técnicas, processos e métodos disponíveis e então adaptá-las ao ambiente; ● Nessa palestra serão abordadas algumas metodologias, processos e ferramentas que podem ajudar a obter um melhor resultado nessa disciplina que mistura técnica e arte.
  • 5. Desenvolvimento de Software: uma abordagem sistêmica Pessoas ! ● A chave para tudo ! – Por enquanto, o software não vai se escrever sozinho ● Motivadas, são um motor, desmotivadas, um freio ● Precisam ser envolvidas nas definições dos processos e metodologia
  • 6. Desenvolvimento de Software: uma abordagem sistêmica Pessoas ● Desenvolvimento de software é atividade criativa – É preciso usar o melhor de cada uma – Integrar diferente papéis e dar autonomia – Delegar e cobrar resultado ● Um bom técnico não necessariamente será um bom gestor ● A importância da capacidade técnica nos gestores próximos à equipe não pode ser negligenciada
  • 7. Desenvolvimento de Software: uma abordagem sistêmica
  • 8. Desenvolvimento de Software: uma abordagem sistêmica Levantamento de requisitos ● A raiz e a solução de boa parte dos problemas ● Ajuda a criar a metáfora do produto ● Requisitos não funcionais são tão importantes quanto requisitos funcionais – Usualmente, o cliente não enxerga os não funcionais, é responsabilidade da equipe ● Validação com os stakeholders é fundamental – Independentemente da metodologia utilizada !
  • 9. Desenvolvimento de Software: uma abordagem sistêmica Levantamento de requisitos ● Backlog do produto ● Backlog da release ● Backlog da interação O detalhamento vai crescendo, as estimativas são mais assertivas e a equipe tem mais precisão sobre o que será construído
  • 10. Desenvolvimento de Software: uma abordagem sistêmica Resultado do relatório Chaos Research de 2004
  • 11. Desenvolvimento de Software: uma abordagem sistêmica Métodos tradicionais ● PMI – Industrial – Repetitivo – Software ● Sequêncial, Waterfall, Cascata – Eng.ª Civil ! – Especificação em detalhes – Contratual – Larga escala – Compreensível por analogias com projetos do mundo físico
  • 12. Desenvolvimento de Software: uma abordagem sistêmica Premissas ● Linearidade ● Determinismo ● Especialização ● Foco na execução ● Crescimento exponencial do custo de alteração Problema: As premissas não se aplicam ao desenvolvimento de software :-) !
  • 13. Desenvolvimento de Software: uma abordagem sistêmica Será ?
  • 14. Desenvolvimento de Software: uma abordagem sistêmica Não mais ! Ou talvez nunca tenha sido ● Fazer software é um processo de descoberta. Essa curva pressupõe que se sabe tudo no início, tudo será detalhado e não mudará mais ● Software é diferente do mundo físico ! – O prédio ficou excelente, só o cliente só quer de outra cor e que esteja dez metros para o lado !
  • 15. Desenvolvimento de Software: uma abordagem sistêmica Manifesto ágil ● Indivíduos e interação entre eles mais que processos e ferramentas ● Software em funcionamento mais que documentação abrangente ● Colaboração com o cliente mais que negociação de contratos ● Responder a mudanças mais que seguir um plano Kent Beck Mike Beedle Arie van Bennekum Alistair Cockburn Ward Cunningham Martin Fowler James Grenning Jim Highsmith Andrew Hunt Ron Jeffries Jon Kern Brian Marick Robert C. Martin Steve Mellor Ken Schwaber Jeff Sutherland Dave Thomas 12 princípios - http://manifestoagil.com.br/principios.html
  • 16. Desenvolvimento de Software: uma abordagem sistêmica Extreme Programming ● Conjunto de valores ● Negociação constante ● Princípios – Simplicidade ! Mais de 45 % das funcionalidades nunca são usadas ! 65 % é inútil ! 20 % é o que realmente importa ! - tenta minimizar o sistema – Pair programming – Testes por todo lado – Metáforas – Pessoas ! – Fazer certo a coisa certa. Telefone sem fio ! – Releases curtas – Iterações mais curtas ainda – Feedback contínuo
  • 17. Desenvolvimento de Software: uma abordagem sistêmica
  • 18. Desenvolvimento de Software: uma abordagem sistêmica Uma boa mistura ● Olhar o todo com metodologia PMI ● Lidar com o micro, diário, tático e operacional de forma ágil
  • 19. Desenvolvimento de Software: uma abordagem sistêmica Testes ! ● Praticamente todas as metodologias ágeis tratam testes com prioridade – Tests First: TDD, FDD, BDD ● De todos os tipos: Unitários, integração, manual, automatizado, caixa preta, stress, robustez, carga, ● XP normalmente produz mais linhas de código de testes do que funcionalidades ● Testes dão a garantia de que precisamos para fazer Refactoring !
  • 20. Desenvolvimento de Software: uma abordagem sistêmica • A largura da etapa indica a o esforço aplicado à ela; • A altura da etapa indica a importância sob o ponto de vista de produto; • A altura indica a importância sob o ponto de vista de arquitetura e débito técnico. •Máximas: Não é possível testar tudo; Testes tem custo; Testes informam sobre risco; Desenvolvimento sem testes não existe. P - Piloto com usuários reais e ambiente de produção Validação - Homologação isenta, equipe desacoplada do projeto. Objetiva validar o sistema. Carga - Robôs de testes exercitando o sistema no seu limite. Executado a cada release. Caixa Preta - Testes completos de funcionalidades, devem rodar a cada implementação. Pode ser automatizados ou manuais. Automáticos - Testes que rodam a cada build para exercitar grupos de métodos ou funcionalidades. Visam garantir que não há regressão Unitários - Testes de funções/métodos que rodam a cada compilação. Evitam regressão, rede de segurança para futuros desenvolvimentos, refactorings, correções. Testes unitários Testes automáticos Testes Caixa Preta Carga Validação
  • 21. Desenvolvimento de Software: uma abordagem sistêmica Refactoring ● Débito técnico é como juros do cartão de crédito – Tudo aquilo que é problema estrutural, arquitetural, etc – A escolha é pagar agora ou depois ● Teoria da janela quebrada – Conserte enquanto o estrago ainda é pequeno – Um software ruim tende a ser tratado com desleixo, afinal já é uma bagunça mesmo... ● Pequenos incrementos – Garantia do funcionamento dos módulos/classes/funções através dos testes unitários ● Grandes mudanças – Garantia do comportamento do sistema através dos testes de sistema
  • 22. Desenvolvimento de Software: uma abordagem sistêmica Integração contínua ● Evolução gradual ● Automatização plena – Testes, compilação, build ● Cada parte é auto-contida e pode ser entregue ● Antecipação !!! ● Entrega contínua ? Um framework da Thoughtworks...
  • 23. Desenvolvimento de Software: uma abordagem sistêmica Certificações ● Adeque o processo à empresa e não o contrário – Estude, traga quem conhece, mas sempre adapte ● Busque valor, não só atender às normas – O sistema tem que ser usado, deve ajudar – A metodologia/norma deve se ajustar à realidade da equipe/empresa
  • 24. Desenvolvimento de Software: uma abordagem sistêmica Dúvidas ?
  • 25. Desenvolvimento de Software: uma abordagem sistêmica
  • 26. Desenvolvimento de Software: uma abordagem sistêmica Obrigado ! Eng. Rafael Pina Pereira, MBA, PMP rpina73@gmail.com