test istruzioni per l'uso
TRANSCRIPT
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?