This course addresses issues related to short, medium and long-term quality in software, from its construction to a potentially prolonged and continuous evolution. The software quality syllabus is supported by a pragmatic view of standards, methodologies and models, in line with industry best practices. The syllabus includes an introduction to software quality, aimed at promoting approaches to software quality during development and evolution, in line with quality models. Verification and validation techniques are covered in detail. To cope with new requirements, the systems need to evolve while preserving or even improving their quality. One of the goals of this course is to cover approaches and techniques to identify evolution problems, using reverse engineering techniques applied to real case studies. Once identified, these problems are tackled with reengineering practices including software refactoring, while maintaining traceability throughout the process. Finally, software reuse is discussed as a quality enhancing technique.
Knowledge:
- 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
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.1Design disharmonies (metrics)
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
Software Engineering, Software Development Methods
Hours per credit | 28 | ||
Hours per week | Weeks | Hours | |
Aulas práticas e laboratoriais | 26.0 | ||
Aulas teóricas | 26.0 | ||
Avaliação | 6.0 | ||
Self study | 50.0 | ||
Project | 60.0 | ||
Total hours | 168 | ||
ECTS | 6.0 |