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