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

Additional Information

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

  1. Software Engineering: goals, principles, ethics and professional responsibilities and liabilities
  2. Software project management
  3. Software processes (e.g. DevOps)
  4. Software Development Methodologies
  5. Requirements engineering: requirements types and specification techniques
  6. Software Architecture: concepts, patterns and styles
  7. Object-oriented analysis and design, using a core subset of UML (class diagrams, package diagrams, state machines, sequence diagrams)
  8. Implementation using object-oriented languages (e.g. Java and C#)
  9. Verification and validation: reviews, unit, integration and acceptance tests
  10. Planned reuse and risks
  11. 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

ActivityHours/weekWeeksTotal Hours
Theoretical classes31442.0
Practical/Lab classes21428.0
Independent study & project work--182.0
Total--252
ECTS--9.0