Test istruzioni per l'uso

30
Presentation Test: Istruzioni per l'uso AGOSTO 2015 @SILVIOTROIA

Transcript of Test istruzioni per l'uso

Page 1: Test  istruzioni per l'uso

PresentationTest: Istruzioniper l'uso

AGOSTO 2015

@SILVIOTROIA

Page 2: Test  istruzioni per l'uso

partiamo dal principio

Come si sviluppaSoftware?

Cose che non abbiamo mai fatto (knowledge worker)

cosa non va?

dove stiamo andando?

Page 3: Test  istruzioni per l'uso

ricordiamoci sempre...

un codice senza testè un codice che

NON FUNZIONA !!!

Page 4: Test  istruzioni per l'uso

Feedbackad ogni livello del progetto

Pair programming (s)

Daily Meeting (d)

Acceptance test (w)Releases (m)

se c'è feedback otteniamo...Progetto incrementale e iterativo

Page 5: Test  istruzioni per l'uso

incrementale

sempre avanti...è possibile costruire una feature per volta

sempre pronto per la produzione

(una fetta del sistema invece di unirlo tutto alla fine)

Page 6: Test  istruzioni per l'uso

iterativo

sempre meglio...si affina sempre di più a seconda della

granularità del test

hai feedback finché non seisoddisfatto

Page 7: Test  istruzioni per l'uso

ciclo di produzione

Waterfallanalisi

progettazionesviluppo

test

Page 8: Test  istruzioni per l'uso

Così tanto da testate e così pocotempo ... da dove comincio?

BusinessPeopleHistory

Page 9: Test  istruzioni per l'uso

Non voglio perderetempo a testare...

Page 10: Test  istruzioni per l'uso

Metodologia Agileil waterfall è un modello efficiente per fare software?

nel 2001, un gruppo di persone tra le più rilevanti nellosviluppo del software hanno prodotto il Manifesto

Agile dove descrivono una serie di valori e principi coni quali si voleva ricedere il modo di fare software

rispetto al modo tradizionale

Il software funzionante è il principale metro di misura di progresso.La semplicità è l'arte di massimizzare la quantità di lavoro non svolto

I processi agili promuovono uno sviluppo sostenibile ai cambiamenti

Page 11: Test  istruzioni per l'uso

TDDTest Driven Development

(Test-driven development is widely used in “agile”software development approaches.)

Page 12: Test  istruzioni per l'uso

Test & Refactorper un sistema affidabile e sostenibile ai

cambiamenti

Page 13: Test  istruzioni per l'uso

Livelli di Test

Accettazione (anche E2E)

Integrazione

Unitari

Page 14: Test  istruzioni per l'uso

Test Unitario

test il singolo metodo

la parte atomica del nostro progetto

mockando tutto il resto

Page 15: Test  istruzioni per l'uso

Nutshell (Unit TEST)

Waterfallanalisi

progettazionesviluppo

test

Page 16: Test  istruzioni per l'uso

Test Integrazione

come il nostro codice si integraa quello degli altri

Es: Librerie, Framework

Page 17: Test  istruzioni per l'uso

Test Accettazione

chiamato anche:functional test, customers test, system test

è quello per cui il cliente paga

usato per verificare che non si rompa nullamentre continuo a sviluppare

Page 18: Test  istruzioni per l'uso

Complete Nutshell Acceptance Test

Page 19: Test  istruzioni per l'uso

Flusso del lavoro

Translate a user story into an acceptance test (or few)Watch the acceptance test failWrite a failing unit testWatch the unit test failMake the unit test passRefactorWatch the acceptance test get a bit fartherRepeat until all tests are passingCommit the feature

Page 20: Test  istruzioni per l'uso

Accettazione

Feature: Player score can be increased manually

As a score keeper in some game I want to manually give a player five points

So that I can publicly display a up-to-date scoreboard

Scenario: Give 5 points to a player Given I authenticate

And "Grace Hopper" has a score of 40 When I give "Grace Hopper" 5 points

Then "Grace Hopper" has a score of 45

Page 21: Test  istruzioni per l'uso

Accettazionemodule.exports = { "Hello World" : function (browser) { browser .url("http://localhost:3000") .waitForElementVisible('body', 1000) .waitForElementVisible('div#outer', 1000) .waitForElementVisible('div.leaderboard', 1000) .waitForElementVisible('.leaderboard .player', 1000)

.verify.containsText('div.leaderboard div:nth-child(1) .name', 'Ada Lovelace') .verify.containsText('div.leaderboard div:nth-child(1) .score', '50')

.verify.containsText('div.leaderboard div:nth-child(2) .name', 'Grace Hopper') .verify.containsText('div.leaderboard div:nth-child(2) .score', '40')

.verify.containsText('.none', 'Click a player to select') .click('div.leaderboard div:nth-child(2)') .pause(500) .waitForElementVisible('input.inc', 1000) .verify.attributeEquals('input.inc', 'value', 'Give 5 points')

Page 22: Test  istruzioni per l'uso

Accettazione .click('input.inc') .verify.containsText('div.leaderboard div:nth-child(2) .name', 'Grace Hopper') .verify.containsText('div.leaderboard div:nth-child(2) .score', '45')

.click('input.inc') .verify.containsText('div.leaderboard div:nth-child(2) .name', 'Grace Hopper') .verify.containsText('div.leaderboard div:nth-child(2) .score', '50')

.click('input.inc') .verify.containsText('div.leaderboard div:nth-child(2) .name', 'Grace Hopper') .verify.containsText('div.leaderboard div:nth-child(2) .score', '55')

.verify.containsText('div.leaderboard div:nth-child(1) .name', 'Ada Lovelace') .verify.containsText('div.leaderboard div:nth-child(1) .score', '50')

.end();}};

Page 23: Test  istruzioni per l'uso

Unitario vs Accettazione

describe BankAccount do specify "new accounts have a zero balance" do account = BankAccount.new expect(account.balance).toequals(BigDecimal("0.00")) end end

Page 24: Test  istruzioni per l'uso

Unitario vs Accettazione

Given /I am a depositor/ do @user = Factory(:depositor) sign_in(@user) end

When /I open a new bank account/ do click_button "New Account" end

Then /my balance is $0,00/ do |bal| expect(page).to have_text("Balance: $0,00") end

Page 25: Test  istruzioni per l'uso

Good Practices

1) Given I am a newsletter publisher When I send out an electronic newsletter Then when Resque jobs are run And after 5 minutes passes Then the newsletter is received by all recipients

HIDE IMPLEMENTATION DETAILS

2) Given I am a newsletter publisher When I send out an electronic newsletter Then all recipients receive my newsletter within 5minutes

Il tuo cliente come spiegherebbequesta funzione ai suoi amici ?

Page 26: Test  istruzioni per l'uso

Good Practices

1) Given I am a user named "Alice" And there is a user "Bob" who is my friend And there is a user "Charlie" who is a friend of "Bob" When "Alice" invites "Bob" to a party But "Alice" does not invite "Charlie" to the same party Then "Alice" receives a message "Do you also want to invite Charlie?"

AVOID "PROGRAMMING"

2) Given that I am planning a party When I invite my friend Bob Then I am asked if I might want to invite his friend Charlie

nessun cliente spiegherebbe una feature così...

Page 27: Test  istruzioni per l'uso

Good Practices

1) Given I do not yet have an account with bank.example.com When I register for an account And I correctly decipher the CAPTCHA image proving I am a human And I correctly input the code on my RSA SecurID dongle And I deposit $20.00 Then my account balance is $20.00

FOCUS

2) Given I am a depositor When I deposit $20.00 Then my account balance is increased by $20.00

cosa fa veramente questa feature?

il login è un'altra feature...

Page 28: Test  istruzioni per l'uso

End to End Test

Collegamenti con sistemi ESTERNI

sistema di report

invio email

scrittura sui social

Page 29: Test  istruzioni per l'uso

Ok, come comincio?come faccio?

devo creare un test senza avere niente?Walking Skeleton

Page 30: Test  istruzioni per l'uso

Domande?