Software Quality


- Elements of a Software Quality Management (SQM) system
- Software Quality Models and evaluation
- Verification and Validation
- Principles, Concepts, and Aims of Software Reengineering
- Legacy Software Systems
- Techniques and Tools for Reverse Engineering
- Program Reengineering and Refactoring

Skills and competencies:
- Reify an SQM for software development projects
- Define a software quality model
- Select and use adequate verification and validation techniques
- Critical evaluation of the coverage achieved by verification and validation techniques
- Analyze existing, non-trivial, software systems
- Extract high-level information from legacy systems
- Diagnostic reporting
- Master techniques for software system reengineering

Soft skills:
- Teamwork
- Public defense of points of view

General characterization





Responsible teacher

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


Weekly - 4

Total - 52

Teaching language



Software Engineering, Software Development Methods


Chikofsky et al. Reverse Engineering and Design Recovery: a Taxonomy. IEEE Soft. 7(1),1990.

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

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

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.

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

ISO/IEC 25023:2016

ISO/IEC 25010:2011

Teaching method

Lectures consist of a theoretical exposition, illustrated by application examples, and supported by slides and the usage of the software development environment of the lecturer.

In the lab sessions, students solve problems by concretely applying the concepts discussed in the previous lectures.

Students may clarify any doubts during classes or in the instructor’s contact hours.

Whenever there are students who don''''t speak Portuguese, classes will be in English. All course materials are in English, as well.

Evaluation method

Evaluation Components

The evaluation contains a theory and practice component, as well as a lab component.

Lab Component and frequency

The lab component is worth 55% of the final grade.

1st Project (P1): made by teams of 2 students, with two partial deliverables. This project is worth 35% of the final grade (15% for the lowest grade partial deliverable, 20% for the highest grade partial deliverable).

2nd Project (P2): made by teams of 2 students, with a single delivery. This project is worth 20% of the final grade.

To obtain frequency, a student needs to obtain a weighted average of the lab component >= 9.5. Frequencies obtained in 2020/2021 remain valid, and so does the corresponding grade.

Theory and Practice Component

The theory and practice component includes two individual tests and is worth 45% of the final grade.

1st Test (T1): Test performed online, where the student is allowed two bring a sheet of paper (2 pages) of manuscript text to consult. This test is worth 15% of the final grade.

2nd Test (T1): Test performed in presence, as long as the sanitary conditions allow it, with no access to consultation materials. Students are allowed to use a basic pocket calculator. This test is worth 30% of the final grade.

The theory and practice component grade is the weighted average of the test grades, or the exam grade (Ex). To be approved, a student must obtain a theory and practice grade >= 9.5 and have a valid frequency. 

Final Grade

When this course is made through tests, the final grade is:

NF = T1 * 0.15 + T2 * 0.30 + P1 * 0.35 + P2 * 0.20

When this course is made through an exam, the final grade is:

NF = Ex *0.45 + P1 * 0.35 + P2 * 0.20

To be approved, the student must have frequency and a theory and practice grade >= 9.5.

If the theory and practice grade is < 9.5, the final grade is the theory and practice grade.

Subject matter

1. Introduction to software quality

2. Software Quality Models and Standards

2.1 Process Quality Models

2.2 Product Quality Models

3. Software Verification and Validation

3.1 Reviews (walkthroughs, inspections, demonstrations, audits)

3.2 Reading techniques (ad-hoc, checklist-based, defect-based reading,  perspective-based reading)

3.3 Costs and benefits analysis of reviews

3.4 Software testing (fundamentals, black-box testing, white-box testing)

4. Software evolution

4.1 Reverse engineering of software systems

4.2 Software metrics

4.3 Software visualization

5. Reengineering of software systems

5.1 Reengineering fundamentals

5.2 Refactoring

6. Software design & reuse

6.1 Design disharmonies (metrics)

6.2 Design Patterns


Programs where the course is taught: