Engenharia de Software
Código
0105995Créditos ECTS
6Objetivos
- A. Aplicar processos, métodos e práticas de Engenharia de Software ao longo do ciclo de vida, relacionando as principais atividades e artefactos produzidos.
- B. Selecionar e aplicar metodologias de desenvolvimento e técnicas de planeamento e acompanhamento de projetos, considerando equipas, riscos e qualidade.
- C. Analisar requisitos e relacioná-los com a arquitetura, o desenho, a construção, a verificação e a validação de soluções de software.
- D. Conceber e avaliar soluções de software, integrando conhecimentos adquiridos noutras unidades curriculares e fundamentando decisões técnicas e organizacionais, considerando fatores humanos, qualidade, sustentabilidade, ética e responsabilidade profissional.
Programa
- Introdução à Engenharia de Software
1.1 Conceitos, âmbito e desafios
1.2 Ciclo de vida, atividades e processos
1.3 Ética, sustentabilidade e responsabilidade profissional - Metodologias de desenvolvimento
2.1 Clássicas
2.2 Ágeis
2.3 Híbridas - Gestão de projetos
3.1 Planeamento, estimativa e acompanhamento
3.2 Equipas, riscos e qualidade - Engenharia de requisitos
4.1 Elicitação, análise e priorização
4.2 Especificação, validação, gestão e rastreabilidade - Arquitetura e desenho
5.1 Princípios, vistas, estilos e padrões
5.2 Documentação, decisões e avaliação - Construção e configuração
6.1 Boas práticas, revisão, refatorização e complexidade
6.2 Versões, configuração, integração contínua e alterações - Verificação, validação e qualidade
7.1 Estratégias, níveis e tipos de teste
7.2 TDD, automatização e métricas - Entrega, operação e evolução
8.1 Deployment, release e monitorização
8.2 Manutenção, evolução e dívida técnica
Métodos de Ensino
Ao longo da unidade curricular são utilizadas metodologias de ensino-aprendizagem diversificadas, combinando exposição orientada dos fundamentos com análise de casos, resolução de problemas e aprendizagem baseada em projeto.
Nas aulas teóricas são apresentados e discutidos conceitos, processos, metodologias e práticas de Engenharia de Software, recorrendo a exemplos, estudos de caso, demonstrações e resolução orientada de problemas. Estas atividades promovem a aplicação e análise dos conteúdos, a argumentação técnica e a fundamentação de decisões.
Nas aulas práticas laboratoriais são analisados casos, resolvidos problemas e discutidas alternativas e decisões relacionadas com as diferentes atividades da Engenharia de Software. Estas aulas incluem ainda momentos de orientação e acompanhamento do projeto, nos quais as equipas apresentam o trabalho realizado, discutem dificuldades e decisões, recebem feedback e planeiam a evolução da solução. Deste modo, as aulas práticas promovem a aplicação dos conhecimentos, a análise crítica e a tomada fundamentada de decisões, sem se destinarem exclusivamente ao desenvolvimento do projeto.
O projeto é desenvolvido predominantemente no tempo de estudo autónomo, em equipas de quatro a cinco estudantes, tendo por objeto uma solução de software para um problema realista. Evolui de forma iterativa e incremental, articulando visão e âmbito, requisitos, planeamento, arquitetura e desenho, construção e configuração, verificação e validação, entrega e evolução. As equipas selecionam metodologias adequadas ao contexto, planeiam e acompanham o trabalho, gerem riscos e qualidade, produzem artefactos e fundamentam as decisões tomadas, integrando conhecimentos adquiridos noutras unidades curriculares.
As horas de contacto assíncronas decorrem através do Moodle e incluem atividades orientadas de preparação e consolidação, nomeadamente leituras, recursos multimédia, análise de casos, resolução de problemas e preparação de tarefas relacionadas com o projeto. A aprendizagem desenvolvida nestas atividades é retomada presencialmente através de pequenos quizzes, análise de casos e exercícios individuais de curta duração.
O projeto é acompanhado através de entregas faseadas, demonstrações e feedback formativo, permitindo rever decisões e melhorar progressivamente a solução. Sempre que adequado, são promovidos momentos de discussão sobre fatores humanos, qualidade, sustentabilidade, ética e responsabilidade profissional e, quando possível, seminários com profissionais da área.
A utilização de ferramentas de inteligência artificial generativa em atividades de aprendizagem é orientada pelos docentes e limitada às tarefas explicitamente autorizadas, devendo o seu uso ser declarado e sujeito a análise crítica.
Bibliografia
Essencial:
Pinto, J., & Tscharf, C. (2019). Scrum: A gestão ágil de projetos (1.ª ed.). FCA. ISBN: 978-972-722-897-3.
Sommerville, I. (2015). Software engineering (10th ed.). Pearson. ISBN: 978-0-13-394303-0.
Sommerville, I. (2020). Engineering software products: An introduction to modern software engineering (Global ed.). Pearson. ISBN: 978-1-292-37634-9.
Complementar:
McConnell, S. (2019). More effective agile: A roadmap for software leaders. Construx Press. ISBN: 978-1-7321049-0-7.
Richards, M., & Ford, N. (2025). Fundamentals of software architecture: An engineering approach (2nd ed.). O’Reilly Media. ISBN: 978-1-098-17550-4.
Gamma, E., Helm, R., Johnson, R., & Vlissides, J. (1994). Design patterns: Elements of reusable object-oriented software. Addison-Wesley. ISBN: 978-0-201-63361-0.
Washizaki, H. (Ed.). (2024). Guide to the Software Engineering Body of Knowledge (SWEBOK Guide V4.0). IEEE Computer Society. Recurso digital s/ISBN; ISBN da edição impressa de 2026: 978-0-7695-0000-3.
