SOFTWARE ENGINEERING

Academic Year 2019/2020 - 1° Year
Teaching Staff: Orazio TOMARCHIO
Credit Value: 9
Scientific field: ING-INF/05 - Information processing systems
Taught classes: 49 hours
Exercise: 30 hours
Term / Semester:
ENGLISH VERSION

Learning Objectives

Knowledge and understanding
Knowledge of the principles, methodologies and the main tools in the software development process, with particular reference to the requirements analysis and specification, the definition of system architecture, the design and testing. Knowledge of the most common design patterns and understanding their role in software design and development. Knowledge of UML standard notation for modeling software systems.

Applying knowledge and understanding
Be able to design a software system, planning the various activities of the software life cycle and producing documents in accordance with industry standards. Be able to model different views of a software system using the standard UML notation.


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.


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