Sei sulla pagina 1di 21

Progetto e realizzazione di

uninfrastruttura di test per un sistema PACS

Motivazioni (1)
Perch testare il software
TEST

Miglioramento qualit Aumento del valore

1. 2. 3. 4.

Creazione Esecuzione Verifica Manutenzione

Errori del software

Obbiettivi
Migliorare il sistema dei test su O3-DPACS
Analisi del programma Analisi del processo di testing Identificazione dei problemi Definizione requisiti Sviluppo dellinfrastruttura di test Verifica dei risultati ottenuti

Motivazioni (2)
Certificazione di qualit
ISO 13485 CEI EN 62340
Processo di verifica attraverso test Criteri di validazione Integrazione di unit software Test di integrazione Report dei risultati Ripetibilit dei test Dispositivi medici

Analisi
Il processo di testing preesistente
N requisiti N+ test Manuale di qualit

Test dello sviluppatore Test integrazione del PM Test di rilascio


ISSUE A TEST TEST TEST ISSUE B TEST TEST TEST ISSUE random TEST TEST TEST obbligatori TEST TEST TEST

Bug Miglioramento Nuova funzionalit

Nuovo caso (ISSUE)

Rilascio versione X.Y

Analisi storica dei test


Versione 1.5 1.6 1.7 1.7.1 1.7.2 1.8 1.8.1 1.9 release date 06/09 09/10 09/10 10/10 10/10 05/11 06/11 11/11 # issue 12 40 9 1 1 24 3 5 # test 0 50 21 1 1 57 3 26 media test/issue (-) 1.25 2.3 (-) (-) 2.35 (1) 5.2

Media test per issue

Versione

Analisi storica dei bug

pacs-core anno
2008 minor 0 major critical minor 4 0 0

pacs-web
major critical minor 5 0 0

wado
major critical minor 0 0 0

totale
major critical 9 0

2009 2010 2011

6 14 6

5 7 2

2 1 0

5 4 12

4 1 0

2 4 0

2 3 2

2 1 2

1 0 0

13 21 20

11 9 4

5 5 0

Bug critici azzerati Bug major dimezzati Bug minor sempre elevati

Analisi
Identificazione dei problemi
Frequenza Copertura Assenza quasi totale Interpretazione Zero automazione Ripetibilit limitata

Regression Test Unit Test Script Test

Analisi
Il programma O3-DPACS
Picture Archiving and Communication System

Protocolli Tecnologie
DICOM HL7 SOAP, HTTP

diagnostica DICOM

Radiology Information System


HL7

Java Enterprise JBoss Librerie varie (dcm4che, hapi, apache httpClient) Oracle/MySQL (SQL Standard, StoredProcedure) Hibernate EJB 3 JMX (Mbean) Web (JSF, Richfaces, Flex)

PACS
DICOM Workstation refertazione Web client

Aree a maggior incidenza di bug


Area Servizi DICOM Gestione del DBMS Servizio di Worklist % bug 23% 14,5% 12,5%

Gestione dei servizi del PACS (ciclo di vita e configurazioni) Altro

10,4% 40%

DBMS in quasi tutte le aree

Soluzione proposta
Introduzione di JUnit Creazione di unit-test Database File system EJB MBean Stored Procedure Classi DAO Hibernate Dicom HL7 Requisiti dellinfrastruttura

Unit-test framework
Integration test DB testing Functional Testing Automazione
Oracle MySQL

Vincoli sui test zero-configuration atomici

Classificazione dei test


package it.units.htl.dpacs.helpers Anonimizer Compression DateHelper DateTimeRange FileHasher MailerSystem PhysicalMediaTimerTask Tutte le classi VarLoader StoragePerformer UserManager Tutte le altre classi UidGenerator DcmFramesToMF DcmQuerier KosBuilder StudiesVerifierWorker XdsMessageCreator Unit test Unit test Unit test Unit test Unit test Integration test (DBMS) Integration test (DBMS) (Privi di logica) package it.units.htl.dpacs.core Unit test Package it.units.htl.dpacs.dao Integration test (FileSystem) Integration test (DBMS) Functional test (Classi EJB) Unit Test Integration test (DB, FS) Integration test (Dicom, networking) Unit test Integration test (DBMS, FileSystem, networking) Integration test (FileSystem, DBMS)

CRITERI
Unit-Test
Comunica con DBMS Usa la rete Coinvolge il file system Necessita di configurazioni

GlobalConfigurationLoader Integration test (DBMS)

package it.units.htl.dpacs.valueObjects

Veloce Ripetibile Indipendente

Integration test
Dipendenze da classi unit Accedono al FS Accedono al DB (indirettamente)

Functional test
Business Logic Comunicazione DICOM Comunicazione HL7

Sviluppo
Unit-Test (DateTimeRange)
DATE FROM X X X X X X X X TIME FROM J J J J J J J J Expected output TO K K K K K K K K FROM x.j x.j X X x.j x.j X X J J <= <= <= <= <= <= <= <= <= <= <= <= <= <= <= <= DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA DATA <= <= <= <= <= <= <= <= <= <= <= <= <= <= <= <= TO y.k Y y.k Y y.k Y y.k Y K K -

X
Data: Ora:

Da 7/3/12 09:30

A -

TO Y Y Y Y Y Y Y Y -

12:30

Tecniche utilizzate: Classi di equivalenza Valori al confine

Unit-Test (UidGenerator)
Stato inizale T1 X;Y;Z getNewStudy X++ T2 X;Y;Z getNewSerie Y++ T3 X;Y;Z getNewInstance Z++ T4 X;Y;Z reset X = newStudyUid(); Y = newSeriesUid(); Z = 1;

Tabella delle transizioni

Evento Effetto

Stato finale

X+1;Y;Z

X;Y+1;Z

X;Y;Z+1

X;Y;Z

Albero degli stati

0-switch testing 1-switch testing

Sviluppo
DB Testing - Classi DAO

Contesto JNDI DataSource Connessioni MySQL/Oracle Connessione DBUnit

Nessuna configurazione

Classi test (JUnit)

Classi DAO da testare

Sviluppo
DB Testing Stored Procedure
Un caso di test

Hibernate

Due esecuzioni (MySQL/Oracle) Sintassi unificata (Stored Procedure) Nessuna configurazione (connessioni, hibernate)

Sviluppo
Test di classi che utilizzano MBean

Sviluppo
Test dei servizi Dicom/HL7

Test senza JBoss Nessuna configurazione

Sviluppo
Automazione

Continuous Integration (CI):

Codice su repository
Commit frequente Tool di build automatico

CI Server (Jenkins)

Script ANT per il build automatico

Sviluppo
Jenkins
Download del codice Compilazione Configurazione Esecuzione test Report

Risultati
Risultati misurabili
Tipo di test Unit test Functional test Prima 2-15 minuti 15-60 minuti Dopo

Risultati non misurabili Processo di test arricchito: unit test regression test DB Test (Dao, SP, Hibernate) MBean integration test Test di servizi Automazione dei test

Immediati ed automatici