- Leonardo Christian Ferreira da Costa (leonardo.chfc@gmail.com, @leochrisis)
- Lucas Tavares Monteiro (tavares.lucas1996@gmail.com, @tavareslucas)
- Projeto (quasarframework/quasar/)
- Identificar novatos nos projetos: https://github.com/snowyu, contribui em março de 2019 com 2 commits, contendo pequenas alterações; https://github.com/stefanvanherwijnen, contribuiu com adição de uma feature em março de 2019, com apenas 2 commits.
- Identificar desenvolvedores chave nos projetos: https://github.com/rstoenescu, criador e principal desenvolvedor (https://github.com/quasarframework/quasar/commits?author=rstoenescu).
- Identificar como tarefas são sugeridas: Tarefas são sugeridas através de Issues que não são categorizadas, entretanto contém com um guia de inserção no readme (https://github.com/quasarframework/quasar/blob/dev/README.md).
- Identificar como novas contribuições são avaliadas: O responsável por avaliar as contribuições é o desenvolvedor chave (https://github.com/rstoenescu), que pode ser notado pelo padrão dos commits da Branch Master do QUASAR Framework.
- Identificar como os canais de comunicação das comunidades: Fórum do QUASAR (https://forum.quasar-framework.org) e servidor no DISCORD (http://chat.quasar-framework.org)
-
Experimente os commandos do
git
em algum repositório de código. Utilize os commandoscommit
,push
,pull
,checkout
,log
,shortlog
, etc. Descreva o que cada um desses comandos faz:commit
: Este comando cria um estado dentro da atual branch que encapsula as alterações que foram feitas contendo um log dessas alterações e tem o objetivo de posteriormente adiciona-las ao repositório remoto.push
: atualiza as referências remotas utilizando as referências locais, ou seja, o comando push "empurra" as alterações para a origin desejada.pull
: o comando compara qual o estado atual da árvore de commit local com a árvore de commits remota, e atualiza a árvore local caso exista uma desatualização.checkout
: este comando atualiza os arquivos da árvore de trabalho para o index especificado ou para a árvore de trabalho especificada.log
: o comando apresenta a lista de commits, bem como as informações relacionadas a estas (autor, data, hora).shortlog
: sumariza a lista de commits de forma que seja possível notar quais foram os autores responsáveis pelos commits, em geral são usados no anúncio de uma nova release.
-
Baixe o site da disciplina na sua máquina local, e rode um comando para imprimir uma saída de terminal similar a esta:
- O comando para executar o que foi pedido é
git shortlog -e -s
- O comando para executar o que foi pedido é
-
Acesse os sites abaixo e procure um projeto que esteja procurando por ajuda. Tente fazer uma contribuição:
- Selecione e identifique em um determinado projeto de software livre se a página inicial ou alguma página logo em seguida tem (ou não) links para instação, documentação, documentação traduzida, e como contribuir. Coloque o projeto avaliado e os links encontrados (ou não):
- Revise uma página de um projeto de software livre e sumarize os problemas encontrados (o que falta para ela ser mais informativa):
- Projeto Buefy
- Não tem guideline para contribuir para o projeto.
- Não tem documentação traduzida.
- Não diz como pode ser reportado um bug.
- Não há um visível guia de criação de novas Issues.
- Justifique o que acontece se um projeto de software não tiver nenhuma licença definida.
- Como não existe uma licença específica, então todos os direitos ficam reservados para o autor ou a empresa que produziu o projeto de software em questão.
- Procure um projeto sem licença de software e adicione uma.
- Aqui o link para a PR da adição de licença.
- Acesse o site choosealicense, e estude ao menos cinco licenças. Justifique porque o site da disciplina tem a licença que tem.
- A licença utilizada pelo site é Creative Commons Attribution 4.0 International. O primeiro motivo é que o repositório da diciplina não se trata de um produto de software, e essa licença não é recomendada para software. O segundo motivo seria que o site é composto por dados e materias educacionais, que precisam ser acessados e manuseados pelos alunos da disciplina, o que é devidamente abrangido pela licença utilizada, pois ela permite a cópia, distribuição, redistribuição e remanuseio do material disponibilizado, desde que sejam respeitados alguns requisitos, sendo eles: os devidos créditos dos autores do site devem ser mantidos, além de indicar qualquer tipo de modificação realizada no mesmo, se realizadas. Além disso, não se pode adicionar nenhum termo legal que restrinja outros de fazer qualquer coisa que a licença permita.
- Encontre Roadmaps em pelo menos 3 projetos de software livre. Descreva os planos de curto e longo prazo desse projeto:
- Roadmap do projeto VSCode:
- O projeto tem principais objetivos a longo prazo:
- Virar o melhor editor para pessoas que dependem de funcionalidades de acessibilidade;
- performance, escalabilidade, manutenção e securança;
- focar nas funcionalidades mais requisitadas por usuários;
- melhorar funcionalidades já implementadas; e
- habilitar, de forma responsável, extensões que tem requisitos de extensibilidade mais amplos.
- Quanto aos objetivos à curto prazo, existem uma grande quantidade de metas a serem cumpridas, entre elas:
- Facilitar a identificação de extensões que impactam negativamente a performance do VS Code;
- Criar uma extensão para Pull Request do GitHub;
- Continuar a refinar e melhorar o protocolo de serviço de linguagem com o apoio da comunidade; e
- Melhorar o suporte WSL.
- O projeto tem principais objetivos a longo prazo:
- Roadmap do projeto Polymer:
- O projeto tem principais objetivos a longo prazo:
- Componentes web se tornando cada vez mais convencionais, suportados nativamente em 3 dos 4 principais browsers da atualidade;
- tornar o desenvolvimento de componentes web mais simples e leve; e
- ajudar a moldar e defender uma nova geração de padrões relacionados, que irão trazer melhorias para styling, theming, templating, loading etc.
- Quanto aos objetivos à curto prazo, existem uma grande quantidade de metas a serem cumpridas, entre elas:
- CSS Shadow Parts irão facilitar a estilizar and pôr temas em componentes web;
- Continuar mantendo e melhorando os Polyfills; e
- HTML Template Instantiation, que visa prover suporte "built-in" aprimorado para criação e atualização dinamica de instâncias de templates HTML.
- O projeto tem principais objetivos a longo prazo:
- Roadmap do projeto Gutenberg:
- O projeto tem principais objetivos a longo prazo:
- Continuar a desenvolver mecanismos para gerenciar variações de estilos de blocos e outras soluções de estilização;
- propor uma estratégia para carregar bloco de código apenas quando necessário no editor, sem sobrecarregar o desenvolvedor ou interromper a experiência do usuário
- melhorar a API "transform" para permitir casos de uso avançados.
- Quanto aos objetivos à curto prazo, existem uma grande quantidade de metas a serem cumpridas, entre elas:
- Definir um ponto de entrada para identificação de blocos;
- permitir edição modular (sensível ao contexto) sem dependencias de post objects; e
- construir suporte para areas de blocos que caem fora do conteúdo.
- O projeto tem principais objetivos a longo prazo:
- Roadmap do projeto VSCode:
- Selecione 5 projetos de software livre famosos (pelo menos 1000 estrelas) e coloque os links para seus respectivos site, repositório de código fonte, bug tracking e ferramentas de comunicação:
- Projeto Phoenix:
- Site
- Repositório de código fonte
- Bug Tracking
- Ferramentas de comunicação: Slack, Twitter, Forum, Google Groups e canal #elixir-lang no IRC.
- Projeto Vue.js:
- Site
- Repositório de código fonte
- Bug Tracking
- Ferramentas de comunicação: Discord e Forum.
- Projeto Angular:
- Site
- Repositório de código fonte
- Bug Tracking
- Ferramentas de comunicação:Twitter
- Projeto Adonis:
- Site
- Repositório de código fonte
- Bug Tracking
- Ferramentas de comunicação: Discord, Forum e Twitter
- Projeto Nuxt:
- Site
- Repositório de código fonte
- Bug Tracking
- Ferramentas de comunicação: Comunidade, Discord e Twitter
- Projeto Phoenix:
- Encontre 3 exemplos de pedidos de feature ou resolução de bugs que foram implementadas, coloque o link para elas e faça um relatório crítico sobre o fluxo: era bug ou feature? foi iniciado por um usuário ou desenvolvedor? os desenvolvedores foram reticentes ou abertos para a descrição realizada? houve pedido de mais informações? foi resolvido rapidamente ou demorou? houve algum impecilho técnico ou social para essa resolução? quem resolveu o problema foi um desenvolvedor experiente, novato ou algum usuário?
- Issue 5687 do Nuxt.js:
- A issue solucionada era um bug, foi iniciado por um desenvolvedor, os desenvolvedores foram abertos para a descrição, sem necessitar de mais informações, e foi solucionado sem problemas de forma rápida, em menos de um dia, pela própria pessoa que abriu a issue, um desenvolvedor novato.
- Issue 1046 do Bulma:
- A issue solucionada era um bug, foi iniciado por um usuário, os desenvolvedores foram abertos para a descrição, sem necessitar de mais informações, e foi solucionado com uma certa demora, em aproximadamente 20 dias, por um desenvolvedor experiente.
- Issue 9361 do Vue:
- A issue solucionada era uma feature, foi iniciado por um usuário, os desenvolvedores foram abertos para a descrição, foram abertas algumas discussões sobre como implementa-las, e foi solucionado de forma rapida, em apenas 1 dia, por um desenvolvedores experientes.
- Issue 5687 do Nuxt.js:
- Explique o são Linters e qual a sua importância ?
- Linters são ferramentas que identificam erros de código fonte, baseados em um determinado padrão de construção de código. Essas ferramentas são importantes para ajudar a manter o código de acordo com o padrão estabelecido, mais limpo e com maior manutenabilidade.
- Indique um guia de boas práticas de codificação em linguagem de programação (exceto: Python, PHP e Java):
- O JavaScript best practices é um guia de boas práticas de JavaScript disponibilizado pela W3C, que é uma organização de padronização da World Wide Web.
- Indique um guia de boas práticas de codificação em frameworks de linguagem de programação:
- O Vue Style Guide é um guia de boas práticas para Vue.js, servindo como referência para evitar erros e codificações fora de padrão.
- Explique o são métodos ágeis e qual a sua importância no processo de desenvolvimento de softwares ?
- Métodos ágeis são metodologias de desenvolvimento que adotam o conceito de metodologia ágil, sendo este uma filosofia originada do manifesto ágil, que foi desenvolvido como solução aos problemas e prejuízos apresentados pelas práticas de engenharia de software extremamente complexas e custosas da década de 90, como o modelo cascata, por exemplo. Os métodos ágeis seguem os valores e princípios do manifesto ágil, sendo voltados para projetos menores de desenvolvimento, altamente adaptáveis à mudanças e entregando software funcional continuamente. Alguns exemplos desses métodos são: XP (Extreme Programming); Scrum; KANBAN; TDD e BDD.
- Procure um projeto e indique um commit que indique trabalho feito em par, ou seja, um commit que tenha multiplos autores:
- O seguinte commit é de autoria de duas pessoas, o que indica que elas trabalharam utilizando a técnica de pairing programming.
- Procure um prjeto que utilize kanban e coloque o link para a utilização desse método:
- O projeto vue.js utiliza o KANBAN para gerenciar as tasks de acordo com o release documentado em seu roadmap.
- Por que utilizar testes unitários?
- Os testes unitários são importantes para dar segurança e garantia de qualidade ao que está sendo implementado. Ao utilizar esses testes o programador pode verificar o funcionamento do código, garantir respostas adequadas para as funcionalidades implementadas, bem como verificar se as alterações efetuadas no código não produzem erros e inconsistências no sistema como um todo, incluindo testes de outras funcionalidades. Em um contexto de software livre, os testes unitários dão credibilidade à aceitação de pull requests.
- Quais vantagens de utilizar integração contínua?
- Ao utilizar integração contínua no projeto, há garantia de que bugs serão encontrados e investigados de forma mais regular, melhor qualidade no software desenvolvido devido ao processo de planejamento mais frequente de atualizações providas, além de uma redução no intervalo de uma atualização de software para outra.
- Adicionar um serviço de integração contínua (Travis) em um projeto pessoal.
- O projeto escolhido foi Administer-panel e o commit que indica o uso do travis está aqui
- Explique detalhadamente qual é a diferença entre as métricas "truck factor" e "heroes":
- O "Truck Factor" é um termo criado para determinar quantos desenvolvedores contribuintes para um projeto precisam ser "atropelados" para esse projeto ser considerado incapacitado (ou morrer). Ou seja, tem relação com a concentração de informação e capacidade de contribuição nas mãos de poucas pessoas, sendo estas as que mantém o projeto em pé, dificultando a substituição de desenvolvedores em um projeto. "Heroes", por outro lado, é uma métrica que diz respeito, estatisticamente, à distribuição desigual de contribuições por pessoas. Ou seja, muito commit sendo realizado por uma porcentagem pequena de contribuidores. No caso dos "heroes", não necessariamente eu tenho concentração de informação em poucas pessoas, portanto não causando um possível gargalo caso haja a necessidade de substituir desenvolvedores.
- Cite pelo menos três métricas que não são indicadas para avaliar a saúde de um projeto de software livre:
- Quasi contributors, Breaks e Heroes, devido ao fato de que são métricas baseadas puramente em commits, o que pode não refletir necessariamente o projeto em questão, afinal, software livre vai muito além de código.
- Explique porque os meios para medir qualidade de um projeto de software "tradicional" tem pouca aderência em projetos de software livre?
- Em geral os métodos "tradicionais" de medição de qualidade tem pouca aderência em projetos de software livre, uma vez que esses projetos destinam seu dinheiro para fins que não visam a melhoria de processo de forma tracicional, mas sim para o crescimento do projeto e de sua visibilidade dentro da própria comunidade, bem como para comunidades externas (investimento em desenvolvedores, eventos da comunidade, reuniões presenciais de projetos, entre outros), além de que selos de qualidade são procurados quando se deseja vender software privados ou serviços de empresas que são destinados ao ganho monetário, o que vai de encontro com a filosofia de software livre. Além disso, os métodos "tradicionais" podem encontrar dificuldade em avaliar os processo que são realizados por um projeto de software livre, uma vez que não se pode observar facilmente os métodos de coleta, produção e validação dos processos de produção de software, fato que dificulta uma sólida avaliação do processo de acordo com os critérios estabelecidos nos guias.
- Informar o LOC de pelo menos 1 projeto usando a ferramenta cloc
- Informar as métricas de Chidamber-Kemerer de pelo menos 1 projeto usando a ferramenta ck
- As informaçoes geradas pelo ck foram executadas no projeto The Algorithms - Java e estao disponíveis no seguinte link
- Proponha pelo menos três métricas para avaliar um projeto de software livre.
- A métrica de Complexidade Ciclomática, que verifica o número independente de caminhos no código fonte; A métrica CK, que é voltada para orientaçao de objetos (número de filhos, profundidade em herança, acoplamento de objetos etc); e métrica relacionada a presença de "heroes" no projeto, verificando a dificuldade de novos commiters a contribuirem para o projeto.