Go to:
You are here: Start > L.EIC014

Software Design and Testing Laboratory

Code: L.EIC014     Acronym: LDTS

Classification Keyword
OFICIAL Informatics Engineering and Computing

Instance: 2021/2022 - 1S Ícone do Moodle

Active? Yes
Responsible unit: Department of Informatics Engineering
Course/CS Responsible: Bachelor in Informatics and Computing Engineering

Cycles of Study/Courses

Acronym No. of Students Study Plan Curricular Years Credits UCN Credits ECTS Contact hours Total Time
L.EIC 344 Syllabus 2 - 6 52 162

Teaching Staff - Responsibilities

Teacher Responsibility
Rui Filipe Lima Maranhão de Abreu
Mais informaçõesLast updated on 2021-10-20.

Fields changed: Components of Evaluation and Contact Hours

Teaching language

Suitable for English-speaking students


This curricular unit is intended for students to develop application design skills using the object-oriented paradigm. Students who pass the course should be able to:

  1. Use Git as a version control system;
  2. Use the Java language as an object-oriented language;
  3. Design unit tests using JUnit;
  4. Apply SOLID principles in the design of applications and understand their importance;
  5. Apply design patterns to solve design problems in the development of applications;
  6. Identify code smells in object-oriented code;
  7. Use refactoring techniques in order to improve non-functional attributes and solve code smells;
  8. Apply the MVC architectural pattern in the design of event-driven applications;
  9. Patterns of Enterprise Applications

Learning outcomes and competences

  1. To be able to develop (design, code, document, analyze, test and maintain) object-oriented programs with UML and Java;

  2. To be able to use tools to support the various phases of program development and maintenance;

  3. To be able to design and develop maintainable, "future-proof" software;

  4. To be able to use patterns and frameworks;

  5. Understanding the importance of tests during software development.


Working method


Pre-requirements (prior knowledge) and co-requirements (common knowledge)

Knowledge of programming, being a plus knowledge of Object-Oriented programming in C++.


  1. A brief introduction to Git: local repositories, remotes, branches, and workflows;

  2. Dependency management using Gradle;

  3. The Java language: Type, literals, and variables; Control structures; Classes and objects; Collections; Generic types; Threads and synchronization; Input and output; Graphical interfaces using Swing;

  4. Principles of object-oriented programming: data abstraction, polymorphism, inheritance, and encapsulation; composition over inheritance as a way to achieve polymorphism;

  5. SOLID principles: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion;

  6. Unit testing using JUnit: Mocks and Stubs using Mockito; Coverage and mutation-testing;  

  7. UML diagrams: class, sequence and communication diagrams;

  8. Code smells and refactoring techniques;

  9. Design patterns: Factory-Method, Command, Composite, Observer, Strategy, Abstract Factory, State, Adapter, Decorator and Singleton;

  10. The Model-View-Controller architectural pattern;

  11. Patterns of Enterprise Architecture.

Mandatory literature

Bruce Eckel; Thinking in Java. ISBN: 0-13-027363-5
Russ Miles and Kim Hamilton; Learning UML 2.0. ISBN: 978-0-596-00982-3

Complementary Bibliography

Kent Beck; Test-driven development. ISBN: 978-0-32-114653-3
Erich Gamma... [et al.]; Design patterns. ISBN: 0-201-63361-2
Martin Fowler ; with contributions by kent Beck... [et al.]; Refactoring. ISBN: 0-201-48567-2
Robert C. Martin; Agile Software Development: Principles, Patterns and Practices, Prentice-Hall, 2003. ISBN: 0-13-597444-5
Joost Visser; Building Maintainable Software, O'Reilly, 2015. ISBN: 978-1-491-94434-9

Teaching methods and learning activities

Theoretical classes for the recitation and discussion of the program topics;

Practical classes in the laboratory:

  1. In the first part (7 weeks) students will solve exercises that cover the following syllabus: Git, Java, unit testing, SOLID principles, design patterns, code smells and refactoring;

  2. In the second part (6 weeks) students will develop a small integrative project.



Evaluation Type

Distributed evaluation without final exam

Assessment Components

Designation Weight (%)
Participação presencial 10,00
Teste 30,00
Trabalho laboratorial 60,00
Total: 100,00

Amount of time allocated to each course unit

Designation Time (hours)
Estudo autónomo 30,00
Frequência das aulas 70,00
Trabalho laboratorial 62,00
Total: 162,00

Eligibility for exams

Students have to actively participate in the development of the project. Besides they cannot miss more classes than allowed by the rules.

Calculation formula of final grade

Evaluation Formula:

  1. 10% - participation in practical classes;
  2. 60% - completion of the integration project (groups of 3 elements);
  3. 30% - individual multiple choice computer test.
All components have a minimum grade of 40%.

The integrated project classification consists of:

  1. 10% - intermediate report
  2. 30% - final report
  3. 60% - project code
Furthermore, the report needs to discuss the individual involvement of each student in the project.


Special assessment (TE, DA, ...)

All components are mandatory for all students. Students excused from attendance at school (student workers, etc..) should present the work on the same dates of the remaining students and should regularly meet their teachers to show the progress of their work.

Classification improvement

Frequency of the course the following year.

Recommend this page Top
Copyright 1996-2024 © Faculdade de Engenharia da Universidade do Porto  I Terms and Conditions  I Accessibility  I Index A-Z  I Guest Book
Page generated on: 2024-04-13 at 11:15:03 | Acceptable Use Policy | Data Protection Policy | Complaint Portal