Engenharia de Software

Objectivos

Esta UC de 9 ECTS tem por objectivo dotar os alunos de competências para analisar sistemas complexos existentes, e fazê-los evoluir usando metodologias e ferramentas tipicamente usadas na indústria. Assim, o aluno deve:

  • Compreender os princípios e conceitos da Engenharia de Software; requisitos de sistema; modelação usando um conjunto principal de UML; padrões e estilos arquitetónicos; DevOps; Concepção e programação de sistemas de software extensíveis; testar e evoluir o código orientado a objetos, analisar o código orientado a objetos e derivar os modelos correspondentes; Padrões de design; frameworks e APIs.

  • Conhecer processos de engenharia de software; um conjunto principal de UML, padrões e estilos arquitetónicos; padrões de desenho; DevOps; técnicas de engenharia reversa e directa.

  •  Ser capaz de usar um sistema existente de dimensão não trivial usando técnicas sistemáticas de engenharia reversa e direta; Usar padrões, estruturas e APIs.

Caracterização geral

Código

12660

Créditos

9.0

Professor responsável

Ana Maria Diniz Moreira, Vasco Miguel Moreira do Amaral

Horas

Semanais - 5

Totais - 5

Idioma de ensino

Português

Pré-requisitos

Esta cadeira tem como requisitos desejáveis base ter passado à cadeira de "Introdução à Programação" e "Programação Orientada a Objectos".

Bibliografia

Ian Sommerville, Software Engineering, Pearson, 10th edition, 2015 

Jim Arlow and Ila Neustadt, UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design (2nd Edition), Addison-Wesley Professional; 2 edition, July 7, 2005

Lanza M.; Marinescu R. Object-Oriented Metrics in Practice. Springer 2006. ISBN-10 3-540-24429

L. Bass, P. Clements, R. Kazman, "Software Architecture in Practice", 3rd edition, Addison-Wesley, 2012

Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995

Len Bass, Ingo Weber, Liming Zhu, DevOps: A Software Architect''s Perspective (SEI Series in Software Engineering), Pearson Education, 2015

S Demeyer, T Mens, Software Evolution, Springer, 2008

Glenford J. Myers, The Art of Software Testing, Third Edition, John Wiley & Sons, Inc., 2011


Método de ensino

3 horas semanais teóricas para apresentação dos conceitos, princípios e técnicas de apoio ao desenvolvimento e evolução de software. A matéria, ilustrada com exemplos de aplicação, e suportada por diapositivos e pela utilização do ambiente de desenvolvimento no computador do docente.

2 horas semanais de aulas práticas em laboratório onde os alunos colocam em prática as teorias e técnicas ensinadas das aulas teóricas anteriores. Os alunos podem esclarecer dúvidas durante as aulas ou nos horários de atendimento.

A avaliação tem duas componentes: um projeto e dois testes. O projeto dá frequência, por isso a nota mínima é 9.5 valores, e vale 70% da nota final. A média dos dois testes terá de ser, no mínimo, de 9.5 valores, para obter aprovação. 


Método de avaliação

Os estudantes têm que obter aprovação nas componentes teórica e prática, cujo funcionamento é descrito de I a IV. A classificação de cada componente de projecto e testes é expressa na escala de 0 a 20 valores (com arredondamento às décimas).Apenas a nota final será arredondada às unidades.

 I– Componente Teórica– Testes e Exame

 1. A classificação da componente teórica (NT) é a média aritmética arredondada às décimas das classificações obtidas nos 2 testes presenciais sem consulta (a classificação de cada teste é arredondada às décimas) ou a classificação do exame final arredondada às décimas.

2. Os estudantes que obtenham uma classificação NT igual ou superior a 9,5 valores obtêm aprovação na componente teórica.

3. Cada teste incidirá essencialmente sobre toda a matéria leccionada nas aulas teóricas, e posta em prática nos laboratórios, até às aulas teóricas da semana anterior à semana da realização do teste.

4. Apesar de a avaliação nos testes não ser cumulativa, e devido à natureza dos assuntos abordados nesta Unidade Curricular, não é excluído que um elemento de avaliação se socorra de conhecimentos respeitantes à matéria avaliada em elemento(s) anterior(es).

5. Os testes realizam-se no horário previamente anunciada(s) no CLIP. A cadeira contará ainda com um portal no moodle onde serão colocados os links zoom (que se repetirão ao longo do semestre) para as aulas teóricas. 

6. Todos os estudantes têm obrigatoriamente que estar inscritos num turno teórico e prático.

[OS PONTOS SEGUINTES ATÉ 10. PODERÃO SOFRER MODIFICAÇÕES DADA SITUAÇÃO CORRENTE COVID-19]

7. Os testes e exames serão presenciais. Os estudantes só poderão ter consigo durante a prova de avaliação:

 a. Lápis/Caneta e borracha;

 b. Obrigatório: Documento de identificação com fotografia;

8. Durante a realização das provas não é permitida a utilização de aparelhos electrónicos, tais como máquinas de calcular e telemóveis (os quais devem estar desligados e não podem estar sobre as mesas onde é realizada a prova).

9. Não é permitido desagrafar as folhas dos cadernos com os enunciados e com as resoluções feitas pelos estudantes na prova.

10. A prova será anulada se não forem satisfeitos os nºs 7,8 e 9.

11. Os estudantes que cometam fraude numa prova de avaliação (Teste ou Exame) terão a referida prova anulada, estão automaticamente reprovados na unidade curricular no presente ano lectivo, e perdem a frequência caso já a tenham obtidos, o que implica que terão que obter frequência no ano lectivo seguinte.

II – Componente Projecto

 1. As aulas práticas terão início na semana de de 28 de Setembro a 2 de outubro.

2.  Os alunos devem submeter até dia 15 de Outubro qual o grupo de 5 elementos que pretendem ver formado para a realização do projeto. A escolha dos elementos do grupo é livre, podendo alunos de turnos distintos formar grupo.

3. A realização do projecto implica: 

a. A entrega individual dos desafios semanais na aulas práticas com a prática de ferramentas ou conceitos relevantes à realização do projecto. A totalizarem 1 valor da nota final na componente NP

b. desde o dia da publicação do seu enunciado: o cumprimento de milestones definidas com entrega de artefactos do projecto (a detalhar no enunciado), incluindo os sumários de status do projecto semanais (de acordo com uma template fornecida pelo corpo docente), com peso de 9 valores na nota final (no componente NP).

d. O Relatório Final deverá conter todos os elementos requeridos no enunciado do projecto em formato electrónico.

4. O projecto será discutido e avaliado oralmente na última semana de aulas.

5. A classificação da componente projecto (NP) será atribuida individualmente e é determinada pelo conjunto da avaliação da Entrega final do projecto e discussão oral.  Este valor será apresentado na escala de 0 a 20.

6. Os estudantes que obtenham uma classificação NP igual ou superior a 9,5 valores obtêm Frequência na cadeira.

 

III – Frequência

1. Os estudantes que obtenham Nota do Projecto (NP) >=9,5 obtêm frequência à unidade curricular. 

IV – Classificação Final dos Estudantes

1. A classificação final (CF) é o resultado da seguinte expressão aproximado às unidades:

 CF=NT×0.5+NP×0.5

2. Os estudantes que obtenham frequência, cuja nota final provisória seja positiva, e apresentem uma discrepância na nota do Projecto (NP) superior a 4 valores em relação à média dos testes NT poderão ser admitidos a uma prova oral.

3. Na prova oral mencionada no número anterior, os estudantes podem subir ou descer a nota final com a garantia de classificação mínima CF=NT.

4. A ausência à prova oral referida no número anterior traduz a aceitação por parte do estudante da nota final de NF = NT 

 

IV – Melhoria de Nota

Os estudantes que pretendam efectuar melhoria de nota devem cumprir, para esse efeito, as formalidades legais de inscrição.

  

V – Aulas

1. Links zoom das aulas estarão identificadas tanto no CLIP como no portal da cadeira no moodle.

2. Formato da aula teórica 60 min = 10 (tolerância para mudança de aulas e setup) + 50 (exposição) 

3. Formato da aula Prática 120 min = 10 (tolerância para mudança de aulas e setup) +  110 min de introdução e exercícios com guia

 

VI – Outros

1. É total responsabilidade do aluno acompanhar as aulas teóricas e práticas (ou fazer-e informar por colegas em caso de ausência), sendo que qualquer mensagem e conteúdo de matéria ou informações de natureza administrativa transmitido durante as aulas não será repetido.

2. Ao contactar por e-mail com os professores, os estudantes devem iniciar o Assunto (Subject) OBRIGATÓRIAMENTE COM : 

“[ES] " (e assunto) 

e o conteúdo da mensagem deverá conter Turno – Nome (primeiro e último) e Nº de estudante  

3. Não serão respondidas mensagens electrónicas com perguntas cuja resposta conste nos pontos anteriores ou na página da unidade curricular no CLIP, portal moodle, ou que tenham sido devidamente esclarecidas nas aulas teóricas.

4. O meio de comunicação privilegiado deverá ser o Piazza para dúvidas técnicas ou o horário de atendimento dos docentes, dedicados a dúvidas técnicas (que deverão ser marcadas até um dia de antecedência via e-mail com o professor do horário correspondente) e aulas teóricas ou práticas. As mensagens de email não relacionadas com  conteúdo técnico serão respondidas com a brevidade possível, ou oralmente nas aulas teóricas quando demonstrem ser de interesse geral sendo responsabilidade do aluno tomar conhecimento do que foi dito.

5. Os e-mails não serão respondidos (com a ressalva, naturalmente, de casos excepcionais justificados) fora de horário normal laboral dos docentes.

Conteúdo

  • Engenharia de software: objetivos, princípios, ética, responsabilidades profissionais

  • Gestão de projetos de software

  • Processos de software (e.g. DevOps)

  • Metodologias de desenvolvimento de software: 

    • Engenharia de requisitos: tipos e técnicas de requisitos

    • Arquitetura de software: conceitos, padrões e estilos 

    • Análise e desenho orientados a objetos, usando um subconjunto CORE do UML (diagramas de classes, diagramas de pacotes, máquinas de estado, diagrama de sequência)

    • Implementação usando orientação a objetos (e.g. Java e C#)

    • Verificação e validação: revisões, testes unitários, integração, aceitação e carga

    • Reutilização planeada e riscos

  • Tecnologias de suporte:

    • Engenharia reversa (e.g. SourceMiner)

    • Especificação e modelação (e.g. USE, StarUML) 

    • Implementação e evolução (e.g. Eclipse, GitHub) 

    • Testes unitários, integração e carga (e.g. JUnit, Spock, JMeter)

    • Avaliação de complexidade (e.g. eclipse metrics plugin, inFusion)

    • Reutilização: frameworks e APIs

Cursos

Cursos onde a unidade curricular é leccionada: