Teaching Activities

Doctoral Lectures

Testing Automation

Doctoral Course in Information Technology and Electrical Engineering for the Department of Electrical Engineering and Information Science (DIETI) of the University Federico II of Naples

16 hours (3 ECTS)


I Lesson - Introduction: The role of Testing in software processes – Testing Theory – Fundamental Definitions – Dijkstra Thesis - Quality of Software Testing Techniques – Measure of Effectiveness and Efficiency – The Termination Problem – Testing Automation

II Lesson - Combinatorial Testing: Partition Testing – Combinatorial Testing – K-way Testing – Boundary values Testing – Decision Tables – Theoretical and Experimental Comparisons

III Lesson - Random Testing: Random Testing - Monkey Testing – Random Testing Termination Problem – Effectiveness and efficiency – Search Based Software Testing - Theoretical and Experimental Comparisons

IV lesson - Systematic Testing: Automatic exploration of interactive software – A unified testing technique – Parameters selection – Problems and limitations - Conclusions


Techniques and Tools for Mobile Testing Automation

Main Academic Teaching Activities for University Federico II of Naples

Operating Systems for Mobile, Cloud and IoT

Corsi di Laurea Magistrale in Informatica per l’Università “Federico II”, per l’anno accademico 2021/22


Syllabus (english)

Course Introduction. Recalls from the Operating Systems course. Operating system concept. Operating systems architecture. Process management. Process scheduling.

Synchronization between processes. InterProcess Communication. Memory management. File System. User Interface. System Calls. ecurity.

Mobile Operating Systems. History of Mobile Operating Systems. Notes on Symbian and iOS. Android: definition and fundamental characteristics. Historical evolution of Android. Android Architecture. Comparisons with iOS and Linux. Android SDK. Introduction to Android Studio. Android SDK. ADB and direct shell interaction. File System on Android. Bootloader. Android source code. Notes on the rebuild and modification of the Android framework. Development of Android applications: Hello, World. Programming languages: Java and Kotlin. Android Virtual Machines: Dalvik and ART. Building and running Android apps. Gradle scripts. Android Manifest. Android app programming. Static resources: layout, assets, strings and internationalization, graphics, styles and themes. Activity and Context objects. Static resources access.

Outline of graphic widgets and their use. Life cycle of activities and fragments. Intent and calls. IPC between Activity. Competition in Android. Thread and AsyncTask. Services: Foreground and Background Services, Started and Bound Services. Notification Services and Broadcast Receivers. WorkManager. Energy optimization: Doze mode and stand-by mode. Monitoring of resources and energy consumption. Memory leaks in Android. Sensors in Android. Access to sensors and best practices. Location tracking in Android. Best practices: accuracy, frequency and latency. Location permissions. Data sharing techniques between apps and components. Sharing between components of an app: File, Shared Preferences and SQLite Database. Sharing between apps: Content Provider. External sharing: access to web services and remote resources. Data sharing via Firebase. Introduction to security in Android. Security mechanisms inherited from the operating system. Sandboxes and partitions. Access to external SD memories. Permissions model in Android. Best practices related to permissions. Best practices related to Android security.

Virtualization. Hypervisors. Virtual Machines. Paravirtualization. Virtualization examples.

Cloud Computing. Cloud Service Models. AWS Infrastructure: Core AWS Services, Database Services, Developer Tools, Data Analysis and Machine Learning Tools.

Application examples. Serverless Computing: Scalability and Elasticity. On-premise approach. Infrastructure as a service. Function as a service approach. AWS Lambda. Fog and Edge Computing: practical usage scenarios. Notes on the Message Broker Kafka.

Real Time Operating Systems. Event Driven and Time Driven operating systems. Real Time Scheduling. Rate Monothonic Scheduler. EDF Scheduler. Hard Real Time and Soft Real Time tasks. Causes of unpredictability of process execution times. Implementation of real time scheduling policies in Linux systems. Real time programming languages. Real time Linux distributions.

Internet of Thngs. Introduction to the Internet of Things. Application areas: Smart Agriculture, Smart Cars, Smart Cities, Smart Home, Smart Metering. Industry 4.0 and Digital Twins. Sensors. Research fields: Signal processing, biometrics. Agents. Rational and irrational agents. Biometrics: definition and taxonomies. Architecture of a biometric system. Fingerprint. Face recognition. Retina recognition. Iris recognition. Behavioral identity and gaze. Holographic signature recognition. Advantages, disadvantages and comparisons between different techniques. Application to IoT. Problems of communication between IoT devices. Shared buses, Publish / Subscribe pattern. IoT in the automotive. IoT in the avionics sector: the case of the Airbus. Industrial Internet of Things. Problems relating to the choice of database and infrastructure depending on the frequency of data generation. Temporal databases: InfluxDb.

Green IT. Problems and perspectives of the energy sustainability of IT activities. Discussion on the energy consumption of some IT activities. Optimization of software energy consumption. Green requirements. Influence of design choices. Programming techniques with energy optimization.



Syllabus (italiano):

Introduzione al corso. Richiami dal corso di Sistemi Operativi. Concetto di sistema operativo. Architettura dei sistemi operativi. Gestione dei processi. Scheduling dei processi.

Sincronizzazione tra i processi. InterProcess Communication. Gestione della memoria. File System. User Interface. System Calls. Sicurezza e protezione.

Mobile Operating Systems. Caratteristiche e peculiarità. Storia dei Mobile Operating Systems. Cenni a Symbian e iOS. Android: definizione e caratteristiche fondamentali. Evoluzione storica di Android. Android Architecture. Confronti con iOS e Linux. Android SDK. Introduzione ad Android Studio. Android SDK. ADB e interazione diretta via shell. File System su Android. Bootloader. Android source code. Cenni alla ricostruzione e modifica del framework Android. Cenni allo sviluppo di applicazioni Android: Hello, World. Linguaggi di programmazione: Java e Kotlin. Android Virtual Machines: Dalvik e ART. Processo di building ed esecuzione di una app Android. Gradle scripts. Android Manifests. Programmazione di app Android. Risorse statiche: layout, assets, stringhe e internazionalizzazione, grafica, stili e temi. Activity e oggetto Context. Accesso a risorse statiche.

Cenni ai widget grafici e al loro utilizzo. Ciclo di vita delle Acivity e dei Fragment. Intent e chiamate. IPC tra Activity. Concorrenza in Android. Thread e AsyncTask. Services: Foreground and Background Services, Started and Bound Services. Notification Services e Broadcast Receivers. WorkManager. Ottimizzazione energetica: Doze mode e stand-by mode. Monitoraggio delle risorse e del consumo energetico. Memory leaks in Android. Sensori in Android. Metodi di accesso ai sensori e best practices. Rilevamento della posizione in Android. Best practices: accuracy, frequency and latency. Permessi di accesso alla posizione. Tecniche di condivisione dei dati tra app e componenti. Condivisione tra componenti di un app: File, Shared Preferences e Database SQLite. Condivisione tra app: Content Provider. Condivisione esterna: accesso a servizi Web, risorse remote. Condivisione dei dati via Firebase. Introduzione alla sicurezza in Android. Meccanismi di sicurezza ereditati dal sistema operativo. Sandbox e partizioni dei file system. Accesso a memorie SD esterne. Modello dei permessi in Android. Best practices relative ai permessi. Best practices relative alla sicurezza in Android.

Virtualizzazione. Hypervisors. Virtual Machines. Paravirtualization. Esempi di virtualizzazione.

Cloud Computing. Cloud Service Models. AWS Infrastructure: Core AWS Services, Database Services, Developer Tools, Data Analysis and Machine Learning Tools.

Esempi di applicazione. Serverless Computing: Scalabilità ed Elasticità. Approccio on-premise. Infrastructure as a service. Approccio Function as a service. AWS Lambda. Fog ed Edge Computing: scenari pratici di utilizzo. Cenni al Message Broker Kafka.

Sistemi Operativi Real Time. Sistemi operativi Event Driven e Time Driven. Scheduling Real Time. Rate Monothonic Scheduler. EDF Scheduler. Task Hard Real Time e Soft Real Time. Cause di imprevedibilità dei tempi di esecuzione dei processi. Implementazione di politiche di scheduling real time in sistemi Linux. Linguaggi di programmazione per il real time. Distribuzioni di Linux real time.

Internet of Thngs. Introduzione all'Internet of Things. Ambiti applicativi: Smart Agriculture, Smart Cars, Smart Cities, Smart Home, Smart Metering. Industria 4.0 e Digital Twins.

Sensori. Ambiti di ricerca: Elaborazione di segnali, biometria. Agenti. Agenti razionali e irrazionali. Biometria: definizione e tassonomie. Archiettura di un sistema biometrico. Impronta digitale. Riconoscimento del volto. Riconoscimento della retina. Riconoscimento dell'iride. Identità comportamentale e gaze. Riconoscimento della firma olografa. Vantaggi, svantaggi e confronti tra le varie tecniche. Problematiche applicate dell'IoT. Problematiche della comunicazione tra i dispositivi IoT. Bus condivisi, pattern Publish/Subscribe.

IoT nell'automotive. IoT nel settore avionico: il caso dell'Airbus. Industrial Internet of Things. Problematiche relative alla scelta del database e dell'infrastruttura in dipendenza della frequenza di generazione dei dati. Cenni a database temporali: InfluxDb.

Green IT. Problemi e prospettive della sostenibilità energetica delle attività IT. Discussione sul consumo energetico di alcune attività IT. Ottimizzo del consumo energetico del software. Requisiti green. Influenza delle scelte di progettazione. Tecniche di programmazione con ottimizzazione energetica.



Software Testing

Corsi di Laurea Magistrale in Informatica e in Ingegneria Informatica per l’Università “Federico II”, per l’anno accademico 2020/21, 2021/22


Syllabus (english)

Theoretical elements of software testing: Definitions - Undecidable problems - Taxonomy of testing activities

Testing quality: Adequacy - Accuracy - Repeatability – Fault finding - Effectiveness - Efficiency

Test cases specification: Input - Output - Oracles - Preconditions and postconditions

JUnit: Introduction to JUnit – Implementation of Unit Tests with JUnit on Java Programs - Assumptions and Assertions - Exception Testing - Dynamic and Parametric Tests - Data Driven Testing with JUnit

Black Box Testing: Testing based on requirements and use case scenarios - Test with equivalence classes and boundary values - Tools and techniques for combinatorial generation of test cases - Testing with decision tables.

White Box Testing: Coverage metrics - Tools for the automatic measurement of code coverage.

Integration testing and isolation testing: Testing in isolation with drivers and stubs - Dependency graphs - Strategies for integration testing: top-down, bottom-up, sandwich - Testing with Mock Objects - Introduction to Dependency injection - Frameworks for creating Mock Objects

User interface testing: Character user interface (CUI) testing techniques - GUI testing - Modeling of GUIs with finite state machines. State explosion problem and equivalent state technique - GUI testing tools - Validation of inputs.

User Session Techniques: Capture & Replay techniques for generating user interface tests - Issues related to the generation of robust locators - Issues related to the replicability of captured tests - Capture & Replay tools for Web applications

Testing automation techniques: automation in the generation / execution / evaluation of the outcome of test cases - Automatic generation and evaluation of oracles - Crash testing - Smoke Testing - Regression Testing.

Random testing: Characteristics and parameters of random testing - Random testing termination problem - Reduction and prioritization of test suites.

Mutation Testing: Test case mutation - Mutation Analysis - Mutation based Testing - Mutants generation tools - Search based software testing: EvoSuite.

Experience based Testing: Exploratory Testing - Error Guessing and Checklist based Testing - Beta Testing - CrowdTesting - CrowdTesting Platforms - Software Testing Gamification - Unit Testing with Code Defenders

Continuous Integration and testing: Notes on techniques, languages ​​and tools for build automation - Introduction to techniques and tools for managing concurrent versions - Automation of testing activities in Github with Github Actions

Static analysis of the source code: Static analysis techniques - Automatic static analysis tools: Checkstyle, PMD, Findbugs, Android Lint – Introduction to the use of SonarQube for continuous software quality monitoring

Debugging: Fault localization and correction - Techniques for debugging: brute force, backtracking, elimination of causes - Debugging tools: breakpoints, conditional breakpoints, watch, watchpoint.

Android application testing: Introduction to Android and Android App Programming - Unit Testing using JUnit and Robolectric - GUI testing using Robotium and Android Espresso - Use of Espresso Recorder for Capture & Replay of test cases - System testing: use of UIAutomator - Low-level testing tools: Monkey - Monitoring tools - Memory leaks testing - Systematic testing tools: Android Ripper - Remote resource application testing: Cloud testing with Firebase TestLab, Alpha Testing, Beta Testing.


Syllabus (italiano):

Elementi teorici del testing software: Definizioni – Problemi indecidibili – Tassonomia delle attività di testing

Qualità del testing: Adeguatezza - Precisione - Ripetibilità - Capacità di trovare i difetti - Efficacia – Efficienza

Specifica dei casi di test: Input – Output – Oracoli – Pre e post-condizioni

JUnit: Introduzione a JUnit - Implementazione di test di unità con JUnit su programmi Java – Assunzioni e asserzioni – Testing delle eccezioni – Test dinamici e parametrici – Testing Data Driven con JUnit

Testing Black Box. Testing basato sui requisiti e sugli scenari dei casi d'uso - Test con classi di equivalenza e valori limite - Strumenti e tecniche per la generazione combinatoriale dei casi di test - Testing con tabelle di decisione.

Testing White Box – Modelli e metriche di copertura - Strumenti per la misura automatica della copertura del codice.

Testing di integrazione e testing in isolamento – Tecniche di testing in isolamento con driver e stub – Grafi delle dipendenze - Strategie per il testing di integrazione: top-down, bottom-up, sandwich – Testing con Mock Objects – Cenni di dependency injection – Framework per la creazione di Mock Objects

Testing dell’interfaccia utente – Tecniche di testing delle interfacce utente a caratteri - Testing delle GUI - Modellazione delle GUI con macchine a stati finiti - Problema dell'esplosione degli stati e tecnica degli stati equivalenti – Librerie a supporto del testing di GUI - Validazione degli input.

Tecniche User Session: Tassonomia delle tecniche Capture & Replay per la generazione di test sull'interfaccia utente - Problematiche relative alla generazione di locatori robusti – Problematiche legate alla replicabilità dei test catturati – Strumenti di Capture & Replay per applicazioni Web

Tecniche di testing automation: Automazione nella generazione/esecuzione/valutazione dell'esito dei casi di test - Generazione e valutazione automatica di oracoli - Crash testing - Smoke Testing - Regression Testing.

Random testing: Caratteristiche e parametri del random testing - Problema della terminazione del random testing - Tecniche e strumenti per l’esplorazione automatica della GUI - Riduzione e prioritizzazione delle test suite.

Mutation Testing: Test case mutation – Mutation Analysis – Mutation based Testing – Strumenti per la generazione di mutant - Search based software testing: utilizzo di EvoSuite.

Experience based Testing: Exploratory Testing – Error Guessing e Checklist based Testing – Beta Testing - Crowdtesting – Piattaforme di CrowdTesting - Software Testing Gamification – Testing di unità con Code Defenders

Testing in Continuous Integration: Cenni su tecniche, linguaggi e strumenti per la build automation - Cenni su tecniche e strumenti per la gestione delle versioni concorrenti – Automazione di attività di testing in Github con Github Actions

Analisi statica del codice sorgente: Tecniche per l’analisi statica - Strumenti automatici di analisi statica: Checkstyle, PMD, Findbugs, Android Lint - Cenno all’utilizzo di SonarQube per il monitoraggio continuo della qualità del software

Debugging: Localizzazione e correzione dei difetti - Tecniche per il debugging: forza bruta - backtracking, eliminazione delle cause - Strumenti per il debugging: breakpoint, breakpoint condizionali, watch, watchpoint.

Testing delle applicazioni Android. Introduzione al sistema Android e alla programmazione di app Android - Testing di unità: utilizzo di JUnit e Robolectric - Testing della GUI: utilizzo di Robotium e Android Espresso - Utilizzo di Espresso Recorder per il Capture & Replay di casi di test - Testing di sistema: utilizzo di UIAutomator - Strumenti di testing a basso livello: Monkey - Strumenti di monitoraggio - Testing dei memory leaks - Strumenti di testing sistematico: Android Ripper - Testing di applicazioni con risorse remote: Cloud testing con Firebase TestLab, Alpha Testing, Beta Testing.


Object Orientation

Corsi di Laurea in Informatica per l’Università “Federico II”, per l’anno accademico 2021/22


Course Program (italiano):

La programmazione orientata agli oggetti. Paradigmi di programmazione. Paradigma object oriented. Concetti di astrazione dei dati, di definizione di tipi personalizzati, e di incapsulamento.

Il Linguaggio Java. Introduzione e storia di Java. La JVM. Il JDK. Ambienti di sviluppo (IDE): Eclipse. Compilazione ed esecuzione. Il bytecode. Tipi Primitivi e Riferimenti. Classi e oggetti. Creazione e distruzione di oggetti. Garbage Collector. Attributi e metodi. Visibilità. Costruttore. Operatori aritmetici e logici. Costanti. Cicli. Passaggio dei parametri. Array e Matrici. Ciclo for potenziato. Stringhe. Ereditarietà e polimorfismo. Overloading e overriding. This e super. Classe Object. Classi Contenitore. ArrayList. Generics e Template. Classi Wrapper. Autoboxing e Unboxing. Eccezioni. Costrutto Try-Catch. Gestione delle eccezioni. Throw e Throws. Package e importazione. I/O in Java. Classe scanner. Classe InputStream. Cenni a lettura e scrittura su file. Classi astratte. Interface e implementation. Interfaccia grafica (GUI) in Java con AWT e Swing. Window Builder. Contenitori grafici. Layout. Widget. Eventi e ascoltatori. Comunicazione tra le finestre. Principi di progettazione delle GUI. Jar e Runnable Jar. Documentazione interna del codice con Javadoc. Integrazione con il database.

Debugging. Ricerca e localizzazione dei difetti. Asserzioni e sonde. Esecuzione step by step. Breakpoint e breakpoint condizionali.

Modellazione con UML. Introduzione a UML. Class diagram. Processo di astrazione in UML. CRC cards. Modello di dominio del problema. Corrispondenza tra class diagram e codice sorgente Java. Modello di dominio della soluzione. Sequence diagram. Package diagram.

Concurrent Versioning Systems. Gestione delle versioni del software. Modello lock-modify-unlock. Modello copy-modify-merge. Gestione dei conflitti tra versioni. Cenni a Git. Funzionalità di base di Github.

Sistemi informativi in Java. Pattern architetturale Boundary, Control, Entity (BCE). Pattern Data Access Object (DAO).


Software Engineering 2

Corso di Laurea Specialistica e Magistrale in Ingegneria Informatica dell’Università degli Studi di Napoli “Federico II” per gli anni accademici 2007/08, 2010/11, 2012/13, 2013/14, 2014/15, 2015/16, 2016/17, 2017/18, 2018/19, 2019/20

Course Program (italian - last edition)

Introduzione al corso - Testing: aspetti teorici, tecniche white box, tecniche di testing di unità, tecniche di testing di integrazione, tecniche di testing Object Oriented, tecniche di testing dell'interfaccia utente. Strumenti per il testing - Analisi statica - Debugging - Tecniche per la Testing Automation - Processi di Testing

Framework Android

Manutenzione, Reengineering, Restructuring, Reverse Engineering

Build Automation - Qualità del Software - Stima dei Costi - Metriche del software


Foundations of Computer Science

Corso di Laurea in Ingegneria Biomedica dell’Università degli Studi di Napoli “Federico II”, per l’anno accademico 2009/10

Corsi di Laurea in Ingegneria Elettronica, Biomedica e delle Telecomunicazioni (singolo corso) dell’Università degli Studi di Napoli “Federico II”, per gli anni accademici 2012/13, 2013/14, 2014/15, 2015/16, 2016/17

Corsi di Laurea in Ingegneria Informatica, dell’Automazione, Elettronica, Biomedica e delle Telecomunicazioni (singolo corso) dell’Università degli Studi di Napoli “Federico II”, per gli anni accademici 2017/18, 2018/19, 2019/20, 2020/21


Course Program (italian - last edition)

Concetti fondamentali: problema - algoritmo – esecutore - linguaggio - azioni elaborative – decisioni - Specifica di un problema: dati di ingresso e di uscita - casi di test - sequenza statica e dinamica - cenni sul ciclo di vita del software

Logica delle proposizioni - operatori relazionali - proposizioni semplici e composte - connettivi logici - tabelle di verità - proprietà dei connettivi logici - teorema di De Morgan

Modello di Von Neumann: processore, input, output, memoria, ALU, memoria di massa, bus, clock – microprogrammazione - sistema delle interruzioni - gerarchie di memoria - macchina di Turing - tesi di Church-Turing - Cenni sugli automi a stati finiti - calcolabilità - trattabilità

Informazione: tipo - attributo - valore - cardinalità – simboli - stringhe di simboli - rappresentazione - codifica delle informazioni- misura dell informazione - codifica posizionale - conversione di numeri binari in numeri decimali - conversione di numeri decimali in numeri binari – numeri esadecimali – altre conversioni - overflow - codifica dei caratteri - codice ASCII e ASCII esteso – cenni a Unicode - rappresentazione dei numeri relativi in modulo e segno e in complementi alla base - rappresentazione dei numeri reali in virgola mobile - convergenza digitale - campionamento e quantizzazione - rappresentazione di segnali, immagini, video, audio

Fasi del ciclo di esecuzione di un programma - compilatori e interpreti - precompilatore – analisi lessicale, sintattica e semantica

Introduzione alla programmazione in C e C++ - elementi di programmazione in C++: stream di input, stream di output, cin e cout – namespace.

Variabili: dichiarazione, definizione, assegnazione, distruzione, scope - variabili globali e variabili locali - tabella dei simboli - costanti - costanti definite tramite precompilatore tipi semplici: int, float, char, bool - casting per la conversione dei tipi

Costrutti: costrutti di selezione if-then e if-then-else - validazione dei dati in ingresso - costrutti di selezione: if-then-elseif - switch-case - strutture if innestate - diagrammi del flusso di controllo CFG - costrutti di Iterazione while-do e do-while - costrutto for - equivalenza tra while-do e for.

Dati strutturati – Array: dichiarazione, definizione, accesso – Stringhe: dichiarazione, definizione, accesso, calcolo della lunghezza -Funzioni su stringhe: strcmp, strcpy, strcat - Vettori realizzati con array: visualizzazione del vettore, ricerca lineare di un elemento, eliminazione di un elemento, inserimento ordinato di un elemento – Matrici: accesso agli elementi, memorizzazione di una matrice - Array n-dimensionali – Struct; memorizzazione ed accesso ai campi di una struct - Definizione di tipi con typedef

Puntatori: operatore * - operatore &, puntatori ad array e a strutture – Puntatori a NULL - Allocazione dinamica: operatori new e delete – Heap e Stack

Liste dinamiche: creazione, visualizzazione, distruzione, ricerca di un elemento, inserimento di un elemento, eliminazione di un elemento

File: funzioni fondamentali per l'accesso ai file tramite stream

Sottoprogrammi e funzioni - dichiarazione, definizione ed uso delle funzioni - Passaggio dei parametri: per valore, per puntatore, per riferimento - Passaggio dei parametri alla funzione main - Funzioni ricorsive

Realizzazione di progetti C++ - Compilazione separata – File Header - Indentazione del codice sorgente - linker - Cenni alle librerie fondamentali del C e del C++

Ambienti DevCPP : funzionalità fondamentali e di debugging

Esempi ed esercitazioni

Esempi di algoritmi - Esercizi con le proposizioni logiche - Esempi di codifica – Esercizi sulle conversioni di base – Esercizi sulle rappresentazioni dei dati

Programmazione in C++ - Hello.World - Esempi sui costrutti di selezione e di iterazione – Esempi con array e matrici - Esempi sulle stringhe - Esempi con i puntatori – Esempi con le struct – Esempi di allocazione dinamica - Esempi con le funzioni - Esempi di funzioni ricorsive - Esempio di progetto sviluppato in Dev-Cpp - Esempi con i file


Software Engineering

Corso di Laurea Triennale in Ingegneria Informatica dell’Università degli Studi di Napoli Federico II per gli anni accademici 2005/06, 2008/09, 2009/10, 2011/12

Corso di Laurea in Ingegneria Informatica, nell'ambito del progetto e-learning Federica@Unina, per l’anno accademico 2009/10


Syllabus (italian - last edition)

Obiettivo

Il corso presenta le principali metodologie e tecniche utilizzabili per lo sviluppo di sistemi software di qualità.

A valle di questo modulo, i discenti dovranno avere acquisito concetti e principi dell’ingegneria del software su cui si basano i moderni processi di sviluppo software, dovranno conoscere e saper usare i metodi, le tecniche ed i linguaggi utilizzabili sia per analizzare e specificare i requisiti di un sistema software, sia per progettare la relativa soluzione e per eseguire processi di controllo della qualità del software.

Il corso prevede sia una parte teorica che una parte pratica con esercitazioni guidate svolte sia in aula che in laboratorio didattico e che verteranno sulle attività di sviluppo di applicazioni software usando tecniche orientate agli oggetti.

Prerequisiti

Programmazione 1

Contenuti

Generalità sul software e l’ingegneria del software: definizioni di software e di ingegneria del software. Il processo di sviluppo software. Modelli di processo: modello a cascata, modelli a processo incrementale ed evolutivo, Sviluppo rapido del software, Sviluppo Agile e Extreme Programming.

Analisi e Specifica dei requisiti. Tipi di Requisiti: Requisiti d’Utente, di Sistema e di Dominio. Requisiti Funzionali e Non Funzionali. Il documento di specifica dei requisiti (SRS) e Standard per la specifica dei requisiti. Modelli UML per la specifica dei requisiti. Analisi dei casi d’uso. Principi e tecniche per la raccolta e l’analisi dei requisiti.

Progettazione del software. Modellazione del software. Modello di Dominio del Problema. System Domain Model. Analisi Object Oriented. Modelli UML per la specifica di progetto. Livelli di Progettazione. Principi di progettazione. Architetture delle applicazioni software e modelli di riferimento. Progettazione orientata agli oggetti e design patterns. La specifica di progetto. Qualità del software. Cenni allo standard ISO 9126.

Verifica e Validazione del Software. Definizioni di base. Obiettivi e pianificazione del testing. Tecniche di testing black-box e white-box. Tecniche di testing automation. Tecniche di testing di integrazione. Test di sistema. Tecniche di Debugging.

Evoluzione del software. Processi di manutenzione del software. Classi di manutenzione. Cenni a Reverse Engineering e Reengineering. Problemi dei sistemi legacy e strategie per la gestione. Tecniche e strumenti per la gestione della configurazione del software.

Parte Esercitativa:

Esercitazioni sulle tecniche di analisi e specifica dei requisiti usando il linguaggio UML. Concetti fondamentali del linguaggio Java. Esercitazioni di modellazione con UML. Traduzione di progetti UML in programmi Java. Realizzazione di Pattern Archietturali e Design Pattern in applicazioni Java. Progettazione ed esecuzione di casi di test su sistemi reali usando tecniche ed ambienti per l’automazione del testing.


Operative Systems

1) Corso di Laurea Triennale in Ingegneria Informatica e per i Corsi di Laurea in Ingegneria Elettronica e dell’Automazione (corso unico dell’Università degli Studi di Napoli “Federico II” per gli anni accademici 2006/07 e 2007/08

Syllabus (last editon)


Objectives: The purpose of the course is the acquisition of the fundamental concepts about the operating systems. During the course, the fundamental concepts of concurrent programming are presented, too.

Contents: Introduction to Operating Systems. Layered architectures. Concurrency.

Processes: Creation, Termination and Synchronization; Process Descriptor; Process states; Interactions between processes. Inter-process communication models. Semaphores, monitor, message exchange functions. Classical synchronization problems: Critical-Section Problem, Bounded Buffer Problem, Readers and Writers Problem.

Threads and multithreading. Thread Synchronization.

CPU Scheduling: Scheduling algorithms. Time Sharing. Process Priorities. Dispatcher. Context switching.

Memory Management: Logical and physical addressing Memory Management Unit Paging techniques. Segmentation techniques. Virtual memory. Paging on demand. Swapping. Thrashing

Deadlock and Starvation. Deadlock conditions. Deadlock prevention. Deadlock avoidance. Deadlock detection.

I/O Management. I/O systems. Device drivers. I/O buffering.

File System: Organization. Files and directories. File sharing. Internal architecture of the file system. File allocation methods. Disk space management. Disk scheduling. RAID systems.

Linux. Linux Architecture. System calls. Linux shell. Processes state model. POSIX libraries for inter-process communication.


Computer Programming

Corso di Laurea Triennale in Ingegneria Informatica presso la Facoltà di Ingegneria dell’Università “Federico II” per l’anno accademico 2004/05.


Course Program (italiano):

Parte I - Programmazione procedurale: aspetti avanzati

Le funzioni - aspetti avanzati: funzioni con argomenti di default, funzioni in linea, sovraccarico dei nomi di funzione.

(Dal testo adottato C++ Cap. 7 §§ da 7.2 a 7.4 (richiami), e §§ da 7.6 a 7.8.

Dal testo adottato F1, Parte II, Cap. 4 §§ 8, 9 (richiami).

Da trasparenze dalle lezioni).

I puntatori - aspetti avanzati: classi di memorizzazione delle variabili in C++, area stack, area heap ed area dati statici, puntatori e variabili dinamiche, operatori new e delete del linguaggio C++, concatenamento di strutture dinamiche tramite puntatori.

(Dal testo adottato C++ Cap. 8 §§ 1 e 2 (richiami), e §§ 8.3.1, 8.3.5, 8.3.6, 8.4, 8.5.

Dal testo adottato F2, Parte II, Cap. 8 §§ 1 e 2 (richiami).

Da trasparenze dalle lezioni e dalla relativa esercitazione).

Array - aspetti avanzati: array come parametri di scambio, array pluridimensionali, (Dal testo adottato C++ Cap. 4 § 2 (richiami), e Cap. 10, §§ da 10.1 a 10.5).

Dal testo adottato F1, Parte II, Cap. 3 §§ da 2 a 4 (richiami).

Da trasparenze dalle lezioni e dalla relativa esercitazione).

Le stringhe: Le stringhe stile C, La classe string.

(Dal testo adottato C++ Cap. 11.4.

Da trasparenze dalle lezioni).

La libreria iostream per le operazioni di I/O: operazioni d’ingresso e uscita primarie, collegamenti con il sistema operativo, operazioni di I/O verso memorie di massa, generazione ed ispezione di un file sequenziale, generazione ed uso di file ad accesso diretto.

(Dal testo adottato F2, Parte I, Cap. III.

Dal testo adottato C++ Cap. 27; Cap. 28.

Da trasparenze dalle lezioni e dall’esercizio di esempio.)

Parte II – Tecniche di programmazione

Strutture dati: Tipi di dati astratti, specifica ed implementazione di dati astratti: liste, pile, code (realizzazioni statiche e dinamiche). Analisi dell'efficienza delle realizzazioni concrete.

(Dal testo adottato F2, Parte I, Cap. 2 §§ 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 14).

Da trasparenze dalle lezioni, dalla relativa esercitazione e dagli esercizi di esempio).

La ricorsione. Induzione e ricorsione. Schema degli algoritmi ricorsivi. Meccanismo interno di ricorsione. Trasformazione di algoritmi dalla forma iterativa a quella ricorsiva e viceversa. Ricorsione diretta e indiretta. Impiego degli algoritmi ricorsivi.

(Dal testo adottato F1, Parte II, Cap. IX §§ 1, 2, 4, 5, 6.

Da trasparenze dalle lezioni, dalla relativa esercitazione.)

Problemi di ricerca e ordinamento. Ricerca lineare e ricerca binaria in una lista. Ordinamento per selezione. Ordinamento per scambi (bubble sort). Ordinamento per inserzione. Fusione di due vettori. Fusione di due file sequenziali. Ordinamento per distribuzione e fusione di un array. Complessità degli algoritmi di ricerca ed ordinamento.

(Dal testo adottato F1, Parte II Cap. XI §§ 1, 2, 3, 4, 6, 7, 8, 9, 11.

Dal testo adottato C++ Cap. 39 §§ 1, 2, 3, 4.

Da trasparenze dalle lezioni, dalla relativa esercitazione.)

Introduzione alle programmazione ad oggetti. Il ciclo di sviluppo dei programmi. Il concetto di modulo. Meccanismi di astrazione, incapsulamento, information hiding. Metodologie top-down e bottom-up. Programmazione orientata agli oggetti. L’ereditarietà quale strumento di progettazione o di riuso. Il polimorfismo.

(Dal testo adottato F1, Parte II, Cap. XIII §1, 2, 3; Cap. XIV §1, 2.

Dal testo adottato C++ Cap. 13 §1, 2, 3, 5; Cap. 15; Cap. 21 § 1.1, 1.2; Cap. 22 §2,

Da trasparenze dalle lezioni).

Parte III - Programmazione ad oggetti in C++

Le classi - notazioni base: specifica ed implementazione della classe, la specifica come interfaccia, funzioni membro e funzioni ordinarie operanti su oggetti, costruttori, ciclo di vita degli oggetti e funzione distruttore, funzioni d’accesso e di posizionamento, funzioni ordinarie operanti sugli oggetti, accesso ai membri di una classe, funzioni in linea, funzioni amiche. Dati e membri const e static. Costruttore di copia. Operatore di assegnazione.

(Dal testo adottato C++ Cap. 15, Cap. 16, Cap. 18 §§ 1, 2, 4, 6, 8, 10, Cap. 19 §4.1.

Da trasparenze dalle lezioni, dalla relativa esercitazione)

Realizzazione di strutture dati astratte in C++: progetto di liste, pile, code (specifica, realizzazione, uso), confronto tra libreria di funzioni e classi.

(Dal testo adottato C++ Cap. 17, Cap. 40 §1, 2, 3, Cap. 41 § 1,2, 3.

Da trasparenze dalle lezioni, dalla relativa esercitazione e dagli esercizi di esempio)

Realizzazione dell’ereditarietà e del polimorfismo in C++: le classi derivate nel C++, meccanismi sintattici per la derivazione, diritti d’accesso, overriding e overloading, trasmissione dei diritti d’accesso, meccanismi selettivi di derivazione, funzioni o classi amiche nella derivazione. Gerarchie di classi: struttura della gerarchia, costruttori, distruttori, costruttore di copia, operatore d’assegnazione, compatibilità tra classe base e classi derivate. Realizzazione del polimorfismo in C++.

(Dal testo adottato C++ Cap. 20, Cap. 21 § 3, 4, Cap. 22.

Da trasparenze dalle lezioni, dalla relativa esercitazione e dagli esercizi di esempio)

Parte IV - Progettazione ad oggetti con UML

Il linguaggio UML per la modellazione ad oggetti: la progettazione tradizionale ed orientata agli oggetti, il linguaggio UML, diagramma delle classi; diagramma dei casi d’uso (cenni).

(Dal testo adottato C++ Cap. 32; Cap. 33 §§1, 2.1, 2.2.

Da trasparenze dalle lezioni: “UMLeUML-C++”).

Da UML a C++: organizzazione della gerarchia, contenimento tra classi, realizzazione del contenimento lasco e stretto, contenimento ed ereditarietà, realizzazione dell’associazione (cenni).

(Dal testo adottato C++ Cap. 34 §§ 1, 2, 3, 4, 5; Cap. 35.

Da trasparenze dalle lezioni: “UMLeUML-C++”)

PARTE ESECUTIVA

Si richiede allo studente una buona conoscenza delle tecniche di programmazione modulare e della loro codifica in linguaggio C++.

Lo sviluppo dei contenuti del corso prevede esercitazioni di tipo guidato in aula, con illustrazione di esempi, nell’orario di lezione. Esercitazioni libere possono essere svolte dagli studenti presso i laboratori del Centro Servizi Informatici di Facoltà (CSIF), Piazzale Tecchio.

Al fine di conseguire sufficienti competenze di tipo tecnico-pratico, anche in vista della prova di accertamento pratica, si consiglia agli studenti lo sviluppo autonomo di programmi in linguaggio C++ relativi alla programmazione:

- di algoritmi con puntatori e variabili dinamiche;

- di algoritmi con l’impiego della classe string;

- di algoritmi ricorsivi;

- di tipi di dati astratti;

- di strutture dati fondamentali (liste, pile, code), con realizzazione statica e dinamica;

- di gerarchie di classi;

- di funzioni che accedono in lettura/scrittura a file sequenziali di tipo testo.


Other Academic Teaching Activities

Web and Mobile Applications

Applicazione per il Web e i Sistemi Mobili per il corso di Laurea Magistrale in Ingegneria della Sicurezza e della Comunicazione dei Dati per l’Università Parthenope di Napoli, per gli anni accademici 2017/18 e 2018/19


Syllabus (last edition) :

Objectives:

The course aims to provide the basic theoretical and methodological notions for the design and development of web applications and mobile applications. To this purpose, after an introduction to Java language programming, the main methodological and architectural problems related to mobile applications are presented. The study of mobile applications is specialized by focusing on Android applications, for which the development and execution environments and the design and programming techniques necessary for their realization are presented. In the second part of the course the architectural and design issues related to web applications are presented, with brief introductions to some basic technologies, such as HTML, Javascript, CSS. Finally, node.js is presented as an environment for the creation of client-server web applications.

Recommended texts:

For java programming:

Bruce Eckel, Thinking in Java, Apogeo http://mindview.net/Books/TIJ4

Deitel & Deitel Java Programming (Foundations and Advanced)


For Android:

Massimo Carli, Android 6, guide for the developer, Apogeo

Fabio Collini, Matteo Bonifazi, Alessandro Martellucci, Android. Advanced programming, LSWR editions

Doug Sillars, Developing high-performance Android applications, O'Reilly

For Node.js:

Marc Wandschneider, Node.js, Apogeonline

Course Program:

Introduction to the Java language. Origins and objectives. Life cycle of a Java program. Implementation, compilation and execution of a Hello, World program. Basic constructs of the Java language. Introduction of the Eclipse development environment. I / O in Java. Exception handling. Types of abstract data: arrays and collections. Inheritance and polymorphism. Interfaces and implementation. User interface in Java. Events and listeners. Programming exercise in Java: creation of an interactive application for the calculation of the tax code from existing libraries for calculation. Introduction to Android. Android architecture. Real and virtual machines. Life cycle of an application. Introduction to Gradle. Introduction to the Android Studio development environment. Implementation of the static part of an Android application. Manifest. Resources and internationalization. Graphic layout. Layouts, styles and themes. Activity. Fundamental widgets. Events and listeners. Implementation of a first Hello, World application. Further elements of the user interface of an Android application: fragment, menu, dialog, toast. Intent and communication between Activity. Management of persistent data in the Android environment: Shared Preferences, files, databases, access to Web services, use of remote databases with Firebase. Publishing of an Android application. Signature, safety and business models. Thread, Task and Services. Access to sensors and maps. Introduction to testing of Android applications. Android programming exercise: creation of an application to calculate the tax code starting from the interactive Java application made previously. Introduction to Concurrent Versioning Systems. Key features offered by Git. Creation and sharing of software projects with Github. Introduction to Web applications. Basic architectures and languages. Client server model and subsequent evolutions. Introduction to Client Side languages ​​for Web applications. Introduction to HTML and HTML 5. CSS. Introduction to Javascript. Basic constructs. Events and listeners. Types of data. Interaction with the DOM. Javascript debugging with Firebug. JQuery. Introduction to Rich Internet Applications and Ajax. Overview of the additional extensions proposed for Javascript. Programming exercise in Javascript. Server side languages. Introduction to PHP. Node.js: general features, tools and hosting. Creation of a Web Server (Hello, World) in node.js Basic forms. Creation of new modules in Node.js. Management of requests and responses http. Access to the file system. Events and listeners. Sending emails. Programming tutorial with Node.js: creation of a static server in node.js


Foundations on Calculators

Corso di Laurea in Ingegneria Elettronica tenuto presso l’Accademia Aeronautica di Pozzuoli, per l’anno accademico 2015/16


Course Program (italiano) :

RETI LOGICHE:

Algebra di Boole. Modello fondamentale. Funzioni AND, OR, NOT. Proprietà notevoli. Teorema di De Morgan. Algebra della logica delle proposizioni. Algebra dei circuiti e porte elementari. Variabili e funzioni booleane. Tabelle di verità. Le funzioni di due variabili. Funzioni notevoli a due variabili: XOR, EQ, NAND, NOR. Funzioni booleane di n variabili.

Forme normali P ed S. Numero caratteristico. Equazioni booleane. Funzioni incompletamente specificate. Implicanti di una funzione.

Mappe di Karnaugh. Determinazione degli implicanti primi sulle mappe di Karnaugh.

Insiemi funzionalmente completi. Insieme AND, OR, NOT. Insieme NAND. Insieme NOR.

Manipolazione algebrica delle forme di una funzione. Numero di livelli di una forma algebrica. Funzioni di costo di una forma algebrica. Minimizzazione algebrica. Nucleo e resto di una funzione. Ricerca dei primi implicanti. Metodo delle mappe di K. Metodo di Quine. Metodo di McCluskey. Determinazione del nucleo.

Copertura minima. Metodi di copertura minima. Esempi. Metodo di minimizzazione per funzioni incompletamente specificate. Esempi.

Macchine combinatorie elementari. Multiplexer. Multiplexer binario. Demultiplexer. Decodificatore, codificatore, transcodificatore. Multiplexer e demultiplexer indirizzabili. Comparatore. Half e Full adder binario. Addizionatore parallelo ad n bit. Addizionatore con propagazione del riporto (carry lookahead).

Tempificazione delle macchine. Ritardi, impulsi e clock. Alee.

Automa a stati finiti. Modello di Moore e Mealy. Macchine sequenziali. Il concetto di stato. Stato stabile sotto un dato ingresso. Macchina asincrona. Modello fondamentale di macchina asincrona. Concetto di equivalenza tra stati. Macchine incompletamente specificate. Compatibilità tra stati. Minimizzazione delle macchine sequenziali: algoritmo del partizionamento e metodo di Paull-Unger

Registri e flip-flop. Tempificazione nel caricamento dei registri: latch ed edge-triggered. Flip-flop RS fondamentale (latch): analisi del funzionamento. Flip-flop RS edge-triggered: tabella. Flip-flop D: latch ed edge triggered. Flip-flop a commutazione e misti: T e JK. Reti sincrone: modello realizzativo per le reti a sincronizzazione esterna. Alee essenziali.

Fasi del progetto di una rete sincrona. Macchine ad ingressi impulsivi.

Progetto macchine sincrone: contatori e riconoscitori di sequenza. Shift register.

ARCHITETTURA DEI CALCOLATORI E LINGUAGGIO ASSEMBLER:

Macchina di Von Neumann. Calcolatore Elettronico: caratteristiche ed architettura complessiva. Il processore. L’algoritmo del processore: fetch, operand assembly ed execute.

Il processore: modello a registri generali. Registri generali, speciali ed interni. Il modello di programmazione. Struttura delle istruzioni e natura degli operandi. Linguaggio macchina e linguaggio assembler. Indirizzamento in memoria. Interfacciamento CPU-memoria. Parallelismo dei trasferimenti.

Memorie byte-addressable. Allineamento di word. Caratteri e voci.

Modello logico di una unità di memoria. Memorie indirizzabili. Memorie associative. Struttura e funzioni delle memorie. Classificazione delle memorie.

Parametri di una memoria: capacità, tempo di accesso e tempo di ciclo.

Architettura di un modulo di memoria RAM. Metodi di selezione: selezione lineare e semiselezione. Circuito di interfaccia di un modulo di memoria RAM. Il Chip Select.

Architettura di un sistema di memoria RAM. Collegamento di chip di memoria.

Il programma assemblatore. Ciclo di sviluppo di un programma assembly. Program Location Counter (PC). Assemblatori a 2 passi. Direttive di assemblaggio. Ambiente di simulazione ASIM.

Il processore Motorola 68000: caratteristiche e modello di programmazione.

Dichiarazione e allocazione di variabili e costanti. Tipi di dato: byte, word, long word, indirizzi. Etichette. Istruzioni di trasferimento dati. Istruzioni aritmetiche e logiche. Il registro di stato ed i codici di condizione. Istruzioni di confronto e di salto. Realizzazione di strutture di selezione (if-then, if-then-else) e cicli (while-do, do-while, for).

Modi di indirizzamento degli operandi. Indirizzo immediato. Indirizzamento diretto attraverso registro, indirizzamento assoluto in memoria, indirizzamento indiretto tramite registro indirizzo. Varianti dell’indirizzamento indiretto con pre-decremento e post-incremento. Indirizzamento indicizzato. Accesso a vettori.

Stack e stack pointer. Collegamento di sottoprogrammi mediante registro indirizzo o mediante stack. Istruzioni JSR e RTS.

Sottoprogrammi in linguaggio assemblativo. Tecniche per il passaggio dei parametri. Allocazione dei parametri sullo stack con salvataggio dei registri. Utilizzo combinato delle istruzioni JSR, RTS, LINK ed UNLNK.

Il sistema di I/O.

Modelli di interfaccia. Architetture del sottosistema di Input/Output. Interfacce: registri di stato, di controllo e dati. Protocolli di comunicazione sincrono e asincrono. Comunicazione parallela e seriale. Istruzioni di I/O e memory mapped. Driver.

Il sistema delle interruzioni. Ciclo di Von Neumann con interruzioni. Gestione delle interruzioni. Modo utente e supervisore. Gruppi di eccezioni nel 68000. Priorità, abilitazione e mascheramento. Gestione delle interruzioni: identificazione e polling.

Interruzioni vettorizzate ed autovettorizzate nel 68000. Interruzioni non mascherabili. Altre eccezioni: trap, reset ed interrupt software.

PROGRAMMAZIONE IN ASSEMBLER CON MOTOROLA 68000:

Esempi ed esercizi relativi alla risoluzione di algoritmi in assembler per Motorola 68000 con il simulatore ASIM. Utilizzo di dati numerici, stringhe e vettori.

Realizzazione di programmi con subroutine e passaggio dei parametri tramite stack.

Java Object Oriented Programming

Corso di Laurea in Ingegneria Informatica per il Consorzio NETTUNO, Polo Tecnologico di Napoli per gli anni accademici 2004/05, 2005/06, 2006/07, 2007/08, 2008/09, 2009/10


Foundations of Computer Science for Cultural Heritage Tourism

Corso di Laurea Triennale in Turismo dei Beni Culturali presso l’Istituto Universitario Suor Orsola Benincasa di Napoli per gli anni accademici 2004/05, 2005/06, 2006/07, 2007/08, 2008/09, 2009/10

Course Program (last edition - italiano) :

Informatica e informazione - Concetto di informazione: Tipo – Valore – Attributo – Cardinalità –

Cenni alla storia dell’informatica – Definizioni fondamentali: Algoritmi – Programmi – Linguaggi

Macchina di Von Neumann e di Turing – Algoritmo di Von Neumann: Fetch – Operand Assembly – Execute

CPU – Velocità - Frequenza di clock – Linguaggio Macchina - Bus – Velocità – Parallelismo

Memoria RAM: Caratteristiche – Capienza – Velocità

Memorie di massa: Caratteristiche – Capienza – Velocità

Gerarchie di memorie: memoria cache e memoria virtuale

Periferiche di I/O: Tastiera – Video – Mouse – Stampante – OCR – Macchina fotografica – Webcam – VoIP

Connessioni di rete: Scheda di rete – Modem – Router – Telefonia – ADSL – Connessioni Wireless – Connessioni tramite telefono cellulare

Algoritmi – Caratteristiche – Linguaggi – Traduttori – Compilatori – Interpreti – Macchine virtuali e portabilità

Sistemi Operativi – Cenni storici: Windows – DOS - Unix – Linux – Mac

Architettura a livelli: Kernel – Librerie – Utilità – Shell: GUI e CUI

Gestione dei processi: Concorrenza e Time Sharing

Gestione dell’I/O: Driver – Interruzioni

Gestione della memoria – Gestione della Memoria virtuale

Gestione degli Utenti – Autenticazione: Amministratori – Utenti – Ospiti (Guest)

Gestione del File System – File – Cartelle – Radice – Percorsi (Path) – Differenze tra Windows e Unix

Malware: Virus – Worm – Trojan Horse – Spyware – Adware – Hoax

Firewall – Antivirus

Numeri binari – Sistemi di numerazione posizionali – Conversione di numeri binari in decimali – Conversione di numeri decimali in binario – Quantità di Informazione – Codifica – Codice ASCII – Codifica Analogica e Digitale – Campionamento e Quantizzazione – Numeri esadecimali

Codifica dei documenti: txt – rtf – doc – ps – pdf

Codifica dei suoni: wav – mp3 – mid

Codifica delle immagini: bmp – gif – jpeg

Codifica dei video: mpeg – divx – dvd – flv

Compressione Lossy e Lossless – Programmi di compressione

Cenn sulle basi di dati – Tbelle – Campi – Relazioni – Linguaggio SQL

Sicurezza e Crittografia

Protocollo TCP/IP – Indirizzi IP – ICANN – IPv4 e IPv6

Domini – DNS – NAT

Ipertesti – Http – HTML

Browser – Rendering

Ancore e collegamenti

Pagine statiche e dinamiche

Applicazioni Web: architettura

Portali e CMS

Web 2.0 – Linguaggio Javascript

Posta elettronica – Protocolli POP, IMAP, SMTP – Client di posta elettronica – Indirizzi di posta elettronica - Posta Elettronica Certificata

Protocollo ftp - Chat e sistemi di Instant Messaging – Cenni al Peer To Peer

LIBRO DI TESTO

M. Lazzari, A. Bianchi, M. Cadei, C. Chesi, S. Maffei – Informatica Umanistica – McGraw-Hill (capitoli 1-2-3)


Computer Science for nursing sciences

Corso di Metodologia della Ricerca Scientifica per il corso di Laurea in Scienze Infermieristiche dell’Università degli Studi di Napoli “Federico II” per l’anno accademico 2014/15


Other Professional Lectures

Cost and Effort Estimation

Docente del modulo di INGEGNERIA DEL SOFTWARE, TECNICHE E METRICHE DI VALUTAZIONE presso il Corso di MASTER IN TRASFORMAZIONE DIGITALE DELLA PUBBLICA AMMINISTRAZIONE: ORGANIZZAZIONE, COMPETENZE, TECNOLOGIE organizzato dal Dipartimento Economia, Management Istituzioni dell'Università degli Studi di Napoli "Federico II" (2020)

GUI Design and Implementation in Java

Docente del modulo di Fondamenti di Informatica per la Digita Academy (Digitali Transformation and industry innovation academy), promossa dall’Università Federico II in partnership con Deloitte Digital negli anni accademici 2017/18, 2018/19, 2019/20, 2020/21, 2021/22

Android Mobile Applications Design and Development

Docente del modulo di Applicazioni Mobili per la Digita Academy (Digitali Transformation and industry innovation academy), promossa dall’Università Federico II in partnership con Deloitte Digital negli anni accademici 2017/18, 2018/19, 2019/20, 2020/21

Software Evolution

Docente dei moduli di Software Engineering e Software Evolution per la FS Academy, promossa dall’Università Federico II in partnership con RFI, nell’anno accademico 2018/19

Software Testing

Docente del modulo di Testing nel corso di formazione professionale Tecnico della programmazione e dello sviluppo di programmi informatici per il Programma di Azione e Coesione (PAC) Regione Calabria, nel 2020


Software Deployment and Delivery

Docente del modulo di Testing e del modulo di Consegna ed Installazione del Software nel corso di formazione professionale Tecnico della programmazione e dello sviluppo di programmi informatici per il Programma di Azione e Coesione (PAC) Regione Calabria, nel 2020


Android Application Development

Docente di un modulo di Progettazione e Sviluppo di applicazioni Android, nell’ambito di una convenzione con Fiat Item, per conto di Cerict (2015)

Software Quality

PON02_00485_3487758 - MIUR - SVEVIA - Metodologie e tecniche innovative per la verifica e validazione del software per sistemi complessi near-realtime


Design Patterns

Docente nell’ambito del progetto di formazione PON02_00485_3164061 - F - MIUR - MINIMINDS-FARM ' Formazione di specialisti in metodologie e tecniche middleware innovative per l'interoperabilita e l'integrazione di sistemi critici per tempo e affidabilita


Software Testing and Debugging

Docente nell’ambito del progetto di formazione PON01_01007 - F - MIUR - PLATINO - Piattaforma per servizi innovativi nella Internet del futuro


C++ Programming

Docente nell’ambito del progetto di formazione PON01_01007 - F - MIUR - PLATINO - Piattaforma per servizi innovativi nella Internet del futuro


Introduction to Android

Docente nell’ambito del progetto di formazione PON01_01007 - F - MIUR - PLATINO - Piattaforma per servizi innovativi nella Internet del futuro


Software Architectures

Docente nell’ambito del progetto di formazione PON01_01516 - F - MIUR - IESWECAN - FARM - Formazione di Ingegneri del Software Embedded per il settore delle Macchine per Costruzione ed Agricole, modulo di Principi e Tecniche di Progettazione Modulare e Architetture Software, in particolare per sistemi embedded


Testing Automation

Docente nell’ambito del progetto di formazione PON01_01516 - F - MIUR - IESWECAN - FARM - Formazione di Ingegneri del Software Embedded per il settore delle Macchine per Costruzione ed Agricole, modulo di Strumenti e ambienti per l’automazione del Software Testing


Reverse Engineering and Reengineering

Docente nell’ambito del progetto di formazione PON01_01516 - F - MIUR - IESWECAN - FARM - Formazione di Ingegneri del Software Embedded per il settore delle Macchine per Costruzione ed Agricole, modulo di Tecniche di Reverse Engineering e ReEngineering


Web Application Testing

Docente di un modulo di Web Testing di un progetto di Formazione per ATOS (2004)


Foundations of Computer Science

Docente di un modulo di Introduzione ai Sistemi Informatici per TechNapoli (Marzo 2008)