Software Design
- Overview
- Assessment methods
- Learning objectives
- Contents
- Bibliography
- Teaching methods
- Contacts/Info
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 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—answers to be provided on paper
- an exercise to assess the understanding and the knowledge of the fundamental concepts of UML and design patterns and the ability of developing software designs—solutions to be provided on paper or by using an automated tool, depending on the student's preference
- an exercise to assess the ability of designing and implementing GUIs—to be developed on a computer by using Java
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 35% of final mark, while the exercises contribute for the remaining 65%.
The final mark is expressed on a 0 to 30 scale.
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.
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 use several software design styles, with specific applications to event-based systems
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
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 the strengths of the design and receive 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 (4 h, teaching objective 1)
- Introduction to ISO9126
- the waterfall development model
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 objective 2)
- modules and their relations
- inheritance as a conceptual tool for software design
- software design description languages
- design styles
Event-based systems and graphical user interfaces (10 h, teaching objective 3)
- event-based systems' mechanisms
- graphical elements
- event handling
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
The implementation of GUIs will be carried out in Java.
The recommended books are:
• Luciano Baresi, Luigi Lavazza, Massimiliano Pianciamore Dall'idea al codice con UML 2. Guida all'utilizzo di UML attraverso esempi (con CD-ROM). Pearson Italia (ISBN 978-8871922393)
• Martin Fowler. UML distilled. Guida rapida al linguaggio di modellazione standard. Pearson Italia, 2010 (ISBN-10: 887192598X, ISBN-13: 978-8871925981) Creating Components: Object Oriented, Concurrent, and Distributed Computing in Java di Charles W. Kann
However, given the generality of the course topics, several other books can be used. Likewise, additional documentation can be found on the internet.
The slides shown during lectures and exercise classes will be available in PDF format on the University's e-learning website, along with the specification of exercises and their suggested solutions.
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 the development of event-based systems via the implementation of GUIs in Java 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.