SOFTWARE ENGINEERING FUNDAMENTALS

Degree course: 
Corso di Second cycle degree in COMPUTER SCIENCE
Academyc year when starting the degree: 
2018/2019
Year: 
1
Academyc year when helding the course: 
2018/2019
Course type: 
Compulsory subjects, characteristic of the class
Language: 
English
Credits: 
9
Period: 
First Semester
Standard lectures hours: 
72
Detail of lecture’s hours: 
Lesson (72 hours)
Requirements: 

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

Final Examination: 
Orale

Written examination based on solution of problems and questions

Assessment: 
Voto Finale

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 are:
• Knowledge of the software development process and its outcomes such as requirements specification, test cases etc.
• Knowledge of main requirement analysis methodologies and of some languages such as Data Flow Diagrams, Petri Net, Z, temporal logics.
• Knowledge of the principles and methods for validating/verifying software such as data flow analysis, black box and white box testing, mutational analysis.
• Knowledge of computational and architectural models of IT systems
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, staring form the definition of the life cycle down to cost estimation.

• Historical facts about software engineering, Software life cycles and their practical usability.
• Requirements specification: characteristics and goals. Languages for Software specification: Data Flow Diagrams, Petri Nets, Z, temporal logics (TRIO)
• Validation and Verification: problems, principles and theory. Static analysis techniques, Dynamic analysis techniques. Symbolic execution.
• Cost estimation: Principles and techniques (Function points and COCOM-II)
• Programming languages paradigms (procedural vs functional vs logic languages). Examples of programming languages and their application.
• Concurrent and Distributed models (semaphores vs monitors vs rendezvous, shared memory vs message passing, RPC, RMI, MOM)

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

Convenzionale

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 opractice the techniques and the languages (programming, specification, etc) presented during lectures.

The teacher receives by appointment. By sending an email to the following address alberto.coenporisini@uninsubria.it
you will receive an appointment within 5 working days