Software Design and Testing Laboratory
||Informatics Engineering and Computing
Instance: 2021/2022 - 1S
Cycles of Study/Courses
||No. of Students
Teaching Staff - Responsibilities
Teaching - Hours
Last updated on 2021-10-20.
Fields changed: Components of Evaluation and Contact Hours
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:
- Use Git as a version control system;
- Use the Java language as an object-oriented language;
- Design unit tests using JUnit;
- Apply SOLID principles in the design of applications and understand their importance;
- Apply design patterns to solve design problems in the development of applications;
- Identify code smells in object-oriented code;
- Use refactoring techniques in order to improve non-functional attributes and solve code smells;
- Apply the MVC architectural pattern in the design of event-driven applications;
- Patterns of Enterprise Applications
Learning outcomes and competences
- To be able to develop (design, code, document, analyze, test and maintain) object-oriented programs with UML and Java;
- To be able to use tools to support the various phases of program development and maintenance;
- To be able to design and develop maintainable, "future-proof" software;
- To be able to use patterns and frameworks;
- Understanding the importance of tests during software development.
Pre-requirements (prior knowledge) and co-requirements (common knowledge)
Knowledge of programming, being a plus knowledge of Object-Oriented programming in C++.
- A brief introduction to Git: local repositories, remotes, branches, and workflows;
- Dependency management using Gradle;
- 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;
- Principles of object-oriented programming: data abstraction, polymorphism, inheritance, and encapsulation; composition over inheritance as a way to achieve polymorphism;
- SOLID principles: Single Responsibility, Open/Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion;
- Unit testing using JUnit: Mocks and Stubs using Mockito; Coverage and mutation-testing;
- UML diagrams: class, sequence and communication diagrams;
- Code smells and refactoring techniques;
- Design patterns: Factory-Method, Command, Composite, Observer, Strategy, Abstract Factory, State, Adapter, Decorator and Singleton;
- The Model-View-Controller architectural pattern;
- Patterns of Enterprise Architecture.
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
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:
- 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;
- In the second part (6 weeks) students will develop a small integrative project.
Distributed evaluation without final exam
Amount of time allocated to each course unit
|Frequência das aulas
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
All components have a minimum grade of 40%.
- 10% - participation in practical classes;
- 60% - completion of the integration project (groups of 3 elements);
- 30% - individual multiple choice computer test.
The integrated project classification consists of:
- 10% - intermediate report
- 30% - final report
- 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.
Frequency of the course the following year.