SOFTWARE ENGINEERING FUNDAMENTALS

Degree course: 
Corso di Second cycle degree in COMPUTER SCIENCE
Academyc year when starting the degree: 
2019/2020
Year: 
1
Academyc year when helding the course: 
2019/2020
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 knowledge of Computer Science and/or Computer Engineering acquired during B.Sc programs in such fields

Final Examination: 
Orale

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.

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 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 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)

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

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

The lecturer receives by appointment that can requested by sending an email to the following address alberto.coenporisini@uninsubria.it- Emails must report the name of the student.