Engenharia de Software
Objetivos
Esta UC de 9 ECTS tem por objectivo dotar os alunos de competências para analisar sistemas complexos existentes, e fazê-los evoluir usando metodologias e ferramentas tipicamente usadas na indústria. Assim, o aluno deve:
- Compreender os princípios e conceitos da Engenharia de Software; requisitos de sistema; modelação usando um conjunto principal de UML; padrões e estilos arquitetónicos; DevOps; Concepção e programação de sistemas de software extensíveis; testar e evoluir o código orientado a objetos, analisar o código orientado a objetos e derivar os modelos correspondentes; Padrões de design; frameworks e APIs.
- Conhecer processos de engenharia de software; um conjunto principal de UML, padrões e estilos arquitetónicos; padrões de desenho; DevOps; técnicas de engenharia reversa e directa.
- Ser capaz de evoluir um sistema existente de dimensão não trivial usando técnicas sistemáticas de engenharia reversa e direta; Usar padrões, estruturas e APIs.
Caracterização geral
Código
12660
Créditos
9.0
Professor responsável
Miguel Carlos Pacheco Afonso Goulão
Horas
Semanais - 5
Totais - 70
Idioma de ensino
Português
Pré-requisitos
A disponibilizar brevemente
Bibliografia
Principal:
Sommerville I., Software Engineering, Pearson, 10th edition, 2015
Arlow J. and Neustadt I., UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design (2nd Edition), Addison-Wesley Professional; 2 ed, 2005
Adicional:
Lanza M.; Marinescu R. Object-Oriented Metrics in Practice. Springer 2006.
Bass L. et al, "Software Architecture in Practice", 4th ed, Addison-Wesley, 2021
Gamma E. et al, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995
Bass L. et al, DevOps: A Software Architect''s Perspective, Pearson Education, 2015
Demeyer S., Mens T., Software Evolution, Springer, 2008
Aniche, M. Effective Software Testing, Manning, 2022
Método de ensino
3 horas semanais teóricas para apresentação dos conceitos, princípios e técnicas de apoio ao desenvolvimento e evolução de software. A matéria, ilustrada com exemplos de aplicação, e suportada por diapositivos e pela utilização do ambiente de desenvolvimento no computador do docente.
2 horas semanais de aulas práticas em laboratório onde os alunos colocam em prática as teorias e técnicas ensinadas das aulas teóricas anteriores. Os alunos podem esclarecer dúvidas durante as aulas ou nos horários de atendimento.
A avaliação tem duas componentes: um projeto e dois testes. O projeto dá frequência, por isso a nota mínima é 9.5 valores, e vale 50% da nota final. A média dos dois testes terá de ser, no mínimo, de 9.5 valores, para obter aprovação.
Método de avaliação
Componentes da Avaliação
A avaliação é constituída por duas componentes: a componente laboratorial e a componente teórico-prática. Todos os elementos de avaliação terão uma escala de 0 a 20 valores, arredondados às décimas.
Componente Laboratorial e Frequência
A componente laboratorial é composta por um projecto e por vários desafios, nuns casos individuais, noutros em grupos criados para o desafio em causa.
O projecto é realizado realizado em grupos de 6 alunos ao longo do semestre, existindo várias milestones que os grupos de alunos deverão cumprir, uma entrega final e uma discussão oral obrigatória e individual, para todos os elementos do grupo.
Os desafios vão sendo propostos ao longo das aulas práticas, tendo normalmente uma curta duração na sua resolução. As notas dos desafios, mesmo quando realizados em grupo, são sempre individuais.
A nota da Componente Laboratorial (CL) tem um peso de 50% na nota final e está estruturada do seguinte modo:
- 5% destinados à participação nas aulas práticas e resolução dos desafios que nelas são propostos;
- 45% destinados ao projecto, resultantes da avaliação do projecto
Para obter frequência, um aluno tem de obter uma nota individual do projecto >= 9.5
Componente Teórico-Prática
A componente teórico-prática é composta por dois testes (no período de aulas) ou por um exame (na Época de Recurso). As três provas são presenciais, individuais, escritas e sem consulta. Não são permitidos dispositivos eletrónicos (e.g. calculadoras, telemóveis, tablets, smartwatches e portáteis).
Não há pré-inscrição nos testes.
Cada teste (T1 e T2) tem um peso de 25% da nota final. Em época normal, a Compontente Teórico-Prática (TP) é:
CTP = (T1 + T2)/2
Em época de recurso, a nota dos dois testes é substituída pela nota do exame de recurso (R).
CTP = R
Em ambos os casos, o peso de CTP na nota final é de 50%.
Nota final
A nota final (F) dos alunos com frequência é:
- F = CTP, se CTP < 9.5
- F = (CTP + CL)/2, se CTP >= 9.5
Todas as notas intermédias são arredondadas às décimas.
A nota final F é arredondada às unidades.
Conteúdo
Engenharia de software: objetivos, princípios, ética, responsabilidades profissionais.
Gestão de projetos de software. Processos de software (e.g. DevOps). Metodologias de desenvolvimento de software. Engenharia de requisitos: tipos e técnicas de requisitos. Arquitetura de software: conceitos, padrões e estilos. Análise e desenho orientados a objetos, usando um subconjunto CORE do UML (diagramas de classes, diagramas de pacotes, máquinas de estado, diagrama de sequência). Implementação usando orientação a objetos (e.g. Java e C#). Verificação e validação: revisões, testes unitários, de integração, aceitação e carga. Reutilização planeada e riscos. Tecnologias de suporte: - Engenharia reversa - Especificação e modelação com UML - Implementação e evolução com suporte de IDEs e sistemas de controlo de versões - Avaliação de complexidade do código - Reutilização com frameworks e APIs