Upload
norberto-santos
View
2.841
Download
4
Embed Size (px)
DESCRIPTION
Apresentação das boas práticas e novas tendências para o desenvolvimento de software.
Citation preview
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