Cake php selecaodeprojetos-apres-em-modelo

465 visualizações

Publicada em

0 comentários
1 gostou
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
465
No SlideShare
0
A partir de incorporações
0
Número de incorporações
2
Ações
Compartilhamentos
0
Downloads
8
Comentários
0
Gostaram
1
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

Cake php selecaodeprojetos-apres-em-modelo

  1. 1. UNIVERSIDADE FEDERAL DA BAHIA Projeto de Colaboração do Projeto CakePHP Profª: Christina von Flach Garcia Chavez Equipe: Debora Nascimento, Thiago Colares, Thiago Souto, Vagner Amaral Junho de 2012 | Salvador, Brasil
  2. 2. Sumário• Introdução• Seleção do Projeto• Reconhecimento Inicial do CakePHP• Identificação das tarefas do CakePHP• Metodologia Geral para Contribuição• Documentação• Tradução• Caracterização de Bugs / Implementação de Melhorias• Testes
  3. 3. Sumário• Análise Sobre Reabertura de Bugs• Considerações Finais• Referências
  4. 4. Introdução• OSS - Open Source Software • Liberdade • Comunidades• Objetivo • Participar em um Projeto de software Livre • Free Software Patterns (FSP)• 2 Etapas • Seleção do projeto  CakePHP • Colaboração com o projeto
  5. 5. Seleção do Projeto• Análise de várias aplicações• Seleção do CakePHP • Framework para o desenvolvimento rápido de aplicações • Segue o padrão MVC
  6. 6. Seleção do Projeto• Um dos membros da equipe utiliza o CakePHP na sua empresa;• Comunidade de usuários expressiva;• A comunidade é bastante ativa;• O projeto possui: • site oficial sempre atualizado; • sistema para reportar bugs; • documentação • testes automatizados.• Os artefatos do projeto são bem gerenciáveis;• Oportunidade de aprendizado para a equipe
  7. 7. Reconhecimento Inicial do CakePHP• Tecnologias utilizadas o PHP / JavaScript / DOS batch script / Shell script; o MySQL / Postgres / SQLite / SQL Server / NOSQLso Alguns Padrões Arquiteturais identificados: o MVC / ActiveRecord/ Association Data Mapping / Front Controller
  8. 8. Reconhecimento Inicial do CakePHP• Código-fonte do core do CakePHP (phploc) o Lines of Code (LOC): 215.713 o Comment Lines of Code (CLOC): 63.796 o Non-Comment Lines of Code (NCLOC): 151.917 o Interfaces: 7 o Classes: 962 o Average Class Length (NCLOC): 161 o Methods: 5563 o Average Method Length (NCLOC): 27
  9. 9. Reconhecimento Inicial do CakePHP• Licença do Projeto o MIT License (maior parte) o Open Group Teste Suite License• Repositório o Github: https://github.com/cakephp/cakephp• Bugtracker o Lighthouse: http://cakephp.lighthouseapp.com/dashboardo Suíte de Testes Automatizados: PHPUnit
  10. 10. Reconhecimento Inicial do CakePHP• Política de Lançamento de Versões o Uma versão por mês o Formato do número da versão X.Y.Z-<token>, no qual:  X = grande mudança no projeto;  Y = pacotes de melhorias / novas funcionalidades;  Z = nova versão estável  <token> = alpha, beta ou RC#  Atuais: 2.1.3 (23/05/2012) e 2.2.0-RC2 (20/06/2012)
  11. 11. Identificação das Tarefas do CakePHP• Tags dos tickets no Lighthouse• Listas de tarefas pendentes no código-fonte o TODO (poucos. melhorias pontuais no código)• Tarefas identificadas inicialmente: o Correção do bug relacionado à listagem feita com a classe Paginate que utiliza Models diferentes; o Correção do bug relacionado à sinalização manual de campos obrigatórios na classe FormHelper;
  12. 12. Metodologia Geral• Tipos de atividade: o Documentação o Tradução o Correção de Bugs o Testes• Para cada atividade: o caracterizar o projeto de acordo com as questões disponibilizadas referentes a cada atividade o escolher uma forma de contribuir com o projeto escolhido no escopo da atividade o submeter a contribuição para a comunidade o relatar o feedback recebido da comunidade• Uso dos FSP e dos Reengineering Patterns
  13. 13. Documentação [1]• Padrões utilizados: o Skim The Documentation (Reengineering Patterns) o Write Documentation (Free Software Patterns)• Localização da documentação do projeto o CookBook: http://book.cakephp.org o API: http://api20.cakephp.org o Bakery: http://bakery.cakephp.org
  14. 14. Documentação [2]• Documentação adicional: o Visão geral sobre arquitetura o http://book.cakephp.org/2.0/en/cakephp-overview/understanding-model-view- controller.html o Estrutura Interna: o http://book.cakephp.org/2.0/en/getting-started/cakephp-structure.html o Estrutura de Pastas: o http://book.cakephp.org/2.0/en/getting-started/cakephp-folder-structure.html o Bibliotecas: o http://book.cakephp.org/2.0/en/core-libraries.html
  15. 15. Documentação [3]• Documentação adicional: o Tutoriais e exemplos: o http://book.cakephp.org/2.0/en/tutorials-and-examples.html o Orientações de como Colaborar com a Documentação: o http://book.cakephp.org/2.0/en/contributing/documentation.html o Guia para formatação da documentação: o http://book.cakephp.org/2.0/en/contributing/documentation.html o Padrões de Codificação: o http://book.cakephp.org/2.0/en/contributing/cakephp-coding-conventions.html
  16. 16. Documentação [4]• Documentação adicional: o Documentação para uso da suíte de testes (PHPUnit): o http://book.cakephp.org/2.0/en/development/testing.html o Documentação do processo de registro de Bugs: o http://book.cakephp.org/2.0/en/contributing/tickets.html o Documentação do processo de envio de correções: o http://book.cakephp.org/2.0/en/contributing/code.html o Outras informações para desenvolvedores: o http://cakephp.org/pages/development
  17. 17. Documentação [4.1]: IRC• Contato direto com desenvolvedores do core
  18. 18. Documentação [4.1]: IRC• Bin: ferramenta para compartilhar trechos de código http://bin.cakephp.org/
  19. 19. Documentação [4.1]: IRC• CakeBot: log de todas as conversas do #cakephp http://irc.cakephp.org/
  20. 20. Documentação [5]• Características o Formato de Texto: ReST (Re Structured Text) o Repositório: Github (http://github.com/cakephp/docs) o Equipe específica para documentaçãoBuild ReST HTML Make; Python; Sphinx; PhpDomain for sphinx.
  21. 21. Documentação [6]• Identificação de tarefas de documentação o Diretiva antes do build para exibir TODOs no CookBook
  22. 22. Documentação [7]• Tarefas identificadas o Add how to setup PATH for windows systems [1]
  23. 23. Documentação [8]• 1º Ciclo completo do processo de colaboração • Passo 1: Configuração Inicial (Git/GitHub) • Passo 2: Fork • Passo 3:Clone
  24. 24. Documentação [8]• 1º Ciclo completo do processo de colaboração • Passo 4: Modificações (direto no GitHub) View Edit / Commit
  25. 25. Documentação [8]• 1º Ciclo completo do processo de colaboração • Passo 5: Pull Request
  26. 26. Documentação [8]• Tarefas identificadas (resolução) o Add how to setup PATH for windows systems [2]
  27. 27. Tradução [1]• Tradução do Core ou de uma Aplicação • Ferramentas Utilizadas • Arquivos POT: template; • Arquivos PO: tradução propriamente dita; • i18n shell (comando extract) para geração do arquivo POT; • PoEdit para manipulação do arquivo PO;• Situação do Core • Internacionalizado (i18n), mas não localizado (L10n)• Situação da Aplicação padrão • Não era relevante traduzir • Não havia iniciativas da comunidade• Equipe optou por focar na Documentação
  28. 28. Tradução [2]• Várias orientações aos tradutores [1] • Use linguagem informal, não faça traduções parciais etc.• Idiomas disponíveis CookBook o espanhol; o francês; o japonês; o russo; o português;• Equipe: o Há um colaborador ativo residente em Salvador / Bahia que atua na tradução do CookBook para pt-BR;[1] http://book.cakephp.org/2.0/en/contributing/documentation.html
  29. 29. Tradução [3]• Identificação das atividades: o Contato com a equipe responsável pela tradução pt-BR; o Investigação do repositório no Github; o Análise do CookBook em busca de itens com pouca informação em pt-BR (se comparado com en-US);• Atividade escolhida: tradução da página principal da seção "Views" do CookBook. • Não existia! • Conteúdo relevante
  30. 30. Tradução [4]• Seção "Views" em en:
  31. 31. Tradução [5]• Seção "Views" em pt:{
  32. 32. Tradução [6]• Feedback da tradução da seção "Views" do CookBook para pt:
  33. 33. Caracterização de Bugs / Implementação de Melhorias• Bugtracker: Lighthouse • http://cakephp.lighthouseapp.com/dashboard• Registro de Tickets o Ciclo de Vida do ticket de um projeto: o http://cakephp.lighthouseapp.com/core-contributor-guidelines• Informações encontradas no Registro de Tickets: o Descrição do problema; o Comportamento esperado; o Comportamento obtido; o Passos para reprodução do bug; o Versão do CakePHP em que o bug foi identificado; o Possíveis soluções;
  34. 34. Caracterização de Bugs / Implementação de Melhorias• Critérios utlizados para identificação dos bugs / melhorias: o Desenvolvedores validaram o ticket como realmente um bug / melhoria; o Descrição objetiva do bug / melhoria. o Conhecimento sobre área do código que está ocorrendo o bug / melhoria. o Avaliação superficial e subjetiva se a tarefa pode ser realizada em um curto espaço de tempo.• A partir dos critérios, foi gerada uma lista com vários itens obtidos no Lighthouse. Após a análise de cada um dos itens, três deles foram escolhidos.
  35. 35. Caracterização de Bugs / Implementação de Melhorias• Ticket 2787
  36. 36. Caracterização de Bugs / Implementação de Melhorias• Ticket 2787 o Criação de um clone do fork no Github; https://github.com/colares/cakephp/tree/ticket-2787 o Atualização dos casos de teste; o Via de regra, a comunidade CakePHP só aceita patches acompanhados de casos de estes o Dificuldades na comunicação do PHPUnit (quando instalado via Pear) com o CakePHP. o Uso do plugin desenvolvido por Stef van den Ham https://github.com/Hyra/PHPUnit-Cake2 o Pull request foi aceito pela comunidade
  37. 37. Caracterização de Bugs / Implementação de Melhorias• Ticket 2787: feedback positivo.
  38. 38. Caracterização de Bugs / Implementação de Melhorias• Ticket 2787: modificação já está no CookBook.
  39. 39. Caracterização de Bugs / Implementação de Melhorias• Ticket 2851: método year não ordena
  40. 40. Caracterização de Bugs / Implementação de Melhorias• Ticket 2851 o A equipe verificou o erro e constatou: o O erro não era válido, pois não existia o A solução constava na documentação o No final, o ticket foi marcado como "works-for-me".
  41. 41. Caracterização de Bugs / Implementação de Melhorias• Ticket 2851
  42. 42. Caracterização de Bugs / Implementação de Melhorias• Ticket 2894 o O usuário apontou um possível erro existente em um método do HelperForm usado para criar botões HTML do tipo submit; o A equipe interagiu com a comunidade na validação do ticket; o Foi descaracterizado como um o e foi marcado como "wont-fix”. o Sinaliza um ponto de refatoração
  43. 43. Caracterização de Bugs / Implementação de Melhorias• Ticket 2894
  44. 44. Testes • Verificações empregradas no projeto (visão geral) “duplicate”, “wont- Confirmação fix”, “works-form-me” ou “invalid” Confirm “closed" ação?Novo ValidaçãoTicket “new" Válido? Sim Revisões Milestones Discussões Esclare- Tags cido? Discussões Etc… Inicia-se Conclusão Resolução “hold" “open" “resolved" Ações Estados Verificação
  45. 45. Testes: Verificação em pull requests• Funcionou?• Seguiu padrões de codificação?• Enviou casos de testes?
  46. 46. Testes: CakePHP + PHPUnit• CakePHP provê integração com PHPUnit o A principal ferramenta para testes unitários em PHP o Prover visualização de cobertura etc.• Fixtures • banco com dados temporários• Mock objects• Integração com Jenkins o Servidor para automatizar o processo de construção (build), implantação;
  47. 47. Testes: Como realiza-los?• Seguir padrões de pastas e nomeclaturas• Instalar PHPUnit o Via PEAR ou como plugin do CakePHP [1]• Interface web[1] https://github.com/Hyra/PHPUnit-Cake2
  48. 48. TestesImplementação de casos de teste
  49. 49. TestesVerificação dos casos de teste
  50. 50. Análise Sobre Reabertura de Bugs• Ausência de um estado "reopen" no Lighthouse;• Pesquisa feita no Google utilizando a seguinte expressão: • site:cakephp.lighthouseapp.com "State changed from “resolved” to “open”"
  51. 51. Análise Sobre Reabertura de Bugs• Alguns resultados obtidos • Ticket - #2031 • Resolvido – September 27th, 2011 @ 04:39 PM • Por - Admad • Reaberto – September 27th, 2011 @ 04:44 PM • Por - Admad • Causa • Pensou que o bug era similar a outro ticket resolvido anteriormente (ADmad: Oops .DS_Store is a file, not directory.) • Re-resolvido - September 27th, 2011 @ 07:44 PM • Por – Mark Story
  52. 52. Análise Sobre Reabertura de Bugs [3]• Alguns resultados obtidos • Ticket – #2931 • Resolvido – June 3rd, 2012 @ 09:24 PM • Por - Rachman Chavik • Reaberto – June 4th, 2012 @ 11:24 AM • Por - Rachman Chavik • Causa • Próprio colaborador revisou e viu que a correção foi incompleta. Mas o erro ainda continua sem solução. (Rachman Chavik: reopening, due to incomplete fix.) • Re-resolvido – • Por -
  53. 53. Análise Sobre Reabertura de Bugs• Alguns resultados obtidos • Ticket – #2857 • Resolvido – May 6th, 2012 @ 09:49 PM • Por - CakePHP (Mark Story, github) • Reaberto – May 7th, 2012 @ 08:59 AM • Por - Mark Story • Causa • Próprio colaborador revisou e viu que a correção foi incompleta. Mesmo após a mudança do status para resolved, outros commits relacionados ao mesmo erro foram realizados. (Mark Story: I think I might have not done a thorough enough test of this, and it also broke the postgres build. Re-opening until those issues are fixed.) • Re-resolvido – May 7th, 2012 @ 08:49 PM • Por - CakePHP (Mark Story, github)
  54. 54. Análise Sobre Reabertura de Bugs• Alguns resultados obtidos • Ticket – #2174 • Resolvido – October 27th, 2011 @ 09:53 AM • Por - Admad ("Afaik this bug doesnt exist in 1.x“) • Reaberto – October 27th, 2011 @ 09:53 AM • Por - Admad • Causa • O desenvolvedor e o usuário que reportou o erro estavam trabalhando com versões diferentes. Após o erro ter sido reaberto, foi marcado como duplicado, para finalmente ser marcado para resolvido. (Milestone changed from “2.0.1” to “1.3.13”. Oh i presumed you were reporting it for 2.0. Depois Mark Story fez: State changed from “open” to “duplicate”) • Re-resolvido – March 23rd, 2012 @ 08:21 PM • Por - Mark Story
  55. 55. Análise Sobre Reabertura de Bugs• Alguns resultados obtidos • Ticket – #1084 • Resolvido – July 15th, 2011 @ 06:03 PM • Por - Jose Lorenzo Rodríguez • Reaberto – July 15th, 2011 @ 08:01 PM • Por - Mark Story • Causa • Um dos desenvolvedores informou que o comportamento em questão seria modificado a partir da refatoração de uma classe. Por isso, o bug foi marcado como resolved. No entanto, como isso ainda não havia sido feito, o outro desenvolvedor retornou o estado do ticket novamente para open. (I actually havent made the time to finish this off. Currently behaviors still go into ClassRegistry • Milestone changed from “2.0.0” to “Future)
  56. 56. Análise Sobre Reabertura de Bugs• Alguns resultados obtidos • Ticket – #2103 • Resolvido – October 14th, 2011 @ 08:25 PM • Por - CakePHP (Mark Story, github) • Reaberto – October 19th, 2011 @ 09:46 PM • Por - Mark Story (erro reportado por EärendilI) • Causa • No passo inícial, o erro foi considerado inválido, ou seja, houve uma falha na compreensão do problema. Posteriormente, o problema passou por vários passos de open/resolved, em virtude do problema não estar totalmente corrigido • Re-resolvido – October 19th, 2011 @ 10:09 PM • Por - CakePHP (Mark Story, github)
  57. 57. Considerações Finais• Importância da colaboração com as comunidades mantenedoras dos projetos• Conhecimento prévio do projeto e da comunidade facilitaram a colaboração; o O desconhecimento por uma parte da equipe dificultou a colaboração com código• O aprendizado foi grande, devido ao caráter prático das atividades• A maturidade do projeto e a farta documentação facilitaram as novas colaborações • CookBook, IRC, Github, Lighthouse, Grupo de Discussão.
  58. 58. Lições Aprendidas• Desenvolvedores do core muito ativos deram feedbacks rápidos e atenciosos o Contrariando o que se especulou• O IRC foi uma poderosa ferramenta
  59. 59. Trabalhos Futuros• Publicar resultados na comunidade;• Colaborar na tradução das seções restantes do CookBook para pt;• Localizar (L10n) o core para Português (BR);• Analisar os pontos do core encontrados e que são passíveis de refatoração;• Incluir mais informações extraídas do Doxygen na documentação da API (e.g. diagrama de classes)• Analisar melhor cobertura de testes do código do core;
  60. 60. Perguntas, Críticas, Sugestões?

×