SlideShare uma empresa Scribd logo
1 de 74
Tendências e Dicas para o
Desenvolvimento de Software
         Norberto Santos
    norberto.santos@gmail.com
         @norbertosantos
Tópicos
• Apresentação.
• Porque desenvolver software é tão dificil?
• Motivos de falha no processo de
  desenvolvimento de software.
• Linguagens.
• Boas Práticas.
• Tendências.
• Dicas.
• Perguntas.
Porque desenvolver
software é tão difícil?
Desenvolver software é uma
atividade criativa e colaborativa que
envolve técnicas, ferramentas e
processos para produzir valor para um
grupo de pessoas.
#FAIL
Motivos de Falha nos Projetos de
    Desenvolvimento de Software
• Achar que sabemos mais do negócio do cliente que o
  próprio cliente.
• Ausência de uma metodologia de desenvolvimento.
• Falta de uma boa gestão das habilidades dos
  membros da equipe do projeto.
• Descomprometimento com a qualidade do software
  entregue.
• Desconhecimento de boas práticas de engenharia de
  software.
• Falta de um processo de garantia de qualidade do
  software.
LINGUAGENS
Linguagens
Java(JSF,JPA,CDI,EJB3,Spring Framework,Hibernate).
.Net(C#,VB.net,Entity Framework, NHibernate, Asp.Net
MVC).
Ruby(Rails, Sinatra).
Python(Django).
Objective-C.
Javascript(Jquery,Node.js, Backbone.js).
PHP(Zend Framework, Syphony, Cake, Code Igniter).
http://www.tiobe.com/index.php/content/paperinfo/t
pci/index.html
BOAS PRÁTICAS
BOAS PRÁTICAS

  GERÊNCIA DE
CONFIGURAÇÃO DE
   SOFTWARE
Gerência de Configuração de Software


     É o processo de versionamento,
controle de mudança e auditoria dos itens
de configuração de um software.

    Item de Configuração = documentos,
    configurações, scripts, casos de teste,
    requisitos,regras de negócio , classes e
    etc…
Gerência de Configuração de Software
   Principais Ferramentas de GCS(SCM):
                  CVS
               Subversion
               Source Safe
                Mercurial
                  GIT
Gerência de Configuração de Software
       O Fenômeno GitHub:

- Popularizou o versionamento de código de projetos open source e o
  compartilhamento do código entre os membros da comunidade
  desses projetos.
- Permitiu que os desenvolvedores mostrem as suas soluções para
  outros desenvolvedores.
- Institui a prática do código social(social coding).
- Grandes empresas como Facebook, NetFlix e Twitter possuem
  projetos versionados em repósitórios públicos e privados.
- Reposítório escolhido para versionar o código fonte do Linux e do
  Eclipse.

       www.github.com
Gerência de Configuração de Software
Dicas:

-   Ao finalizar uma funcionalidade do sistema que está trabalhando marque
    com uma TAG, o pacote que será implantado(deployment).

-    Ao finalizar um grupo de funcionalidades que compõem uma release para
    testes marque todos os artefatos com uma BASELINE.

-   Ao validar um grupo de funcionalidades com o seu cliente marque esse
    grupo de funcionalidades com uma RELEASE que será implantada no
    ambiente de produção.

-   Para cada manutenção a ser realizada em uma versão em produção crie
    uma BRANCH e ao final realize MERGE com a versão de produção.
BOAS PRÁTICAS



  TESTES
Testes
Testes Unitários(Unit Test) – Testam os
comportamentos possíveis para os
métodos de uma classe(unidade de teste).
Junit, Nunit, TestUnit, Rspec, EasyMock,
Mockito, PowerMock.
Testes de Integração- Testam todas as
partes envolvidas em uma funcionalidade
do software.
Selenium + HamCrest.
Testes
Testes de Aceitação – Testes realizados com
o cliente para validar se uma funcionalidade
está de acordo com o que ele esperava para
mesma.
Jbehave e Cucumber.
Testes de Carga(Stress)- Testes realizados
contra o sistema para verificar se ele é
capaz de atender dentro dos padrões
esperados um determinado número de
requisições.
JMeter.
Testes
TDD(Test Driven Design):



    Técnica criada por Kent Beck e
incorporada as práticas do XP(Extreme
Programming).
Testes
TDD(Test Driven Design):
- Os testes guiam a criação das funcionalidades
  do software(classes, métodos e
  relacionamentos).
- Baby Steps(Pequenos passos para fazer os
  testes passarem e melhorar a qualidade do
  código escrito).
- RED – GREEN-REFACTORING CYCLES.
BOAS PRÁTICAS




INTEGRAÇÃO CONTÍNUA
Integração Contínua
      Prática que gera uma versão funcional da sua
aplicação todos os dias ou várias vezes ao dia.Essa
prática envolve as seguintes funcionalidades:
- Verifica se existem novas mudanças na
  ferramenta de controle de versão.
- Executa um script de build automatizado que
  executa os testes da aplicação e caso todos sejam
  bem suscedidos gera uma nova versão e implanta
  no servidor de aplicação.
Integração Contínua
- Realiza a auditoria de qualidade no código
  gerado na versão e informa se as regras de
  programação foram infringidas.
- Informa a equipe do projeto se o
  deploy(implantação) foi ou não bem
  suscedido.
- Permite um feedback de qualidade e bugs em
  um pequeno intervalo de tempo que aumenta
  a qualidade do software entregue ao cliente.
Integração Contínua
PRINCIPAIS FERRAMENTAS:
SCM(CVS, Subversion, Mercurial, GIT, Source
Safe,Clear Case).
Build Automatizado(ANT, Maven, Gradle, Rake).
Auditoria de Código(Sonar).
Repositório de Dependências(Archiva, Nexus).
Containers de Integração
Contínua(Hudson,Jenkins,Go).
Integração Contínua
BOAS PRÁTICAS



METODOLOGIAS ÁGEIS
Metodologias Ágeis
    Foram concebidas a partir do
Manifesto Ágil de
Software(http://agilemanifesto.org) e
mudaram a maneira da comunidade
de software desenvolver software. São
processos empíricos focados em
melhoria contínua e entrega de valor.
Metodologias Ágeis
SCRUM:
 - Sprints.
- Papéis bem definidos(PO, Scrum Master,
   Time).
- Stand Up Meetings(Reuniões Diárias).
- Time Boxing.
- Priorização de Tarefas.
- Retrospectivas.
Metodologias Ágeis
KANBAN:
- Tornar as tarefas visíveis(quadro kanban).
- Definir um fluxo de trabalho(workflow).
- Definir o número de tarefas em cada fase
  definida no fluxo de trabalho(WIP=Work in
  Progress).
- Tornar a política de realizações de domínio
  público.
- Crescer através da experimentação.
- Medir os resultados alcançados.
Metodologias Ágeis
LEAN SOFTWARE DEVELOPMENT:
- Concebida a partir do sistema Toyota de
  Produção.
- Eliminar o desperdício(KAIZEN).
- Ampliar o conhecimento.
- Decidir o mais cedo possível.
- Entregar o mais rápido possível.
- Construir a integridade do produto.
- Capacitar a equipe.
- Visualizar o todo.
Metodologias Ágeis
XP(Extreme Programming):
- TDD.
- Programação em Pares(Pair Programming).
- Propriedade coletiva do código.
- Pequenas Versões.
- Refactoring.
- Integração Contínua.
- Users Stories.
Metodologias Ágeis


“Ser ágil não é apenas colar post-it em
um quadro branco e trocar os mesmos
de lugar.Ser ágil é entregar
valor(software funcionando) ao final
de cada iteração”.
TENDÊNCIAS
Tendências



CLOUD COMPUTING
Cloud Computing
      Consiste na utilização de recursos
computacionais(hardware e software ) para
entrega de serviços através da internet.
      A computação na nuvem foi impulsionada
pela necessidade que a web 2.0 de escalar
grandes aplicações web e permitir que estas
estejam disponíveis a seus usuários a qualquer
hora e em qualquer lugar.
Cloud Computing
Cloud Computing
Tipos de Serviço:

SaaS(Software as a Service) – O usuário pode acessar um
serviço que está disponibilizado em um serviço de
hospedagem na nuvem.
Ex: Google Docs, Dropbox, Flickr, Google Apps

PaaS(Platform as a Service) – O usuário pode utilizar um
conjunto de serviços e softwares para desenvolvimento e
hospedagem das suas aplicações.
Ex:Amazon Web Services, Heroku, Google App Engine,Cloud
Foundry.
Cloud Computing
IaaS(Infrastructure as a Service) – O usuário recebe
uma infra-estrutura computacional em um
ambiente virtualizado onde possui acesso ao
sistema operacional para configurar a sua estrutura
de serviços como desejar(VPS).
Ex: WebbyNode

Nuvem Privada- O usuário configura a sua infra-
estrutura de hardware, software e serviços dentro
da sua própria empresa.
Cloud Computing
      Hospedar a sua aplicação em um serviço
de cloud computing é vantajoso quando você
deseja que ela tenha poder de escalabilidade e
alta disponibilidade.Porém, é necessário
considerar o quanto você precisa em termos de
recursos. Porque esses serviços cobram pelo
número de horas de uso desses
recursos(elasticidade).
Tendências



NOSQL(Not Only SQL)
NOSQL

     As soluções NOSQL são focadas em
escalabilidade horizontal e performance, não
usam tabelas fixas e não suportam operações de
junções.

Escalabilidade Horizontal -> Dividir o fluxo de
recuperação, inclusão e alteração de dados
entre os diversos nós de uma rede.
NOSQL
      As soluções NOSQL abrem mão de garantir
as propriedades ACID dos tradicionais banco de
dados relacionais para focar em performance a
dados atualizados up to date.
      Esse movimento foi motivado por soluções
criadas por grandes empresas.
      Amazon(Dynamo).
      Google(BigTable).
      Terracota(MemCached).
NOSQL
 As soluções NOSQL são baseados no teorema
CAP que diz:
      Em um sistema computacional distribuído
é impossível garantir simultaneamente essas
três propriedades: consistência, disponibilidade
e tolerância a partição.
      As soluções NOSQL são mais indicadas
quando podemos deixar de lado a consistência.
NOSQL
Modelo de Dados NOSQL:
Família de Colunas(Hbase, Cassandra)
Uso: Distribuição do Armazenamento de Dados
Quem Usa: Facebook, Twitter.

Orientado a Documento(MongoDB,CouchDB)
Uso: Aplicações Web
Quem Usa: Dafiti, NetFlix.
NOSQL
Chave/Valor(Redis,MemCached)
Uso:Cache de Dados.
Quem Usa: GitHub, Flickr,StackOverflow.

Grafos(Neo4J,InfoGrid)
Uso:Aplicações de Redes Sociais e Sistema de
Recomendações.
Quem Usa: Facebook, Mozilla Foundation.
http://bigdatanerd.wordpress.com/2012/01/04/why-
nosql-part-2-overview-of-data-modelrelational-nosql/
TENDÊNCIAS



DESENVOLVIMENTO
MOBILE
Desenvolvimento Mobile
Desenvolvimento Nativo:

ANDROID(Google):
- Menor curva de aprendizado.
- Baseado em Java.
- Dalvik SDK.
- Eclipse + ADT.
- As apps podem ser instaladas diretamente no celular.
- Maior facilidade para publicar as apps no Google Play.
- Grupo de usuários bastante grande no Brasil.
Desenvolvimento Mobile
Desenvolvimento Nativo:
IOS(Apple):
- Necessário ter um Mac para desenvolver.
- Lion + Xcode 4.
- Objective-C.
- Maior curva de aprendizado.
- Foi adotado pelo mercado corporativo.
- Sua app passará por um comitê de padrões para poder ser
  publicado na loja de aplicativos.
- Para publicar um app no Itunes é necessário licença de
  desenvolvedor(US$99,00) e um site corporativo para
  descrever o aplicativo.
Desenvolvimento Mobile
Desenvolvimento Híbrido:
- Indicado para aplicativos que não necessitam
  fazer uso de recursos específicos da plataforma
  Android ou IOS.
- HTML 5 + CSS3 + Biblioteca JS.
- Baseado em aplicações Web.
- A biblioteca JS é responsável por converter o
  código do aplicativo para plataforma desejada.
Ferramentas: Phone Gap, Sencha Touch, Titanium
TENDÊNCIAS



STARTUPS
Startups
      Uma Startup consiste em empreender uma
ideia e tranformá-la em uma aplicação web que
visa resolver o problema de um conjunto de
pessoas e que estas pessoas se propõem a pagar
um valor para ter o seu problema resolvido pela
sua aplicação.
Startups
- Baseam-se em hipóteses para a construção de
  soluções.
- É necessário conhecer bem o mercado onde a
  sua solução será inserida.
- Exige investimento em propaganda para
  captar um número de interessados.
- MVP(Conjunto mínimo de funcionalidades
  para validar o produto).
Startups
- Lançar a primeira versão o mais rápido
  possível.
- Após o primeiro feedback dos usuários decidir
  se permanece ou troca a hipótese(pivotar).
- Exige um conjunto de conhecimentos(gerência
  de produto, gerência de projeto, engenharia
  de software).
- Bootstraping/Aceleradora.
Startups
- A startup só deixa de ser uma startup a partir
  do momento que a sua receita paga os seus
  custos e produz lucro para o seu criador.
- O empreendedor não pode ter medo de
  falhar.
- Business Model Canvas.
- Lean Startup.
Exs: DropBox, Cloud Foundry, Casa do Codigo,
Craques.com, Mundi, Conta Cal, Cobre Grátis.
Outras Tendências
-   Continous Deployment.
-   Responsive Web Design.
-   DevOps.
-   Web Service Rest.
DICAS
DICAS

#0

     Aprenda Inglês.
Dicas

#1

Reserve 30 minutos do seu dia
para ler blogs e sites técnicos.
Dicas

#2

Participe de comunidades,
foruns e dojos de programação.
Dicas

#3

Tente ler de 2 a 3 livros técnicos
por mês.
Dicas

#4
Crie um blog pessoal para
compartilhar seu conhecimento
com outros companheiros de
profissão.
Dicas

#5

Publique seus projetos de
estudo no GitHub.
Dicas

#6

Seja fluente em sua linguagem
de programação.
Dicas

#7

Conheça bem as ferramentas do
seu ambiente de trabalho.
Dicas

#8

Faça TESTES em todas as suas
aplicações. Mesmo que de
forma clandestina.
Dicas

#9

Aprenda os comandos Linux ,
seus serviços e seus
editores(VIM e VI).
Dicas

#10

Aprenda Javascript e suas
bibliotecas.
Dicas
#11

Não deixe de corrigir erros
durante o desenvolvimento do
seu sistema(Teoria da Janela
Quebrada).
Dicas
#12

Evite GoldPlating(Trazer para o
desenvolvimento
funcionalidades que nunca
serão usadas).
Dicas

#13

Assista palestras dos assuntos
do seu interesse e leia código de
outros desenvolvedores.
Dicas

#14

Aprenda UML e Padrões de
Projeto.
Dicas

#15

Nunca deixe de aprender e se
atualizar.
Dicas

#EXTRA

Seja humilde em reconhecer
que você não sabe tudo.Peça
ajuda quando necessário.
PERGUNTAS
FIM


         Obrigado
norberto.santos@gmail.com
     @norbertosantos

Mais conteúdo relacionado

Mais procurados

Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixCris Fidelix
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixCris Fidelix
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous deliveryMarco Valtas
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalhoRuan Pozzebon
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Elaine Cecília Gatto
 
Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Elaine Cecília Gatto
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppCloves da Rocha
 
Microserviços - Desafios para lidar com a qualidade
Microserviços - Desafios para lidar com a qualidadeMicroserviços - Desafios para lidar com a qualidade
Microserviços - Desafios para lidar com a qualidadeAndré Abe Vicente
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumRafael Souza
 
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...Keila Freitas
 
Filosofia De Desenvolvimento De Software
Filosofia De Desenvolvimento De SoftwareFilosofia De Desenvolvimento De Software
Filosofia De Desenvolvimento De SoftwareSérgio Luiz Jordão
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Javaelliando dias
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEAlexsander Camargo
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlabJackson F. de A. Mafra
 
GCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilGCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilMisael Santos
 

Mais procurados (20)

Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane FidelixModelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
Modelos de Processo e Desenvolvimento de Software 1 - Prof.ª Cristiane Fidelix
 
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane FidelixIntrodução a Engenharia de Software - Prof.ª Cristiane Fidelix
Introdução a Engenharia de Software - Prof.ª Cristiane Fidelix
 
Continuous delivery
Continuous deliveryContinuous delivery
Continuous delivery
 
Outras Metodologias Ágeis Parte 3
Outras Metodologias Ágeis Parte 3Outras Metodologias Ágeis Parte 3
Outras Metodologias Ágeis Parte 3
 
Metodologias ágeis de desenvolvimento trabalho
Metodologias ágeis de desenvolvimento   trabalhoMetodologias ágeis de desenvolvimento   trabalho
Metodologias ágeis de desenvolvimento trabalho
 
Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2Modelos de Processo de Software Parte 2
Modelos de Processo de Software Parte 2
 
Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4Modelos de Processo de Software Parte 4
Modelos de Processo de Software Parte 4
 
Outras Metodologias Ágeis Parte 2
Outras Metodologias Ágeis Parte 2Outras Metodologias Ágeis Parte 2
Outras Metodologias Ágeis Parte 2
 
Metodologia Ágil
Metodologia ÁgilMetodologia Ágil
Metodologia Ágil
 
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile AppAula - Modelos de Processos de Desenvolvimento de Software / Mobile App
Aula - Modelos de Processos de Desenvolvimento de Software / Mobile App
 
Microserviços - Desafios para lidar com a qualidade
Microserviços - Desafios para lidar com a qualidadeMicroserviços - Desafios para lidar com a qualidade
Microserviços - Desafios para lidar com a qualidade
 
Extreme Programming (XP) e Scrum
Extreme Programming (XP) e ScrumExtreme Programming (XP) e Scrum
Extreme Programming (XP) e Scrum
 
Metodologias Ageis
Metodologias AgeisMetodologias Ageis
Metodologias Ageis
 
ISO/IEC 9241-11
ISO/IEC 9241-11ISO/IEC 9241-11
ISO/IEC 9241-11
 
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...
Estudo de ferramentas em Software Livre para gestão ágil de projetos de desen...
 
Filosofia De Desenvolvimento De Software
Filosofia De Desenvolvimento De SoftwareFilosofia De Desenvolvimento De Software
Filosofia De Desenvolvimento De Software
 
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java JavaImplementando Implementando eXtreme treme Programming rogramming em em Java Java
Implementando Implementando eXtreme treme Programming rogramming em em Java Java
 
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADEREFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
REFATORAÇÃO DE CÓDIGO LEGADO: DETALHAMENTO DE UMA ESTRUTURA DE MANUTENIBILIDADE
 
Phprs meetup - deploys automatizados com gitlab
Phprs   meetup - deploys automatizados com gitlabPhprs   meetup - deploys automatizados com gitlab
Phprs meetup - deploys automatizados com gitlab
 
GCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS ÁgilGCS - Aula 09 - GCS Ágil
GCS - Aula 09 - GCS Ágil
 

Semelhante a Tendências e Dicas para Desenvolvimento de Software

Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Lenin Abadie
 
Visao geraldorup 20slides
Visao geraldorup 20slidesVisao geraldorup 20slides
Visao geraldorup 20slideshoraciosila
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Ramon Durães
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptxCarlos Gonzaga
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoCaio Candido
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiFelipe Caputo
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiMayara Fernandes
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = ProdutividadeAdriano Bertucci
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureGrupo de Testes Carioca
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Camilla Gomes
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaHumberto Streb
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasAmazon Web Services LATAM
 
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Felipe Nascimento
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versãoMarcos Pessoa
 

Semelhante a Tendências e Dicas para Desenvolvimento de Software (20)

Falando sobre DevOps no azure
Falando sobre DevOps no azureFalando sobre DevOps no azure
Falando sobre DevOps no azure
 
Escalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLIDEscalando apps com React e Type Script e SOLID
Escalando apps com React e Type Script e SOLID
 
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
Uma Arquitetura para a Implantação Automática de Serviços em Infraestruturas ...
 
Apresentacao dev ops
Apresentacao dev opsApresentacao dev ops
Apresentacao dev ops
 
Visao geraldorup 20slides
Visao geraldorup 20slidesVisao geraldorup 20slides
Visao geraldorup 20slides
 
Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016Keynote Visual Studio Summit 2016
Keynote Visual Studio Summit 2016
 
Testes automatizados.pptx
Testes automatizados.pptxTestes automatizados.pptx
Testes automatizados.pptx
 
Apresentação RUP
Apresentação RUPApresentação RUP
Apresentação RUP
 
MIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como CódigoMIT DevOps IaC - Infra como Código
MIT DevOps IaC - Infra como Código
 
Desconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em DelphiDesconstruindo monolitos - Construindo microservicos em Delphi
Desconstruindo monolitos - Construindo microservicos em Delphi
 
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos DelphiTDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
TDCPOA2018 - Trilha Delphi - Desconstruindo Monolitos Delphi
 
FDD
FDDFDD
FDD
 
Microsoft ALM = Produtividade
Microsoft ALM = ProdutividadeMicrosoft ALM = Produtividade
Microsoft ALM = Produtividade
 
Cloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows AzureCloud Computing e Integração Contínua com o Windows Azure
Cloud Computing e Integração Contínua com o Windows Azure
 
Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9Procura-se: DevOps #cpbr9
Procura-se: DevOps #cpbr9
 
Docker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entregaDocker, jenkins e gradle para tomar o controle de sua entrega
Docker, jenkins e gradle para tomar o controle de sua entrega
 
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas RápidasDevOps na AWS: Construindo Sistemas para Entregas Rápidas
DevOps na AWS: Construindo Sistemas para Entregas Rápidas
 
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
Apresentação: Utilização de Metodologias Ágeis para Adaptação de um Processo ...
 
Continuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na NuvemContinuous Deployment e DevOps na Nuvem
Continuous Deployment e DevOps na Nuvem
 
Sistemas de controle de versão
Sistemas de controle de versãoSistemas de controle de versão
Sistemas de controle de versão
 

Tendências e Dicas para Desenvolvimento de Software

  • 1. Tendências e Dicas para o Desenvolvimento de Software Norberto Santos norberto.santos@gmail.com @norbertosantos
  • 2. Tópicos • Apresentação. • Porque desenvolver software é tão dificil? • Motivos de falha no processo de desenvolvimento de software. • Linguagens. • Boas Práticas. • Tendências. • Dicas. • Perguntas.
  • 4. Desenvolver software é uma atividade criativa e colaborativa que envolve técnicas, ferramentas e processos para produzir valor para um grupo de pessoas.
  • 6. Motivos de Falha nos Projetos de Desenvolvimento de Software • Achar que sabemos mais do negócio do cliente que o próprio cliente. • Ausência de uma metodologia de desenvolvimento. • Falta de uma boa gestão das habilidades dos membros da equipe do projeto. • Descomprometimento com a qualidade do software entregue. • Desconhecimento de boas práticas de engenharia de software. • Falta de um processo de garantia de qualidade do software.
  • 8. Linguagens Java(JSF,JPA,CDI,EJB3,Spring Framework,Hibernate). .Net(C#,VB.net,Entity Framework, NHibernate, Asp.Net MVC). Ruby(Rails, Sinatra). Python(Django). Objective-C. Javascript(Jquery,Node.js, Backbone.js). PHP(Zend Framework, Syphony, Cake, Code Igniter). http://www.tiobe.com/index.php/content/paperinfo/t pci/index.html
  • 10. BOAS PRÁTICAS GERÊNCIA DE CONFIGURAÇÃO DE SOFTWARE
  • 11. Gerência de Configuração de Software É o processo de versionamento, controle de mudança e auditoria dos itens de configuração de um software. Item de Configuração = documentos, configurações, scripts, casos de teste, requisitos,regras de negócio , classes e etc…
  • 12. Gerência de Configuração de Software Principais Ferramentas de GCS(SCM): CVS Subversion Source Safe Mercurial GIT
  • 13. Gerência de Configuração de Software O Fenômeno GitHub: - Popularizou o versionamento de código de projetos open source e o compartilhamento do código entre os membros da comunidade desses projetos. - Permitiu que os desenvolvedores mostrem as suas soluções para outros desenvolvedores. - Institui a prática do código social(social coding). - Grandes empresas como Facebook, NetFlix e Twitter possuem projetos versionados em repósitórios públicos e privados. - Reposítório escolhido para versionar o código fonte do Linux e do Eclipse. www.github.com
  • 14. Gerência de Configuração de Software Dicas: - Ao finalizar uma funcionalidade do sistema que está trabalhando marque com uma TAG, o pacote que será implantado(deployment). - Ao finalizar um grupo de funcionalidades que compõem uma release para testes marque todos os artefatos com uma BASELINE. - Ao validar um grupo de funcionalidades com o seu cliente marque esse grupo de funcionalidades com uma RELEASE que será implantada no ambiente de produção. - Para cada manutenção a ser realizada em uma versão em produção crie uma BRANCH e ao final realize MERGE com a versão de produção.
  • 15. BOAS PRÁTICAS TESTES
  • 16. Testes Testes Unitários(Unit Test) – Testam os comportamentos possíveis para os métodos de uma classe(unidade de teste). Junit, Nunit, TestUnit, Rspec, EasyMock, Mockito, PowerMock. Testes de Integração- Testam todas as partes envolvidas em uma funcionalidade do software. Selenium + HamCrest.
  • 17. Testes Testes de Aceitação – Testes realizados com o cliente para validar se uma funcionalidade está de acordo com o que ele esperava para mesma. Jbehave e Cucumber. Testes de Carga(Stress)- Testes realizados contra o sistema para verificar se ele é capaz de atender dentro dos padrões esperados um determinado número de requisições. JMeter.
  • 18. Testes TDD(Test Driven Design): Técnica criada por Kent Beck e incorporada as práticas do XP(Extreme Programming).
  • 19. Testes TDD(Test Driven Design): - Os testes guiam a criação das funcionalidades do software(classes, métodos e relacionamentos). - Baby Steps(Pequenos passos para fazer os testes passarem e melhorar a qualidade do código escrito). - RED – GREEN-REFACTORING CYCLES.
  • 21. Integração Contínua Prática que gera uma versão funcional da sua aplicação todos os dias ou várias vezes ao dia.Essa prática envolve as seguintes funcionalidades: - Verifica se existem novas mudanças na ferramenta de controle de versão. - Executa um script de build automatizado que executa os testes da aplicação e caso todos sejam bem suscedidos gera uma nova versão e implanta no servidor de aplicação.
  • 22. Integração Contínua - Realiza a auditoria de qualidade no código gerado na versão e informa se as regras de programação foram infringidas. - Informa a equipe do projeto se o deploy(implantação) foi ou não bem suscedido. - Permite um feedback de qualidade e bugs em um pequeno intervalo de tempo que aumenta a qualidade do software entregue ao cliente.
  • 23. Integração Contínua PRINCIPAIS FERRAMENTAS: SCM(CVS, Subversion, Mercurial, GIT, Source Safe,Clear Case). Build Automatizado(ANT, Maven, Gradle, Rake). Auditoria de Código(Sonar). Repositório de Dependências(Archiva, Nexus). Containers de Integração Contínua(Hudson,Jenkins,Go).
  • 26. Metodologias Ágeis Foram concebidas a partir do Manifesto Ágil de Software(http://agilemanifesto.org) e mudaram a maneira da comunidade de software desenvolver software. São processos empíricos focados em melhoria contínua e entrega de valor.
  • 27. Metodologias Ágeis SCRUM: - Sprints. - Papéis bem definidos(PO, Scrum Master, Time). - Stand Up Meetings(Reuniões Diárias). - Time Boxing. - Priorização de Tarefas. - Retrospectivas.
  • 28. Metodologias Ágeis KANBAN: - Tornar as tarefas visíveis(quadro kanban). - Definir um fluxo de trabalho(workflow). - Definir o número de tarefas em cada fase definida no fluxo de trabalho(WIP=Work in Progress). - Tornar a política de realizações de domínio público. - Crescer através da experimentação. - Medir os resultados alcançados.
  • 29. Metodologias Ágeis LEAN SOFTWARE DEVELOPMENT: - Concebida a partir do sistema Toyota de Produção. - Eliminar o desperdício(KAIZEN). - Ampliar o conhecimento. - Decidir o mais cedo possível. - Entregar o mais rápido possível. - Construir a integridade do produto. - Capacitar a equipe. - Visualizar o todo.
  • 30. Metodologias Ágeis XP(Extreme Programming): - TDD. - Programação em Pares(Pair Programming). - Propriedade coletiva do código. - Pequenas Versões. - Refactoring. - Integração Contínua. - Users Stories.
  • 31. Metodologias Ágeis “Ser ágil não é apenas colar post-it em um quadro branco e trocar os mesmos de lugar.Ser ágil é entregar valor(software funcionando) ao final de cada iteração”.
  • 34. Cloud Computing Consiste na utilização de recursos computacionais(hardware e software ) para entrega de serviços através da internet. A computação na nuvem foi impulsionada pela necessidade que a web 2.0 de escalar grandes aplicações web e permitir que estas estejam disponíveis a seus usuários a qualquer hora e em qualquer lugar.
  • 36. Cloud Computing Tipos de Serviço: SaaS(Software as a Service) – O usuário pode acessar um serviço que está disponibilizado em um serviço de hospedagem na nuvem. Ex: Google Docs, Dropbox, Flickr, Google Apps PaaS(Platform as a Service) – O usuário pode utilizar um conjunto de serviços e softwares para desenvolvimento e hospedagem das suas aplicações. Ex:Amazon Web Services, Heroku, Google App Engine,Cloud Foundry.
  • 37. Cloud Computing IaaS(Infrastructure as a Service) – O usuário recebe uma infra-estrutura computacional em um ambiente virtualizado onde possui acesso ao sistema operacional para configurar a sua estrutura de serviços como desejar(VPS). Ex: WebbyNode Nuvem Privada- O usuário configura a sua infra- estrutura de hardware, software e serviços dentro da sua própria empresa.
  • 38. Cloud Computing Hospedar a sua aplicação em um serviço de cloud computing é vantajoso quando você deseja que ela tenha poder de escalabilidade e alta disponibilidade.Porém, é necessário considerar o quanto você precisa em termos de recursos. Porque esses serviços cobram pelo número de horas de uso desses recursos(elasticidade).
  • 40. NOSQL As soluções NOSQL são focadas em escalabilidade horizontal e performance, não usam tabelas fixas e não suportam operações de junções. Escalabilidade Horizontal -> Dividir o fluxo de recuperação, inclusão e alteração de dados entre os diversos nós de uma rede.
  • 41. NOSQL As soluções NOSQL abrem mão de garantir as propriedades ACID dos tradicionais banco de dados relacionais para focar em performance a dados atualizados up to date. Esse movimento foi motivado por soluções criadas por grandes empresas. Amazon(Dynamo). Google(BigTable). Terracota(MemCached).
  • 42. NOSQL As soluções NOSQL são baseados no teorema CAP que diz: Em um sistema computacional distribuído é impossível garantir simultaneamente essas três propriedades: consistência, disponibilidade e tolerância a partição. As soluções NOSQL são mais indicadas quando podemos deixar de lado a consistência.
  • 43. NOSQL Modelo de Dados NOSQL: Família de Colunas(Hbase, Cassandra) Uso: Distribuição do Armazenamento de Dados Quem Usa: Facebook, Twitter. Orientado a Documento(MongoDB,CouchDB) Uso: Aplicações Web Quem Usa: Dafiti, NetFlix.
  • 44. NOSQL Chave/Valor(Redis,MemCached) Uso:Cache de Dados. Quem Usa: GitHub, Flickr,StackOverflow. Grafos(Neo4J,InfoGrid) Uso:Aplicações de Redes Sociais e Sistema de Recomendações. Quem Usa: Facebook, Mozilla Foundation. http://bigdatanerd.wordpress.com/2012/01/04/why- nosql-part-2-overview-of-data-modelrelational-nosql/
  • 46. Desenvolvimento Mobile Desenvolvimento Nativo: ANDROID(Google): - Menor curva de aprendizado. - Baseado em Java. - Dalvik SDK. - Eclipse + ADT. - As apps podem ser instaladas diretamente no celular. - Maior facilidade para publicar as apps no Google Play. - Grupo de usuários bastante grande no Brasil.
  • 47. Desenvolvimento Mobile Desenvolvimento Nativo: IOS(Apple): - Necessário ter um Mac para desenvolver. - Lion + Xcode 4. - Objective-C. - Maior curva de aprendizado. - Foi adotado pelo mercado corporativo. - Sua app passará por um comitê de padrões para poder ser publicado na loja de aplicativos. - Para publicar um app no Itunes é necessário licença de desenvolvedor(US$99,00) e um site corporativo para descrever o aplicativo.
  • 48. Desenvolvimento Mobile Desenvolvimento Híbrido: - Indicado para aplicativos que não necessitam fazer uso de recursos específicos da plataforma Android ou IOS. - HTML 5 + CSS3 + Biblioteca JS. - Baseado em aplicações Web. - A biblioteca JS é responsável por converter o código do aplicativo para plataforma desejada. Ferramentas: Phone Gap, Sencha Touch, Titanium
  • 50. Startups Uma Startup consiste em empreender uma ideia e tranformá-la em uma aplicação web que visa resolver o problema de um conjunto de pessoas e que estas pessoas se propõem a pagar um valor para ter o seu problema resolvido pela sua aplicação.
  • 51. Startups - Baseam-se em hipóteses para a construção de soluções. - É necessário conhecer bem o mercado onde a sua solução será inserida. - Exige investimento em propaganda para captar um número de interessados. - MVP(Conjunto mínimo de funcionalidades para validar o produto).
  • 52. Startups - Lançar a primeira versão o mais rápido possível. - Após o primeiro feedback dos usuários decidir se permanece ou troca a hipótese(pivotar). - Exige um conjunto de conhecimentos(gerência de produto, gerência de projeto, engenharia de software). - Bootstraping/Aceleradora.
  • 53. Startups - A startup só deixa de ser uma startup a partir do momento que a sua receita paga os seus custos e produz lucro para o seu criador. - O empreendedor não pode ter medo de falhar. - Business Model Canvas. - Lean Startup. Exs: DropBox, Cloud Foundry, Casa do Codigo, Craques.com, Mundi, Conta Cal, Cobre Grátis.
  • 54. Outras Tendências - Continous Deployment. - Responsive Web Design. - DevOps. - Web Service Rest.
  • 55. DICAS
  • 56. DICAS #0 Aprenda Inglês.
  • 57. Dicas #1 Reserve 30 minutos do seu dia para ler blogs e sites técnicos.
  • 58. Dicas #2 Participe de comunidades, foruns e dojos de programação.
  • 59. Dicas #3 Tente ler de 2 a 3 livros técnicos por mês.
  • 60. Dicas #4 Crie um blog pessoal para compartilhar seu conhecimento com outros companheiros de profissão.
  • 61. Dicas #5 Publique seus projetos de estudo no GitHub.
  • 62. Dicas #6 Seja fluente em sua linguagem de programação.
  • 63. Dicas #7 Conheça bem as ferramentas do seu ambiente de trabalho.
  • 64. Dicas #8 Faça TESTES em todas as suas aplicações. Mesmo que de forma clandestina.
  • 65. Dicas #9 Aprenda os comandos Linux , seus serviços e seus editores(VIM e VI).
  • 66. Dicas #10 Aprenda Javascript e suas bibliotecas.
  • 67. Dicas #11 Não deixe de corrigir erros durante o desenvolvimento do seu sistema(Teoria da Janela Quebrada).
  • 68. Dicas #12 Evite GoldPlating(Trazer para o desenvolvimento funcionalidades que nunca serão usadas).
  • 69. Dicas #13 Assista palestras dos assuntos do seu interesse e leia código de outros desenvolvedores.
  • 70. Dicas #14 Aprenda UML e Padrões de Projeto.
  • 71. Dicas #15 Nunca deixe de aprender e se atualizar.
  • 72. Dicas #EXTRA Seja humilde em reconhecer que você não sabe tudo.Peça ajuda quando necessário.
  • 74. FIM Obrigado norberto.santos@gmail.com @norbertosantos