Teaching plan for the course unit

(Short version)


Catalą English Close imatge de maquetació




General information


Course unit name: Software Design

Course unit code: 364303

Academic year: 2021-2022

Coordinator: Ana Puig Puig

Department: Department of Mathematics and Computer Science

Credits: 6

Single program: S



Estimated learning time

Total number of hours 150


Face-to-face and/or online activities



-  Lecture





-  Lecture with practical component





-  Laboratory session




Supervised project


Independent learning




Learning objectives


Referring to knowledge

— Understand the basic concepts of software design.


— Know how to analyse and design software.


— Learn how to break down a larger problem into independent modules.


— Learn to produce reliable, medium-sized programs that are easy to understand, modify, maintain, and reuse.


— Learn to use the most commonly used design patterns.


— Be able to use algorithmic schemes and data structures, and to apply design patterns.


— Understand the processes and steps involved in test-driven development.


— Learn to develop user story software using automated tests.


— Learn automatic refactoring methods to clean and restructure code.


Referring to abilities, skills

— Know how to program unit tests in Java project development environments.


— Be familiar with development tools based on patterns used in Java.


Referring to attitudes, values and norms

— Develop the skill to choose the most appropriate alternative during the stages of specification, analysis and design, and be able to argue cogently about the choices made.



Teaching blocks


1. Introduction to the software development process

1.1. Software development process and the software life-cycle

1.2. Test-driven development

1.3. Test-driven development cycle: cases and examples

2. Needs analysis

2.1. Use cases and domain modelling

2.2. User stories

3. Design model

3.1. Concept, structure and utility

3.2. Architectural models

3.3. Design principles: SOLID

3.4. Basic design principles: general patterns

4. Design patterns

4.1. Architectural patterns (monolithic structure, client-server, n-tier)

4.2. Model-view-controller: Singleton, Observer and Faēade patterns

4.3. Composite, Strategy and Command patterns

4.4. Factory, Template Factory, Abstract Factory

4.5. Finite State Machine

5. From design to implementation

5.1. Test types: acceptance and unit tests

5.2. Good test features: FIRST

5.3. Principles of testing: test patterns

5.4. Redesign techniques: production test code (legacy code testing)

5.5. Test add-ons: stubs, fakes, mocks

6. Use of testing frameworks