View
107
Download
0
Category
Preview:
Citation preview
Didier Besset présente
Agenda
Niveaux de test Le cas FDPZ Primitives de test Conclusions
Niveaux de test
Brut Structurel Fonctionnel
Tests bruts
Le display est considéré comme un ensemble de pixels, la comparaison se fait avec un écran obtenu préalablement,
Utile pour des utilisateurs pointilleux! Exemple: jDiffChaser (SourceForge)
automatise les copies d’écrans et les comparaisons entre versions.
Tests bruts: pro & con
Pro: Facile à mettre en œuvre, Test très rigide;
Con: Test trop rigide (?), Cas très limités en pratique, N’adresse pas les aspects dynamiques.
Tests structurels
On analyse la structure hiérarchique des composants d’un écran(en Java, toute sous-classe de Window).
Tests structurels: exemple
Swing
JLayeredPane
(glass pane)
(content pane)
(JMenuBar)
JFrame
applicationspecific
applicationspecific
JRootPane
applicationspecific
Tests structurels: pro & con Pro:
Vérifie la consistance hiérarchique du contenu de chaque écran,
Rigidité ajustable; Con:
Fastidieux à maintenir, N’adresse pas les aspects dynamiques.
Tests fonctionnels
Principe:faire fonctionner l’écran comme un utilisateur;
Pour chaque action, il faut Localiser le composant correspondant, Taper les caractères désirés (si besoin est), Effectuer le click ou le Tab nécessaire pour la
conclusion de l’action; Java: l’outil de base est la classe Robot.
Tests fonctionnels: pro & con Pro:
Flexibilité et robustesse (résiste au changement),
Adresse les aspects dynamiques; Con:
Nécessite de la préparation, Difficile à mettre en œuvre.
Le cas FDPZ
Domaine extrêmement critique (ATM),
Très forte connectivité avec des autres systèmes,
500’000 lignes de code en arrière plan!
Le traffic aérien suisse
L’espace aérien
RHI FL245+ZH FL195 - FL245LGN FL145 - FL195BA FL145-
ZH FL195+LGN FL145 - FL195BA FL145-
WS
E
N
ETAGO
TGO
SAFFA
KPT
MAH
ZUE
AKABI NEGRA
BODAN
ALGOI
ALAGO
MINGA
BAMUR FUSSE
SOLGO
USETI
EMKIL
LEBSO
REUTL
ARSUT
GARMO
ESULI
LOKTA
HEUSE
LAGOSAMRIS
SITORDINARKUDES
TAKIT
ROMIR
NEBEL
KELIP
ABESICANNE
MANEG
SRN
RESIA
LUKOM
RAPEXGOSAL
TZO
BAVMI
GERSA
ODINA
OMETO
SOSON
URNAS
ESEVA
KONOLBADEP
LAMUR
BERSU
SIO
MOT
TELNO
ULMES
SOSAL
KORED
FRI
ALETO
MONIN
BENOT
VALOR
MEGEV
ADISO
BANKO
TERSIAOSTA
CERVI
TOP
MORAX
SUL
ALBIX
BLM
GOLKE
SEDOR
HOMBO
PABLA
LUPEN
HERBI
MOPAN
DENEL
STR
GAGSI
TUBLO
NATOR
TITIX
LENGI
BARIG
BASKI
EKRIT
ELBEG
BASUD
LUMEL
BELAR
BALIR
RIPUS
DITON
DELMO
LASUN
HOC
L U T I XS U R E P
R O T O S
W I L
RILAX
KRH
OLBEN
SANET
MIRGU
TIRSO
ARPUS
GVA
GG511
GG515
GG516 GOLEB
SALEV
GG513
DINIG
OMASI
SUGOR
KOVAR
VEROX
NEMOSFLORY
LASRA
REVLI
KONIL
DEREM TINAM
MOLUS
VADAR
SPR
LPS
KELOR
LISMO
ROCCA
MOREG
BALSI
PAS
MOROK
GLA
MTL
OTKOL
MABES
LIRKO
DIPIR
BELUS
DANBO
ARGIS
RONLA
TDP
NINTU
SOPLO
KELUK
MILPA
GIPNO
LSA
BOBSI
DIJ
ELMUR
MOSIT
IBINI
TRA
L A S A T
E P L
B E G AR
H R
DESIP
PEPAG
MAXIM
MONEB
LUKIM
D E G A D
B A SG O
A K AS U
M O R A D
LA S IX
G I K O N
VALAD
BA FL 145-
BA FL 105-
BA FL 115-
BE FL 105-
APP ZH FL 125-
ARFA FL 105-
Tâches principales
Préparation
Suivi
FDPZ
Enregistrement des vols Eurocontrol
Notification desvols entrant
Unitésvoisines
Notification desvols sortant
Connectivité
MAITRE
Pre-processing
FPL DB
Flight Plan Data Processing ZHR
SYLEX
OLDI(online data interchange)
Delivers wind information
Meteo-Server
ZECAT
Radar
TACO CH
Tower Approach
MV-NT
Multi radar tracker
O4D
Trajectory Prediction&Sector Calc.
DIFF
Strip Printing
QuickRules
FDPZ
CA- andATCO-Clients
Strip-Printers
TACTTactical Planning System (Slots)
FSA
STARS
Flight status "terminated"
FPL
T-BoxInform Military
FPL
SYMA-Clients
AFTN (switch)
Aeronautical Fix Telecom Network
INIS
FPL
FPL, DLA,CHG, CNL,DEP, ARR,SAM, SRM
AIS PrinterARR, DEP
Conséquences
Nous testons, re-testons, re-re-testons...
Caractéristiques FDPZ
Architecture client-serveur, L’IHM est très dynamique, Beaucoup de métier dans les
événements, Une action sur un client a de
l’influence sur les autres.
Architecture de test
Test master
Renvoient les résultats de test.
Test slaveTest slave
Test slave
Instructions de test
Résultats de test
Fédère les résultats de test;
Lance le serveur (si besoin est), Lance les test slaves,
Effectue le script de test,
Lancent un client de type défini, Effectuent les actions requises,
Test FDPZ fonctionnels
Inutile de reproduire les évènements simples, La classe Robot n’est pas utilisée par les
tests; Définition de primitives métier:
Entrée de valeurs de types définis par le métier,
Les actions définies sont des actions utilisateur.
Test setupTest specific
dataConfiguration du test
Command for given
client
Commandes pour un client
donnéDémarage de client non-standard
@Beforepublic void setUp() throws Exception {
ConfigurationData configurationData = new ConfigurationData();
configurationData.enableSector(Sector.M1, true);configurationData.enableSector(Sector.M4, true);configurationData.enableAllAlarms();
getPassiveClients().assignConfiguration(configurationData);
configurationData = new ConfigurationData();configurationData.enableSector(Sector.EAST, true);configurationData.enableAllAlarms();
getActiveClient().assignConfiguration(configurationData);
startTowerClients(TOWER_LSZR);startTower2Clients(TOWER_EDNY);
}
Data input Test specific
type Business specific types
Business specific types
Business specific types
Business specific types
Data input commandData input command
Input & validate
command
Create(button click)
Add segment
(button click& selection)
Add segment
(button click& selection)
final PropertiesMap data = new PropertiesMap();data.addTypeOfFlight(FlightType.GENERAL);data.addAircraftType("PA34");data.addWakeTurbulenceCategory(WakeTurbulenceCategory.LIGHT);data.addTrueAirSpeed(new Integer(140));data.addDeparturePointName("LSGG");data.addDestinationPointName("LIRA");data.addRequestedEntryFlightLevel(FlightLevel.createLevel(130));data.addRequestedExitFlightLevel(FlightLevel.createLevel(130));data.addEntryPointName("BER");data.addExitPointName("WIL");getActiveClient().editFlightPlanSegment(createPlan(ARCID), data); data.clear();data.addExitPointName("BARIG");getActiveClient().editFlightPlanSegment(addSegment(1), data); data.clear();data.addExitPointName("CANNE");getActiveClient().editAndSaveFlightPlanSegment(addSegment(2), data);
Data check Reused type
Data input command
Data checking command
Search command
Selection command
final PropertiesMap check = new PropertiesMap();check.addDeparturePointName("LSZR");check.addDestinationPointName("EDNY");check.addEntryPointName("SZR");check.addExitPointName("MOKOP");getFlexibleClients().checkFlightPlanSegment(
search(ARCID_A, 0), check);
check.clear();check.addEntryPointName("MOKOP");check.addIntermediatePointName("FHD");check.addExitPointName("DNY");getFlexibleClients().checkFlightPlanSegment(segment(1), check);
Special actionsForeign
systems are simulated
Data input command
Relative time
definition
Time machine
Data input commandCommon
data library
final DeferredDate eobt = DeferredDate.nowRoundedToNext(Calendar.MINUTE);
getInisSimulator().sendAftnPlanMessage(readParametrizedAftnMessage("FPL A"),
eobt.after(5, Calendar.MINUTE));getInisSimulator().sendAftnPlanMessage(
readParametrizedAftnMessage("FPL B"), eobt);getInisSimulator().sendAftnPlanMessage(
readParametrizedAftnMessage("FPL C"), eobt);
getTimeAgent().accelerateInMinutes(11);
Special screen actionsAttente d'un changement d'affichage
Différentes zones
d'affichage
Action spéciale
s
Action spéciale
s
getTower2Client().waitVisible(Tower.inbound(ARCID_B));getTower2Client().waitVisible(Tower.outbound(ARCID_D));getTowerClient().waitVisible(Tower.outbound(ARCID_A));getTowerClient().waitVisible(Tower.inbound(ARCID_C));
getTowerClient().applyOnTowerStrip(Tower.outbound(ARCID_A), Tower.sid("KPT2V"));
getTowerClient().applyOnTowerStrip(Tower.outbound(ARCID_A), Tower.clearance());getTowerClient().applyOnTowerStrip(Tower.outbound(ARCID_A), Tower.takeoff());getFlexibleClients().checkFlightPlanSegment(search(ARCID_A, 0),
PropertiesMap.activatedCheck(ARCID_A));
Conclusions
Tester un IHM est possible, Il faut investir dans des outils ciblés, L'introduction de primitives de tests
simplifie l'écriture des tests, Les primitives permettent la
formalisation des tests.
Questions
?
Recommended