Esta unidade curricular tem por objetivo introduzir e desenvolver os fundamentos, modelos e ferramentas de engenharia de software utilizados no projeto, gestão, desenvolvimento, avaliação e teste, e documentação de software.
Ao completar com sucesso esta unidade curricular os alunos devem ser capazes de:
- Descrever o processo de engenharia de software
- Identificar e escolher as metodologias de desenvolvimento
- Descrever e aplicar padrões de software
- Identificar e utilizar diagramas UML
- Identificar e produzir os diferentes tipos de documentação
- Planear um projeto com uma ferramenta de gestão utilizando uma dada metodologia
- Descrever as arquiteturas de aplicações REST e MVC, e implementar uma aplicação web com recurso a uma framework
- Utilizar um Sistema de Controlo de Versões
- Configurar e utilizar ferramentas de logging, análise estática de código e otimização
- Definir testes automatizados, distinguir os diferentes tipos de testes e os contextos de utilização
Conteúdos Programáticos:
1 Introdução
1.1 Objetivos, conteúdos, e avaliação
1.2 Processos da engenharia de software
2. Metodologias de desenvolvimento
2.1 Metodologias clássicas
2.2 Metodologias ágeis
3. Gestão de projetos de software
3.1 Planeamento
3.2 Documentação
3.3 Ciclo de desenvolvimento
3.4 Gestão do risco
4. Métodos de engenharia de software
4.1 Arquiteturas e modelos de software
4.2 Design patterns
5. Ferramentas de engenharia de software
5.1 Controlo de versões
5.2 Análise estática
5.3 Debugging
5.4 Optimização de código
6. Prática da engenharia de software
6.1 Ferramentas de desenvolvimento
6.2 Testes automatizados
6.3 Integração
Demonstração da Coerência dos Conteúdos Programáticos com os Objectivos da Unidade Curricular:
Os conteúdos programáticos apresentados são coerentes com os objetivos de aprendizagem da unidade curricular uma vez que existe uma grande convergência entre os capítulos do programa da cadeira e os conhecimentos que é suposto o aluno adquirir em cada um desses capítulos. Os conceitos fundamentais da engenharia de software são apresentados através das diferentes secções dos conteúdos programáticos. Os objetivos da aprendizagem são atingidos complementando os conceitos teóricos com exemplos práticos. As diferentes tarefas do processo de engenharia de software são aplicadas num projeto proposto aos alunos, i.e., contemplando as diferentes fases como a análise de requisitos, a modelização, a implementação, os testes e a manutenção.
Metodologias de Ensino (Avaliação Incluída):
A transmissão de conhecimentos nesta unidade curricular será efetuada recorrendo a aulas de cariz teórico-prático e prático em ambiente laboratorial. Nas aulas teórico-práticas são apresentados os conceitos fundamentais à compreensão dos temas do programa. Nas aulas práticas laboratoriais os alunos são confrontados com problemas reais que têm que resolver eventualmente recorrendo às ferramentas de modelização ou desenvolvimento apropriadas. A avaliação é decomposta em duas componentes: a teórica (50%) e a prática (50%). No primeiro caso, a avaliação resulta de um teste escrito aplicado durante o semestre sobre a matéria lecionada em sala de aula. No segundo caso resulta de trabalhos práticos propostos pelo docente e que são efetuados e defendidos pelos alunos ao longo do semestre.
Demonstração da Coerência das Metodologias de Ensino com os Objectivos de Aprendizagem da Unidade Curricular:
A metodologia de ensino/aprendizagem aplicada nesta unidade curricular bem como o seu sistema de avaliação encontram-se perfeitamente alinhados com os objetivos a atingir pelos alunos no final do período letivo. Os conceitos teóricos são apresentados, discutidos, aplicados e avaliados no contexto das aulas teóricas o que garante aos alunos uma base sólida de conhecimentos fundamentais para entenderem de forma aprofundada os desafios que se colocam a esta área do conhecimento. Por outro lado, para que o estudo não fique restrito a modelos conceptuais, nas aulas práticas são apresentados casos de estudo concretos e implementadas soluções para problemas reais recorrendo a ferramentas de software e equipamentos apropriados. Esta combinação garante uma formação aos alunos que lhes permite conhecer os fundamentos científicos essenciais a uma boa compreensão do tema bem como a capacidade de eles se adaptarem a mudanças tecnológicas constantes. O processo de avaliação constituído por testes teóricos e trabalhos práticos garante também um correto equilíbrio entre o esforço dedicado a ambas as componentes. O objetivo é formar profissionais conhecedores das técnicas e ferramentas do estado da arte mas também garantir a sua capacidade de evolução futura. Nesta unidade curricular são abordados os diferentes conceitos de engenharia de software. Os conceitos são depois aplicados na realização de trabalhos práticos no contexto das aulas práticas.
Bibliografia:
[1] Guerreiro, S., “Introdução à Engenharia de Software”, FCA, 2015
[2] Nunes,M., O`Neill, H., “Fundamental de UML”, FCA, 2004
[3] Pressman, R., ”Software Engineering: A practitioner’s Approach”, 8th Ed., McGraw-Hill, 2015.
[4] Sommerville, I., ”Software Engineering”, Adisson-Wesley, 2005.
[5] Gamma, E., Helm, R., Johnson, R., Vlissides, J., “Design Patterns: Elements of Reusable Object-Oriented Software”, Addison-Wesley, 1994