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, modelos e ferramentas de engenharia de software utilizados no projeto, gesta~o, desenvolvimento, avaliac¸a~o e teste, e documentac¸a~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
- Planear um projeto com uma ferramenta de gesta~o utilizando uma dada metodologia
- Identificar e utilizar diagramas UML
- Descrever e aplicar padro~es de software
- Identificar e produzir os diferentes tipos de documentac¸a~o
- Descrever as arquiteturas de aplicac¸o~es REST e MVC
- Utilizar um Sistema de Controlo de Verso~es
- Configurar e utilizar ferramentas de logging, ana´lise esta´tica de co´digo e otimizac¸a~o
- Definir testes automatizados, distinguir os diferentes tipos de testes e os contextos de utilizac¸a~o
Conteúdos Programáticos:
1 Introduc¸a~o
1.1 Objetivos, conteu´dos, e avaliac¸a~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 e Profiling
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 e entrega contínuas
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 das competências adquiridas pelo aluno nesta unidade curricular é composta pelos seguintes elementos de avaliação:
1. Teste de Avaliação 1
2. Teste de Avaliação 2
3. Projeto Prático
4. Exame(s)
Avaliação Contínua:
NF = 0.3*(1) + 0.3*(2) + 0.4*(3)
Avaliação em Exame:
NF= (4)
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
Docente (* Responsável):
Filipe Fonseca (fmfonseca@ufp.edu.pt)
Ivo Pereira (ivopereira@ufp.edu.pt)