SOFTWARE ENGINEERING M - Z
Academic Year 2024/2025 - Teacher: ANDREA MARIO CALVAGNAExpected 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
Required Prerequisites
Basic knowledge of programming algorithms in C or C++ or Java.
Attendance of Lessons
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
- Ravi Sethi - Software Engineering: Basic Principles and Best Practices - Cambridge University Press.
- E. Gamma, R. Helm, R. Johnson, J. Vlissiders. Design Patterns – Elements of Reusable Object-Oriented Software. Pearson Addison-Wesley.
- M. Fowler. UML Distilled. Pearson. 2010
- R.-G. Urma, M. Fusco, A. Mycroft. Java 8 in Action: Lambdas, streams, and functional-style programming. Manning. 2015
- K. Beck. Extreme Programming Explained: Embrace Change. Addison-Wesley. 1999
- M. Fowler. Refactoring: Improving the Design of Existing Code. Addison-Wesley.
- Dan S. Myers - Data Structures and Algorithms in Java - Cambridge University Press.
Course Planning
Subjects | Text References | |
---|---|---|
1 | Software Engineering objectives, software complexity, requirements, correctness, maintenance, , testing | 1 |
2 | Class abstraction, single responsibility principle for classes and methods | 1,2 |
3 | software quality and anti-patterns, software design and test design | 1,2 |
4 | Refactoring techniques, method extraction, temp-query replacement, temp variable split. | 6 |
5 | Singleton design pattern and class instance creation management.Static methods, Class, attributes and methods scope. Information Hiding, coupling and cohesion, inheritance and polimorphism. | 1,2 |
6 | Factory method design pattern, with implementation variants (reflective, object pool, dependency injection) | 2 |
7 | Finding and designing classes, interfaces, inheritance and polymorphism, type compatibility, method call dispatchment, override and overload. | 1,2 |
8 | UML class, sequence and collaboration diagrams notation | 3 |
9 | Adapter design pattern (class and object variants), Façade pattern | 2 |
10 | UML state diagrams. State design pattern | 2,3 |
11 | Observer design pattern, publish-subscribe paradigm. | 2 |
12 | finding design patterns in existing code and UML class diagrams | 2 |
13 | MVC, mediator and decorator patterns | 2 |
14 | Agile software development: introduction to extreme programming | 5 |
15 | XP 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 |
16 | Software development stages: requirement analisys, design, coding, testing, evolution | 1 |
17 | Software development processes: waterfall, evolutionary and spiral models | 1 |
18 | Software requiremets, types of requirements and annotation practice guidelines | 1 |
19 | Design and implementation with Java streams and concurrent programming. Filter, map, reduce, predicate types, function, supplier, optional. | 4 |
20 | Java streams and concurrent coding examples | 4 |
21 | Composite and Chain of responsibility design patterns. | 2 |
22 | Bridge design pattern. UML use case and activity diagrams. | 2,3 |
23 | Software evolution, types of challenges and their management. Lehman law. | 1 |
24 | Software metrics: ciclomathic complexity, LOC. object oriented metrics: Chidamber and Kemerer suite. Unit Testing, code coverage metrics, regression testing. | 1 |
Learning Assessment
Learning Assessment Procedures
Examples of frequently asked questions and / or exercises
Describe the goals of a design pattern