Buscar

aula_1_intro

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

Continue navegando