50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino.
La nuova versione di Java implementa caratteristiche che da tempo erano attese
nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e
Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle
Enumeration.
Per Java 6: gestione di SystemTray e motori di scripting.
Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Boymix81
Breve presentazione del lavoro svolto per la tesi : STRUMENTI PER LA GENERAZIONE AUTOMATICA DI TEST STRUTTURALI E FUNZIONALI, scaricabile dal sito web http://boymix81.mynickname.info
Quando, come e perché utilizzare PowerMock. Vengono analizzati i legami tra design delle applicazioni e strumenti di test. Sono presenti esempi di codice semplice ma verosimile con i rispettivi test.
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
Nicola e Davide vi guideranno in uno spericolato refactoring di un codice poco gradevole alla vista di qualsiasi buon programmatore con lo scopo di illustrare i principali problemi che normalmente affligono il nostro povero codice rendendo difficile la scrittura di fantastici e utili test unitari. Verranno spiegati i principi da rispettare per ottenere un codice facile da testare quali: dependency injection, law of demeter, uso del pattern factory e builder, corretta scrittura dei costruttori, come scovare nomi pericolosi. Ed illustrate le pratiche da evitare: pattern singleton, stati globali, service locator, scrittura di classi con troppa responsabilità. Alla fine del talk verranno presentati alcuni link, software e libri utili nella scrittura di test unitari.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
50 minuti per svelare la tigre, il cavallo e sapere che esiste il delfino.
La nuova versione di Java implementa caratteristiche che da tempo erano attese
nello standard del linguaggio: Metadata, Generic Types, AutoBoxing e
Unboxing dei tipi primitivi, Static import, gestione dinamica dei Loop e delle
Enumeration.
Per Java 6: gestione di SystemTray e motori di scripting.
Vediamo di cosa si tratta e di come poter utilizzare queste nuove feature all'interno dei nostri programmi
Presentazione della Tesi di Laurea Specialistica : STRUMENTI PER LA GENERAZIO...Boymix81
Breve presentazione del lavoro svolto per la tesi : STRUMENTI PER LA GENERAZIONE AUTOMATICA DI TEST STRUTTURALI E FUNZIONALI, scaricabile dal sito web http://boymix81.mynickname.info
Quando, come e perché utilizzare PowerMock. Vengono analizzati i legami tra design delle applicazioni e strumenti di test. Sono presenti esempi di codice semplice ma verosimile con i rispettivi test.
The Hitchhiker's Guide to testable code: semplici regole per scrivere codice ...Davide Cerbo
Nicola e Davide vi guideranno in uno spericolato refactoring di un codice poco gradevole alla vista di qualsiasi buon programmatore con lo scopo di illustrare i principali problemi che normalmente affligono il nostro povero codice rendendo difficile la scrittura di fantastici e utili test unitari. Verranno spiegati i principi da rispettare per ottenere un codice facile da testare quali: dependency injection, law of demeter, uso del pattern factory e builder, corretta scrittura dei costruttori, come scovare nomi pericolosi. Ed illustrate le pratiche da evitare: pattern singleton, stati globali, service locator, scrittura di classi con troppa responsabilità. Alla fine del talk verranno presentati alcuni link, software e libri utili nella scrittura di test unitari.
Il testing delle applicazioni MVC Zend Framework è spesso visto come una sorta di stregoneria, ma tutto sommato non lo è. In questo seminario web vedremo cosa e come testare, i pattern più comuni per il testing e le possibili difficoltà che si possono incontrare. Verranno trattati inoltre alcuni elementi di base su PHPUnit in modo da fornire concetti fondamentali per l’operatività anche a chi non è esperto di testing.
2. YURI VALENTINIYURI VALENTINI
SW Windows e Linux
FW schede embedded
Linguaggi: C/C++, C#, Python
Ambiti:
Videoconferenza e VOIP
Automazione industriale
Biomedicale
yuroller@gmail.com
https://github.com/yuroller
3. TESTING VS CHECKINGTESTING VS CHECKING
Richiede persona
senziente
Automatizzabile
Fa scoprire nuove cose Conferma le nostre
assunzioni
Fa richieste inedite Fa sempre le stesse
richieste
Esplorazione e scoperta
di nuove cose
Assicura che il
programma funzioni
Michael Bolton blog post
5. VISUAL STUDIOVISUAL STUDIO
Creare una solution
Creare il progetto di test (console)
Aggiungere:
Definire:
Linker → Debugging: /DEBUG:FULL
Rimuovere: main()
gtest{d}.lib;gtest_main{d}.lib
_SILENCE_TR1_NAMESPACE_DEPRECATION_WARNI
16. MODELLO 3A PER TESTMODELLO 3A PER TEST
Arrange
Act
Assert
17. NOMI DEI TESTNOMI DEI TEST
Ognuno ha la sua convenzione
Test Case: {nome_classe/scenario}Test
Test Name: {descrizione_del_test}
Alcuni usano: MethodName_GivenConditions
_WhenThisHappens_ThenThisisExpectedResult
TEST(FactorialTest, HandlesZeroInput)
sumOfTwoNumbers_givenTwoPositiveNumbers
_WhenNumbersArePositive_ThenResultIsPositive()
19. TDDTDD
"TDD by Example" ‐ Kent Beck
1. Quickly add a test
2. Run all tests and see the new one fail
3. Make a little change
4. Run all tests and see them all
succeed
5. Refactor to remove duplication
23. FAKEFAKE
Fakes are objects that have working
implementations, but not same as
production one. Usually they take some
shortcut and have simplified version of
production code.
24. STUBSTUB
Stub is an object that holds predefined
data and uses it to answer calls during
tests. It is used when we cannot or
don’t want to involve objects that
would answer with real data or have
undesirable side effects.
25. MOCKMOCK
Mocks are objects that register calls
they receive. In test assertion we can
verify on Mocks that all expected
actions were performed.
26. A COSA SERVONO I MOCK?A COSA SERVONO I MOCK?
testare le classi in isolamento
verificare che certi metodi vengano chiamati
verificare i parametri con cui i metodi sono chiamati
specificare i valori di ritorno dei metodi
27. QUANDO USARE I MOCKQUANDO USARE I MOCK
valori non deterministici (es. orario)
condizioni difficili da ricreare (es. errori di rete)
metodi che rallentano i test (es. accesso al db)
evitare di aggiungere metodi per ispezionare lo
stato
28. MOCK DI INTERFACCIAMOCK DI INTERFACCIA
class Foo {
public:
virtual ~Foo() = default;
virtual int GetSize() const = 0;
virtual std::string Describe(const char* name) = 0;
virtual std::string Describe(int type) = 0;
virtual bool Process(Bar elem, int count) = 0;
};
class MockFoo : public Foo {
public:
MOCK_CONST_METHOD0(GetSize, int());
MOCK_METHOD1(Describe, std::string(const char* name));
MOCK_METHOD1(Describe, std::string(int type));
MOCK_METHOD2(Process, bool(Bar elem, int count));
};
// default is NaggyMock (prints a warning)
NiceMock<MockFoo> nice_foo; // ignores uninteresting calls
StrictMock<MockFoo> strict_foo; // fails on uninteresting call
29. USO DI MOCKUSO DI MOCK
TEST(BarTest, DoesThis) {
MockFoo foo;
ON_CALL(foo, GetSize())
.WillByDefault(Return(1));
// ... other default actions ...
EXPECT_CALL(foo, Describe(5))
.Times(3)
.WillRepeatedly(Return("Category 5"));
// ... other expectations ...
EXPECT_EQ("good", MyProductionFunction(&foo));
}
30. I CICLI DEL TDDI CICLI DEL TDD
esterno (test di accettazione)
interno (unit test)
31. BANK KATABANK KATA
-
Creare una semplice applicazione bancaria con le
seguenti funzionalità:
deposito su un conto corrente
prelievo da un conto corrente
stampare i movimenti del conto corrente sul
terminale
Implementazione Java Screencast
32. CRITERI DI ACCETTAZIONECRITERI DI ACCETTAZIONE
La stampa dei movimenti ha il seguente formato:
DATA | IMPORTO | SALDO
10/04/2014 | 500 | 1400
02/04/2014 | -100 | 900
01/04/2014 | 1000 | 1000
33. VINCOLIVINCOLI
utilizzare una classe con questa struttura:
non puoi aggiungere metodi pubblici alla classe
per semplicità usiamo int per gli importi e std::string
per le date
la spaziatura nella stampa dei movimenti non è
vincolante
class ContoCorrente
{
public:
void Deposita(int importo);
void Preleva(int importo);
void StampaMovimenti();
};