Engenharia de Software

Código

0105995

Créditos ECTS

6

Objetivos

  • 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

  1. 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
  2. Metodologias de desenvolvimento
    2.1 Clássicas
    2.2 Ágeis
    2.3 Híbridas
  3. Gestão de projetos
    3.1 Planeamento, estimativa e acompanhamento
    3.2 Equipas, riscos e qualidade
  4. Engenharia de requisitos
    4.1 Elicitação, análise e priorização
    4.2 Especificação, validação, gestão e rastreabilidade
  5. Arquitetura e desenho
    5.1 Princípios, vistas, estilos e padrões
    5.2 Documentação, decisões e avaliação
  6. 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
  7. Verificação, validação e qualidade
    7.1 Estratégias, níveis e tipos de teste
    7.2 TDD, automatização e métricas
  8. 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.

Método de Avaliação