Agent and Object Technology LabDipartimento di Ingegneria dell’Informazione
Università degli Studi di Parma
AOTAOTLABLAB
Ingegneria del software A
Introduzione
Michele Tomaiuolo
2
AOTAOTLABLAB Ingegneria del software
L’ingegneria del softwaretratta della realizzazionedi sistemi software didimensioni e complessitàtali da richiedere uno opiù team di persone
La nascita e lo svilupposono una conseguenzadiretta dell’aumento dicomplessità del software
3
AOTAOTLABLAB Alcune possibili definizioni
L’ingegneria del software è l’approccio sistematico allosviluppo, all’operatività, alla manutenzione ed al ritiro delsoftware
L’ingegneria del software è la disciplina tecnologica emanageriale che riguarda la produzione sistematica e lamanutenzione dei prodotti software che vengonosviluppati e modificati entro tempi e costi preventivati
L’ingegneria del software è un corpus di teorie, metodi estrumenti, sia di tipo tecnologico che organizzativo, checonsentono di produrre applicazioni con le desideratecaratteristiche di qualità
4
AOTAOTLABLAB Software e ingegneria classica
Creatività e metodo
Il software è un prodotto dell’ingegno e non di un processoindustriale
Prodotto e processo
L’ingegneria classica (civile, meccanica) progetta il prodotto eanche il processo industriale
L’ingegneria del software (spesso) progetta solo il prodotto e nonutilizza un processo industriale formalizzato
5
AOTAOTLABLAB Cenni storici (1/3)
L’ingegneria delsoftware nasce con laconferenza NATO del1968
Nuovi punti di vistaSoftware crisisSoftware reuseSoftware engineering
6
AOTAOTLABLAB Cenni storici (2/3)
Anni 1990, sviluppodelle tecnologieorientate agli oggettiProgrammazione orientata
agli oggettiUML (Unified Modeling
Language)Design pattern
7
AOTAOTLABLAB Cenni storici (3/3)
Da metà anni 1990,nuove prospettiveWeb, e-commerce InteroperabilitàOpen source
JavaLinguaggio orientato agli
oggettiMulti-piattaformaWeb-orientedBen accettato dalla comunità
dell’open source
8
AOTAOTLABLAB Storia dei linguaggi
http://www.oreilly.com/news/graphics/prog_lang_poster.pdf http://www.levenez.com/lang/history.html http://www.byte.com/art/9509/sec7/art19.htm http://www.princeton.edu/~ferguson/adw/programming_languages.shtml
Linguaggiomacchina
Assembly
FORTRAN
ALGOL
LISPADA
Smalltalk
PascalC
1945 1950 1960
C++Java
1970
BASICCOBOL
Inizi Sistema GUI
1980
SimulaC#
Internet
JavascriptPHP
2000
Prolog
9
AOTAOTLABLAB Ingegneria del software – Outline
Qualità del softwareFasi di sviluppo del software
RequisitiAnalisiProgettazione ImplementazioneTesting
Modello a cascata e modelli iterativiGestione dei progettiApproccio orientato agli oggetti
Dai casi d’uso ai modelli strutturali e comportamentali
Architetture softwareDesign Pattern
10
AOTAOTLABLAB eXtreme Programming
Seminario della prof. Turci
Fallimento di progetti softwareMetodologie agilieXtreme Programming
11
AOTAOTLABLAB Cos’è Java
Insieme di tecnologieLinguaggio orientato agli oggetti che migliora il C++Strumenti sia a compile-time che a run-time
Lancio ufficiale nel 1995Piattaforma sviluppata da Sun MicrosystemsOpen source dal 2006-07, iniziativa OpenJDK
Svincolare software da hardware e sistema operativoSistemi web-oriented
• Inizialmente lato client, oggi principalmente lato server• (Mosaic creato nel 1993)
Sistemi embedded (Green group)Recentemente, sistemi mobili (telefoni cellulari, PDA)
12
AOTAOTLABLAB Java è un insieme di tecnologie
Problema distribuzione su web: programmi strettamentelegati ad una piattaformaPiattaforma: combinazione di hardware e software di sistema
Byte codeUn compilatore Java (javac) non produce codice eseguibile da una
particolare piattaforma, come farebbe un compilatore CA differenza del linguaggio macchina, il byte code Java resta
uguale per tutte le piattaforme
Macchina virtuale (VM)La VM (java) trasforma il byte code in codice nativo
Tutti questi pezzi sono denominati assieme come JavaCompilatore, byte code, macchina virtuale, librerie, linguaggio ecc.
14
AOTAOTLABLAB Java è semplice
Java ha una sintassi simile al C...Ma non è una estensione del C, come il C++Un compilatore Java non accetta codice CModifiche sostanziali per convertire un programma da C a Java
Java è semplice: facile da capire e scrivere (senza errori)Codice C medio, al rilascio, ha un bug ogni 55 righe di codiceJava ha sintassi minima - No “syntactic sugar” (es. operatori)Ma più funzionalità del C, grazie all’ampia libreria di classi
Allocazione e deallocazione automatica della memoriaNiente chiamate a malloc(), free() e distruttoriMetà dei bug in C e C++ sono legati alla gestione della memoria
(allocazione e deallocazione)
Riferimenti controllatiNiente algebra dei puntatori e accessi arbitrari alla memoria
15
AOTAOTLABLAB Java è orientato agli oggetti
Programmazione orientata agli oggettiOrigini negli anni 1960 – SimulaMa diffusione negli anni 1990 – GUI moderneProgramma: collezione di oggettiCampi e metodi, scambio di messaggi, classi ed ereditarietà
Astrazione, programmi più semplici e facili da leggereMigliore riuso del codiceSviluppo e rilascio più veloceCodice modulare, più affidabile e manutenibile
Java è completamente orientato agli oggettiA differenza di Smalltalk ha tipi primitivi
C++ è ibrido, eredita dal C la scarsa leggibilitàPossibilità di produrre codice offuscato
16
AOTAOTLABLAB
Java è indipendentedalla piattaforma
Java è cross-platform Non solo codice sorgente – come C – ma anche bytecode
Portare programmi Java su una nuova piattaforma1. Portare la macchina virtuale (“interprete”)2. Portare parte delle librerie (AWT, I/O, rete…) Compilatore e gran parte delle librerie sono scritte in Java
Eliminazione di costrutti non specificati o dipendentidalla piattaforma Interi sempre a 32 bit Virgola mobile secondo lo standard IEEE 754
17
AOTAOTLABLAB Java è sicuro
Verfica del byte code e sandboxEsecuzione sicura di codice scaricato da fonti non fidateLe applet non possono accedere al disco o alla reteVerifica preventiva sul byte code dell’applet, controlli a run timeAl più, una applet può bloccare la VM, ma non l’intero sistema
No puntatori I programmi Java non possono accedere arbitrariamente alla
memoria
Java ha controllo dei tipi forteSi può convertire un int in long, un byte in short…Ma non un int in booleanControllo su riferimenti e cast tra classi
Gestione delle eccezioni per errori attesi o inattesi
18
AOTAOTLABLAB Java ha buone prestazioni
Il byte code Java può essere compilato al volo (just-in-time) per ottenere prestazioni simili a codice nativo
Esistono compilatori Java (es. gcj) che generano codicenativo per una particolare piattaforma (no VM)
Non si possono limare le prestazioni operando a bassolivello come in C, ma si possono ottenere risultatiadeguati per molti ambiti
Grossi programmi scritti in JavaEclipse (IDE), Limewire (file sharing), HotJava (browser), jEdit (text
editor), JBoss (application server), Tomcat (web server), Xerces(parser XML), the Xalan (processore XSLT), javac (compilatore)
19
AOTAOTLABLAB Java è multi-threaded
Un programma Java può avere diversi thread diesecuzione paralleli
Reazioni rapide all’input dell’utente o alle richieste deiclient
Difficile portare Java su architetture (es. Windows 3.1)che non supportano il preemptive multi-threading
Fonte di bug difficili da trovare (corse, deadlock…)Problema inerente alla programmazione parallelaJava fornisce una API molto semplice per gestire threadMonitor per accesso concorrente alle risorse
20
AOTAOTLABLAB Java ha collegamenti dinamici
Java non ha una fase di link esplicita
Il compilatore…Genera un file di byte code (.class) per ogni classe del programmaRisolve le dipendenze e compila tutte le classi necessarie
Il programma può caricare classi a runtimePer esempio, un browser può caricare alcune appletLe classi necessarie sono cercate e caricate dinamicamente
CLASSPATH, ClassLoader
21
AOTAOTLABLAB
Java libera la memoriaautomaticamente
Garbage collection: la raccolta della spazzatura di Java
Non c’è bisogno di allocare o deallocare la memoriaesplicitamenteLa memoria è allocata quando necessarioViene liberata quando non più utilizzataOggetti sempre in heapCostruttori utili per l’inizializzazione
L’algoritmo usato per la garbage collection è diversosulle varie VM Idea di base: conteggio dei riferimenti, ma cicli…Generational garbage collection per oggetti creati di recenteMark & sweep per gli oggetti più duraturi
22
AOTAOTLABLAB OOP e Java – Outline
Oggetti e classi Incapsulamento e composizioneEreditarietà e polimorfismoDiagrammi UML
Introduzione a JavaCollezioni e tipi genericiInput/outputInterfacce utente
SwingArchitettura MVC
Eccezioni e asserzioniProgrammazione multi-threaded
23
AOTAOTLABLAB Esercitazioni
Laboratorio di informatica di base
Linguaggio JavaLibrerie fondamentali Interfacce grafiche e SwingEccezioni, thread, …
Enfasi su…Analisi e progettazione, modelli UMLRiuso del software, ereditarietà e composizioneDesign-by-contract, eccezioni, asserzioniTestingArchitettureDesign pattern
24
AOTAOTLABLAB Esame
1. Prova scrittaDomande aperte di teoria
a. A fine lezioni, oppure…b. Appelli successivi
2. Prova al PC (in laboratorio)Sviluppo di una applicazione Java
a. A fine lezioni, oppure…b. Appelli successivi
3. La partecipazione attiva alle esercitazioni… Costituisce titolo di merito
25
AOTAOTLABLAB Software
Java SE, JDK 6 (77 MB)http://java.sun.com/
Notepad++ (o Notepad, o qualsiasi editor di testo)http://notepad-plus.sourceforge.net/
Eclipse IDE for Java Developers (85 MB)http://www.eclipse.org/
Omondohttp://www.eclipsedownload.com/
JUnithttp://www.junit.org
Anthttp://ant.apache.org/
26
AOTAOTLABLAB Materiale on-line
Slide del corsohttp://www.ce.unipr.it/people/tomamic
JavaDocumentazione API e tools, tutorial, convenzioni sul codice…http://java.sun.com/javase/6/docs/
EckelThinking in JavaThinking in Patterns (with Java)http://www.mindview.net/Books/
27
AOTAOTLABLAB Testi consigliati
Sommerville (Prentice-Hall, 2006)Software Engineering
Pressman (McGraw-Hill, 2004)Software Engineering: A Practitioner's Approach
Damiani, Madravio (Pearson Education, 2003)UML Pratico
Gamma et al. (Pearson Education, 2002)Design Patterns
Kruchten (Pearson Education, 2000)Rational Unified Process
28
AOTAOTLABLAB Come potete contattarmi?
Ufficio: Palazzina 1 – Sede Scientifica IngegneriaViale G. Usberti 181/A
Tel: 0521 90 5712
Fax: 0521 90 5723
E-mail: [email protected]
Web: http://www.ce.unipr.it/people/tomamic
Top Related