- 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
- Public defense of points of view
Ana Maria Diniz Moreira, Miguel Carlos Pacheco Afonso Goulão
Weekly - 4
Total - 52
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.
Myers, et al.: The Art of Software Testing, 3rd ed., 2011.
Bacchelli et al., Expectations, outcomes, and challenges of modern code review. ICSE 2013.
Bosu et al. (2016). Process aspects and social dynamics of contemporary code review: Insights from open source development and industrial practice at Microsoft. TSE, 43(1), 56-75.
Kruchten et al. (2012). Technical debt: From metaphor to theory and practice. IEEE Soft., 29(6), 18-21.
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.
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 first partial deliverable, 20% for the second 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 2019/2020 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 have 2 manuscript pages 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.
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.
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
6. Software design & reuse
6.1 Design disharmonies (metrics)
Programs where the course is taught: