Baixe o app para aproveitar ainda mais
Prévia do material em texto
3/16/2023 1 Projeto e Construção de Software INF1028 Alessandro Garcia e Daniel Coutinho afgarcia@inf.puc-rio.br e dcoutinho@inf.puc-rio.br Avisos iniciais • Início das aulas as 15:15, salvo aviso com horário diferente • Questionário a ser preenchido e enviado até 23/3 pelo Moodle afgarcia@inf.puc-rio.br e dcoutinho@inf.puc-rio.br • Ingresso no grupo whatsapp • avisos e dúvidas gerais • Moddle (EAD): slides disponíveis na próxima semana • Presença em sala de aula é obrigatória afgarcia@inf.puc-rio.br 1 3/16/2023 2 Hoje... ... motivação e objetivos da disciplina ... etapas e dinâmicas gerais da disciplina ... contextualização do que será o projeto supervisionado 2 Contexto e Motivação • projetos de software com sucesso • requer o envolvimento colaborativo e habilidades de trabalho em equipe • aprendizado auto-didata de novas APIs, tecnologias e ferramentas • projetos possuem longa vida • três tipos de mudanças mais frequentes: • adição de funcionalidades • re-estruturação de partes do Código (refatoração) • correções de novos “bugs” observados • constante manutenção e evolução de código de outros desenvolvedores • projetos “open-source”, projetos “closed-source” com mudanças nas equipes 3 3/16/2023 3 Manutenção e Evolução de Software Raramente (ou nunca) são cobertas em projetos de disciplinas anteriores Permitem explorar técnicas, novas e/ou assimiladas em disciplinas anteriores, em conjunto sem ter que construir um sistema “do zero” na prática, gastamos muito mais tempo mantendo e evoluindo sistemas do que desenvolvendo “do zero” Encorajam a sistematização de trabalho colaborativo 4 Objetivos • Consolidar o uso de conceitos e técnicas de disciplinas anteriores relacionadas à desenvolvimento de software • POO, Testes e Medidas, Banco de Dados, Modular, etc… • Exercitar e entender a importância de outras técnicas, não exploradas em disciplinas anteriores • Explorar e entender a importância de habilidades “leves”, além das habilidades técnicas já exercitadas ao longo do curso 5 3/16/2023 4 Desafios exclusivos da manutenção e evolução? • design (desenho) é incremental e não da forma “big-bang” • mundanças são restringidas por uma arquitetura e/ou desenho pré- definidos • novas decisões devem não violar as restrições de decisões prévias • manutenedor frequentemente tem pouco ou nenhum conhecimento • “maus cheiros” começam a surgir no código fonte • refatorações aumentam na medida que software evolui • controle de versões afgarcia@inf.puc-rio.br 6 Projeto Supervisionado • Manutenção e evolução de projeto “open-source”, que permita: • entender o domínio, a arquitetura e o software existente • avaliar a qualidade do código do projeto usando análise estática • refatorar partes do código • incluir uma ou mais novas funcionalidades • avaliar a qualidade dos testes existentes… • e, se necessário, incrementar a massa de teste, antes das mudanças • corrigir “bugs” se necessário 7 3/16/2023 5 Restrições do Projeto • Escolha de um projeto “open-source” escrito em [Java, Python, *] • projeto que tenha uma comunidade relativamente grande de desenvolvedores • hospedado no Github • Grupos de 3 membros • professor irá escolher a composição dos grupos • no mundo real, na maioria das vezes, não escolhemos com quem trabalhamos • serão utilizadas as informações que vocês fornecerem no questionário 8 Vantagens da Filosofia “Open-Source” no…. • … projeto supervisionado da disciplina: • interação e feedback real dos desenvolvedores • reconhecimento de dificuldades reais na proposição e resolução de tarefas (“issues”) • trabalho em conjunto na resolução de tarefas com apoio do Github afgarcia@inf.puc-rio.br 9 3/16/2023 6 Lista de Projetos Candidatos Lista: próxima semana – apresentação sucinta dos critérios de escolha de projetos e projetos candidatos 10 Práticas de Manutenção e Evolução de Software Projetos de código abertos: alternativas e análises dos candidatos Controle de versões e conceitos básicos em Git Git: Instalação e commandos avançados Introdução à refatoração Modelo “open-source” de desenvolvimento (centrado em Github) repositórios, “issues“, contribuições, cópias, forks, pull requests, rebases, revisões Contribuindo e colaborando em projetos de código aberto quais as instruções e materiais devem estar atentos ATIVIDADE 1: APRESENTAÇÃO INICIAL DOS GRUPOS – seleção e análise preliminar dos projetos (~ 2a. semana de abril; após o feriado) 11 3/16/2023 7 Práticas de Manutenção e Evolução de Software O que são anomalias de código e como revelá-las? Anomalias de código, design e arquitetural anomalias de manutenbilidade, segurança, desempenho e robustez Analisadores estáticos (a.k.a., linters) e ferramentas lições aprendidas como escolher, configurar e criar regras de detecção (ex., PMD) Refatoração de software: tipos e boas práticas ATIVIDADE 2: Análise de anomalias e refatorações nos projetos 12 Práticas de Manutenção e Evolução de Software Aulas de acompanhamento dos projetos ATIVIDADES 3 e 4: Escolha, defesa e implementação das refatorações a serem realizadas pelo grupo MAVEN - alternativo Arquitetura REST – alternativo ATIVIDADE 5: Apresentação da escolha e defesa das “features” ATIVIDADE 6: Apresentação final dos resultados da implementação das “features” 13 3/16/2023 8 Passos com relação ao projeto Priorizem escolha de projeto que: esteja na lista fornecida pois são projetos populares, possibilitando interação e feedback de desenvolvedores (core e periféricos) exceção terá que dar argumentos convincentes aos professores exemplo 1: projeto é em um domínio que realmente querem muito conhecer exemplo 2: aprender alguma(s) tecnologia nova ou disruptiva Analise das “issues” (tarefas) em aberto 14 “Issues” Pelo menos duas adições de funcionalidade Pelo menos seis refatorações uso de análise estática e inspeção manual sobre a qualidade do Código aplicação de refatoração 15 3/16/2023 9 Avaliação Projeto supervisionado participação através de contribuições ao projeto identificação de tarefas (“issues”) programação de contribuições em código novas funcionalidades, novos testes, … revisão de contribuições dos seus pares apresentações ao longo do período propostas andamento do projeto compartilhar conhecimento adquirido feedback e aprovação de contribuições pelos desenvolvedores reais do projeto 16 Cálculo da média final Caso (1): Se G1 e G2 ≥ 3.0, então Média final = (G1+G2)/2 Caso (2): Se G1 < 3.0, então: Média final = (G1*2)+G2/3 Se G2 < 3.0, então: Média final = (G2*2)+G1/3 APROVAÇÃO: em qualquer um dos casos acima, se Média final ≥ 5.0, então o aluno está aprovado (AP) na disciplina 17 3/16/2023 10 Tarefas do G1 e G2 G1 3 atividades e respectivas apresentações participação em sala de aula “pull request” aceita: +1.0 na nota G2 3 atividades e respectivas apresentações participação em sala de aula “pull request” aceita: +1.0 na nota 18 Apresentação 1 Detalhamento dos projetos candidatos e a escolha do grupo projeto escolhido arquitetura do software módulo(s) escolhido(s) tarefas (“issues”) existentes que o grupo considera interessante e que podem contribuir quais APIs e tecnologias conhecidas e novas que o projeto requer estudo? por que estão interessados em exercitar e conhecer estas novas tecnologias? Outras diretrizes serão enviadas no momento oportuno 19 3/16/2023 11 Disciplina Professores Alessandro Garcia (coordenador) Daniel Coutinho 20 Projeto e Construção de Software INF1028 Alessandro Garcia e Daniel Coutinho afgarcia@inf.puc-rio.br e dcoutinho@inf.puc-rio.br
Compartilhar