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

Ana Maria Diniz Moreira, Miguel Carlos Pacheco Afonso Goulão


Weekly - 4

Total - 52

Teaching language



Software Engineering, Software Development Methods


Chikofsky, E.J., Cross II, J.H. Reverse Engineering and Design Recovery: a Taxonomy. IEEE Software 7(1), pp.13-17, IEEE Computer Society Press, January 1990.

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

Fowler M. Refactoring: Improving the Design of Existing Code. Addison-Wesley, 1999. ISBN:0-201-48567-2

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.

Evaluation method

The evaluation includes 2 tests (corresponding to a total of 45% of the final grade) and 2 projects (55% of the final grade). One of the projects, and corresponding test, focuses primarily in quality models, verification and validation. The other project, and corresponding test, focuses on reverse engineering, reengineering and the application of design patterns.

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: