Tendências e Dicas para o Desenvolvimento de Software

74
Tendências e Dicas para o Desenvolvimento de Software Norberto Santos [email protected] @norbertosantos

description

Apresentação das boas práticas e novas tendências para o desenvolvimento de software.

Transcript of Tendências e Dicas para o Desenvolvimento de Software

Page 1: Tendências e Dicas para o Desenvolvimento de Software

Tendências e Dicas para o Desenvolvimento de Software

Norberto [email protected]

@norbertosantos

Page 2: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 3: Tendências e Dicas para o Desenvolvimento de Software

Porque desenvolver software é tão difícil?

Page 4: Tendências e Dicas para o Desenvolvimento de Software

Desenvolver software é uma atividade criativa e colaborativa que envolve técnicas, ferramentas e processos para produzir valor para um grupo de pessoas.

Page 5: Tendências e Dicas para o Desenvolvimento de Software

#FAIL

Page 6: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 7: Tendências e Dicas para o Desenvolvimento de Software

LINGUAGENS

Page 8: Tendências e Dicas para o Desenvolvimento de Software

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/tpci/index.html

Page 9: Tendências e Dicas para o Desenvolvimento de Software

BOAS PRÁTICAS

Page 10: Tendências e Dicas para o Desenvolvimento de Software

BOAS PRÁTICAS

GERÊNCIA DE CONFIGURAÇÃO DE

SOFTWARE

Page 11: Tendências e Dicas para o Desenvolvimento 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…

Page 12: Tendências e Dicas para o Desenvolvimento de Software

Gerência de Configuração de Software

Principais Ferramentas de GCS(SCM):

CVSSubversionSource SafeMercurial

GIT

Page 13: Tendências e Dicas para o Desenvolvimento de Software

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

Page 14: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 15: Tendências e Dicas para o Desenvolvimento de Software

BOAS PRÁTICAS

TESTES

Page 16: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 17: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 18: Tendências e Dicas para o Desenvolvimento de Software

Testes

TDD(Test Driven Design):

Técnica criada por Kent Beck e incorporada as práticas do XP(Extreme Programming).

Page 19: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 20: Tendências e Dicas para o Desenvolvimento de Software

BOAS PRÁTICAS

INTEGRAÇÃO CONTÍNUA

Page 21: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 22: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 23: Tendências e Dicas para o Desenvolvimento de Software

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).

Page 24: Tendências e Dicas para o Desenvolvimento de Software

Integração Contínua

Page 25: Tendências e Dicas para o Desenvolvimento de Software

BOAS PRÁTICAS

METODOLOGIAS ÁGEIS

Page 26: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 27: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 28: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 29: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 30: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 31: Tendências e Dicas para o Desenvolvimento de Software

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”.

Page 32: Tendências e Dicas para o Desenvolvimento de Software

TENDÊNCIAS

Page 33: Tendências e Dicas para o Desenvolvimento de Software

Tendências

CLOUD COMPUTING

Page 34: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 35: Tendências e Dicas para o Desenvolvimento de Software

Cloud Computing

Page 36: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 37: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 38: Tendências e Dicas para o Desenvolvimento de Software

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).

Page 39: Tendências e Dicas para o Desenvolvimento de Software

Tendências

NOSQL(Not Only SQL)

Page 40: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 41: Tendências e Dicas para o Desenvolvimento de Software

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).

Page 42: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 43: Tendências e Dicas para o Desenvolvimento de Software

NOSQL

Modelo de Dados NOSQL:Família de Colunas(Hbase, Cassandra)Uso: Distribuição do Armazenamento de DadosQuem Usa: Facebook, Twitter.

Orientado a Documento(MongoDB,CouchDB)Uso: Aplicações WebQuem Usa: Dafiti, NetFlix.

Page 44: Tendências e Dicas para o Desenvolvimento de Software

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/

Page 45: Tendências e Dicas para o Desenvolvimento de Software

TENDÊNCIAS

DESENVOLVIMENTO MOBILE

Page 46: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 47: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 48: Tendências e Dicas para o Desenvolvimento de Software

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

Page 49: Tendências e Dicas para o Desenvolvimento de Software

TENDÊNCIAS

STARTUPS

Page 50: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 51: Tendências e Dicas para o Desenvolvimento de Software

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).

Page 52: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 53: Tendências e Dicas para o Desenvolvimento de Software

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.

Page 54: Tendências e Dicas para o Desenvolvimento de Software

Outras Tendências

- Continous Deployment.- Responsive Web Design.- DevOps.- Web Service Rest.

Page 55: Tendências e Dicas para o Desenvolvimento de Software

DICAS

Page 56: Tendências e Dicas para o Desenvolvimento de Software

DICAS

#0

Aprenda Inglês.

Page 57: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#1

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

Page 58: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#2

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

Page 59: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#3

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

Page 60: Tendências e Dicas para o Desenvolvimento de Software

Dicas

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

Page 61: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#5

Publique seus projetos de estudo no GitHub.

Page 62: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#6

Seja fluente em sua linguagem de programação.

Page 63: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#7

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

Page 64: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#8

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

Page 65: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#9

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

Page 66: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#10

Aprenda Javascript e suas bibliotecas.

Page 67: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#11

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

Page 68: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#12

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

Page 69: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#13

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

Page 70: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#14

Aprenda UML e Padrões de Projeto.

Page 71: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#15

Nunca deixe de aprender e se atualizar.

Page 72: Tendências e Dicas para o Desenvolvimento de Software

Dicas

#EXTRA

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

Page 73: Tendências e Dicas para o Desenvolvimento de Software

PERGUNTAS

Page 74: Tendências e Dicas para o Desenvolvimento de Software

FIM

[email protected]

@norbertosantos