SlideShare uma empresa Scribd logo
Você é um
desenvolvedor de
software acima da
média?
Qualidade no desenvolvimento de software
Sobre
▪ Sobre o tema:
▪ Examinar o impacto de desenvolver software sem qualidade de código, bem como, o
reflexo na carreira de um desenvolvedor de software.
▪ Sobre o palestrante:
▪ Gabriel Schmitt Kohlrausch, apaixonado por desenvolvimento de software. Buscando
constantemente aprender boas práticas para a construção de software com qualidade,
agilidade e sustentabilidade. Nerd, Gamer e praticante de paintball.
▪ gabriel@society.com.br | http://stiblog.azurewebsites.net/
Você se considera um
desenvolvedor de
software ACIMA da
média?
Afinal, programar é
fácil !!!!!!
Mas desenvolver um software
com qualidade, que seja
funcional e que possa evoluir
com sustentabilidade ....
Desenvolvimento de software é parecido com a construção
civil?
Planta baixa
(engenharia)
Projeto
(Cronograma)
Construção
Entrega
Manutenção
Processo de construção civil
Desenvolvimento de software é parecido com a construção
civil?
Requisitos
(engenharia)
Projeto
(Cronograma)
Desevolvimento
(construção)
Entrega
Manutenção
Processo de desenvolvimento de software
Mas se durante a construção
quisermos adicionar um andar
para garagem?
Ou depois de pronto o cliente:
“gostei, mas não dava para mover
20 metros mais para o lado?”
No desenvolvimento de
software mudanças são
naturais em qualquer etapa !
Qual o custo para construir
outro edifício igual ao lado?
E para copiar o software, qual o
custo?
Ok, mas e se perdêssemos o código fonte?
Seria o mesmo custo?
Desenvolvimento de
software é aprendizado !!!!
Time de desenvolvimento de
software ao fechar 1 ano em um
projeto único !
O time apenas se preocupou em
PROGRAMAR !!!
Afinal, programar é
fácil !!!!!!
Mas ao final do segundo ano ....
Vamos contratar mais
programadores, afinal o problema
é produtividade !
Agora temos uma
bomba prestes e
explodir
Ao contrário do esperado ...
De quem é a culpa?
Ou seja a cozinha ficou
bagunçada demais !
Vamos refazer tudo ... Então
time novo!
E o time antigo?
Mas o que
realmente houve?
O time perdeu produtividade no
momento em que abriu mão da
qualidade do código gerado?
Eles são rápidos porque abrem
mão da qualidade?
Qual grau de qualidade do seu código?
0% = Código escrito por
MIL MACACOS
100% = Código impecável
Times altamente produtivos são
formados por pessoas que querem
aprender constantemente!
REFACTORING !!!!!!
Alterar o código em funcionamento para torna-lo mais legível,
eficiente e elegante.
Mas antes, testes unitários ......
Por exemplo ...
Qualidade no desenvolvimento de softwre
Qualidade no desenvolvimento de softwre
Qualidade no desenvolvimento de softwre
Primeiro refactoring: Nome de variáveis
Segundo refactoring: Extract method
Aplicando Design Pattern Builder
Código limpo, legível e sustentável ...
DDD (Domain Driven Design)
TDD (Test Driven Design)
S.O.L.I.D
SOA (Service Oriented Architecture)
AOP (Aspect Oriented Programming)
Desing Patterns
Architectural Patterns
Agile Principles
Quais as características de
profissionais acima da média?
Iniciativa
Cooperação e não competição
Ensina ....
Gosta de compartilhar
conhecimento
São apaixonados pelo que fazem
Produtividade != Esforço
São focados
São adaptáveis
O time deveria se perguntar
frequentemente ....
Estamos amadurecendo?
Estamos desenvolvendo
software com mais qualidade e
tecnologias melhores?
Dominamos ou estamos no
caminho de dominar as
ferramentas e tecnologia
que utilizamos?
E o mais importante ...
Faça chuva...
Faça sol...
Esteja com azar ...
Esteja com sorte ....
De um passo em direção ao
seu objetivo !
Agora, se você está com
sorte e tem sol .....
Porque no final, você se
considera um
desenvolvedor de
software ACIMA da
média?
Referências
• The Art of Unit Testing, Roy Osherove
• Agile Development, James Shore & Chromatic
• Test-Driven Development, Kent Beck
• Software Architecture in Pratice, Len Bass & Paul Clements & Rick Kazman
• Clean Code, Robert C. Martin
• Agile, André Farias Gomes
• http://pt.slideshare.net/bluesoftbr/construindo-uma-cultura-de-aprendizagem-mar-de-agilidade-salvador-2011
• http://pt.slideshare.net/lcobucci/refactoring-like-a-boss-8-solisc

Mais conteúdo relacionado

PDF
A Carreira de Desenvolvedor: do Jr ao Sênior
PDF
Coach por Imersão - Buscando a excelência técnica com o time
PPT
Scrum treinamento
PDF
Eduardo Rocha - Criando produtos invisíveis
PPTX
Devops - A cultura ágil voltada à infra-estrutura
PDF
O que é um Agile Coach
PDF
3 way's a base do DevOps no Azure DevOps
KEY
Facetas do desenvolvedor agil
A Carreira de Desenvolvedor: do Jr ao Sênior
Coach por Imersão - Buscando a excelência técnica com o time
Scrum treinamento
Eduardo Rocha - Criando produtos invisíveis
Devops - A cultura ágil voltada à infra-estrutura
O que é um Agile Coach
3 way's a base do DevOps no Azure DevOps
Facetas do desenvolvedor agil

Mais procurados (20)

PDF
Engenharia de Software II - Aula 7
PPT
Praticas Ágeis para desenvolvimento de Software
PPTX
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
PPTX
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]
PDF
Engenharia de Software II - Aula 9
PPTX
Metodologias Ágeis: Uma breve introdução
PDF
O Agile Coach pode (e muitas vezes deve) ser técnico
PDF
Management 3.0 - a vida pós-agilidade
PPTX
Testes ageis
PDF
UX influenciando decisões de negócio - Gustavo Oliveira - TOTVS - UXConf BR
PPTX
Desenvolvimento de software mundo ideal x mundo real
PPTX
Desenvolvimento de software: Mundo ideal x Mundo real
PDF
Como 4 Agile Coaches trabalham em uma Transformação Ágil
KEY
Da academia para o mercado de software
PDF
O testador esta morto!
PPTX
A importância da qualidade de software e suas diversas perspectivas
PDF
Como se tornar Agile Tester
PDF
Desafios reais de uma arquitetura emergente
PDF
Desafios Reais de uma Arquitetura Emergente
PPTX
jCompany X Geradores de Códigos
Engenharia de Software II - Aula 7
Praticas Ágeis para desenvolvimento de Software
FIT e IFSP - Arquitetura (evolucionária) e o papel do arquiteto
[ O mercado] desenvolvimento de software [ detalhes & curiosidades]
Engenharia de Software II - Aula 9
Metodologias Ágeis: Uma breve introdução
O Agile Coach pode (e muitas vezes deve) ser técnico
Management 3.0 - a vida pós-agilidade
Testes ageis
UX influenciando decisões de negócio - Gustavo Oliveira - TOTVS - UXConf BR
Desenvolvimento de software mundo ideal x mundo real
Desenvolvimento de software: Mundo ideal x Mundo real
Como 4 Agile Coaches trabalham em uma Transformação Ágil
Da academia para o mercado de software
O testador esta morto!
A importância da qualidade de software e suas diversas perspectivas
Como se tornar Agile Tester
Desafios reais de uma arquitetura emergente
Desafios Reais de uma Arquitetura Emergente
jCompany X Geradores de Códigos
Anúncio

Semelhante a Qualidade no desenvolvimento de softwre (20)

PPTX
Software Craftsmanship Lisbon: Raise the bar!
PPTX
Desenvolvimento ágil de software
PPTX
Nerdzão - DesignThinking-Lean-Agile.pptx
PDF
Palestra Testes De Unidade Com JUnit
ODP
Revolucao Agile - UFSCar
PDF
Descrição Tutorial Coding By Example (CBSoft2013)
PDF
Introdução à Programação Extrema (Extreme Programming - XP)
PDF
Gestão de Projeto de Desenvolvimento Agil(XP)
PDF
Metodos Ageis
PDF
introxp-180413013250.pdf
PDF
Metodologias de desenvolvimento - Waterfall vs Agile
PDF
PDF
Princípios Ágeis
PPT
Extreme programming explicada
PPT
Extreme Programming Explicada
PPTX
Princípios ágeis - UFRGS 2013
PPT
Aula Nova Ageis Scrum Xp Spotify DDr.ppt
PPT
Agilidade - Palestra -Prodabel
PPTX
Curso Scrum
PDF
Como funciona uma empresa ágil de desenvolvimento de software
Software Craftsmanship Lisbon: Raise the bar!
Desenvolvimento ágil de software
Nerdzão - DesignThinking-Lean-Agile.pptx
Palestra Testes De Unidade Com JUnit
Revolucao Agile - UFSCar
Descrição Tutorial Coding By Example (CBSoft2013)
Introdução à Programação Extrema (Extreme Programming - XP)
Gestão de Projeto de Desenvolvimento Agil(XP)
Metodos Ageis
introxp-180413013250.pdf
Metodologias de desenvolvimento - Waterfall vs Agile
Princípios Ágeis
Extreme programming explicada
Extreme Programming Explicada
Princípios ágeis - UFRGS 2013
Aula Nova Ageis Scrum Xp Spotify DDr.ppt
Agilidade - Palestra -Prodabel
Curso Scrum
Como funciona uma empresa ágil de desenvolvimento de software
Anúncio

Último (6)

PDF
apresentacao introducao computacao ead.pdf
DOC
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
PDF
Evolução em código: algoritmos genéticos com PHP
DOC
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
PPTX
Curso de Windows 11 resumido na prática.pptx
PDF
Dos requisitos ao código: como criar código rastreável em PHP
apresentacao introducao computacao ead.pdf
CODIGO PARA AUTOMATIZAR A JOGABILIDADE SUPER MARIO
Evolução em código: algoritmos genéticos com PHP
COMO AUTOMATIZR JOGOS SUPER NINTENDO ATRAVES DA PROGRAMAÇÃO
Curso de Windows 11 resumido na prática.pptx
Dos requisitos ao código: como criar código rastreável em PHP

Qualidade no desenvolvimento de softwre

Notas do Editor

  • #5: Considerar que é relativamente fácil gerar código. Aprender uma linguagem é fácil. Escrever um código para resolver um problema é fácil.
  • #6: Porém desenvolver um software que possa evoluir sem problemas para o time, sem perda de qualidade é bem diferente e muito mais complicado.
  • #7: Para entendermos melhor essa afirmação vamos pensar juntos o que é desenvolvimento de software? É possível comparar o processo de desenvolvimento de software com o processo de construção civil?
  • #8: Afinal de contas temos as mesmas etapas, planejamento, arquitetura, construção, entrega e depois manutenção. Porém existem dois pontos importantes que fazem toda a diferença.
  • #9: E se quisermos uma piscina na cobertura? E se for necessário mais um andar?
  • #11: Em contra partida é perfeitamente natural que um software sofra alterações durante seu desenvolvimento.
  • #12: Outra grande diferença....
  • #14: O custo de desenvolvimento seria igual ao da primeira vez? Não seria mais rápido desenvolver e ainda por cima ele não seria melhor que a primeira versão?
  • #15: No início de um projeto, o cliente e nós, não sabemos exatamente o que será o software. Porem ao longo do tempo ambos vão aprendendo e construindo um produto alinhado as necessidades e este conhecimento adquirido não é perdido.
  • #16: Vamos além, imaginem um time de desenvolvedores de uma startup. Sua única preocupação é um único projeto. Após um ano de projeto é feito uma retrospectiva do ano e constatou-se que o índice de atraso nas entregas foi baixo, o cliente está satisfeito e ainda por cima percebe-se que o software evoluiu muito, mas ainda falta funcionalidades a serem desenvolvidas.
  • #19: Ao final do segundo ano é realizada a mesma retrospectiva e constatou-se que o índice de atraso nas entregas aumentou, consequentemente o índice de satisfação do cliente diminuiu e percebeu-se que foram desenvolvidas poucas funcionalidades e muitas correções
  • #20: Os diretores da empresa, ao olharem os números, percebem que existe um problema de produtividade, afinal foi entregue muito menos do que se planejou. Mediante a pressão que o cliente coloca a empresa resolve contratar mais programadores, afinal de contas temos um problema de produtividade.
  • #22: apesar de termos uma leve impressão de aumento de produtividade, percebe-se não é verdade e o que estava confuso ficou pior ainda.
  • #23: Mediante ao CAOS estabelecido, o time e a direção da empresa realizam uma reflexão mais profunda e encontra-se um culpado: Código Legado. O time aponta que está cada vez mais difícil de desenvolver algo em meio ao código existente, que não é possível alterar o código que outro programador criou pois não o código não é compreensível e que uma alteração no código cria problemas em outros pontos do software que ninguém prevê.
  • #24: Neste momento a reflexão feita pelo time indica, metaforicamente, que a cozinha ficou bagunçada demais para trabalhar e o time perdeu produtividade pois cada vez fica mais difícil alterar o software no meio da desorganização que o código está
  • #25: Percebendo-se que não vai ser possível vencer o CAOS estabelecido, pelo código legado, surge uma ideia: Vamos refazer tudo! Contrata-se desenvolvedores especializados, um dream team, para fazer um novo software
  • #26: e os programadores antigos trabalham no legado. Resultado quando menos percebe-se acabou o dinheiro da empresa!
  • #27: Analisando o cenário descrito, será que o grande culpado foi o código legado? O que realmente houve? Desenvolvimento de software não é aprendizado? Porque o time não evoluiu e consequentemente o código não evoluiu?
  • #28: Será que na verdade o time deixou de ser produtivo porque não adotou certos padrões de qualidade no código?
  • #29: Comparando com uma equipe de F1 no momento de pitstop, a equipe é rápida porque não tem qualidade? Ou são rápidos porque tem qualidade? Ainda comparando, e se fossemos um lenhador que recebe um machado novo, no início da sua carreira, poderíamos afirmar que teríamos uma produtividade muito alta. Porém se nunca preocupássemos em afiar o machado chegaríamos a um ponto de que por mais talento e experiência adquiridos estaríamos cortando arvores com um taco e não um machado. 
  • #30: Na verdade o código é o resultado do trabalho de um desenvolvedor de software, assim poderíamos dar uma nota para o nosso código!
  • #32: Acontece que, precisamos descobrir qual grau de qualidade conseguimos ser mais produtivos, pois se ficar buscando a perfeição talvez se perca produtividade também. Então como podemos constantemente melhorar nossa qualidade e consequentemente nossa produtividade? Como podemos ser melhores programadores?
  • #33: Para responder essas perguntas, relembrem-se que desenvolvimento de software é aprendizado então times altamente PRODUTIVOS são formados por pessoas que querem APRENDER constantemente!
  • #34: Devemos estar sempre apreendendo e melhorando nossa técnica de programação e para isso precisamos constantemente refatorar nosso código! Ou seja precisamos constantemente alterar um código que está em funcionamento para torna-lo mais legível, eficiente e elegante. Mas para fazermos isso precisamos garantir que o código permaneça funcionando, não podemos modificar o comportamento mas sim sua estrutura
  • #35: E neste cenário é impossível realizar re-fatoramento sem utilizar testes unitários. Escrever testes que garantam o comportamento unitário do nosso código é fundamental para a evolução de um bom código. Além de testes devemos estar de olhos abertos para a qualidade do código que escrevemos, evitando bad small’s no código e por consequência criando dívida técnica. 
  • #37: Qual a finalidade do código? Está bem escrito? É fácil entender as coisas?
  • #38: Há agora melhorou um pouco mais ainda assim ... Fica complicado de ler! Comentários?
  • #39: Números mágicos, métodos longos, nomes ruins ......
  • #40: Refatorar ......
  • #43: Mas muito além de refactoring um código limpo implica em diversas outras boas práticas e técnicas devem ser aplicadas pelo programador, entre elas TDD, DDD, Princípios SOLID para orientação a objetos, padrões de projeto, padrões de arquitetura de software, princípios de engenharia de software e muito conhecimento sobre o negócio da sua aplicação. Ou seja, código limpo, legível e sustentável está ligado com muitas outras técnicas que o programador deve dominar
  • #44: Portanto um profissional acima da média, deve ter
  • #45: deve ter iniciativa (rafatorar),
  • #46: código coletivo
  • #47: não da a resposta, faz a pergunta (coaching).
  • #48: , aprende para compartilhar (não enterra o ouro),
  • #49: busca a excelência
  • #51: é focado (Pomodoro)
  • #53: Assim podemos concluir que desenvolvimento de software é aprendizado e assim devemos estar constantemente APRENDENDO coisas novas. Diariamente deveríamos nos perguntar
  • #57: E para evoluirmos como profissionais precisamos traçar um objetivo para nossas carreiras
  • #63: Porque assim você sempre estará ....