A.A. di erogazione 2019/2020
Insegnamento obbligatorio

Laurea Magistrale in INFORMATICA
 (A.A. 2019/2020)
Anno di corso: 
Tipologia di insegnamento: 
Settore disciplinare: 
Primo Semestre
Ore di attivita' frontale: 
Dettaglio ore: 
Lezione (72 ore)

The main goal is to provide the fundamentals of Software Engineering. More specifically the main topics presented are: Software life cycles, System requirements specification, Verification and validation along with some concepts on how to manage software development. Moreover, the main computational and architectural paradigms of sequential, concurrent and distributed systems will be presented. The expected outcomes involve both the theoretical knowledge of the above topics and the ability to identify the right methods and techniques to face software development, starting form the definition of the life cycle down to cost estimation.
More specifically, the expected outcomes are:
1. Knowledge and comprehension skills
1.1. Knowledge of the characteristics of the software development process and of its products (requirements specification, models, test cases, development plans etc);
1.2. Knowledge of the issues and methods of requirements analysis;
1.3. Knowledge of the issues of software verification and validation and of the strategies to tackle such issues;
1.4. Knowledge of the architectural and computational models of software systems.
2. Application of the knowledge and comprehension skills
2.1. Be able to apply different techniques and requirements specification languages (DFD, Petri Nets, Z, TRIO);
2.2. Be able to apply costs estimation techniques (By analogy, COCOMO, Function Point);
2.3. Be able to apply different testing approaches and to evaluate the obtained results;
2.4. Be able to apply the different architectural and computational paradigms when defining the system characteristics.
3. Autonomous thinking
3.1. Be able to evaluate the best fitting approach, in term of development process, based on requirements and constraints;
3.2. Be able to choose the specification techniques and languages depending on the characteristics of the system;
3.3. Be able to choose the validation and verification techniques with respect to the characteristics of the system, the related cost and the degree of confidence that has to be met;
3.4. Be able to choose the paradigms and the computational models depending on the characteristics of the system.
4. Ability to learn
4.1. Thanks to the skills, developed during the course, to relate the technique, methods and tools to both software main features and software development, the student is able to learn new techniques, methods and tools and to refine its ability to apply what he/she learned in an autonomous way.
5. Communication skills
5.1. Be able to use the formalisms used to analyze, specify and design software systems.

The usual knowledge of Computer Science and/or Computer Engineering acquired during B.Sc programs in such fields

The topics are:
1. Historical facts about software engineering, Software life cycles and their practical usability (6h)
2. Requirements specification: characteristics and goals. Languages for Software specification: Data Flow Diagrams (4h), Petri Nets (12h), Z (4h), temporal logics (TRIO) (4h)
3. Validation and Verification: problems, principles and theory (2h). Static analysis techniques (2h), Dynamic analysis techniques (2h). Symbolic execution (4h).
4. Cost estimation: Principles and techniques (Function points and COCOM-II) (4h)
5. Programming languages paradigms (procedural vs functional vs logic languages). Examples of programming languages and their applications (2h). Features of static procedural languages (2), stack-based languages (6h), dynamic languages (2h). Semantics of parameters passing (2h). Principles of functional languages and an example (Scheme48) (4h). Principles of logic languages and an example (Prolog) (4h)
6. Concurrent and Distributed models (semaphores vs monitors vs rendezvous, shared memory vs message passing, RPC, RMI, MOM) (4h)

Lectures and practical activities. The former aim at illustrating the main problems characterizing the software development process along with the main principles and techniques used to develop software. The latter aim at putting in practice the techniques and the languages (programming, specification, etc) presented during lectures.

Written examination based on solution of problems and theoretical questions
The mark is expressed in thirtieths. The final exam is considered passed if the student has obtained a grade of not less than 18/30.

• Fundamentals of Software Engineering, 2nd Ed., C. Ghezzi, M. Jazayeri, D. Mandrioli, Prentice Hall (2003)
• C. Ghezzi, M. Jazayeri, "Programming Language Concepts“, Wiley
Materials provided by the instructor during classroom such as slides and scientific papers.

The lecturer receives by appointment that can requested by sending an email to the following address Emails must report the name of the student.

Cerchi il programma? Potrebbe non essere ancora stato caricato o riferirsi ad insegnamenti che verranno erogati in futuro.
Seleziona l‘anno in cui ti sei immatricolato e troverai le informazioni relative all'insegnamento del tuo piano di studio.

A.A. 2020/2021

Anno di corso: 2
Curriculum: GENERICO

A.A. 2018/2019

Anno di corso: 1
Curriculum: GENERICO