Qualidade do Software

Objetivos

Saber:
- Analisar sistemas existentes de dimensão não trivial
- Software legado
- Obtenção/extracção de conceitos de alto nível de sistemas legados
- Técnicas e ferramentas de engenharia reversa
- Reengenharia e refabricação de programas
- Elaboração de diagnósticos úteis para a reengenharia
- Dominar técnicas de reengenharia de software
- Componentes de um sistema de gestão da qualidade (SGQ)
- Modelos de qualidade de software e sua avaliação
- Verificação e validação
- Princípios, objectivos e conceitos fundamentais da reengenharia de software

Saber fazer:
- Analisar sistemas existentes de dimensão não trivial
- Obtenção/extracção de conceitos de alto nível de sistemas legados
- Elaboração de diagnósticos úteis para a reengenharia
- Dominar técnicas de reengenharia de software
- Reificar um SGQ para projectos de desenvolvimento de software
- Construir um modelo de qualidade de software
- Selecionar e utilizar técnicas de verificação e validação adequadas
- Avaliação crítica do grau de cobertura atingido com as técnicas de verificação e validação

Soft skills:
- Trabalho em equipa
- Defesa pública de pontos de vista

Caracterização geral

Código

11170

Créditos

6.0

Professor responsável

Miguel Carlos Pacheco Afonso Goulão, Miguel Jorge Tavares Pessoa Monteiro

Horas

Semanais - 4

Totais - 56

Idioma de ensino

Português

Pré-requisitos

Engenharia de Software, Métodos de Desenvolvimento de Software

Bibliografia

bibliografia principal

Lanza M.; Marinescu R. Object-Oriented Metrics in Practice. Springer-Verlag 2006.

Fowler M. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999.

Maurício Aniche et al. “Software Testing: From Theory to Practice”, GitBook, 2021.

bibliografia complementar

Chikofsky et al. Reverse Engineering and Design Recovery: a Taxonomy. IEEE Soft. 7(1),1990.
Mens, et al., Guest Editors. Introduction: Software Evolution. IEEE Software 27(4), 2010.

Gamma, Helm, Johnson, Vlissides. "Design Patterns Elements of reusable object-oriented software". Addison Wesley, 1995.

Myers, et al.: The Art of Software Testing, 3rd ed., 2011.

ISO/IEC 25023:2016

ISO/IEC 25010:2011

Método de ensino

As aulas teóricas consistem na exposição de matéria, ilustrada com exemplos de aplicação, e suportada por diapositivos e pela utilização do ambiente de desenvolvimento no computador do docente.
Nas aulas de laboratório, os alunos resolvem exercícios que constituem exemplos concretos de aplicação dos conceitos dados nas anteriores aulas teóricas.
Os alunos podem esclarecer dúvidas durante as aulas ou nos horários de atendimento.
Sempre que existam alunos que não falem Português, as aulas serão leccionadas em Inglês. Os materiais são, também, em inglês.

Método de avaliação

 

Componentes de Avaliação
A avaliação inclui uma componente teórica e uma componente prática.
As notas são dadas numa escala de 0 a 20 pontos ou valores.

Componente de laboratório (prática)
A componente prática é composta por 2 trabalhos práticos (P1 e P2), sob a forma de relatórios escritos, realizados por grupos de 2 alunos. Valem 20% da nota final cada.
Está prevista a realização de uma defesa dos trabalhos que tomará a forma de uma conversa entre o docente e todos os membros do grupo, que em princípio terá lugar nas 2 últimas semanas de aulas, usando os tempos das aulas práticas e talvez o da teórica.

Para obter frequência, o aluno deverá obter média ponderada das notas dos trabalhos >= 9,5 valores.

Componente teórica
A componente teórica é composta por dois testes individuais, realizados presencialmente, valendo 60% da nota final.

Em cada prova escrita, os alunos podem trazer consigo uma folha (frente e verso) com as suas notas, que deverão entregar juntamente com a prova. As notas devem ser manuscritas, i.e., sem impressão de computador.

A nota da componente teórica é a média das notas dos testes (T1 e T2) ou da nota do Exame (Ex). Para obter aprovação é necessário obter uma média ponderada válida dos testes (ou Ex) >= 9,5 valores e ter frequência válida.

Nota Final

Quando a classificação for obtida nos dois testes escritos, a nota final (NF) é dada por:
NF = T1 * 0,30 + T2 * 0,30 + P1 * 0,20 + P2 * 0,20

Quando a classificação for obtida no exame, a nota final é dada por:
NF = Ex *0,60 + P1 * 0,20 + P2 * 0,20

Em ambos os casos acima, os arredondamentos aquando do cálculo da nota final são feitos apenas no fim, sem cálculos intermédios.

Para obter aprovação nesta disciplina a NF deverá ser >=9,50 e o aluno deverá também obter uma nota >=9,5 (em 20,0) na componente teórica.

Melhoria de nota no exame
Os alunos que pretendam melhoria de classificação resultante dos dois testes poderão realizar o exame para esse efeito. Caso a nota obtida no exame seja superior à nota ponderada dos dois testes, a nota do exame substitui a nota ponderada dos testes para efeitos de cálculo da nota final.

Conteúdo

1. Introdução à Qualidade de Software

2. Modelos de Qualidade de Software
2.1 Modelos de Qualidade do Processo
2.2 Modelos de Qualidade do Produto

3. Evolução de Software
3.1 Engenharia reversa de sistemas de software
3.2 Métricas de software
3.3 Visualização de software

4. Reengenharia de sistemas de software
4.1 Fundamentos de reengenharia
4.2 Refabricação

5. Desenho e Reutilização de Software
5.1 Desarmonias de concepção
5.2 Padrões de concepção

6. Verificação e Validação de Software

Cursos

Cursos onde a unidade curricular é leccionada: