Software Design

Degree course: 
Corso di First cycle degree in COMPUTER SCIENCE
Academic year when starting the degree: 
2021/2022
Year: 
2
Academic year in which the course will be held: 
2022/2023
Course type: 
Compulsory subjects, characteristic of the class
Seat of the course: 
Varese - Università degli Studi dell'Insubria
Credits: 
8
Period: 
First Semester
Standard lectures hours: 
72
Requirements: 

Students are required to have good knowledge about software programming. Good knowledge of written English is recommended, so the students can take full advantage of the course material made available by the instructor or generally available online.

The extent to which students learn the subject is assessed via a written test (duration: 4 hours). As an alternative, students can take a mid-term and a final test during the course. By passing both, students will have passed the exam.
The goal of the written test (as well as the mid-term and final tests) is to assess the learning degree and the understanding of the elements related to software design, verification, and validation from both a theoretical and an application points of view (on problems of limited complexity). Written tests (as well as the mid-term and final tests) consist of:
- questions for the assessment of the knowledge of conceptual software design aspects
- an exercise on software verification and validation
- an exercise to assess the understanding and the knowledge of the fundamental concepts of UML and design patterns and the ability to develop software designs—solutions to be provided on paper or by using an automated tool, depending on the student's preference
The knowledge of specific terminology is assessed in an implicit way, since questions and exercise specifications use the terminology. Individual judgment skills are evaluated based on the decisions made during the written exam.
Answers to questions provide around 30% of the final mark, while the exercises the remaining 70%.
The final mark is expressed on a 0 to 30 scale.

Assessment: 
Voto Finale

The goal of the course is to provide students with the necessary knowledge for the design of software systems whose functionalities and qualities fully satisfy users' and developers' needs. To this end, the students learn software design techniques at both the conceptual and application levels, the Unified Modeling Language (UML), which is de facto standard software design language, and design patterns. In addition, they learn the fundamental concepts of software quality and the basic software verification and validation techniques.
At the end of the course, students will be able to
1. Apply the conceptual foundations of software design
2. Model and analyze complex systems and problems, via abstraction and formalization mechanisms
3. Recognize and apply several software design styles
4. Know and apply UML's most important and most used diagrams, such as Use Case Diagrams, Sequence Diagrams, Communication Diagrams, Class Diagrams, Package Diagrams, Object Diagrams, Statecharts, Activity Diagrams, Timing Diagrams, Composite Structure Interaction Diagrams
5. Know the main design patterns and their families
6. Apply UML and design patterns when designing a software system.
7. Know and apply the basic software verification and validation techniques.
Students will develop judgement skills to analyze a software system's design by themselves or in teams, at several abstraction and complexity levels.
Students will be able to master the usual and standard software design terminology, possibly in the English language, and to present with the correct terminology functional and quality characteristics of a software design. Thus, they can present a software system design's strengths and interpret possible modification proposals made by the other stakeholders of the software production process.

The following topics will be taught in the course:
The quality of software and its production process (14 h, teaching objective 1)
- Introduction to ISO9126
- the waterfall development model
- software testing and analysis techniques
Object-oriented design in-the-small and its relationships with coding (8 h, teaching objective 2)
- principles of design-in-the-small
- information hiding
- method design
Conceptual aspects of design in-the-large (8 h, teaching objectives 2 and 3)
- modules and their relations
- inheritance as a conceptual tool for software design
- software design description languages
- design styles
Unified Modeling Language (UML) (32 h, teaching objectives 4 e 6)
- Structure of UML and diagram views
- Use Case Diagrams, Sequence Diagrams, Communication Diagrams, Class Diagrams, Package Diagrams, Object Diagrams, Statecharts, Activity Diagrams, Timing Diagrams, Composite Structure Interaction Diagrams
Design patterns (10 h, teaching objectives 5 e 6)
- Undelying concepts and usefulness of design patterns
- Design pattern taxonomy
- Design pattern examples and applications
- Model-View-Controller design pattern

Lectures (48 hours) and exercise classes (24 hours).
Lectures will present conceptual and application aspects of software design.
The course topics will be applied during hands-on exercise classes about software verification and validation and the development of small- and medium-size software designs with UML by optionally using development tools.

To set up an appointment, students need to send an e-mail request to sandro.morasca@uninsubria.it.

Parent course