Unidade Curricular:Código:
Engenharia de Software831ESOF
Ano:Nível:Curso:Créditos:
3LicenciaturaEngenharia Informática6 ects
Período Lectivo:Língua de Instrução:Nº Horas:
Primeiro SemestrePortuguês/Inglês78
Objectivos de Aprendizagem:
Esta unidade curricular tem por objetivo introduzir e desenvolver os fundamentos, os modelos e as ferramentas de engenharia de software utilizados no projeto, na gestão, no desenvolvimento e na avaliação e teste de sistemas de software.
Ao completar com sucesso esta unidade curricular os alunos devem ser capazes de:
Descrever o processo de engenharia de software
Identificar e saber escolher as metodologias de desenvolvimento
Descrever e aplicar padrões de software clássicos
Identificar os diagramas UML, e utilizá-los respeitando os requisitos definidos
Identificar e produzir os diferentes tipos de documentos
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
Configurar e utilizar ferramentas de controlo de versões, logging, análise estática de código e otimização
Definir testes unitários num contexto de integração contínua de código
Conteúdos Programáticos:
1 Introdução
1.1 Objetivos, conteúdos, e avaliação
1.2 Os processos da engenharia de software
2. Métodos de engenharia de software
2.1 Paradigmas de programação
2.2 Design patterns
3. Metodologias de desenvolvimento
3.1 Metodologias clássicas
3.2 Metodologias ágeis
4. Gestão de projetos de software
4.1 Planeamento
4.2 Documentação
4.3 Ciclo de desenvolvimento
4.4 Gestão do risco
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
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 objectivos 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 propostos 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óricas são apresentados os conceitos fundamentais à compreensão dos temas do programa. Nas aulas práticas os alunos são confrontados com problemas reais que têm que resolver eventualmente recorrendo a ferramentas de modelização ou desenvolvimento apropriadas. A avaliação é decomposta em duas componentes: a teórica e a prática, cada uma com 50%. No primeiro caso a avaliação resulta de um testes escrito aplicados 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 objectivos 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 objectivo é 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 os diferentes conceitos de engenharia de software serão abordados. Os conceitos são depois aplicados na resolução das fichas e trabalhos práticos no contexto das aulas práticas.
Bibliografia:
[1] Pressman, R., ”Software Engineering: A practitioner’s Approach”, 7th Ed., McGraw-Hill, 2009.
[2] Sommerville, I., ”Software Engineering”, Adisson-Wesley, 2005.
[3] Jacobson, I., Booch, G., Rumbaugh, J., “The Unified Software Development Process”, Addison-Wesley, 1999.
[4] Guerreiro, S., “Introdução à Engenharia de Software”, FCA, 2015