Teaching Assistant – Software Engineering
Undergraduate course, NOVA School of Science and Technology | NOVA FCT, Department of Informatics, 2026
1st Semester of 2026/2027
Overview
I taught practical classes to undergraduate students in the BSc in Computer Science and Engineering. Responsibilities included conducting labs for approximately 60 students, supervising tests, evaluating the group project, providing feedback, and holding weekly office hours.
Course:
Engenharia de Software (Software Engineering) 2026/2027
Description: This unit of 9 ECTS has the goal of empowering students with knowledge and skills to analyse existing complex systems, and evolve them using methodologies and tools typically used in industry.
Learning Objectives
Know:
- Understand the basic principles and concepts of software engineering; system requirements; modelling using a core set of UML; architectural patterns and styles; DevOps; design and programming of extensible software systems; testing and evolving object-oriented code by analysing object-oriented code and deriving the corresponding models; design patterns; frameworks and APIs.
- Know software engineering processes; a core set of UML; architectural patterns and styles; design patterns; DevOps; forward and reverse engineering techniques.
Know-how:
- Be able to evolve an existing system of non-trivial dimension using systematic reverse and forward engineering techniques; use patterns, frameworks and APIs.
Syllabus
- Software Engineering: goals, principles, ethics and professional responsibilities and liabilities
- Software project management
- Software processes (e.g. DevOps)
- Software Development Methodologies
- Requirements engineering: requirements types and specification techniques
- Software Architecture: concepts, patterns and styles
- Object-oriented analysis and design, using a core subset of UML (class diagrams, package diagrams, state machines, sequence diagrams)
- Implementation using object-oriented languages (e.g. Java and C#)
- Verification and validation: reviews, unit, integration and acceptance tests
- Planned reuse and risks
- Supporting technologies:
- Reverse engineering
- Specification and modelling with UML
- Implementation and evolution
- Software complexity evaluation
- Reuse: frameworks and APIs
Bibliography
Main:
- Sommerville I., Software Engineering, Pearson, 10th edition, 2015
- Arlow J. and Neustadt I., UML 2 and the Unified Process: Practical Object-Oriented Analysis and Design, 2nd edition, Addison-Wesley Professional, 2005
Additional:
- Lanza M.; Marinescu R., Object-Oriented Metrics in Practice, Springer, 2006
- Bass L. et al., Software Architecture in Practice, 4th edition, Addison-Wesley, 2021
- Gamma E. et al., Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1995
- Bass L. et al., DevOps: A Software Architect’s Perspective, Pearson Education, 2015
- Demeyer S., Mens T., Software Evolution, Springer, 2008
- Aniche M., Effective Software Testing, Manning, 2022
Prerequisites
None.
Evaluation Method
The assessment is made up of two components, both scaled from 0 to 20 points and rounded to the nearest tenth:
- Laboratory Component (50%) — a group project (45%, groups of 6 students, with milestones, a final delivery, and a mandatory individual oral discussion) plus participation and challenges solved in practical classes (5%). Frequency requires an individual project grade ≥ 9.5.
- Theoretical-Practical Component (50%) — two written, individual, closed-book tests during the semester (or one appeal exam), each weighing 25% of the final grade.
The final grade equals the Theoretical-Practical Component alone if it scores below 9.5; otherwise it is the average of both components.
Student Workload
| Activity | Hours/week | Weeks | Total Hours |
|---|---|---|---|
| Theoretical classes | 3 | 14 | 42.0 |
| Practical/Lab classes | 2 | 14 | 28.0 |
| Independent study & project work | - | - | 182.0 |
| Total | - | - | 252 |
| ECTS | - | - | 9.0 |
