95648 - Software Design and Development

Academic Year 2026/2027

  • Moduli: Danilo Pianini (Modulo 1) Gianluca Aguzzi (Modulo 2) Paolo Baldini (Modulo 3)
  • Teaching Mode: In-person learning (entirely or partially) (Modulo 1); In-person learning (entirely or partially) (Modulo 2); In-person learning (entirely or partially) (Modulo 3)
  • Campus: Cesena
  • Corso: First cycle degree programme (L) in Computer Systems Technologies (cod. 6007)

Learning outcomes

By the end of the course, students will have acquired basic knowledge of programming paradigms for large-scale software development, including object-oriented and functional programming, their main design patterns, and their implementation in modern programming languages and related development frameworks. They will therefore be able to design and develop complete small- to medium-sized applications using development processes and agile techniques, including the DevOps approach to project delivery.

Course contents

    Module 1 — Software Design and DevOps
    • Fundamentals of object-oriented analysis and design.

    • Software design principles and techniques for developing modular, reusable, and maintainable code, including reference to the main design patterns.

    • Effective programming techniques.

    • Organization and management of a software project.

    • Version control with Git and collaborative organization of source code.

    • Build automation and dependency management with Gradle.

    • Automated testing and software quality assessment.

    • DevOps principles and practices.

    Module 2 — Programming in Java
    • The Java language, runtime environment, and development tools.

    • Classes, objects, methods, fields, constructors, and encapsulation.

    • Inheritance, polymorphism, interfaces, and abstract classes.

    • Generic programming.

    • Exception handling.

    • Elements of functional programming in Java: lambda expressions, functional interfaces, and operations on collections and data streams.

    • Core libraries for application development.

    • Input/output management.

    • Development of graphical user interfaces using the libraries and frameworks adopted in the course.

    Module 3 — Software Design and Development Laboratory
    • Guided exercises on the topics covered in Modules 1 and 2.

    • Configuration and use of the development environment.

    • Development, execution, and debugging of Java applications.

    • Application of object-oriented and functional programming principles.

    • Use of Git for version control and collaboration.

    • Use of Gradle for build automation and dependency management.

    • Development and execution of automated tests.

Readings/Bibliography

Required materials

Slides, code examples, exercises, and all other materials required for exam preparation will be made available on the Virtuale platform. During the course, the relevant sections of the official technical documentation for the language, libraries, and tools used will also be indicated.

Recommended texts

  • Joshua Bloch, Effective Java, Third Edition, Addison-Wesley, 2018.

  • Bruce Eckel, Thinking in Java, Fourth Edition, Prentice Hall, 2006.

Further reading

  • Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides, Design Patterns: Elements of Reusable Object-Oriented Software, Addison-Wesley, 1994.

Purchase of the books is not required. All materials necessary for exam preparation will be available on Virtuale.

Teaching methods

Teaching activities consist of lectures and classroom exercises in Modules 1 and 2, and partially guided laboratory exercises in Module 3.

The lectures cover design principles, programming techniques, and the development tools and practices addressed in the course. Topics are presented through examples and exercises, including discussion of possible solutions.

During the laboratory activities, students configure and use the development tools and complete programming exercises aimed at applying and consolidating the knowledge and skills acquired in Modules 1 and 2.

Considering the type of activities and teaching methods adopted, attendance requires all students to complete Modules 1 and 2 of the e-learning course on health and safety in study environments in advance, delivered in e-learning mode.

Assessment methods

The examination consists of the design, implementation, documentation, and discussion of a software project developed in a group. No written tests or interim assessments are scheduled.

The project is normally carried out by groups of three or four students. The expected workload is approximately 70 hours per student. Each group member must be responsible for a clearly identifiable part of the project, including a significant individual contribution to both design and programming.

The project proposal must be submitted to the instructors in advance and may be developed only after approval. The proposal must specify the objectives, planned features, main design challenges, and division of work among group members. Students choose the project submission deadline from those available within the examination periods. Detailed instructions for proposing, developing, and submitting the project are published on Virtuale.

The submission includes:

  • source code managed using Git;

  • the configuration of the build system and automated tests;

  • an executable application;

  • a PDF report prepared according to the provided template.

After submission, the project is discussed with all group members. The discussion includes a brief demonstration of the application, an analysis of the overall architecture, and an individual part concerning each student’s contribution and the relevant design and implementation choices. The application, source code, and submitted report are used during the discussion.

At the end of the discussion, each student is assigned an individual grade on a scale of 30. Grades may therefore differ among members of the same group.

The assessment evaluates:

  • the ability to design and develop a software application;

  • the correct application of object-oriented programming principles;

  • the quality of the architecture and design choices;

  • the correctness, readability, modularity, reusability, and maintainability of the code;

  • the quality of the tests, project configuration, and use of development tools;

  • the quality, clarity, and completeness of the report;

  • the ability to justify the choices made and discuss possible alternative solutions;

  • the extent and quality of the individual contribution.

Grades are awarded according to the following criteria:

  • 18–21: the project is generally functional but has limitations in its design, code quality, or documentation; the student demonstrates sufficient knowledge of the fundamental concepts but has limited ability to justify the choices made;

  • 22–25: the project is correct and adequately structured; design and programming principles are generally applied appropriately; the individual contribution is identifiable and the discussion is satisfactory;

  • 26–29: the project is complete and of good quality, with a coherent architecture, maintainable code, and adequate tests and documentation; the student demonstrates good autonomy in analysing and discussing design choices;

  • 30–30 with honours: the project is of high quality, with rigorous design choices and particularly well-developed implementation, tests, and documentation; the student demonstrates full command of the topics, critical autonomy, and the ability to discuss the adopted solutions and possible alternatives in depth.

The examination is passed with a minimum grade of 18/30. A negative assessment may result, in particular, from an insufficient individual contribution, serious design deficiencies, significant and repeated errors in the application of object-oriented programming principles, or an inability to discuss the submitted material with adequate understanding.

Use of Generative Artificial Intelligence

The use of generative artificial intelligence tools is permitted. Students remain fully responsible for all submitted material.

The use of such tools must be declared in the relevant section of the report, specifying the parts of the project for which they were used and how they were used.

Students must know, understand, and have fully assimilated any code fragment, diagram, documentation, or part of the report generated with the support of artificial intelligence. During the discussion, the instructor may ask specific questions to verify this understanding.

An inability to explain terms, diagrams, program fragments, documentation, or parts of the report included in the submitted material constitutes grounds for failing the examination. The individual discussion therefore also serves as a mandatory critical assessment of any material produced with generative artificial intelligence tools.

Students with Specific Learning Disabilities or Disabilities

Students with temporary or permanent specific learning disabilities or disabilities are advised to contact the relevant University office (https://site.unibo.it/studenti-con-disabilita-e-dsa/) well in advance. Any proposed accommodations must be submitted to the instructor for approval at least fifteen days before the examination.

Teaching tools

Teaching Support Tools

Teaching materials, including slides, code examples, exercises, technical documentation, and project instructions, will be made available digitally on the Virtuale platform.

The slides are also available on the course website and are regularly updated by the instructors throughout the course.

Teaching and laboratory activities will use the Java Development Kit, an integrated development environment, Git for version control, and Gradle for build automation and dependency management.

Instructions for installing and configuring the required tools on the main operating systems are available in the development environment setup guide.

Students may use the computers available in the computer laboratories or their own devices, provided that the required tools have been installed and configured.

Laboratory activities will be supported by a tutor.

Links to further information

https://unibo-lptsi-pss.github.io/

Office hours

See the website of Danilo Pianini

See the website of Gianluca Aguzzi

See the website of Paolo Baldini