26
Didier Besset présente

Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Embed Size (px)

Citation preview

Page 1: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Didier Besset présente

Page 2: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Agenda

Niveaux de test Le cas FDPZ Primitives de test Conclusions

Page 3: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Niveaux de test

Brut Structurel Fonctionnel

Page 4: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 5: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 6: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Tests structurels

On analyse la structure hiérarchique des composants d’un écran(en Java, toute sous-classe de Window).

Page 7: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Tests structurels: exemple

Swing

JLayeredPane

(glass pane)

(content pane)

(JMenuBar)

JFrame

applicationspecific

applicationspecific

JRootPane

applicationspecific

Page 8: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 9: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 10: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 11: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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!

Page 12: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Le traffic aérien suisse

Page 13: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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-

Page 14: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Tâches principales

Préparation

Suivi

FDPZ

Enregistrement des vols Eurocontrol

Notification desvols entrant

Unitésvoisines

Notification desvols sortant

Page 15: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

Page 16: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Conséquences

Nous testons, re-testons, re-re-testons...

Page 17: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 18: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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,

Page 19: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 20: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

}

Page 21: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

Page 22: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

Page 23: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

Page 24: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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

Page 25: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

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.

Page 26: Didier Besset présente. Agenda Niveaux de test Le cas FDPZ Primitives de test Conclusions

Questions

?