Contribuição
Neste projeto você deve realizar uma contribuição de qualidade para um projeto de código aberto hospedado no GitHub ou no GitLab.
O objetivo principal é produzir e submeter uma modificação ou extensão não trivial para um projeto de código aberto de modo a maximizar as chances do código ser aceito pelos mantenedores do projeto. Se você demonstrar que o código foi incorporado ao código do projeto até a data de entrega desta avaliação, você receberá um bônus de 10% na média final.
Seleção do Projeto
Você deve selecionar um projeto de código aberto e implementar uma ou mais correções de problemas (um bug reportado na seção de issues do projeto) ou implementar uma extensão (uma nova funcionalidade) para o projeto. Você tem liberdade para escolher qualquer projeto, independentemente da linguagem de programação em que ele foi escrito, desde que o projeto satisfaça os seguintes critérios:
- o projeto deve estar ativo e ter muitas contribuições. Um projeto inativo ou com pouco suporte terá uma comunidade de desenvolvedores que não poderá te ajudar a implementar a contribuição. Você não pode escolher um projeto seu ou de um outro aluno da USP, mas pode escolher um projeto que você eventualmente já tenha contribuído antes;
- você deve escolher a tarefa a ser implementada (correção de problemas ou extensão) de um relato de erro (bug report), pedido de nova funcionalidade (feature request) listados em um banco de dados ou fórum de discussão públicos, seguindo qualquer que seja o protocolo que o projeto utilize para comunicar e relatar defeitos no código (GitHub Issues, por exemplo). Você não pode estar envolvido com a criação do bug report (ou seja, você não pode trabalhar em um bug que você mesmo tenha relatado). Escolha uma necessidade do projeto que já seja conhecida e tenha sido documentada
- a tarefa deve envolver a modificação do código-fonte do projeto. Tarefas restritas à documentação ou discussões sobre algum aspecto do projeto não são válidas para este projeto
- você pode escolher uma tarefa complicada ou várias pequenas tarefas.
Implementação da Tarefa
- realizar ações para entender melhor o código do projeto selecionado. Você pode achar útil analisar o código com o uso de diagramas (especialmente se gerados automaticamente, como vimos que a gema railroady faz para projetos Rails)
- submeter contribuição para o projeto. Crie toda a documentação necessária para permitir que o seu código seja aceito pelos mantenedores do projeto. Novos contribuidores raramente têm permissão de commit para o repositório master de um projeto, então a contribuição talvez envolva a criação de um pull request, envio de e-mails para os líderes do projeto, ou posts em fóruns de discussão.
Relatório Final
- informações sobre o projeto selecionado: uma breve descrição do projeto de código aberto com o qual você contribuiu (1 ou 2 parágrafos)
- contexto do projeto: uma análise do contexto do projeto e seu "business model". Isso pode incluir uma breve história do projeto, outros projetos abertos e fechados relacionados a esse projeto, ou uma discussão sobre as motivações dos desenvolvedores para o desenvolvimento do projeto
- governança do projeto: descreva o processo e ferramentas que o projeto usa para se comunicar e coordenar os contribuidores. Esses processos são formais ou informais? Forneça uma descrição (talvez com um diagrama) do processo de aceitação que o projeto utiliza para contribuições como a que você realizou
- descrição da tarefa (uma para cada tarefa): uma descrição da tarefa que você implementou e uma descrição de alto nível da sua implementação
- artefatos submetidos ao projeto: evidência de código, documentação, casos de testes e/ou outros artefatos que você produziu para a tarefa e alguma evidência de que a contribuição foi realmente enviada para o projeto. Você deve obrigatoriamente incluir links públicos que confirmem o envio da contribuição para o projeto (links para o repositório, lista de e-mails, pull requests, etc.). Cada link deve vir acompanhado de uma breve descrição sobre ele
- estratégia e evidência de QA: você deve elencar e justificar quais ações tomou para garantir a qualidade do código que você contribuiu. Além disso, você deve apresentar evidências das ações que tomou para garantir a qualidade do código. Exemplos dessas evidências incluem código de teste, resultado dos testes, comentários dos revisores do código, relatórios de ferramentas de avaliação de qualidade de código e de cobertura de testes, links ou screenshots para uma plataforma de integração contínua, etc.
- sumário da experiência: relate a sua experiência como contribuidor de um projeto de código aberto. Diga o que você aprendeu ao interagir com outros desenvolvedores, ao tentar entender o código do projeto e ao desenvolver novo código para um projeto existente. Diga se a comunidade do projeto foi receptiva a sua contribuição ou se a cultura deles atrapalhou o envio. Relate suas interações com os demais membros do projeto. Destaque os comentários mais úteis (e talvez inúteis) que você recebeu dos demais membros. Descreva em detalhes também quais cuidados de engenharia de software o projeto aplica para garantir a qualidade do código do projeto. Descreva em detalhes quais cuidados você tomou para que o código da sua contribuição fosse de qualidade e não quebrasse a base de código existente. Critique o código do projeto com o qual você contribuiu: ele foi fácil de entender e evoluir? Ele possui um conjunto suficiente de testes? Quais as maiores dificuldades encontradas?