Tendências e Dicas para o Desenvolvimento de Software
Upcoming SlideShare
Loading in...5
×
 

Tendências e Dicas para o Desenvolvimento de Software

on

  • 2,398 views

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

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

Statistics

Views

Total Views
2,398
Views on SlideShare
2,398
Embed Views
0

Actions

Likes
0
Downloads
39
Comments
0

0 Embeds 0

No embeds

Accessibility

Categories

Upload Details

Uploaded via as Microsoft PowerPoint

Usage Rights

© All Rights Reserved

Report content

Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
  • Full Name Full Name Comment goes here.
    Are you sure you want to
    Your message goes here
    Processing…
Post Comment
Edit your comment

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

    • Tendências e Dicas para oDesenvolvimento 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 desenvolversoftware é tão difícil?
    • Desenvolver software é umaatividade criativa e colaborativa queenvolve técnicas, ferramentas eprocessos para produzir valor para umgrupo 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
    • LinguagensJava(JSF,JPA,CDI,EJB3,Spring Framework,Hibernate)..Net(C#,VB.net,Entity Framework, NHibernate, Asp.NetMVC).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 DECONFIGURAÇÃO DE SOFTWARE
    • Gerência de Configuração de Software É o processo de versionamento,controle de mudança e auditoria dos itensde 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 SoftwareDicas:- 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
    • TestesTestes Unitários(Unit Test) – Testam oscomportamentos possíveis para osmétodos de uma classe(unidade de teste).Junit, Nunit, TestUnit, Rspec, EasyMock,Mockito, PowerMock.Testes de Integração- Testam todas aspartes envolvidas em uma funcionalidadedo software.Selenium + HamCrest.
    • TestesTestes de Aceitação – Testes realizados como cliente para validar se uma funcionalidadeestá de acordo com o que ele esperava paramesma.Jbehave e Cucumber.Testes de Carga(Stress)- Testes realizadoscontra o sistema para verificar se ele écapaz de atender dentro dos padrõesesperados um determinado número derequisições.JMeter.
    • TestesTDD(Test Driven Design): Técnica criada por Kent Beck eincorporada as práticas do XP(ExtremeProgramming).
    • TestesTDD(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ÁTICASINTEGRAÇÃO CONTÍNUA
    • Integração Contínua Prática que gera uma versão funcional da suaaplicação todos os dias ou várias vezes ao dia.Essaprá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ínuaPRINCIPAIS FERRAMENTAS:SCM(CVS, Subversion, Mercurial, GIT, SourceSafe,Clear Case).Build Automatizado(ANT, Maven, Gradle, Rake).Auditoria de Código(Sonar).Repositório de Dependências(Archiva, Nexus).Containers de IntegraçãoContínua(Hudson,Jenkins,Go).
    • Integração Contínua
    • BOAS PRÁTICASMETODOLOGIAS ÁGEIS
    • Metodologias Ágeis Foram concebidas a partir doManifesto Ágil deSoftware(http://agilemanifesto.org) emudaram a maneira da comunidadede software desenvolver software. Sãoprocessos empíricos focados emmelhoria contínua e entrega de valor.
    • Metodologias ÁgeisSCRUM: - Sprints.- Papéis bem definidos(PO, Scrum Master, Time).- Stand Up Meetings(Reuniões Diárias).- Time Boxing.- Priorização de Tarefas.- Retrospectivas.
    • Metodologias ÁgeisKANBAN:- 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 ÁgeisLEAN 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 ÁgeisXP(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 emum quadro branco e trocar os mesmosde lugar.Ser ágil é entregarvalor(software funcionando) ao finalde cada iteração”.
    • TENDÊNCIAS
    • TendênciasCLOUD COMPUTING
    • Cloud Computing Consiste na utilização de recursoscomputacionais(hardware e software ) paraentrega de serviços através da internet. A computação na nuvem foi impulsionadapela necessidade que a web 2.0 de escalargrandes aplicações web e permitir que estasestejam disponíveis a seus usuários a qualquerhora e em qualquer lugar.
    • Cloud Computing
    • Cloud ComputingTipos de Serviço:SaaS(Software as a Service) – O usuário pode acessar umserviço que está disponibilizado em um serviço dehospedagem na nuvem.Ex: Google Docs, Dropbox, Flickr, Google AppsPaaS(Platform as a Service) – O usuário pode utilizar umconjunto de serviços e softwares para desenvolvimento ehospedagem das suas aplicações.Ex:Amazon Web Services, Heroku, Google App Engine,CloudFoundry.
    • Cloud ComputingIaaS(Infrastructure as a Service) – O usuário recebeuma infra-estrutura computacional em umambiente virtualizado onde possui acesso aosistema operacional para configurar a sua estruturade serviços como desejar(VPS).Ex: WebbyNodeNuvem Privada- O usuário configura a sua infra-estrutura de hardware, software e serviços dentroda sua própria empresa.
    • Cloud Computing Hospedar a sua aplicação em um serviçode cloud computing é vantajoso quando vocêdeseja que ela tenha poder de escalabilidade ealta disponibilidade.Porém, é necessárioconsiderar o quanto você precisa em termos derecursos. Porque esses serviços cobram pelonúmero de horas de uso dessesrecursos(elasticidade).
    • TendênciasNOSQL(Not Only SQL)
    • NOSQL As soluções NOSQL são focadas emescalabilidade horizontal e performance, nãousam tabelas fixas e não suportam operações dejunções.Escalabilidade Horizontal -> Dividir o fluxo derecuperação, inclusão e alteração de dadosentre os diversos nós de uma rede.
    • NOSQL As soluções NOSQL abrem mão de garantiras propriedades ACID dos tradicionais banco dedados relacionais para focar em performance adados atualizados up to date. Esse movimento foi motivado por soluçõescriadas por grandes empresas. Amazon(Dynamo). Google(BigTable). Terracota(MemCached).
    • NOSQL As soluções NOSQL são baseados no teoremaCAP que diz: Em um sistema computacional distribuídoé impossível garantir simultaneamente essastrês propriedades: consistência, disponibilidadee tolerância a partição. As soluções NOSQL são mais indicadasquando podemos deixar de lado a consistência.
    • NOSQLModelo 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.
    • NOSQLChave/Valor(Redis,MemCached)Uso:Cache de Dados.Quem Usa: GitHub, Flickr,StackOverflow.Grafos(Neo4J,InfoGrid)Uso:Aplicações de Redes Sociais e Sistema deRecomendações.Quem Usa: Facebook, Mozilla Foundation.http://bigdatanerd.wordpress.com/2012/01/04/why-nosql-part-2-overview-of-data-modelrelational-nosql/
    • TENDÊNCIASDESENVOLVIMENTOMOBILE
    • Desenvolvimento MobileDesenvolvimento 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 MobileDesenvolvimento 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 MobileDesenvolvimento 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ÊNCIASSTARTUPS
    • Startups Uma Startup consiste em empreender umaideia e tranformá-la em uma aplicação web quevisa resolver o problema de um conjunto depessoas e que estas pessoas se propõem a pagarum valor para ter o seu problema resolvido pelasua 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#1Reserve 30 minutos do seu diapara ler blogs e sites técnicos.
    • Dicas#2Participe de comunidades,foruns e dojos de programação.
    • Dicas#3Tente ler de 2 a 3 livros técnicospor mês.
    • Dicas#4Crie um blog pessoal paracompartilhar seu conhecimentocom outros companheiros deprofissão.
    • Dicas#5Publique seus projetos deestudo no GitHub.
    • Dicas#6Seja fluente em sua linguagemde programação.
    • Dicas#7Conheça bem as ferramentas doseu ambiente de trabalho.
    • Dicas#8Faça TESTES em todas as suasaplicações. Mesmo que deforma clandestina.
    • Dicas#9Aprenda os comandos Linux ,seus serviços e seuseditores(VIM e VI).
    • Dicas#10Aprenda Javascript e suasbibliotecas.
    • Dicas#11Não deixe de corrigir errosdurante o desenvolvimento doseu sistema(Teoria da JanelaQuebrada).
    • Dicas#12Evite GoldPlating(Trazer para odesenvolvimentofuncionalidades que nuncaserão usadas).
    • Dicas#13Assista palestras dos assuntosdo seu interesse e leia código deoutros desenvolvedores.
    • Dicas#14Aprenda UML e Padrões deProjeto.
    • Dicas#15Nunca deixe de aprender e seatualizar.
    • Dicas#EXTRASeja humilde em reconhecerque você não sabe tudo.Peçaajuda quando necessário.
    • PERGUNTAS
    • FIM Obrigadonorberto.santos@gmail.com @norbertosantos