ANALISI E TESTING DEL SOFTWARE

Prof. Paolo Tonella

Anno Accademico 2001/2002

OBIETTIVI

Il corso mira a fornire i fondamenti teorici delle attivita' di analisi del software condotte in supporto alla manutenzione e al testing. Le esercitazioni pratiche consentiranno di applicare gli algoritmi e le tecniche viste a lezione a casi reali di sistemi software da re-ingegnerizzare e testare.

PROGRAMMA

Introduzione

- la manutenzione del software

- legacy systems

- reverse engineering e re-engineering

- le analisi del codice

- la fase di convalida e verifica

Analisi statica del codice

- analisi di flusso

- reaching definitions/reachable uses

- dipendenze dati

- dominatori e postdominatori

- dipendenze di controllo

- points-to analysis

- analisi interprocedurale

Program slicing

- slicing statico

- decomposition slicing

- slicing dinamico

- slicing amorfo

- slicing condizionato

Reverse engineering

- identificazione di stili architetturali nel codice

- pattern matching

- estrazione di diagrammi UML da codice a oggetti

- reflexion models

- software reconnaissance

- tracciabilita' design-codice

Restructuring

- identificazione e fattorizzazione di cloni

- uso di concept analysis nella ri-modularizzazione

- identificazione di oggetti in codice procedurale

- clustering

- trasformazione di diagrammi E/R in diagrammi a oggetti

- refactoring

- trasformazione automatica del codice

Testing

- test strutturale (path e data flow)

- test statistico

- test mutazionale

- test di regressione

- test di sistemi object oriented

- test di sistemi concorrenti

- generazione automatica di casi di test

 

Materiale

Dispense del corso e articoli segnalati a lezione.

 

Modalità d’esame

L'esame consiste in una prova orale in cui sara' discusso il progetto d'esame. L'orale potra' inoltre spaziare su tutti gli argomenti svolti a lezione.

Progetto d’esame

Re-engineering di un legacy system. Un programma scritto in linguaggio C sara' sottoposto alle analisi viste a lezione e in laboratorio con l'obiettivo di estrarne l'architettura. Sara' quindi possibile ristrutturarlo in modo da averne un design orientato agli oggetti, su cui basare la reimplementazione in Java dello stesso sistema. Seguira' la fase di testing basata sulle funzionalita' pre-esistenti.

L'ammissione all'esame e' subordinata alla produzione dei seguenti documenti:

- Architettura del sistema esistente.

- Design a oggetti del nuovo sistema.

- Implementazione in Java del nuovo sistema (sorgente + eseguibile).

- Casi di test e risultati del testing di entrambi i sistemi.

 

 

DIPENDENZE

Linguaggi formali e compilatori, Programmazione I e II, Ingegneria del software.