Opcions d'impressió

Mida
Compacta · 9 pt Normal · 10,5 pt Gran · 12,5 pt
Els meus apunts
No imprimir-los Incloure'ls a cada paràgraf

El navegador numera les pàgines des del seu propi quadre d'imprimir: activa-ho allà si les vols.

Els requadres grisos només surten si deixes marcada la casella «Gràfics de fons» del quadre d'imprimir.

opos

Disseny i realització de proves de programari

Disseny i realització de proves de programari

Elaboració pròpia: la font és de pagament i no es reprodueix

Enunciat oficial. Disseny i realització de proves de programari.


1. Propòsit de les proves

Propòsit principal de les proves dins del cicle de vida del desenvolupament: verificar que el programari compleix els requisits especificats i detectar defectes abans que arribin a producció, proporcionant informació objectiva sobre la qualitat del producte per donar suport a la presa de decisions.

Tres matisos que es pregunten:

Els set principis de les proves (ISTQB, International Software Testing Qualifications Board):

  1. Les proves mostren la presència de defectes, no la seva absència.
  2. Les proves exhaustives són impossibles.
  3. Provar aviat (early testing), també anomenat desplaçament a l'esquerra (shift-left), estalvia temps i diners: el cost de corregir un defecte creix com més tard es detecta, i provar des de l'inici —revisar l'especificació, escriure proves abans o durant la implementació— surt més barat que provar només al final.
  4. Agrupació de defectes: un nombre reduït de mòduls conté la majoria dels defectes (Pareto).
  5. Paradoxa del pesticida: repetir sempre les mateixes proves deixa de trobar defectes nous; cal revisar-les i ampliar-les.
  6. Les proves depenen del context.
  7. La falàcia de l'absència d'errors: un sistema sense defectes coneguts pot ser igualment inservible si no cobreix les necessitats de l'usuari.

Verificació vs validació: verificació = estem construint el producte correctament? (compleix l'especificació); validació = estem construint el producte correcte? (satisfà la necessitat real).

Error → defecte → fallida: una persona comet un error, que introdueix un defecte al codi, que en executar-se pot provocar una fallida del sistema.


2. Nivells de prova

Nivell Objecte Qui Correspondència al model en V
Unitàries una unitat aïllada (funció, classe, mòdul) desenvolupadors disseny detallat
Integració la interacció entre components o sistemes desenvolupadors i QA disseny arquitectònic
Sistema el sistema complet contra els requisits QA especificació de requisits
Acceptació el sistema des de la perspectiva de l'usuari o el client usuari, client requisits de negoci

Proves d'acceptació d'usuari (UAT — User Acceptance Testing): les executen els usuaris finals o els representants del negoci en un entorn semblant al de producció, amb dades i escenaris reals, per validar que el sistema satisfà les seves necessitats i que estan disposats a acceptar-lo. No busquen defectes tècnics: busquen adequació a l'ús. Variants: prova alfa (a les instal·lacions del desenvolupador), prova beta (a l'entorn de l'usuari), prova d'acceptació operativa (còpies, recuperació, manteniment), prova d'acceptació contractual i normativa.

Estratègies d'integració: big bang, descendent (top-down) amb stubs, ascendent (bottom-up) amb controladors (drivers), sandvitx i incremental contínua (CI).

Dobles de prova: dummy, stub, spy, mock i fake.


3. Tipus de prova

3.1 Funcionals

Verifiquen què fa el sistema: proves de requisits, de casos d'ús, de regles de negoci, de fluxos i de dades.

3.2 No funcionals

Verifiquen com de bé ho fa:

3.3 Proves de canvis

Totes es fan al voltant d'un canvi, i el tribunal les contraposa per la pregunta a la qual responen: la confirmació respon s'ha arreglat allò?, la regressió he trencat res? i la de fum arrenca, si més no?.


4. Tècniques de disseny de casos de prova

La diferència que es pregunta: la caixa blanca dissenya els casos analitzant el funcionament intern del codi —camins, condicions, complexitat—; la caixa negra, a partir de l'especificació externa, sense conèixer el codi. No es distingeixen per la fase en què s'apliquen —totes dues serveixen a qualsevol fase—, i la distractora habitual inverteix les dues definicions.

4.1 Caixa negra (basades en l'especificació)

La caixa negra dissenya els casos a partir de l'especificació i del comportament esperat, sense mirar com està escrit el codi per dins. Serveix a qualsevol nivell de prova i no cal accés al codi font.

4.2 Caixa blanca (basades en l'estructura)

La caixa blanca dissenya els casos a partir de l'estructura interna del codi i en mesura la cobertura assolida; exigeix accés al codi font i és sobretot de nivell unitari. La contraposició amb la caixa negra és especificació contra codi, no «usuari contra tècnic».

4.3 Basades en l'experiència

Predicció d'errors (error guessing), proves exploratòries i proves basades en llistes de verificació.


5. Automatització

Piràmide de proves (Mike Cohn): molts casos unitaris a la base, menys d'integració/servei al mig i molt pocs d'extrem a extrem (E2E) al cim. Les d'a dalt són lentes, fràgils i cares; les de baix, ràpides i barates.

Piràmide de provesAl cim, poques proves d'extrem a extrem, lentes i cares; al mig, proves d'integració i de servei; a la base, moltes proves unitàries, ràpides i barates.E2E, extrem a extrempoques, lentes i caresIntegració i serveiUnitàriesmoltes, ràpides i barates

Antipatró del con de gelat: la piràmide invertida —molts E2E i poques unitàries— que produeix una bateria lenta, inestable i inútil.

Proves inestables (flaky): passen o fallen sense canvis al codi. Destrueixen la confiança a la bateria: cal aïllar-les i corregir-les immediatament, no reexecutar-les fins que passin.

Eines: JUnit, pytest, NUnit, Jest (unitàries); Testcontainers, WireMock, Pact (integració i contractes); Selenium, Cypress, Playwright (E2E web); Appium, Espresso, XCUITest (mòbil); REST (REpresentational State Transfer) Assured, Postman/Newman, Karate (API, Application Programming Interface); JMeter, k6, Gatling (rendiment); OWASP (Open Worldwide Application Security Project) ZAP (Zed Attack Proxy), Burp (seguretat); SonarQube (estàtica).

Integració al pipeline: unitàries i estàtiques a cada commit; integració i contractes a cada fusió; E2E i rendiment abans del pas a preproducció → tema 41.

5.1 Desenvolupament guiat per proves (TDD)

TDD (Test-Driven Development, desenvolupament guiat per proves): tècnica en què s'escriu la prova d'un requisit abans que el codi que l'implementa. Cicle roig → verd → refactor, que es repeteix per a cada requisit:

  1. Roig: triar un requisit i escriure'n una prova, que ha de fallar perquè encara no hi ha implementació.
  2. Verd: escriure la implementació mínima que fa passar la prova, sense preocupar-se encara del disseny.
  3. Refactor: millorar l'estructura del codi (eliminar duplicació, aclarir noms) mantenint totes les proves en verd.

El primer pas del cicle és sempre escriure la prova, no el codi: és la inversió respecte al desenvolupament tradicional i el que distingeix el TDD d'«escriure proves després».


6. Gestió i entorns

Pla de proves (IEEE 829 / ISO/IEC (International Electrotechnical Commission) 29119): abast, estratègia, nivells i tipus, criteris d'entrada i de sortida, entorns, dades, riscos, recursos, calendari i entregables.

Gestió de defectes: registre amb passos per reproduir, resultat esperat i obtingut, entorn, gravetat (impacte tècnic) i prioritat (urgència de negoci) —no són el mateix—, i el seu cicle de vida (obert → assignat → resolt → verificat → tancat / rebutjat / duplicat / ajornat).

Entorns: desenvolupament, integració, QA (Quality Assurance, assegurament de la qualitat)/proves, preproducció (com més semblant a producció, millor) i producció.

Dades de prova: aquest és un punt crític al sector públic. No es poden fer servir dades personals reals en entorns de prova sense una base de licitud i garanties: el principi de limitació de la finalitat del RGPD, art. 5 ho impedeix. Solucions: generació sintètica, anonimització o pseudonimització robusta, i subconjunts mínims. Si excepcionalment s'usen dades reals, cal la mateixa protecció que a producció.

6.1 El procés de prova i els seus productes

Provar no és només executar: és una seqüència d'activitats que acompanya tot el projecte. Planificació → seguiment i control → anàlisi (què s'ha de provar) → disseny (com es provarà) → implementació (preparar el material i l'entorn) → execució → tancament (informe, lliçons apreses i arxiu del material). No són estrictament seqüencials: en un context àgil s'encavalquen i es repeteixen a cada iteració.

Els productes de treball tenen noms que es confonen:

L'estratègia de proves és el criteri general amb què s'aborda tot això, i es tria segons el context: analítica (es prioritza pel risc o pels requisits), metòdica (una llista de verificació estàndard, sempre la mateixa), conforme a la norma o al procés, i reactiva (es dissenya mentre s'executa, com a les proves exploratòries).


7. Al sector públic


Claus d'examen


Per recordar

Fonts d'aquest tema