Laboratório de Desenho e Teste de Software
Áreas Científicas |
Classificação |
Área Científica |
OFICIAL |
Engenharia Informática e Computação |
Ocorrência: 2023/2024 - 1S
Ciclos de Estudo/Cursos
Sigla |
Nº de Estudantes |
Plano de Estudos |
Anos Curriculares |
Créditos UCN |
Créditos ECTS |
Horas de Contacto |
Horas Totais |
L.EIC |
356 |
Plano Oficial |
2 |
- |
6 |
52 |
162 |
Língua de trabalho
Português - Suitable for English-speaking students
Objetivos
Pretende-se, nesta unidade curricular, que os alunos desenvolvam competências no desenho de aplicações usando o paradigma orientado a objetos. Pretende-se que os estudantes que obtenham aprovação à unidade curricular, consigam:
- Usar o Git como ferramenta de controlo de versões;
- Usar a linguagem Java como linguagem orientada a objetos;
- Desenhar testes unitários usando JUnit;
- Aplicar os princípios SOLID no desenho de aplicações e entender a sua importância;
- Aplicar design patterns para resolver problemas no desenho de aplicações;
- Identificar code smells em código orientado a objetos;
- Usar técnicas de refactoring para melhorar atributos não-funcionais e resolver code smells;
- Aplicar o padrão arquitetural MVC no desenho de aplicações event-driven;
- Patterns of Enterprise Applications
Resultados de aprendizagem e competências
- Saber desenvolver (desenhar, codificar, documentar, analisar, testar e manter) programas orientados por objetos com Java e UML;
- Saber utilizar ferramentas de suporte às várias fases do desenvolvimento e manutenção de programas;
- Ser capaz de conceber e desenhar software modular, flexível e fácil de manter e evoluir;
- Ser capaz de reutilizar padrões e frameworks;
- Compreender a importância dos testes durante o desenvolvimento de software.
Modo de trabalho
Presencial
Pré-requisitos (conhecimentos prévios) e co-requisitos (conhecimentos simultâneos)
Conhecimentos de programação, sendo uma mais valia ter conhecimentos de programação orientada por objetos em C++.
Programa
- Uma breve introdução ao Git: repositórios locais, remotes, branches e workflows;
- Gestão de dependências usando Gradle;
- A linguagem Java: Tipos, literais e variáveis; Estruturas de controlo;Classes e objetos; Coleções; Tipos genéricos; Threads e sincronização; Input e output; Interfaces gráficas usando Swing;
- Princípios da programação orientada a objetos: abstração de dados, polimorfismo, herança e encapsulamento; utilização da composição em vez de herança como mecanismo para atingir polimorfismo;
- Princípios SOLID: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation e Dependency Inversion;
- Testes unitários usando JUnit: Mocks e Stubs usando Mockito; Cobertura e mutation-testing;
- Diagramas UML: diagramas de classes, sequência e comunicação;
- Code smells e técnicas de refactoring;
- Padrões de desenho: Factory-Method, Command, Composite, Observer, Strategy, Abstract Factory, State, Adapter, Decorator e Singleton;
- Model-View-Controller como padrão de arquitetura;
- Patterns of Enterprise Architecture.
Bibliografia Obrigatória
Bruce Eckel;
Thinking in Java. ISBN: 0-13-027363-5 (4ª edição ou superior)
Russ Miles and Kim Hamilton;
Learning UML 2.0. ISBN: 978-0-596-00982-3
Bibliografia Complementar
Kent Beck;
Test-driven development. ISBN: 978-0-32-114653-3
Erich Gamma... [et al.];
Design patterns. ISBN: 0-201-63361-2
Martin Fowler ; with contributions by kent Beck... [et al.];
Refactoring. ISBN: 0-201-48567-2
Robert C. Martin;
Agile Software Development: Principles, Patterns and Practices, Prentice-Hall, 2003. ISBN: 0-13-597444-5
Joost Visser;
Building Maintainable Software, O'Reilly, 2015. ISBN: 978-1-491-94434-9
Métodos de ensino e atividades de aprendizagem
Aulas teóricas de exposição e discussão dos tópicos programáticos;
Aulas práticas em laboratório:
- Na primeira parte (7 semanas) os alunos irão resolver exercícios que cobrem os seguintes conteúdos programáticos: Git, Java, testes unitários, princípios SOLID, design patterns, code smells e refactoring;
- Na segunda parte (6 semanas) os alunos irão desenvolver um pequeno projeto integrador.
Software
IntelliJ
Tipo de avaliação
Avaliação distribuída sem exame final
Componentes de Avaliação
Designação |
Peso (%) |
Participação presencial |
5,00 |
Teste |
40,00 |
Trabalho laboratorial |
55,00 |
Total: |
100,00 |
Componentes de Ocupação
Designação |
Tempo (Horas) |
Estudo autónomo |
30,00 |
Frequência das aulas |
70,00 |
Trabalho laboratorial |
62,00 |
Total: |
162,00 |
Obtenção de frequência
Não exceder o número limite de faltas nas aulas teórico-práticas. Para obtenção de frequência, é necessário ainda obter uma classificação mínima de 40% no projeto.
Fórmula de cálculo da classificação final
Fórmula de avaliação:
- 5% - participação nas aulas práticas;
- 55% - realização do projecto integrado (grupos de 3 elementos);
- 40% (20% + 20%) - duas provas individuais de escolha múltipla em computador.
Todas as componentes têm uma classificação mínima de 40%.
A classificação do projeto é composta por:
- 10% - relatório intermédio
- 30% - relatório final
- 60% - produto desenvolvido
De notar que o relatório deve fundamentar o contributo individual de cada elemento no projeto.
A época de recurso inclui apenas as componentes das duas provas individuais de escolha múltipla.
Avaliação especial (TE, DA, ...)
Todas as componentes são obrigatórias para todos os estudantes. Os alunos dispensados de frequência às aulas (trabalhadores estudantes, etc.), devem apresentar os trabalhos nas mesmas datas dos restantes estudantes e apresentar regularmente aos docentes a evolução dos trabalhos.
Melhoria de classificação
Os estudantes podem melhorar a classificação obtida nas duas provas individuais de escolha múltipla em computador nesta edição.
Para melhorar a nota do projeto, é necessário a frequência da unidade curricular no ano seguinte.