Learning outcomes of the course unit
The course starts from the basics of the well-know Software Crisis phenomenon. It then passes through the study of classic development models. It eventually ends to provide the basic of architectural aspects of modern software systems.
The course is structured into frontal lessons and a set of directed exercitations on the realization of Java-based Web applications.
Taking Dublin Indicators into account:
Knowledge and understanding
The course introduces the first concepts related to software engineering. Particular emphasis is given to the understanding of the classical methodologies. The reference text is in Italian, but standard English terminology is commonly used during the lessons as goodwill to the consultation of the international scientific literature.
Applying knowledge and understanding
The knowledge presented is always applied to the resolution of specific problems. The exercises that accompany the course are focused on solving exercises and problems, particularly in the development of Java-based Web applications. Often the solution methods are presented in the form of an algorithm, developing in students the ability to structure procedures that are useful in many parts of computer science, and not only in the study of the computer architecture.
The exercises, which are proposed in relation to the theoretical part presented in class, can be solved individually or in groups. The comparison with classmates, work at home or in classroom, favors the development of specific skills in students to enable the explanation of arguments to fellows and teachers. Often the exercises can be solved in many different ways and listening to the solutions proposed by other allows students to develop the ability to identify common structures, beyond the apparent superficial differences.
The numerous discussions on the different methods to solve problems allow students to improve communication skills. Specific communication of computer technology is also usually used during classes and exercises.
The study of the origins of technological solutions and their introduction motivated by qualitative and quantitative considerations contributes to the students’ ability to learn in a deep way and not just superficial and repetitive. The knowledge acquired is never rigid and definitive, but it is adaptable to any evolution and change of perspective and context.
Programming experiences in Java, C++ or C#.
Course contents summary
Part 1 - Software Development Processes
Part 2 - Languages for Software Modeling
Part 3 - Requirements Analysis
Part 4 - Software Architectures
Part 5 - Development Environments
Part 6 - Software Design and Coding
Part 7 - Testing, Verification and Validation
Part 8 - Methods for Software-Project Management
Software Development Processes
The process of software development: economic, organizational and methodological, the working group; software product and process, and the life cycle of software systems, software development models: traditional waterfall model, evolutionary model and fountain, other models.
Languages for Software Modeling
Software modeling: models and specification languages, the UML, use of UML within the projects; CASE Tools.
Analysis and specification of requirements: the interaction with the customer and the formalization of the requirements, the method of use cases and its applications, the results of the analysis process.
The software architecture: software architecture for small systems, client-server architectures, multi-tier and web, the MVC pattern and its applications; reuse of the server components and multi-channel approach.
The Java language, the architecture of Java 2, Java and object properties; multi-tier systems in Java, Java Web systems; nods to the C # language and architecture. NET.
Software Design and Coding
Design of software systems: principles and design methods, principles of modularity and encapsulation, the object-oriented design, the design patterns and their use, rules of code writing.
Testing, Verification and Validation
The test phase, developments partial and partial tests (white box and black box); aggregation tests, tests on real data, regression testing, testing, entry into production and maintenance; case study.
Methodologies of Software-Project Management
The operational management of a project: setting and definition of objectives, analysis of constraints, choice of tools and architectures; teamwork; useful metrics and charts (Gantt, PERT, ...), the problem of documentation, communication within and out a team; evolution and maintainability of systems, evolutionary maintenance.
C. Ghezzi, A. Fuggetta, S. Morasca, A. Morzenti, M. Pezze, Ingegneria del Software, Mondadori Informatica, II edition
Simon Bennett, John Skelton, Ken Lunn, UML, McGraw-Hill
Bruce Eckel, Thinking in Java, available at http://www.mindview.net, II edition
Bruce Eckel, Thinking in Patterns, available at http://www.mindview.net
E. Gamma, R. Helm, R. Johnson, J. Vlissides, Design Patterns, Addison-Wesley
Classes and laboratory exercizes
Assessment methods and criteria
Learning outcomes and methods of verification
Being able to understand and make appropriate use of techniques relating to the analysis, design, realization, testing and validation of software. Being able to work in the Java programming language in the realization of simple architectures. Knowing the basics of project management. Know and be able to use the main techniques of development of Java-based Web applications.
The exam consists of a written test. The written test can be completed with an oral session upon request from the student.