Software Engineering

Academic Year 2023/2024 - Teacher: Orazio TOMARCHIO

Expected Learning Outcomes

The course covers the principles, methods and main tools of Software Engineering, a discipline dedicated to the study of methodologies, techniques and tools used in the development of large scale software systems. The learning objectives are as follows:

Knowledge and understanding

  • To understand the principles, methodologies and the main tools in the software development process, with particular focus on the requirements analysis and specification, the definition of system architecture, the design and testing.
  • To understand the most common design patterns and understanding their role in software design and development.
  • To understand the UML standard notation to model software systems.

Applying knowledge and understanding

  • To be able to design a large software system, planning the various activities of the software life cycle and producing documents in accordance with industry standards.
  • To be able to model different views of a software system using the standard UML notation.
  • To be able to recognize when and which design patterns to apply when designing a software system

Making judgements

  • Students will be able to evaluate the different design choices during the development of an IT system, identifying the most suitable solutions satisfying the requirements and the interests expressed by the stakeholders

Communication skills

  • Students will be able to interact and communicate within a software development team by using common notations and languages used to model a software system

Learning skills

  • Students will be able to learn and apply new software development models based on the fundamental phases analyzed during the course

Course Structure

The main teaching methods are as follows: 

  • Lectures, to provide theoretical and methodological knowledge of the subject;
  • Exercises, proposed and solved by the teacher, to provide “problem solving” skills, to apply design methodology, and to learn the usage of CASE tools.

Further, the teacher assigns homeworks to students' groups to be solved independently and to be discussed in the classroom.

Should teaching be carried out in mixed mode or remotely, it may be necessary to introduce changes with respect to previous statements, in line with the programme planned and outlined in the syllabus.

Required Prerequisites

  • Fundamentals of programming
  • Object oriented programming

Attendance of Lessons

Strongly recommended. Attending and actively participating in the classroom activities will contribute positively towards the overall assessment of the oral exam.

Detailed Course Content

  1.   Introduction to Software Engineering
    • Origins and motivations of Software Engineering. Basic definitions. Software life cycle. Software process model: waterfall, incremental, iterative/evolutionary, prototypal, spiral, unified process.
  2. Software requirements
    • Functional and non-functional requirements. Requirement analysis and specification. Requirements engineering processes. Documenting requirements. Requirements validation. 
  3. Software design
    • Software design methodologies: top-down, structural methods, functional and object oriented strategies. Design quality: cohesion, coupling, software metrics. Architectural design. Architectural patterns. Object oriented analysis and design. 
  4. UML software modeling 
    • Introduction to UML (Unified Modeling Language). UML and software life cycle. Requirements modeling with use cases. Class diagrams. Sequence and communication diagrams. State diagrams. Activity diagrams. Component and deployment diagrams. Case tools supporting UML.
  5. Design pattern 
    • The role of design patterns in the design and development of software systems. Creational, structural and behavioral patterns. 
  6. Verification and validation 
    • Quality controls of software products: verification and validation. Software testing. Black-box and white-box testing. Test cases. Equivalence partitioning. JUnit.
  7. Software development management 
    • Software configuration management. Configuration item, versioning, configurations, repository. Versioning tools (CVS, SVN, Git). Build, release and branch management.

Textbook Information

  • [LAR]
    • Craig Larman
      Applying UML And Patterns: An Introduction To Object-Oriented Analysis And Design And Iterative Development
      Addison Wesley 
  • [FOW]
    • M. Fowler
      UML Distilled
      Addison Wesley 
  • [GAM]
    • Gamma, E., Helm, R., Johnson, R. e Vlissides, J.
      Design Patterns: Elements of Reusable Object-Oriented Software
      Addison Wesley

Course Planning

 SubjectsText References
1Introduction to Software Engineering[SOM] Cap. 1
2Overview on object oriented analysis and design[LAR] Cap. 1
3Software development lifecycle[LAR] Cap. 2 e 3 - [FOW] Cap. 2
4Software modeling. UML introduction[FOW] Cap. 1
5Inception phase[LAR] Cap. 4 e 5
6Requirements[LAR] Cap. 6 - [SOM] Cap. 6
7Use cases[LAR] Cap. 7 - [FOW] Cap. 9
8Additional artifacts about requirements[LAR] Cap. 8
9Elaboration phase[LAR] Cap. 10-11
10Domain model[LAR] Cap. 12 - [FOW] Cap. 3
11Sequence system diagrams[LAR] Cap. 13
12Operation contracts[LAR] Cap. 14
13Towards software design.Software architectures. [LAR] Cap. 15-16-17
14UML: Interaction diagrams[LAR] Cap. 18 - [FOW] Cap. 4-12
15UML: Class diagrams[LAR] Cap. 19 - [FOW] Cap. 3-5
16GRASP patterns: responsibility driven design[LAR] Cap. 20
17Design examples by using GRASP patterns[LAR] Cap. 21
18Transforming design into code[LAR] Cap. 22 - 23
19From iteration 1 to iteration 2[LAR] Cap. 26 - 27
20Other GRASP patterns[LAR] Cap. 28
21Refining the domain model[LAR] Cap. 34 - [FOW] Cap. 5
22UML activity diagrams[LAR] Cap. 31 - [FOW] Cap. 11
23UML: statechart diagrams[LAR] Cap. 32 - [FOW] Cap. 10
24Introduction to GoF Design Pattern[GAM] Cap. 1
25Creational patterns[GAM] Cap. 3
26Structural patterns[GAM] Cap. 4
27Behavioral patterns[GAM] Cap. 5
28Pattern examples[LAR] Cap. 29
29UML: Use Case diagram [LAR] Cap. 33 - [FOW] Cap. 9
30UML: deployment and  component diagrams [LAR] Cap. 41 - [FOW] Cap. 8-14
31Introduction to software testingDispense del docente - [SOM] Cap. 22
32Testing criteriaDispense del docente - [SOM] Cap. 23
33Test automationDispense del docente
34JUnitDispense del docente
35Software configuration management.Software Versioning systems.Dispense del docente
36SVNDispense del docente
37GitDispense del docente
38Evolution of distributed systems and middleware technologiesDispense del docente

Learning Assessment

Learning Assessment Procedures

The final exam consists of:

  • a project work aiming at assessing the capabilities of using the methodologies, techniques and tools studied during the course for the design of a software system 
  • an oral exam that will consist of the discussion of the project work + questions concerning topics not covered by the project

Assessment criteria include: completeness, adequacy, quality and correctness of the proposed solutions, ability to justify and critically evaluate the adopted solutions, clarity.

Overall exam assessment: project work 70% - oral discussion 30%

Learning assessment may also be carried out on line, should the conditions require it.

Examples of frequently asked questions and / or exercises

Examples of questions and exercises are available on the Studium platform and/or the Microsoft Teams platform