Test istruzioni per l'uso

Post on 13-Apr-2017

260 views 0 download

Transcript of Test istruzioni per l'uso

PresentationTest: Istruzioniper l'uso

AGOSTO 2015

@SILVIOTROIA

partiamo dal principio

Come si sviluppaSoftware?

Cose che non abbiamo mai fatto (knowledge worker)

cosa non va?

dove stiamo andando?

ricordiamoci sempre...

un codice senza testè un codice che

NON FUNZIONA !!!

Feedbackad ogni livello del progetto

Pair programming (s)

Daily Meeting (d)

Acceptance test (w)Releases (m)

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

incrementale

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

sempre pronto per la produzione

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

iterativo

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

granularità del test

hai feedback finché non seisoddisfatto

ciclo di produzione

Waterfallanalisi

progettazionesviluppo

test

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

BusinessPeopleHistory

Non voglio perderetempo a testare...

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

TDDTest Driven Development

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

Test & Refactorper un sistema affidabile e sostenibile ai

cambiamenti

Livelli di Test

Accettazione (anche E2E)

Integrazione

Unitari

Test Unitario

test il singolo metodo

la parte atomica del nostro progetto

mockando tutto il resto

Nutshell (Unit TEST)

Waterfallanalisi

progettazionesviluppo

test

Test Integrazione

come il nostro codice si integraa quello degli altri

Es: Librerie, Framework

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

Complete Nutshell Acceptance Test

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

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

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')

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();}};

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

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

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 ?

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ì...

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...

End to End Test

Collegamenti con sistemi ESTERNI

sistema di report

invio email

scrittura sui social

Ok, come comincio?come faccio?

devo creare un test senza avere niente?Walking Skeleton

Domande?