Tendências e Dicas para o Desenvolvimento de Software

Post on 29-Jun-2015

2.841 views 4 download

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

Tendências e Dicas para o Desenvolvimento de Software

Norberto Santosnorberto.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/tpci/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):

CVSSubversionSource SafeMercurial

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 DadosQuem Usa: Facebook, Twitter.

Orientado a Documento(MongoDB,CouchDB)Uso: Aplicações WebQuem 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

#4Crie 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

Obrigadonorberto.santos@gmail.com

@norbertosantos