IA/0071 - ADVANCED PROGRAMMING AND ELEMENTS OF SOFTWARE ENGINEERING
Academic Year 2021/2022
Free text for the University
LUCA DIDACI (Tit.)
- Teaching style
- Lingua Insegnamento
|[70/89] ELECTRICAL, ELECTRONIC AND COMPUTER ENGINEERING||[89/30 - Ord. 2016] INFORMATICA||5||50|
|[70/89] ELECTRICAL, ELECTRONIC AND COMPUTER ENGINEERING||[89/66 - Ord. 2016] INFORMATICA ON LINE E IN PRESENZA (BLENDED)||5||50|
The Advanced Programming and elements of Software Engineering course has two main objectives. The first goal is to provide the instruments to understand the basics of software design on both small and medium scale, using a modular approach. This means that the students are required to learn the methods and, moreover, the fundamentals such methods are based on, so that they can extend what they learned in the further course of study and professional practice. The second goal is to strengthen programming skills, especially in C language, and knowledge of fundamental algorithms for information processing.
Knowledge and understanding skills
At the end of the course it is expected that the student knows
- the software engineering fundamentals as a science that studies tools and methodologies for planning, developing and evaluating complex software applications.
- the principal design patterns and their implementation in C programming language
- some basic algorithms, data structures and their implementation in C for complex problem solving
- the main methods for calculating the computational complexity of an algorithm
Ability to apply knowledge and understanding skills
At the end of the course it is expected that the student is able to:
- understand the principles and organization of modern software production processes, with particular reference to modularity, information hiding and abstraction.
- design and implement software based on the principal information processing algorithms and using the principal design patterns
- apply the learned concepts in the development of C programs.
At the end of the course it is expected that the student is able to:
- assess the degree of modularity and portability of software products
- evaluate the pros and cons of using a specific design pattern to a particular problem
- evaluate the computational complexity of algorithms
At the end of the course, the student is expected to have acquired adequate language skills in relation to the content of the course, so that it can be comprehensively understood by an interlocutor with adequate technical knowledge and to convey the essential concepts also to an interlocutor not technically competent.
Ability to learn independently
At the end of the course, the student is expected to have the ability to deepen his knowledge in the field of software design and development. The student will be able to extend his design and programming skills to object-oriented programming languages and to more complex software systems.
Prerequisites in terms of programming skills and C language knowledge, in particular the ability to develop simple C programs, using conditional and iterative constructs, simple and structured data types, standard I/O, operate on text files, good comprehension of functions.
In detail, the student should know
• Syntax, data types, and basic constructs of C language.
• simple data types (int, float, double, char) and structured data types (vectors, struct).
• Knowledge and understanding of pointers and pointers arithmetic.
• Knowledge of functions and understanding of the parameter passing mechanism.
• Basic knowledge about dynamic memory management (allocation and de-allocation of memory)
• File Operations in C.
Introduction to the course
Software Engineering: overview
Principles of software engineering
- The modular structure and its representation
- Interface, implementation and information hiding
- Notation for design
- Module Categories
- Design-specific techniques for change
- Refining by successive steps
Programming in C
C structured types and pointers use
Modularization functions and techniques
Static and dynamic data structures and their realization in C
- representation of data in memory and handling of memory
- linked structures
- trees and lists
- purpose and role of design patterns
- description of some design patterns
- implementation in C
Basic algorithms and their implementation in C
Study of Computational Complexity
Implementation of search and sort algorithms in C
- iterative sorts (bubble sort, selection sort)
- recursive sorts (mergesort, quicksort)
Algorithms and data structures for graph manipulation
The course is based on a traditional didactic approach (frontal lessons) that combines a significant part of the exercises on all the topics of the program (home-based and classroom exercises, to which interactive exercises are held in the classroom).
To meet specific teaching needs related to the epidemiological situation, the possibility of live streaming or recorded lessons could be provided. Furthermore, the exercises can be carried out by means of remote interaction forms with the available IT supports.
The approximate plan is:
Lectures: 35 hours
Exercises: 15 hours
Tutorship: 35 hours
Verification of learning
The exam consists of a written test, including theory questions and programming exercises in C.
The written test usually consists of some exercises to verify the actual acquisition of expected learning outcomes, touching most of the program at various levels of detail and including both programming exercises and theory questions.
The evaluation is objective, based on the percentage of correctness of each response (which is associated with a fixed score, not known to the candidate, based on the difficulty level).
The test is evaluated with a maximum score of 33. In case of a score greater than or equal to 32, a full mark (‘lode’) is given. In case of a score equal to 31, the final score is 30/30.
If the epidemiological situation requires it, the evaluation could be carried out through an online fiduciary self-assessment test, and subsequently a final interview.
The student is stimulated to go beyond simple study aimed at solving an exercise, applying to problems that require the ability to move from the abstract concept to its practical application. The student is always asked to motivate the answer provided. Such a task-based approach makes it possible to assess the skills and ability to apply them to simple problems, depending on the level achieved, but also to evaluate communication skills and judgment autonomy.
The number of exam sessions is defined following the Faculty regulation.
Course notes, provided to the students through the course website and corrected/updated every year.
- Sommerville - "Software Engineering" 10 ed. , 2017
- Linguaggio C 5/ed- Di: Alessandro Bellini e Andrea Guidi - ISBN 9788838668210 (english version available)
- Algoritmi in C. Di: Robert Sedgewick (english version available)
T.H. Cormen, C.E. Leiserson, R.L. Rivest, C. Stein, Introduzione agli algoritmi e strutture dati (english version available)
Other consultation texts
C Primer Plus (Sixth Edition) - Stephen Prata
- Some Software Engineering Principles
- On the Criteria To Be Used in Decomposing Systems into Modules
- Designing Software for Ease of Extension and Contraction
The teaching material will be available on the University's moodle site
The teaching material is used by the teacher to create slides projected into classroom lessons. It is essential for students to take notes in the classroom and to confront the teaching material at home. Exercises will be available, and they will be corrected in the classroom.