SOFTWARE ENGINEERING M - Z

Academic Year 2022/2023 - Teacher: ANDREA MARIO CALVAGNA

Expected Learning Outcomes

1. Knowledge and understanding: the student will have knowledge on object-oriented mechanisms, the modularity issues, the development process.

2. Applying knowledge and understanding: the student will be able to design, document, and implement object-oriented software systems, will be able to recognise the developer roles, and will be able to implement tests for assessing the code.

3. Making judgements: the student will be able to analyse the modularity of software systems.

4. Communication skills: the student will be able to describe software components using a proper technical language.

5. Learning skills: the student will be able to solve the typical problems faced during the design and implementation, by studying, analysing and using novel object-oriented technologies, according to the general principles given.

Course Structure

Face-to-face lessons.

If the teaching is given in a mixed or remote mode, the necessary changes with respect to what was previously stated may be introduced, in order to respect the program envisaged and reported in the syllabus.

Required Prerequisites

Basic knowledge of programming algorithms in C or C++ or Java.

Attendance of Lessons

Attending lectures is essential for understanding the topics covered.

Detailed Course Content

Software development processes, such as waterfall, evolutive and agile (spiral, XP, Scrum), activities and their timing. Requirement engineering: gathering and organising requirements. UML notation: use cases, activities, states, classes, sequences and collaboration diagrams. Code repositories and versioning: Git.

Object oriented design, inheritance and polymorphism. Quality issues. Design Patterns are described by means of objectives, contexts, problems solved, examples, solution with diagrams and code: Singleton, Factory Method, Abstract Factory, Adapter, Bridge, Composite, Decorator, Facade, Chain of Responsibility, Mediator, Observer, State. Concurrency in Java.

Stream Java and parallelism.

Refactoring techniques.

Software metrics and software evolution.

Software validation by means of testing.

Textbook Information

  1. I. Sommerville. Ingegneria del Software. Pearson Addison-Wesley.
  2. E. Gamma, R. Helm, R. Johnson, J. Vlissiders. Design Patterns – Elements of Reusable Object-Oriented Software. Pearson Addison-Wesley.
  3. M. Fowler. UML Distilled. Pearson. 2010
  4. R.-G. Urma, M. Fusco, A. Mycroft. Java 8 in Action: Lambdas, streams, and functional-style programming. Manning. 2015
  5. K. Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley. 1999
  6. M. Fowler. Refactoring: Improving the Design of Existing Code. Addison-Wesley.

Course Planning

 SubjectsText References
1Software Engineering objectives, software complexity, requirements, correctness, maintenance,  , testing1
2Class abstraction, single responsibility principle for classes and methods1,2
3software quality and anti-patterns, software design and test design1,2
4Refactoring techniques, method extraction, temp-query replacement, temp variable split.  6
5Singleton design pattern and class instance creation management.Static methods, Class, attributes and methods scope. Information Hiding, coupling and cohesion, inheritance and polimorphism.  1,2
6Factory method design pattern, with implementation variants (reflective, object pool, dependency injection)2
7Finding and designing classes, interfaces, inheritance and polymorphism, type compatibility, method call dispatchment, override and overload.1,2
8UML class, sequence and collaboration diagrams notation3
9Adapter design pattern (class and object variants), Façade pattern2
10UML state diagrams. State design pattern2,3
11Observer design pattern, publish-subscribe paradigm.2
12finding design patterns in existing code and UML class diagrams2
13MVC, mediator and decorator patterns2
14Agile software development: introduction to extreme programming 5
15XP techniques: planning (CRC and Story cards),  pair programming, simple design, refactoring, small and frequent releases, coding standards, on site client, continuous testing. Scrum software processes 5
16Software development stages: requirement analisys, design, coding, testing, evolution1
17Software development processes: waterfall, evolutionary and spiral models1
18Software requiremets, types of requirements and annotation practice guidelines 1
19Design and implementation with Java streams and concurrent programming. Filter, map, reduce, predicate types, function, supplier, optional.4
20Java streams and concurrent coding examples4
21Composite and Chain of responsibility design patterns. 2
22Bridge design pattern. UML use case and activity diagrams.2,3
23Software evolution, types of challenges and their management. Lehman law.1
24Software metrics: ciclomathic complexity, LOC. object oriented metrics: Chidamber and Kemerer suite. Unit Testing, code coverage metrics, regression testing.1

Learning Assessment

Learning Assessment Procedures

The final examination is split in a written test, consisting of several multiple choice questions and some open questions, plus an oral interview. 


Examples of frequently asked questions and / or exercises

Draw the UML class diagram of a given design pattern

Describe the goals of a design pattern

Say what the consequences (on the code) of a design pattern are

Describe how a design pattern works

Implement a design pattern class

Implement a data selection and data transformation using Java Stream processing

Describe the filter method (map, reduce) and show its usage syntax with an example

Describe the Predicate type (Function, Supplier)