Course teached as: B027540 - ADVANCED TECHNIQUES AND TOOLS FOR SOFTWARE DEVELOPMENT Second Cycle Degree in COMPUTER SCIENCE Curriculum RESILIENT AND SECURE CYBER PHYSICAL SYSTEMS
Teaching Language
Italian/English
Course Content
Test automation of programs and Test-Driven Development. Build Automation and Continuous Integration, using the “cloud”. All these tools will be connected together for an automated process of development and releasing. We will also use tools for code quality and tools for virtualizing the development and test environment. We will also always keep collaborative development into consideration.
slides and tutorials available from the Moodle site of the course.
The details of the books for the course and for the exam will be in the Moodle site of the course.
Learning Objectives
We aim at teaching advanced techniques based on automatic testing of software, in particular, Test-Driven Development. We will deal with several aspects of testing: Unit Testing (testing a single component), Integration Testing (testing several components together) and Functional Testing (testing the user interface, both of desktop applications and web applications). With these techniques we will be able to implement quickly and safely even complex programs. Tests will also represent specifications of our software. Moreover, tests will drive the development of clean and modular components.
We will use tools for code versioning (git, both locally and socially, using Github) and for Build Automation, that is, the automatic compilation and testing of the entire application. We will use these tools for Continuous Integration, using dedicated open source servers also on the cloud (e.g., Travis-CI). All these tools will be connected together to continuously monitor software even when developed by several members of a team.
In this process we will also use tools for analyzing the code quality.
We will also use tools to virtualize the development and testing environment to make the whole process easily reproducible (e.g., Docker).
Throughout the lessons, we will use tools to increment the productivity, most of all the Eclipse IDE.
All the techniques and tools will in the end applied to the development of Java web applications(*), testing single components and the final web site. In this part we will use the framework Spring Boot.
(*not included in the course of 6 CFU)
At the end, students should be able to develop with TDD technologies and to write unit, integration and functional tests and to set up a continuous integration mechanism with build automation to keep track of tests and code quality.
Prerequisites
Good knowledge of object-oriented programming and Java.
Teaching Methods
class lessons and some laboratories
Further information
Frequency of lessons and exercises: recommended but not mandatory.
Further possible additional information (including meetings for questions) will be published in the Moodle site of this course, during the course.
Type of Assessment
The exam consists of a project to develop at home and of an oral exam.
The project is proposed by the student (or group of students) and approved by the teacher, using all the techniques shown in the course. The project should prove the skills aquired by the students in the techniques, tools and methodologies shown in the course. For the course of 9 CFU, the application implemented in the project must be a web application.
The oral exam consists of questions on the project and on the subjects taught in the course.
The final grade will take into consideration the quality of the project and the answers at the oral exam.
Course program
We aim at teaching Test Driven Development methodologies under many aspects, from Unit Testing (testing a single component) to Functional Testing (testing the application user interface). Tests will represent a specification of the software and a mechanism to easily and quickly develop modular and clean software.
We will use Version Control systems, like Git, and tools for the Build Automation, so that the compilation and all the tests will be executed by Continuous Integration Servers. During this process other tools for checking the code quality will be used.
All these tools and development processes are meant for collaborative development within a development team. With this respect, other tools for keeping the development process easily reproducible will be used. Throughout the course we will rely on IDE support (e.g., Eclipse) to keep the development process easy and comfortable for the developers.