Unit Testing. Giovanni Lagorio
|
|
|
- Gianmaria Leone Mele
- 10 anni fa
- Просмотров:
Транскрипт
1 Unit Testing Giovanni Lagorio
2 Licenza Questi lucidi sono rilasciati sotto la licenza Creative Commons Attribuzione-Non commerciale-non opere derivate 3.0 Unported. Per leggere una copia della licenza visita il sito web o spedisci una lettera a Creative Commons, 171 Second Street, Suite 300, San Francisco, California, 94105, USA. In due parole, possono essere liberamente usati, copiati e distribuiti purché: 1. Venga citata la fonte originale 2. Non vengano usati in ambito commerciale 3. Non vengano modificati in nessun modo
3 Definizione Uno unit test è un frammento di codice (tipicamente, un metodo) che invoca un altro frammento di codice e poi verifica se delle condizioni sono soddisfatte Se non lo sono, lo unit-test fallisce Una unità (unit) è un metodo o una funzione, spesso chiamata System Under Test (SUT) E molto importante che la unit sia piccola: quando un test fallisce è immediato sapere dov è il problema
4 Caratteristiche necessarie Automatico e ripetibile Deve bastare un click per testare tutto il sistema Si usano dei framework e test-runner Indipendente Non deve richiedere particolari configurazioni Veloce (non è un integration-test!) Da implementare Da eseguire Usabile da chiunque È documentazione in forma di codice
5 Test Driven Development Classicamente, prima si scrive il codice e poi lo si testa Nel TDD prima si scrivono gli unit-test, che ovviamente falliranno, poi si scriverà il codice per farli passare I test vengono poi usati per il regression testing e facilitano (=danno fiducia per) il refactoring Sistemato il codice (corretto e pulito), si ricomincia scrivendo nuovi test...
6 Refactoring E la modifica di un frammento di codice che non ne modifica la funzionalità Serve a ottenere codice più pulito, facile da leggere, modificare e debuggare Un esempio classico di refactoring è rinominare un metodo Gli IDE supportano sempre di più il refactoring Per VS, ReSharper potenzia questo e altri aspetti
7 Testing Framework Ne esistono tanti Useremo NUnit, Fa parte della famiglia xunit (JUnit per Java, CppUnit per C++ e così via) Free Ben documentato Supportato da ReSharper
8 Convenzioni Per ogni progetto Prj che vogliamo testare, creiamo una class library Prj.Tests Per ogni classe C (da testare), creiamo una classe corrispondente CTests in <Prj>.Tests Per ogni metodo m scriveremo tanti metodi: <m><scenario><comporamento atteso> Per esempio, Parse_ValidArgs_Returns10, Parse_NullArgs_ThrowsException,...
9 Poiché usiamo NUnit... Al progetto di test dobbiamo aggiungere il riferimento a nunit.framework (Add Reference.NET...) oltre, ovviamente, al progetto da testare Alle classi (di Test) l attributo [TestFixture] del namespace NUnit.Framework Ai metodi l attributo [Test]
10 ReShaper riconosce gli Unit Test Le icone colorate sul bordo indicano gli unit-test, che possono essere eseguiti da VS Per il momento non preoccupiamoci del corpo dei metodi...
11 Test Runner di ReSharper
12 Test runner di NUnit Se non vogliamo/possiamo usare ReSharper Procedimento analogo, lanciamo (il test runner di) NUnit, scegliamo la DLL e lanciamo i test...
13 Requisiti per usare un test runner Poiché il test runner deve poter invocare i test in modo totalmente automatico: Le classi e i metodi di test devono essere public Le classi di test devono avere un costruttore senza parametri ed essere annotate [TestFixture] I metodi di test devono essere void, senza parametri e annotati [Test] (vedremo in seguito che non è vero al 100%)
14 Struttura di un (metodo di) unit test 1. Creare e inizializzare gli oggetti coinvolti 2. Invocare il metodo da testare 3. Asserire che qualcosa sia come ci si aspetta Per esempio: [Test] public void Parse_ValidArgString42_Returns42AsInt() { } var returnvalue = new Parser().Parse("42"); Assert.That(returnValue, Is.EqualTo(42));
15 Stili di Assert Classico: Assert.AreEqual(returnValue, 42); invocando Is.../Are... di Assert A vincoli (da NUnit 2.4) discorsivo : Assert.That(returnValue, Is.EqualTo(42)); invocando sempre That e passare come secondo parametro un vincolo, tipicamente ottenuto invocando un metodo statico di Is
16 Classe Assert Tutti i metodi di assert hanno un parametro opzionale (in realtà, una versione in overload: i parametri opzionali arriveranno con C# 4) per specificare un messaggio di errore Per esempio, Assert.That(returnValue, Is.EqualTo(43), "wrong answer!"); Assert.AreEqual(returnValue, 43, "wrong answer!");
17 Quante chiamate ad Assert? Una per test: la prima che fallisce (solleva un eccezione e) impedisce l esecuzione delle altre Il seguente non è un test ma sono (dovrebbero essere) tre: [Test] public void Parse_ValidArgString_ReturnsInts() { Assert.That(_parser.Parse("42"), Is.EqualTo(42)); Assert.That(_parser.Parse("1"), Is.EqualTo(1)); Assert.That(_parser.Parse("0"), Is.EqualTo(0)); } Nota: non mischiare mai l esecuzione del test e le asserzioni, qui l ho fatto solo per farlo stare nella slide
18 Test parametrici Permettono di generare diversi test usando un solo metodo, per esempio: [TestCase("42", 42)] [TestCase("0", 0)] [TestCase("1", 1)] public void Parse_ValidArg(string a, int r) { Assert.That(_parser.Parse(a), Is.EqualTo(r)); } I test vengono generati a load-time da NUnit Purtroppo, non (ancora?) supportati da ReSharper
19 Test parametrici L attributo [TestCase] identifica un metodo come test e gli fornisce i valori dei parametri E anche possibile specificare i valori sui singoli parametri (attributi [Random], [Range] e [Values]) e combinarli in vari modi (attributi [Combinatorial], che è il default, e [Sequential]. E` in alfa [Pairwise]) [Test] public void MyTest([Values(1,2,3)] int x, [Random(-1.0, 1.0, 5)] double d) { // eseguito 15 volte, per ogni x (1,2,3) // cinque valori casuali fra -1 e 1 }
20 Ovvio workaround per ReSharper private void Parse_ValidArg(string s, int expectedvalue) { int retvalue = this._parser.parse(s); Assert.That(retValue, Is.EqualTo(expectedValue)); } [Test] public void Parse_ValidArg42AsString_Returns42AsInt() { this.parse_validarg("42", 42); } [Test] public void Parse_ValidArg0AsString_Returns0AsInt() { this.parse_validarg("0", 0); } [Test] public void Parse_ValidArg1AsString_Returns1AsInt() { this.parse_validarg("1", 1); }
21 Se ci aspettiamo un eccezione? Annotiamo il metodo con [ExpectedException] Per esempio, [Test] [ExpectedException(typeof(ArgumentNullException))] public void Parse_NullArg_ThrowsArgumentNullException() { new Parser().Parse(null); } Attenzione: il match è esatto (se viene sollevata una sottoclasse di quella specificata, il test fallisce)
22 Workaround per quando ci aspettiamo un eccezione o una sua sottoclasse: [Test] public void Parse_NullArg_ThrowsArgumentNullException() { try { new Parser().Parse(null); Assert.Fail("Expecting ArgumentNullException"); } catch (ArgumentNullException) {} }
23 SetUp e TearDown Poiché ogni test deve essere indipendente e l ordine di esecuzione non deve influenzarne l esito, ogni test deve allocare e rilasciare risorse Le parti comuni (a tutti i test) possono essere inserite in metodi di SetUp/TearDown I metodi annotati con [SetUp] vengono eseguiti prima di ogni test I metodi annotati con [TearDown] vengono eseguiti dopo ogni test Per esempio...
24 Esempio SetUp/TearDown private Parser _parser; [SetUp] public void Init() { _parser = new Parser(); } [TearDown] public void CleanUp() { _parser = null; } [Test] public void Parse_ValidArgString42_Returns42AsInt() { var returnvalue = _parser.parse("42"); Assert.That(returnValue, Is.EqualTo(42)); } //...
25 Altro su SetUp/TearDown In caso di ereditarietà (della classe di Test): Gli attributi di Setup/TearDown vengono ereditati I metodi SetUp/TearDown della classe base vengono invocati prima di quelli della derivata (che, chiaramente, non devono invocare quelli base) [SetUpTestFixture] e [TearDownTestFixture] permettono di annotare metodi che vengono eseguiti prima dell esecuzione del primo test (risp. dopo l esecuzione dell ultimo)
26 Annotazione [Ignore] L annotazione [Ignore] indica una class o dei test da ignorare. Per esempio, [Ignore("Incomplete test")][test] public void Foo() {}
27 Categorie E possibile associare delle categorie ai test, tramite l annotazione [Category] In questo modo diventa possibile eseguire solo i test di alcune categorie
28 Come testare le classi internal? Poiché le classi di test sono in un assembly diverso da quello delle classi testate, dobbiamo ricorrere a un attributo in AssemblyInfo.cs: [assembly:internalsvisibleto("tap_unittesting.tests")]
29 Unit Testing nel mondo reale... Assert Unit Test SUT
30 Stub e Mock Assert Stub Unit Test SUT Mock Ok
31 Stub e Mock Stub e Mock sono oggetti che, durante il testing, sostituiscono gli oggetti veri (le dipendenze del SUT) facendo il minimo indispensabile I mock registrano le interazioni per una successiva verifica (quante volte è stato chiamato il metodo m?) Usiamo: gli stub per testare lo stato finale (per esempio, la proprietà counter è maggiore di zero? ) i mock per testare le interazioni fra oggetti (per esempio, il metodo chiama Close sul parametro di tipo IConnection? )
32 Stub vs Mock Concetti simili (e spesso confusi) poiché mock stub che registra le interazioni La differenza fondamentale è che uno stub non può far fallire un test, un mock sì Assert su valore di ritorno o stato SUT Stub Assert su aspettative del Mock object Mock Unit Test SUT Stub Unit Test SUT Stub Stub Stub
33 Cosa usare? Stub o Mock? Spesso usati assieme Un mock, tanti stub (se servono tanti mock il test sta probabilmente facendo troppo) Preferire gli stub, ovvero la verifica state-based (invece di interaction-based), quando possibile in questo modo i test dipendono molto meno dall implementazione
34 Mock framework Scrivere a mano stub e mock è facile, ma noioso e una grossa perdita di tempo I mock framework sono librerie che permettono di creare mock/stub (dinamici) con pochissime linee di codice Ne esistono diversi, il più famoso per.net è probabilmente RhinoMocks Noi useremo Moq:
35 Come testare Bulk Sender? Lo state-based testing è piuttosto difficile: come verificare che una mail è davvero stata spedita? E, come già detto, ma siamo sicuri di volerle spedire durante il testing?!?
36 Rivediamo il codice public class Bulk Sender { private readonly I Sender _ sender; private readonly string _footer; public Bulk Sender(I Sender sender, string footer) { this._ sender = sender; this._footer = footer; } } public void Send (List<string> addresses, string body) { if (addresses == null) throw new ArgumentNullException("addresses"); if (body == null) throw new ArgumentNullException("body"); foreach (var a in addresses) { if (!this._ sender.send (a, body + this._footer)) throw new Exception("Cannot send "); } }
37 Testiamo Bulk Sender... [TestFixture] public class Bulk SenderTests { [Test] [ExpectedException(typeof(Exception))] public void Send _When SenderFails_ThrowsException() { var mock = new Mock<I Sender>(); var bulk = new Bulk Sender(mock.Object, string.empty); var addresses = new List<string> { "[email protected]" }; bulk.send (addresses, string.empty); } } [Test] public void Send _PassingThreeAddresses_SendsSuccessfully() { var mock = new Mock<I Sender>(); var bulk = new Bulk Sender(mock.Object, string.empty); mock.setup(es => es.send (it.isany<string>(), It.IsAny<string>())).Returns(true); var addresses = new List<string> { "[email protected]", "[email protected]", "[email protected]" }; bulk.send (addresses, string.empty); mock.verify(es => es.send (it.isany<string>(), It.IsAny<string>()), Times.Exactly(3)); mock.verify(es => es.send ("[email protected]", It.IsAny<string>()), Times.Once()); // vale il discorso fatto per Assert: le due Verify dovrebbero stare // in due test separati }
38 Attenzione! var mock = new Mock<I Sender>(); Quello che Moq chiama Mock è un mockbuilder, il vero stub/mock (che si passa alla classe da testare) è contenuto nella proprietà Object del Mock var bulk = new Bulk Sender(mock.Object,...
39 Setup e Verify Setup indica al mock cosa rispondere Altrimenti risponde false per bool, 0 per int, ecc A meno che venga costruito con MockBehavior.Strict Verify verifica che le invocazioni/accessi a proprietà/ecc siano avvenute Entrambe usano le per descrivere lo scenario; nei parametri di tipo T: Un valore di tipo T rappresenta se stesso It.IsAny<T>() rappresenta qualsiasi valore It.Is<T>(predicato) rappresenta i valori che rispettano il predicato; esempio: It.Is<string>(s => s.length > 3) Inoltre: It.IsInRange e It.IsRegex
40 Returns e Throws Returns specifica il valore di ritorno, per esempio: mock.setup(...).returns(true); Throws specifica l eccezione da sollevare, per esempio: mock.setup(...).throws<exception>(); mock.setup(...).throws(new Exception("bla bla"));
41 Verifica di proprietà Non ha molto senso, ma consideriamo come esempio: public interface I Sender { bool Send (string to, string body); string Subject { get; set; } } Se vogliamo verificare che la proprietà Subject venga letta o scritta possiamo usare
42 Verificare che una proprietà venga......letta mock.verifyget(es=>es.subject);...scritta mock.verifyset(es=>es.subject);...scritta con un certo valore mock.verifyset(es=>es.subject = "test");...scritta con un valore che rispetta un predicato mock.verifyset(es=>es.subject = It.Is<string>(s=>s.Length>0));
43 Settare il valore letto mock.setup(foo => foo.name).returns("bar"); // auto-mocking hierarchies (a.k.a. recursive mocks) mock.setup(foo =>foo.bar.baz.name).returns("baz"); // verify the setter mock.verifyset(foo => foo.name = "foo");
44 Implementare più interfacce Se il mock deve implementare più interfacce, basta usare il metodo As: var mock = new Mock<I Sender>(); // mock.setup... (per il tipo I Sender) var mockasifoo = mock.as<ifoo>(); // mockasifoo.setup... (per il tipo IFoo) Debug.Assert(mock.Object==mockAsIFoo.Object);
45 Callback Se vogliamo eseguire del codice quando qualcosa accade (per esempio, l invocazione di un metodo) possiamo usare una callback: int counter = 0; mock.setup(es => es.send (/*...*/)).returns(true).callback(() => ++counter); Nota: la della callback può anche ricevere gli argomenti dell invocazione corrispondente
46 Lazy evaluation sul Returns // returning different values on each invocation var mock = new Mock<IFoo>(); var calls = 0; mock.setup(foo => foo.bar("ping")).returns(() => calls).callback(() => calls++); // returns 0 on first invocation, 1 on the next, Console.WriteLine(mock.Object.Bar("ping"));
47 Altro Eventi... li gestisce, ma ne riparliamo dopo che avremo visto cosa sono gli eventi
Test di unità con JUnit4
Test di unità con JUnit4 Richiamo sul test di unità Il test d unità è una metodologia che permette di verificare il corretto funzionamento di singole unità di codice in determinate condizioni. Nel caso
Uso di JUnit. Fondamenti di informatica Oggetti e Java. JUnit. Luca Cabibbo. ottobre 2012
Fondamenti di informatica Oggetti e Java ottobre 2012 1 JUnit JUnit è uno strumento per assistere il programmatore Java nel testing JUnit consente di scrivere test di oggetti e classi Java i test sono
Tipi primitivi. Ad esempio, il codice seguente dichiara una variabile di tipo intero, le assegna il valore 5 e stampa a schermo il suo contenuto:
Tipi primitivi Il linguaggio Java offre alcuni tipi di dato primitivi Una variabile di tipo primitivo può essere utilizzata direttamente. Non è un riferimento e non ha senso tentare di istanziarla mediante
Funzioni in C. Violetta Lonati
Università degli studi di Milano Dipartimento di Scienze dell Informazione Laboratorio di algoritmi e strutture dati Corso di laurea in Informatica Funzioni - in breve: Funzioni Definizione di funzioni
3 - Variabili. Programmazione e analisi di dati Modulo A: Programmazione in Java. Paolo Milazzo
3 - Variabili Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it Corso di
Inizializzazione, Assegnamento e Distruzione di Classi
Inizializzazione, Assegnamento e Distruzione di Classi Lezione 9 Operazioni Automatiche In ogni programma C++ oggetti classe vengono gestiti automaticamente dal compilatore Inizializzati al momento della
Modulo 4: Ereditarietà, interfacce e clonazione
Modulo 4: Ereditarietà, interfacce e clonazione Argomenti Trattati: Classi, Superclassi e Sottoclassi Ereditarietà Ereditarietà ed Attributi Privati Override super Ereditarietà e Costruttori Polimorfismo
Esercizio 1: trading on-line
Esercizio 1: trading on-line Si realizzi un programma Java che gestisca le operazioni base della gestione di un fondo per gli investimenti on-line Creazione del fondo (con indicazione della somma in inizialmente
Programmazione a Oggetti Modulo B
Programmazione a Oggetti Modulo B Progetto Dott. Alessandro Roncato 4/10/2011 Progetto Da svolgere singolarmente Scadenza consegna: una settimana prima dello scritto; Valutazione in base a: Corretta compilazione
Guida all uso di Java Diagrammi ER
Guida all uso di Java Diagrammi ER Ver. 1.1 Alessandro Ballini 16/5/2004 Questa guida ha lo scopo di mostrare gli aspetti fondamentali dell utilizzo dell applicazione Java Diagrammi ER. Inizieremo con
Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans Alberto Belussi anno accademico 2008/2009 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
Siti web centrati sui dati Architettura MVC-2: i JavaBeans
Siti web centrati sui dati Architettura MVC-2: i JavaBeans 1 ALBERTO BELUSSI ANNO ACCADEMICO 2009/2010 Limiti dell approccio SEVLET UNICA La servlet svolge tre tipi di funzioni distinte: Interazione con
Soluzione dell esercizio del 2 Febbraio 2004
Soluzione dell esercizio del 2 Febbraio 2004 1. Casi d uso I casi d uso sono riportati in Figura 1. Figura 1: Diagramma dei casi d uso. E evidenziato un sotto caso di uso. 2. Modello concettuale Osserviamo
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP)
12 - Introduzione alla Programmazione Orientata agli Oggetti (Object Oriented Programming OOP) Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica,
10 - Programmare con gli Array
10 - Programmare con gli Array Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/ milazzo milazzo di.unipi.it
Sviluppo software guidato dal testing. metodologie e strumenti
Sviluppo software guidato dal testing metodologie e strumenti Sommario Testing, software a oggetti Metodologie di sviluppo Test-Driven Development Customer Test-Driven Development Strumenti Open-Source:
Concetto di Funzione e Procedura METODI in Java
Fondamenti di Informatica Concetto di Funzione e Procedura METODI in Java Fondamenti di Informatica - D. Talia - UNICAL 1 Metodi e Sottoprogrammi Mentre in Java tramite le classi e gli oggetti è possibile
Componenti in.net, Dependency Injection e Software testabile. Giovanni Lagorio [email protected]
Componenti in.net, Dependency Injection e Software testabile Giovanni Lagorio [email protected] Licenza Questi lucidi sono rilasciati sotto la licenza Creative Commons Attribuzione-Non commerciale-non
MANUALE PARCELLA FACILE PLUS INDICE
MANUALE PARCELLA FACILE PLUS INDICE Gestione Archivi 2 Configurazioni iniziali 3 Anagrafiche 4 Creazione prestazioni e distinta base 7 Documenti 9 Agenda lavori 12 Statistiche 13 GESTIONE ARCHIVI Nella
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni
La gestione dell input/output da tastiera La gestione dell input/output da file La gestione delle eccezioni Autore: Prof. Agostino Sorbara ITIS "M. M. Milano" Autore: Prof. Agostino Sorbara ITIS "M. M.
Progettazione : Design Pattern Creazionali
Progettazione : Design Pattern Creazionali Alessandro Martinelli [email protected] 30 Novembre 2010 Progettazione : Design Pattern Creazionali Aspetti generali dei Design Pattern Creazionali
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Design Pattern: Storia Parte b versione 2.1 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima pagina)
Esempi di algoritmi. Lezione III
Esempi di algoritmi Lezione III Scopo della lezione Implementare da zero algoritmi di media complessità. Verificare la correttezza di un algoritmo eseguendolo a mano. Imparare a valutare le prestazioni
INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014)
INSTALLAZIONE NUOVO CLIENT TUTTOTEL (04 Novembre 2014) Se la Suite risulta già stata installata e quindi sono già presenti le configurazioni di seguito indicate, si prega di andare direttamente alla fine
Gestione Risorse Umane Web
La gestione delle risorse umane Gestione Risorse Umane Web Generazione attestati di partecipazione ai corsi di formazione (Versione V03) Premessa... 2 Configurazione del sistema... 3 Estrattore dati...
Esercizi su. Funzioni
Esercizi su Funzioni ๒ Varie Tracce extra Sul sito del corso ๓ Esercizi funz_max.cc funz_fattoriale.cc ๔ Documentazione Il codice va documentato (commentato) Leggibilità Riduzione degli errori Manutenibilità
Siamo così arrivati all aritmetica modulare, ma anche a individuare alcuni aspetti di come funziona l aritmetica del calcolatore come vedremo.
DALLE PESATE ALL ARITMETICA FINITA IN BASE 2 Si è trovato, partendo da un problema concreto, che con la base 2, utilizzando alcune potenze della base, operando con solo addizioni, posso ottenere tutti
Convertitori numerici in Excel
ISTITUTO DI ISTRUZIONE SUPERIORE G. M. ANGIOY CARBONIA Convertitori numerici in Excel Prof. G. Ciaschetti Come attività di laboratorio, vogliamo realizzare dei convertitori numerici con Microsoft Excel
IL MIO PRIMO SITO: NEWS
Pagina 1 IL MIO PRIMO SITO: NEWS Sommario IL MIO PRIMO SITO: NEWS...1 Introduzione...2 I Contenitori...2 Creo un Contenitore...3 I Tracciati...4 Creo le Notizie...6 Inserisco il Testo...6 Inserisco un
Informatica per la comunicazione" - lezione 13 -
Informatica per la comunicazione" - lezione 13 - Funzionamento di una password" 1: l utente tramite il suo browser richiede l accesso a una pagina del server; 2: il server richiede il nome utente e la
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti
13 - Gestione della Memoria nella Programmazione Orientata agli Oggetti Programmazione e analisi di dati Modulo A: Programmazione in Java Paolo Milazzo Dipartimento di Informatica, Università di Pisa http://www.di.unipi.it/
Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress
Copyright Andrea Giavara wppratico.com Modulo 4 Il pannello amministrativo dell'hosting e il database per Wordpress 1. Il pannello amministrativo 2. I dati importanti 3. Creare il database - Cpanel - Plesk
Capitolo 3. L applicazione Java Diagrammi ER. 3.1 La finestra iniziale, il menu e la barra pulsanti
Capitolo 3 L applicazione Java Diagrammi ER Dopo le fasi di analisi, progettazione ed implementazione il software è stato compilato ed ora è pronto all uso; in questo capitolo mostreremo passo passo tutta
Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti:
Javadoc Uno dei pregi di Java è quello di integrare la documentazione con il codice stesso Formato dei commenti: /* commenti */ // commenti /** commenti documentazione */ Questi ultimi generano automaticamente
Introduzione a Dev-C++
Introduzione a Dev-C++ Università degli Studi di Brescia Docente: Massimiliano Giacomin Elementi di Informatica e Programmazione Università di Brescia 1 Note: Dev-C++ richiede Windows 95/98/NT/2000/XP
La progettazione dell interfaccia HCI. Fabio Vitali
La progettazione dell interfaccia La progettazione Alla base della progettazione di buone interfacce c è il prestito intelligente. E molto meglio scegliere le buone idee di altra gente piuttosto che ideare
4 3 4 = 4 x 10 2 + 3 x 10 1 + 4 x 10 0 aaa 10 2 10 1 10 0
Rappresentazione dei numeri I numeri che siamo abituati ad utilizzare sono espressi utilizzando il sistema di numerazione decimale, che si chiama così perché utilizza 0 cifre (0,,2,3,4,5,6,7,8,9). Si dice
Tricks & Tips. [Access] Tutorial - ActiveX - Controllo Tree View. - Michele de Nittis - Versione: 1 Data Versione: venerdì 30 agosto 2002
Tricks & Tips [Access] - Michele de Nittis - Tutorial - ActiveX - Controllo Tree View Versione: 1 Data Versione: venerdì 30 agosto 2002 1 SOMMARIO PREMESSA...3 INSERIMENTO DEL CONTROLLO...3 AGGIUNTA DELLE
Programmazione a Oggetti Lezione 10. Ereditarieta
Programmazione a Oggetti Lezione 10 Ereditarieta Sommario Come definire sottoclassi Costruttori Abstract Classes Final Ereditarietà: promemoria Strumento tipico dell OOP per riusare il codice e creare
Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass
0_Iniziare con GRASS Avvio di Grass e creazione della cartella del Database di GRASS Per chi ha la Virtual Machine: avviare Grass da terminale, andando su Applicazioni Accessori Terminale e scrivere grass
Visual Basic.NET La Gestione degli Errori di Federico BARBATI
Generalità Visual Basic.NET La Gestione degli Errori di Federico BARBATI La gestione degli errori, è una parte fondamentale di un codice ben progettato. Fino ad oggi, gli errori nelle applicazioni scritte
Integrazione InfiniteCRM - MailUp
Integrazione InfiniteCRM - MailUp La funzionalità della gestione delle campagne marketing di icrm è stata arricchita con la spedizione di email attraverso l integrazione con la piattaforma MailUp. Creando
Settaggio impostazioni tema. Cliccando nuovamente su aspetto e poi su personalizza si avrà modo di configurare la struttura dinamica della template.
I TEMI PREDEFINITI (TEMPLATE) Scelta del tema I temi predefiniti di wordpress sono la base di un sito che usa un utente che per ragioni pratiche o per incapacità non può creare un sito usando solo codice
Traccia di soluzione dell esercizio del 25/1/2005
Traccia di soluzione dell esercizio del 25/1/2005 1 Casi d uso I casi d uso sono in Figura 1. Ci sono solo due attori: il Capo officina e il generico Meccanico. Figura 1: Diagramma dei casi d uso. 2 Modello
Product Shipping Cost Guida d'installazione ed Utilizzo
Guida d'installazione ed Utilizzo Installazione Per installare il modulo è sufficiente copiare la cartella app del pacchetto del modulo nella cartella principale dell'installazione di Magento dove è già
Programmazione Orientata agli Oggetti in Linguaggio Java
Programmazione Orientata agli Oggetti in Linguaggio Java Ruoli e Responsabilità: Introduzione versione 2.3 Questo lavoro è concesso in uso secondo i termini di una licenza Creative Commons (vedi ultima
Office 2007 Lezione 02. Le operazioni più
Le operazioni più comuni Le operazioni più comuni Personalizzare l interfaccia Creare un nuovo file Ieri ci siamo occupati di descrivere l interfaccia del nuovo Office, ma non abbiamo ancora spiegato come
PowerPoint. Guida introduttiva
PowerPoint Guida introduttiva Informativa Questa guida nasce con l intento di spiegare in modo chiaro e preciso come usare il software Microsoft PowerPoint. In questa guida saranno tralasciati tutti quei
SOMMARIO Coda (queue): QUEUE. QUEUE : specifica QUEUE
SOMMARIO Coda (queue): Specifica: interfaccia. Implementazione: Strutture indicizzate (array): Array di dimensione variabile. Array circolari. Strutture collegate (nodi). Prestazioni. Strutture Software
Per scrivere una procedura che non deve restituire nessun valore e deve solo contenere le informazioni per le modalità delle porte e controlli
CODICE Le fonti in cui si possono trovare tutorial o esempi di progetti utilizzati con Arduino si trovano nel sito ufficiale di Arduino, oppure nei forum di domotica e robotica. Il codice utilizzato per
FPf per Windows 3.1. Guida all uso
FPf per Windows 3.1 Guida all uso 3 Configurazione di una rete locale Versione 1.0 del 18/05/2004 Guida 03 ver 02.doc Pagina 1 Scenario di riferimento In figura è mostrata una possibile soluzione di rete
Tale attività non è descritta in questa dispensa
Fondamenti di informatica Oggetti e Java ottobre 2014 1 Nota preliminare L installazione e l uso di Eclipse richiede di aver preliminarmente installato Java SE SDK Tale attività non è descritta in questa
Object Oriented Programming
OOP Object Oriented Programming Programmazione orientata agli oggetti La programmazione orientata agli oggetti (Object Oriented Programming) è un paradigma di programmazione Permette di raggruppare in
Il web server Apache Lezione n. 3. Introduzione
Procurarsi ed installare il web server Apache Introduzione In questa lezione cominciamo a fare un po di pratica facendo una serie di operazioni preliminari, necessarie per iniziare a lavorare. In particolar
costruttori e distruttori
costruttori e distruttori Costruttore E un metodo che ha lo stesso nome della classe a cui appartiene: serve per inizializzare un oggetto all atto della sua creazione Ce ne possono essere uno, più di uno,
UML Diagrammi delle classi. UML Diagramma classi 1
UML Diagrammi delle classi UML Diagramma classi 1 Diagramma delle classi Non è nei nostri obiettivi affrontare UML nel suo complesso Ci concentreremo sui diagrammi delle classi che ci forniscono un linguaggio
Appunti di Interazione Uomo Macchina Principi di progettazione per il web I wireframe
Appunti di Interazione Uomo Macchina Principi di progettazione per il web I wireframe Luca Pulina 1 Introduzione Nell ambito della progettazione di siti web, i wireframe sono un insieme di documenti che
Parola chiave extends
Il Linguaggio Java Ereditarietà Ereditarietà L'ereditarietà permette di creare nuove classi sulla base di classi esistenti In particolare, permette di riusare il codice (metodi e campi); aggiungere nuovi
ShellExcel. Una domanda contiene i riferimenti (#A, #B, #C) alle celle che contengono i dati numerici del
Progetto Software to Fit - ShellExcel Pagina 1 Manuale d'uso ShellExcel ShellExcel è una interfaccia per disabili che permette ad un alunno con difficoltà di apprendimento di esercitarsi ripetitivamente
Registri RMI. Massimo Merro Univ. Verona Programmazione di Rete 90 / 247
Registri RMI Per poter interagire con un server remoto, un client deve essere in possesso di una sua referenza remota (ovvero un oggetto stub). Un servizio di Naming è una risorsa centralizzata che può
Mac Application Manager 1.3 (SOLO PER TIGER)
Mac Application Manager 1.3 (SOLO PER TIGER) MacApplicationManager ha lo scopo di raccogliere in maniera centralizzata le informazioni piu salienti dei nostri Mac in rete e di associare a ciascun Mac i
A intervalli regolari ogni router manda la sua tabella a tutti i vicini, e riceve quelle dei vicini.
Algoritmi di routing dinamici (pag.89) UdA2_L5 Nelle moderne reti si usano algoritmi dinamici, che si adattano automaticamente ai cambiamenti della rete. Questi algoritmi non sono eseguiti solo all'avvio
Java: Compilatore e Interprete
Java: Compilatore e Interprete Java Virtual Machine Il bytecode non è Linguaggio Macchina. Per diventarlo, deve subire un ulteriore trasformazione che viene operata dall interprete Java in modalità JIT
Concetti Base Eccezioni Eccezioni e Metodi Gerarchia di Eccezioni. Java: Eccezioni. Damiano Macedonio
Dipartimento di Informatica, Università degli Studi di Verona Corso di Programmazione per Bioformatica lezione del 30 maggio 2014 Introduzione Un programma diviso in sezioni distinte Un approccio alla
La manutenzione come elemento di garanzia della sicurezza di macchine e impianti
La manutenzione come elemento di garanzia della sicurezza di macchine e impianti Alessandro Mazzeranghi, Rossano Rossetti MECQ S.r.l. Quanto è importante la manutenzione negli ambienti di lavoro? E cosa
http://www.programmiamo.altervista.org/c/oop/o...
PROGRAMMIAMO Programma per la gestione di un conto corrente C++ - Costruttore e distruttore C++ Home Contatti Supponiamo ora di voler scrivere un programma a menu per la gestione di un conto corrente bancario.
Corso di Informatica
Corso di Informatica Modulo T3 1-Sottoprogrammi 1 Prerequisiti Tecnica top-down Programmazione elementare 2 1 Introduzione Lo scopo di questa Unità è utilizzare la metodologia di progettazione top-down
I/O su Socket TCP: read()
I/O su Socket TCP: read() I socket TCP, una volta che la connessione TCP sia stata instaurata, sono accedibili come se fossero dei file, mediante un descrittore di file (un intero) ottenuto tramite una
IL MIO PRIMO SITO NEWS USANDO GLI SCHEDARI
Pagina 1 UN SISTEMA DI NEWS Sommario UN SISTEMA DI NEWS...1 Introduzione...2 Scelgo l'area su cui operare...3 Un minimo di teoria...3 Creo le Pagine...4 Definizione dello Schedario Novità...6 Compilo la
Testo Esercizio. Un modello è ragionevole quando contiene queste tre caratteristiche.
Testo Esercizio Un negozio di musica vende anche libri e riviste musicali. Si intende automatizzare l intero processo, dall approvvigionamento alla vendita. Si analizzino i requisiti e se ne rappresentino
Visibilità dei Membri di una Classe
Visibilità dei Membri di una Classe Lezione 10 Ogni classe definisce un proprio scope racchiude il codice contenuto nella definizione della classe e di tutti i suoi membri ogni metodo della classe definisce
Joomla! 2.5:Utenti e permessi - Il wiki di Joomla.it
Pagina 1 di 6 Joomla! 2.5:Utenti e permessi Da Il wiki di Joomla.it. Traduzione (http://cocoate.com/it/j25it/utenti) dal libro Joomla! 2.5 - Beginner's Guide (http://cocoate.com/j25/users-permissions)
Guida Rapida all uso del License Manager di ROCKEY4Smart (V. 1.0.10.724)
Guida Rapida all uso del License Manager di ROCKEY4Smart (V. 1.0.10.724) Procedo con un esempio: voglio proteggere una applicazione (nell esempio Blocco Note di Windows: notepad.exe) per distribuirla con
risulta (x) = 1 se x < 0.
Questo file si pone come obiettivo quello di mostrarvi come lo studio di una funzione reale di una variabile reale, nella cui espressione compare un qualche valore assoluto, possa essere svolto senza necessariamente
PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0)
PROCEDURA INVENTARIO DI MAGAZZINO di FINE ESERCIZIO (dalla versione 3.2.0) (Da effettuare non prima del 01/01/2011) Le istruzioni si basano su un azienda che ha circa 1000 articoli, che utilizza l ultimo
MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE
1/6 MANUALE D'USO DEL PROGRAMMA IMMOBIPHONE Per prima cosa si ringrazia per aver scelto ImmobiPhone e per aver dato fiducia al suo autore. Il presente documento istruisce l'utilizzatore sull'uso del programma
www.filoweb.it STAMPA UNIONE DI WORD
STAMPA UNIONE DI WORD Molte volte abbiamo bisogno di stampare più volte lo stesso documento cambiando solo alcuni dati. Potremmo farlo manualmente e perdere un sacco di tempo, oppure possiamo ricorrere
Introduzione alla programmazione in C
Introduzione alla programmazione in C Testi Consigliati: A. Kelley & I. Pohl C didattica e programmazione B.W. Kernighan & D. M. Ritchie Linguaggio C P. Tosoratti Introduzione all informatica Materiale
Oltre il diritto d autore: Creative Commons. Formazione Volontari SCN 2010 Mediateca Centro Linguistico di Ateneo - febbraio 2010
Oltre il diritto d autore: Creative Commons Formazione Volontari SCN 2010 Mediateca Centro Linguistico di Ateneo - febbraio 2010 cosa faremo oggi introduzione alle Creative Commons Licenses che cos è Creative
dall argomento argomento della malloc()
Allocazione dinamica Quando? Tutte le volte in cui i dati possono crescere in modo non prevedibile staticamente a tempo di sviluppo Un array con dimensione i fissata a compile-time non è sufficiente È
Come modificare la propria Home Page e gli elementi correlati
Come modificare la propria Home Page e gli elementi correlati Versione del documento: 3.0 Ultimo aggiornamento: 2006-09-15 Riferimento: webmaster ([email protected]) La modifica delle informazioni
file:///c:/formazione/photoshop-webmaster-uffici/doc/guida-winzip.htm Guida a Winzip
Guida a Winzip Winzip è uno dei programmi più famosi per comprimere file rendendoli meno pesanti (in termini di Byte) e quindi proprio per questa sua caratteristica è uno dei programmi più usati su internet
Realizzazione di una classe con un associazione
Realizzazione di una classe con un associazione Nel realizzare una classe che è coinvolta in un associazione, ci dobbiamo chiedere se la classe ha responsabilità sull associazione. Diciamo che una classe
RIFERIMENTI ATTORI GLOSSARIO. ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova
RIFERIMENTI ERRORI COMUNI REV. REQUISITI INGEGNERIA DEL SOFTWARE Università degli Studi di Padova Dipartimento di Matematica Corso di Laurea in Informatica, A.A. 2014 2015 I riferimenti devono essere precisi
Introduzione. Java. Composizione. Esempio -- composizione. G. Prencipe [email protected]. È qualcosa che abbiamo già visto varie volte
Java riutilizzo delle classi G. Prencipe [email protected] Introduzione Una delle caratteristiche fondamentali in Java è il riutilizzo del codice Ci sono due modi per ottenerlo Creare oggetti di classi
MANUALE UTENTE Fiscali Free
MANUALE UTENTE Fiscali Free Le informazioni contenute in questa pubblicazione sono soggette a modifiche da parte della ComputerNetRimini. Il software descritto in questa pubblicazione viene rilasciato
Mobilità di Codice. Massimo Merro Programmazione di Rete 128 / 144
Mobilità di Codice Abbiamo già visto come un dato host possa trasmettere un oggetto (serializzabile) ad un altro host. Quest ultimo potrà eseguire l oggetto pur non possedendo il bytecode della classe
Main System Monitor Keyboard
Composite 57 8. Composite (Gof pag. 163) 8.1. Descrizione Consente la costruzione di gerarchie di oggetti composti. Gli oggetti composti possono essere conformati da oggetti singoli, oppure da altri oggetti
Introduzione JDBC interfaccia java.sql driver caricare i driver
J D B C DISPENSE Introduzione JDBC (Java Database Connectivity) è un interfaccia completamente Java utilizzata per eseguire istruzioni SQL sui database. L'API JDBC si trova nel pacchetto java.sql; contiene
f(x) = 1 x. Il dominio di questa funzione è il sottoinsieme proprio di R dato da
Data una funzione reale f di variabile reale x, definita su un sottoinsieme proprio D f di R (con questo voglio dire che il dominio di f è un sottoinsieme di R che non coincide con tutto R), ci si chiede
Corso Eclipse. Prerequisiti. 1 Introduzione
Corso Eclipse 1 Introduzione 1 Prerequisiti Uso elementare del pc Esecuzione ricerche su Internet Esecuzione download Conoscenza elementare della programmazione 2 1 Cos è Eclipse Eclipse è un IDE (Integrated
Airone Gestione Rifiuti Funzioni di Esportazione e Importazione
Airone Gestione Rifiuti Funzioni di Esportazione e Importazione Airone Funzioni di Esportazione Importazione 1 Indice AIRONE GESTIONE RIFIUTI... 1 FUNZIONI DI ESPORTAZIONE E IMPORTAZIONE... 1 INDICE...
GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain.
*+33(GLWRU GHPPEditor è un software realizzato per produrre in modo rapido e guidato un part program per controlli numerici Heidenhain. Il programma si basa su un architettura di tasti funzionali presenti
Entrare nel sistema. Clicca su Entra per entrare nel sistema. PAGINA 1
Entrare nel sistema Clicca su Entra per entrare nel sistema. PAGINA 1 Entrare nel sistema Compare il box di login in cui inserire il nome utente e la password fornite tramite posta elettronica. PAGINA
11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0
11/02/2015 MANUALE DI INSTALLAZIONE DELL APPLICAZIONE DESKTOP TELEMATICO VERSIONE 1.0 PAG. 2 DI 38 INDICE 1. PREMESSA 3 2. SCARICO DEL SOFTWARE 4 2.1 AMBIENTE WINDOWS 5 2.2 AMBIENTE MACINTOSH 6 2.3 AMBIENTE
