Foundations of Software Engineering

Degree course: 
Corso di Second cycle degree in INFORMATICA
Academyc year when starting the degree: 
2015/2016
Year: 
1
Academyc year when helding the course: 
2015/2016
Course type: 
Compulsory subjects, characteristic of the class
Credits: 
9
Standard lectures hours: 
72
Detail of lecture’s hours: 
Lesson (72 hours)
Requirements: 

None

Final Examination: 
Orale
Assessment: 
Voto Finale

Course Objectives and Expected Outcomes
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.

Evaluation procedure
Written examination based on solution of problems and questions

• 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.