BEST PRACTICES ( 1 / 3 ) BEST PRACTICES ( 2 / 3 )

cowseedSoftware and s/w Development

Jun 12, 2012 (5 years and 5 months ago)

492 views

Noël NOVELLI ; Université de la Méditerranée ; LIF et Département d’Informatique – Case 901 ; 163 avenue de Luminy – 13 288 MARSEILLE cedex 9
G Gé én niie e L Lo og giic ciie ell D DE EV VE EL LO OP PP PE EM ME EN NT T
S So om mm ma aiir re e D Dé év ve ello op pp pe em me en ntt e ett r re ece cetttte e ( (iin ntte er rn ne e) )
L Le es s lle ev viie er rs s d de e p pr ro od du uct ctiiv viitté é d du u d dé év ve ello op pp pe em me en ntt ::
Le prototype technique
La phase de développement :
L’application des best-practices
 Gestion de configuration
La gestion de configuration
 Ateliers de développement
L’utilisation d’un atelier de développement
 Normes de développement
Les frameworks et autres composants réutilisables
 Documentation applicative
Le respect des normes
La phase de recette interne :
La documentation du code
 Revue de code et tests unitaires
La capitalisation
 Tests fonctionnels et de non-régression
 Tests techniques et de performance
 Dossier de tests
C Ce e su sup pp po or rtt n n’’e est st q qu u’’u un ne e a ad da ap ptta attiio on n d de es s su sup pp po or rtts s r ré éd diig gé és s p pa ar r IIs sa ab be elllle e V VA AL LE EM MB BO OIIS S
( (T Th ha alle es s- -se ser rv viice ces) s)
B BE ES ST T P PR RA AC CT TI IC CE ES S ( (1 1/ /3 3) ) B BE ES ST T P PR RA AC CT TI IC CE ES S ( (2 2/ /3 3) )
B Be est st p pr ra act ctiice ces s
B Be est st p pr ra act ctiice ces s ( (su suiitte e) )
Gestion de la complexité technologique. Sous-estimer cet aspect,
Organisation de l’équipe. Les projets à base de nouvelles
c’est résoudre les problèmes techniques au fil des
technologies présentent un certain nombre de spécificités : équipe
développements avec des risques importants de remise en
surdimensionnée ou sous dimensionnée en fonction des phases,
cause des réalisations (conséquence : décalage de planning,
insuffisance de ressources expertes…
démotivation des équipes…)
 Respecter les phases de validation
 Démarrer le plus tôt possible la phase d’architecture
 Affecter les tâches en fonction du niveau d’expertise des ressources
 Ne pas démarrer les développements tant que les normes de
 Effectuer le suivi de planning de manière régulière
développement ne sont pas disponibles et l’équipe formée
 Spécialiser les équipes tout en laissant la possibilité à chacun de changer
 Identifier et gérer les risques liées à l’utilisation de
de spécialité
nouvelles technologies
 Favoriser des binômes de travail mélangeant des ressources juniors avec
 Identifier les besoins en expertise technique des ressources seniors
 Isoler les solutions techniques dans des frameworks techniques  Profiter des creux d’activités pour former les équipes
 Valider les choix techniques via un prototype technique
 Anticiper et éviter la surcharge de travail
 Intégrer et faire respecter les normes de développement
 Capitaliser sur les connaissances techniques
 Capitaliser sur les best-practices et normes de développement
G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N
B BE ES ST T P PR RA AC CT TI IC CE ES S ( (3 3/ /3 3) )
( (1 1/ /6 6) )
O Ob bjje ect ctiiffs s
B Be est st p pr ra act ctiice ces s ( (ffiin n) )
Stocker les différentes versions d’un logiciel, d’un document ou
Communication. La nécessité de communiquer sur un projet est
plus généralement d’un composant électronique
souvent sous estimée, qu’il s’agisse de communication au sein
Permettre de revenir à une version précédente
de l’équipe ou entre l’équipe et le client
 Communiquer sur les enjeux et sur la stratégie d’un projet
Permettre la modification concurrente en gérant les conflits
 Organiser régulièrement des réunions de travail au sein de
E Ex xtte en nsi sio on ns s ffo on nct ctiio on nn ne elllle es s
l’équipe pour échanger sur les bonnes pratiques
 Affecter des personnes différentes pour le développement d’un
Gestion du développement parallèle (ramification, dérivation)
composant et pour la recette de celui-ci
Gestion du développement multi-sites
 Favoriser des livraisons au fil de l’eau pour faciliter le feed-back et
favoriser l’implication du client
 Expliquer l’intérêt et favoriser la remontée des alertes
 Laisser s’exprimer les goûts et atouts de chacun
 Profiter du bilan de projet pour faire le point sur les axes d’amélioration de
la phase de réalisation
1G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N
( (2 2/ /6 6) ) ( (3 3/ /6 6) )
N No or rm me es s P Pr riin nci cip pa au ux x o ou uttiills s d du u m ma ar rch ché é
SCC (Source Change Control) est le protocole autrefois utilisé CVS (OpenSource)
par Microsoft pour interfacer les outils de gestion de
PVCS (Merant) respecte les normes ISO 9000, SPICE et SEI
configuration aux outils de développement.
CMM
WebDAV (Distributed Authoring an Versioning) est une
ClearCase et ClearQuest (Rational)
nouvelle norme générique du consortium W3C, à laquelle
Source Safe (Microsoft)
travaillent IBM, Microsoft, Oracle, Rational, Novel, Xerox… Il
True Software (Mc Cabe & Associates)
permet d’intégrer dans le protocole http et dans les serveurs
web, les opérations de gestion de versions et de configuration.
Continuus (Telelogic)
Starteam (Starbase)

G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N
( (4 4/ /6 6) ) ( (5 5/ /6 6) )
C CV VS S
C CV VS S ( (su suiitte e) )
Principes :
Principes :
 Repository : répertoire (local ou sur un serveur distant) où CVS stocke
Révision : une révision est la version d’un fichier. Toutes les
l’ensemble de ses fichiers
révisions d’un fichier sont stockées par CVS. CVS gère
 CVS ne stocke pas les différentes versions de chaque fichier mais
automatiquement les numéros de révision, en partant de 1.1
seulement l’historique des modifications qui y ont été effectuées
 Lorsqu’un utilisateur souhaite travailler sur un fichier, CVS lui fournit une
Tag : on peut donner un nom symbolique à une révision d’un
copie du fichier original. L’utilisateur peut alors travailler en local
ensemble de fichiers. Les fichiers appartenant à une version d’une
 Créer un repository : cvs init …
application peuvent avoir des numéros de révision individuels
 Importer un projet : cvs import …
différents.
 Récupérer des sources depuis le repository : cvs checkout …
Assigner un numéro de révision : cvs commit …
 Ajouter un nouveau source dans le repository : cvs add …
 Supprimer un source dans le repository : cvs remove … Assigner un tag : cvs tag …
 Enregistrer des changements dans le repository : cvs commit …
G GE ES ST TI IO ON N D DE E C CO ON NF FI IG GU UR RA AT TI IO ON N A AT TE EL LI IE ER RS S D DE E
( (6 6/ /6 6) ) D DE EV VE EL LO OP PP PE EM ME EN NT T ( (1 1/ /8 8) )
O Ob bjje ect ctiiffs s
C CV VS S ( (ffiin n) )
Faciliter le travail du développeur et améliorer sa productivité
Simplifier la complexité des architectures n-tier :
Principes :
 Outils reposant sur la programmation visuelle
 Un fichier peut être modifié simultanément par deux développeurs. Si un
autre développeur effectue un commit, il est possible de fusionner localement  Plusieurs éditeurs, chacun étant adapté à un type de composants
les changements logiciels (html, xml, servlet, jsp, ejb, applet…)
 Si un conflit apparaît, il faut résoudre le conflit avant de pouvoir réaliser le  Outils de paramétrage des composants et des applications
commit
Homogénéiser la production d’applications :
 Fusionner les changements d’un autre utilisateur : cvs update …
 Interfaces (ou intégration) avec des outils de conception (XDE) facilitant
 CVS permet également d’envoyer des notifications si plusieurs utilisateurs
ainsi la génération automatique de code
travaillent sur le même source
 Interfaces (ou intégration) avec des outils de gestion de configuration
 Ajouter une personne à une liste de notification : cvs watch …
facilitant ainsi le développement en équipe
 CVS offre également un mécanisme de substitution pour remplacer des
 Interfaces (ou intégration) avec des outils de tests favorisant la fiabilité
mots-clés ($Author$, $Date$, $Header$) par leur valeur
des composants développés
 Enfin CVS ne permet pas seulement de travailler sur des fichiers textes mais
aussi sur des fichiers binaires
2A AT TE EL LI IE ER RS S D DE E A AT TE EL LI IE ER RS S D DE E
D DE EV VE EL LO OP PP PE EM ME EN NT T ( (2 2/ /8 8) ) D DE EV VE EL LO OP PP PE EM ME EN NT T ( (3 3/ /8 8) )
O Ob bjje ect ctiiffs s ( (su suiitte e) ) P Pr riin nci cip pa au ux x o ou uttiills s d du u m ma ar rch ché é p po ou ur r J2 J2E EE E
Capitaliser sur les best-practices en terme de développement :
Eclipse (OpenSource)
 Assistants de développements (wizards)
NetBeans (OpenSource développé par Sun)
 Aide en ligne
JBuilder (Borland)
 Outil de recherche
 Mécanisme de complétion
WSAD (IBM)
Favoriser la prise en compte des différents environnements
Studio Professional (WebGain)
d’exécution :
Versata Studio (Versata)
 Outils de déploiement sur différentes plates-formes
 Outils de mapping avec les bases de données relationnelles
JDevelopper (Oracle)
Fiabiliser les composants développés :
Forte (Sun)
 Fournir des environnements de tests
 Fournir des outils de débug O Ou uttiill D Do ottN Ne ett

Visual Studio .Net (Microsoft)
A AT TE EL LI IE ER RS S D DE E A AT TE EL LI IE ER RS S D DE E
D DE EV VE EL LO OP PP PE EM ME EN NT T ( (4 4/ /8 8) ) D DE EV VE EL LO OP PP PE EM ME EN NT T ( (5 5/ /8 8) )
E Ecl cliip pse se
E Ecl cliip pse se ( (su suiitte e) )
Eclipse est un environnement de développement
Architecture :
C’est une souche commune sur laquelle peuvent se greffer de nombreux
plugins : Eclipse est en fait un IDE à la carte
Il est notamment le socle de l’offre IBM : WSAD
Il est entièrement écrit en java et sous licence free. Il se pose de ce fait
comme un concurrent direct du produit développé par Sun : NetBeans
Le produit proposé au téléchargement par défaut (le SDK Eclipse)
contient la couche générique ainsi que tous les plugins par défaut pour
le développement en Java, un client CVS, JUnit pour les tests unitaires
et Ant le langage de scripts multi plates-formes
Eclipse renforce la position de J2EE vis à vis de .Net puisqu’il peut tout
aussi bien devenir un IDE C#, un atelier de génie logiciel UML (XDE), …
ou tout cela en même temps
Eclipse offre de plus tous les outils pour développer de nouveaux plugins
via notamment l’API SWT (Standard Widget Toolkit) qui remplace l’API
Swing
A AT TE EL LI IE ER RS S D DE E A AT TE EL LI IE ER RS S D DE E
D DE EV VE EL LO OP PP PE EM ME EN NT T ( (6 6/ /8 8) ) D DE EV VE EL LO OP PP PE EM ME EN NT T ( (7 7/ /8 8) )
E Ecl cliip pse se ( (su suiitte e) ) E Ecl cliip pse se ( (su suiitte e) )
Les plugins apportés par WSAD à Eclipse :
Besoins sur un projet J2EE :
3A AT TE EL LI IE ER RS S D DE E N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T
D DE EV VE EL LO OP PP PE EM ME EN NT T ( (8 8/ /8 8) ) ( (1 1/ /6 6) )
E Ecl cliip pse se ( (ffiin n) ) N No or rm me es s d de e d dé év ve ello op pp pe em me en ntt
L’interface
Cibles des normes de développement :
WSAD :
 Pages HTML
 Feuilles de style CSS
 Programmes Javascript
 Composants XML, XSL…
 Composants java : servlets, JSP, EJB…
 Requêtes SQL
 Composants ASP
 …
T To ou us s lle es s c co om mp po os sa an nt ts s s so on nt t s su us sc ce ep pt tiib blle es s d de e f fa aiir re e ll’’o ob bjje et t d de e
n no or rm me es s..
IIll e ex xiis stte e d de es s n no or rm me es s r re ec co on nn nu ue es s p pa ar r lle es s c co om mm mu un na au ut té és s d de e
d dé év ve ello op pp pe eu ur rs s ( (n no or rm me es s S SU UN N p pa ar r e ex xe em mp plle e p po ou ur r J J2 2E EE E) )
N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T
( (2 2/ /6 6) ) ( (3 3/ /6 6) )
N No or rm me es s d de e co con nce cep pttiio on n tte ech chn niiq qu ue e
N No or rm me es s d de e co con nce cep pttiio on n tte ech chn niiq qu ue e ( (ffiin n) )
Packaging :
Règles de portabilité et conditions d’utilisation des composants ou
 contenu et granularité des fichiers war
d’éléments :
 contenu et granularité des fichiers jar
 applets, plug-ins, cookies, balises html spécifiques à un navigateur
 contenu et granularité des fichiers ear
 EJB Session stateless ou statefull, d’EJB Entity BMP ou CMP
 contenu et granularité des fichiers rar
 triggers et procédures stockées
Hiérarchisation des composants :
Règles de réutilisabilité des composants :
 critères de regroupement par package ou répertoire
 modèles de conception (ex : singleton, façade, factory…)
 granularité des packages et répertoires
 frameworks (ex : Struts, Log4J…)
Nomenclature des composants et des éléments d’un composant :
 librairies (ex : taglibs …)
 classes, interfaces, fichier HTML, javascript…
Version des normes à suivre (ejb 2.0, servlet 1.2, jdk 1.3…)
 attributs, méthodes…
 respect de la casse
N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T
( (4 4/ /6 6) ) ( (5 5/ /6 6) )
N No or rm me es s d de e co con nst str ru uct ctiio on n N No or rm me es s d de e co con nst str ru uct ctiio on n ( (su suiitte e) )
R Rè èg glle es s d de e lliisi sib biilliitté é :: P Pr ro og gr ra am mm ma attiio on n o ob bjje ett ::
 documentation (utilisation de la javadoc, éléments à documenter, format  visibilité des classes, des attributs, des méthodes
de la documentation…)
 règles de dérivation
 structure et indentation du code. Les normes de construction peuvent le
R Rè èg glle es s lliié ée es s à à ll’’é év vo ollu uttiiv viitté é ::
cas échéant proposer en annexes des squelettes de code
 découpage en couches (ex : pas d’accès direct entre un ejb et une page
 règles de factorisation (ex : package regroupant toutes les fonctions
jsp)
communes)
 échanges inter-applications (protocoles…)
 nombre maximum de lignes d’un code source
 chaînes de caractères (ex : pas de chaînes en dur, stockage des chaînes
R Rè èg glle es s lliié ée es s à à lla a p pe er rffo or rm ma an nce ce d de es s a ap pp plliica cattiio on ns s ::
dans des fichiers properties)
 optimisation (ex : pool, cache, StringBuffer…)
 internationalisation et localisation
 gestion des sessions
R Rè èg glle es s lliié ée es s à à lla a ffiia ab biilliitté é d de es s a ap pp plliica cattiio on ns s ::
 gestion des threads
 règles de gestion des exceptions et des erreurs
 règles de gestion des transactions
4N NO OR RM ME ES S D DE E D DE EV VE EL LO OP PP PE EM ME EN NT T
T TE ES ST TS S ( (1 1/ /5 5) )
( (6 6/ /6 6) )
N No or rm me es s d de e co con nst str ru uct ctiio on n ( (ffiin n) )
O Ob bjje ect ctiiffs s d de es s tte est sts s
R Rè èg glle es s lliié ée es s à à lla a m ma aiin ntte en na ab biilliitté é d de es s a ap pp plliica cattiio on ns s ::
Diminuer les coûts dus à la correction des erreurs
 gestion des traces
 gestion des tests unitaires (ex : codage de la méthode main ou écriture Fiabiliser le logiciel livré
de classes de tests…)
Accroître la satisfaction client
N No or rm me es s d de e r re ep pr ré ése sen ntta attiio on n d de e ce cer rtta aiin ne es s d do on nn né ée es s r ré écu cur rr re en ntte es s ::
Et pour cela : formaliser et tracer
 dates et heures
 montants monétaires
O Or riig giin ne es s d de es s e er rr re eu ur rs s
 noms et prénoms
Définition erronée des besoins utilisateurs
 adresses, codes postaux, pays
Erreurs d’interprétation des besoins utilisateurs
 n SIRET, n SIREN, n INSEE
 … Erreurs de conception
… … Erreurs de programmation
Insuffisance ou inexistence des tests unitaires
Insuffisance ou inexistence des tests fonctionnels
Utilisation du logiciel dans un contexte non prévu…
T TE ES ST TS S ( (2 2/ /5 5) ) T TE ES ST TS S ( (3 3/ /5 5) )
B Be est st- -p pr ra act ctiice ce n n°2 2 ° - - R R ee sp sp ee ct ct ee r rl e le cy cy cl cl ee d d ee v v ie ie d d ee l ’la ’a ct ct iv iv itié té
B Be est st- -p pr ra act ctiice ce n n°1 1 ° – – LL ee t e te st st e e st st u u nn é é ta ta t td d ’e ’e sp sp rirti tq q uu i i
d de e tte est sts s
iim mp plliiq qu ue e d de e lla a r riig gu ue eu ur r
A A lla a ffiin n d de e lla a p ph ha as se e d d’’a an na ally ys se e ::
2 constats :
 définition du plan de tests
 Il est impossible de programmer sans bugs
A A lla a ffiin n d de e lla a p ph ha as se e d de e c co on nc ce ep pt tiio on n ::
 La majorité des logiciels ne sont pas suffisamment testés
 définition des tests unitaires et d’intégration
Le succès d’une campagne de tests dépend beaucoup plus de
A A lla a ffiin n d de e lla a r ré éa alliis sa at tiio on n d d’’u un n c co om mp po os sa an nt t ::
l’attitude psychologique des développeurs et des testeurs que
 exécution des tests unitaires
des techniques mises en œuvre
A A lla a ffiin n d de e lla a p ph ha as se e d de e r ré éa alliis sa at tiio on n ::
Les tests sont des procédures formelles qui doivent être
 exécution des tests d’intégration
préparées, documentées et suivies
L Le e tte est st d do oiitt a av vo oiir r u un ne e p plla ace ce ce cen nttr ra alle e d da an ns s lle e p pr ro oce cessu ssus s
d de e d dé év ve ello op pp pe em me en ntt
T TE ES ST TS S ( (4 4/ /5 5) ) T TE ES ST TS S ( (5 5/ /5 5) )
L Le es s p pr riin nci cip pa au ux x tty yp pe es s d d’’o ou uttiills s d de e tte est sts s
2 2 tty yp pe es s d de e
Outils de gestion de tests qui permettent l’édition de plans de tests et
ffo on nct ctiio on nn ne em me en ntt d de es s
l’intégration avec d’autres outils de tests
o ou uttiills s d de e tte est sts s
Outils basés sur les spécifications ou exigences : les exigences
doivent alors être formulées dans un langage formel. Ce type d’outil
b bo oîîtte es s b blla an nch che es s
n’est adapté qu’à des logiciels ayant un périmètre restreint et/ou de
fortes contraintes de fiabilité
b bo oîîtte es s n no oiir re es s
Outils de tests unitaires et de revue de code, basés sur le langage
Outils de tests d’intégration, basés sur des robots de tests d’IHM :
des séquences de tests ainsi qu’une description des résultats attendus
sont définis par l’utilisateur. Le robot peut alors enregistrer ces
informations, rejouer les tests et fournir un bilan de cette exécution.
Outils de tests de performance, qui permettent de mesurer les
performances d’un système dans ses conditions d’exploitation en
simulant la charge via des stimuli envoyés sur le réseau ou dans
l’environnement d’exécution
5G GE ES ST TI IO ON N D DE ES S T TE ES ST TS S ( (1 1/ /2 2) ) G GE ES ST TI IO ON N D DE ES S T TE ES ST TS S ( (2 2/ /2 2) )
F Fo on nct ctiio on nn na alliitté és s d de es s o ou uttiills s d de e g ge est stiio on n d de es s tte est sts s ::
L Le es s p pr riin nci cip pa au ux x o ou uttiills s d de e g ge est stiio on n d de es s tte est sts s
C Co on nc ce ep pttiio on n d de es s c ca as s d de e tte es stts s,, a av ve ec c d dé éffiin niittiio on n d d’’é étta ap pe es s c cllé és s e ett d de e
T Te es sttD Diir re ec ctto or r ( (M Me er rc cu ur ry y) )
r ré és su ulltta atts s a atttte en nd du us s p po ou ur r c ch ha aq qu ue e c ca as s d de e tte es stt
Q QA AD Diir re ec ctto or r ( (C Co om mp pu uw wa ar re e) )
IIn ntte er rffa ac ce e a av ve ec c u un n r ro ob bo ott d de e tte es stts s q qu uii p pe er rm me ettttr ra a d de e c cr ré ée er r lle es s
T Te es sttM Ma an na ag ge er r ( (R Ra attiio on na all) )
s sc cr riip ptts s d de e tte es stts s a au utto om ma attiis sé és s
L La a p plla an niiffiic ca attiio on n e ett ll’’o or rg ga an niis sa attiio on n d de e ll’’e ex xé éc cu uttiio on n d de es s tte es stts s
a au utto om ma attiis sé és s e ett m ma an nu ue ells s
L La a s sa aiis siie e e ett lle e s su uiiv vii d d’’a an no om ma alliie es s c co om mp pr re en na an ntt ::
 l’association des anomalies avec les tests
 le suivi des corrections apportées (date, intervenant, description
de la solution apportée)
 le résumé statistique des activités de test et de débug
C Ce es s o ou uttiills s s so on ntt g gé én né ér ra alle em me en ntt u un n p po oiin ntt d de e c co on nttr rô ôlle e u un niiq qu ue e p po ou ur r
o or rc ch he es sttr re er r tto ou utte es s lle es s p ph ha as se es s d de e tte es stt
R RE EV VU UE E D DE E C CO OD DE E ( (1 1/ /3 3) ) R RE EV VU UE E D DE E C CO OD DE E ( (2 2/ /3 3) )
F Fo on nct ctiio on nn na alliitté és s d de es s o ou uttiills s d de e r re ev vu ue e d de e co cod de e ::
P Pr riin nci cip pa au ux x o ou uttiills s d de e r re ev vu ue e d de e co cod de e
P Pa ar ra am mé éttr ra ag ge e d de es s n no or rm me es s d de e ll’’e en nttr re ep pr riise se
JTest (Parasoft) dédié au langage Java
C Co on nttr rô ôlle e d du u r re esp spe ect ct d de es s n no or rm me es s d de e co cod da ag ge e ( (st sta an nd da ar rd d e ett p pe er rso son nn na alliisé sé) )
JDepend (OpenSource)
D Dé étte ect ctiio on n d de es s e exce xcep pttiio on ns s n no on n ttr ra aiitté ée es s
PMD (OpenSource)
C Co on nttr rô ôlle e à à p pa ar rttiir r d d’’a asse sser rttiio on ns s ( (jjd dk k 1 1..4 4) )
FindBugs (OpenSource)
IId de en nttiiffiica cattiio on n d de e co cod de e m mo or rtt
IId de en nttiiffiica cattiio on n d d’’e er rr re eu ur rs s d de e r ré ég gr re essi ssio on n
M Miise se à à d diisp spo osi sittiio on n d d’’iin nd diica catte eu ur rs s d de e co cou uv ve er rttu ur re e d de e tte est sts s
M Miise se à à d diisp spo osi sittiio on n d d’’iin nd diica catte eu ur rs s d de e co com mp plle exi xitté é d de e ll’’a ap pp plliica cattiio on n
M Miise se à à d diisp spo osi sittiio on n d d’’iin nd diica catte eu ur rs s d de e co cou uv ve er rttu ur re e d de e d do ocu cum me en ntta attiio on n
Ce type d’outil apporte de surcroît une dimension
pédagogique
R RE EV VU UE E D DE E C CO OD DE E ( (3 3/ /3 3) ) T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (1 1/ /8 8) )
F Fo on nct ctiio on nn na alliitté és s d de es s o ou uttiills s d de e tte est sts s u un niitta aiir re es s ::
JTest (Parasoft) :
Contrôle la bonne gestion des exceptions
Contrôle à partir de classes de tests
Contrôle à partir d’assertions (jdk 1.4)
Identification d’erreurs de régression
L Le es s p pr riin nci cip pa au ux x o ou uttiills s d de e tte est sts s u un niitta aiir re es s ::
JUnit (OpenSource) dédié au langage Java
NUnit (OpenSource) dédié à .Net
CUnit (OpenSource) dédié au langage C++
DUnit (OpenSource) dédié au langage Delphi
MockObjects (OpenSource)
6T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (2 2/ /8 8) ) T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (3 3/ /8 8) )
G Gé én né ér ra alliitté és s su sur r lle es s tte est sts s u un niitta aiir re es s
JU JUn niitt e est st u uttiilliisé sé d da an ns s u un n ce cer rtta aiin n n no om mb br re e d de e p pr ro ojje etts s q qu uii
Le test unitaire est celui de plus bas niveau fonctionnel car il concerne
p pr ro op po ose se d d’’é étte en nd dr re e lle es s ffo on nct ctiio on nn na alliitté és s d de e JU JUn niitt ::
les méthodes de chacune des classes mises en jeu.
Cactus : framework OpenSource de tests pour composants
Il s’élabore à partir des documents de conception détaillée (le
serveur
recensement des classes à tester est directement issu du diagramme
de classes)
JunitReport : tâche Ant générant un rapport des tests effectués
Il s’agit de tester le comportement attendu d’une méthode donnée en
avec JUnit sous Ant
terme de valeurs retournées, de valorisation des variables utilisées, les
JWebUnit : framework OpenSource de tests pour applications
scénarios permettant de fixer certaines valeurs d’entrée particulières
web
Trois approches :
 Ascendante : test d’une unité indépendamment de l’unité appelante, en
StrutsTestCase : extension de JUnit pour les tests d'application
partant du haut de la représentation hiérarchique
utilisant Struts 1.0.2 et 1.1
 Descendante : approche inverse (évite l’utilisation de bouchon)
 Combinaison des deux approches précédentes XMLUnit : extension de JUnit pour les tests sur des documents
XML
T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (4 4/ /8 8) ) T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (5 5/ /8 8) )
JU JUn niitt
B Be est st- -p pr ra act ctiice ce n n°3 3 ° – – LL aa b b oo nn nn ee m m ee su su re re
JUnit est un framework OpenSource pour réaliser des tests unitaires
sur du code Java. Son but est d'automatiser les tests unitaires.
Il ne faut pas chercher à tester systématiquement toutes les méthodes
Ceux-ci sont exprimés dans des classes sous la forme de cas de tests d’une classe (par exemple : les tests d’accesseurs et de mutateurs
avec leurs résultats attendus. JUnit exécute ces tests et les comparent n’apportent pas beaucoup de plus-value)
avec ces résultats.
Il faut plutôt chercher à tester les services rendus par une classe.
Avec JUnit, l'unité de test est une classe dédiée qui regroupe des cas
Ainsi, si elle est complexe, il peut être nécessaire de tester plusieurs
de tests. Ces cas de tests exécutent les tâches suivantes :
fois une même méthode avec des arguments différents.
 création d'une instance de la classe et de tout autre objet nécessaire aux
Il arrive également qu'un service particulier de l'application repose sur
tests
 appel de la méthode à tester avec les paramètres du cas de test les interactions d'un ensemble de "petites" classes. JUnit permet de
 comparaison du résultat obtenu avec le résultat attendu : en cas d'échec, tester un groupe de classes.
une exception est levée
Attention toutefois à utiliser cette dernière tactique avec discernement.
Eclipse 2.1 intègre JUnit directement dans l’IDE.
En effet, plus le nombre de classes mises en jeu augmente, moins les
2 modes d’exécution : en ligne ou via une interface graphique tests sont "unitaires", et donc plus le temps passé à investiguer
d'éventuels problèmes augmente.
T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (6 6/ /8 8) ) T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (7 7/ /8 8) )
M Miise se e en n p plla ace ce d de e tte est sts s a av ve ec c JU JUn niitt so sou us s E Ecl cliip pse se T Te ech chn niiq qu ue es s d de e tte est sts s a av ve ec c JU JUn niitt
Pour utiliser JUnit, ajouter tout d’abord le fichier junit.jar dans le Créer une classe de test par classe à tester.
classpath du projet (sélectionner les propriétés du projet puis dans
Placer vos classes de tests dans le même package que vos classes à
l’onglet librairies, cliquer sur Add External Jar sous Eclipse)
tester.
Créer une classe qui va contenir les cas de test (créer une nouvelle
Par contre, ne les stocker pas dans le même répertoire, cela vous
entité de type java/JUnit/TestCase sous Eclipse)
évitera de vous encombrer de ces classes lors du déploiement.
Compléter ensuite la classe générée selon les besoins. Par exemple
Pour tester une classe dépendantes d’autres classes, utiliser :
ajouter un attribut qui va contenir une instance de la classe à tester,
 la technique du self shunt : la classe de test joue le rôle de bouchon
instancier cette classe dans la méthode setUp() et libérer l’instance
 la technique du mock object : une nouvelle classe spécifique est écrite
dans la méthode tearDown().
pour jouer le rôle du bouchon
Ajouter enfin les traitements nécessaires dans les méthodes testXXX()
Pour tester plusieurs classes :
en utilisant l’API de JUnit (JUnit utilise l’instrospection pour exécuter
 Utiliser l’objet TestSuite
les méthodes commençant par test)
Pour exécuter les tests, il faut exécuter la classe en tant que JUnit
Test. Eclipse exécute les tests et affiche le résultat dans une vue
dédiée.
7T TE ES ST TS S U UN NI IT TA AI IR RE ES S ( (8 8/ /8 8) ) T TE ES ST TS S D D’’I IN NT TE EG GR RA AT TI IO ON N ( (1 1/ /2 2) )
F Fo on nct ctiio on nn na alliitté és s d de es s o ou uttiills s d de e tte est sts s d d’’iin ntté ég gr ra attiio on n ::
M Miise se e en n p plla ace ce d de e tte est sts s a av ve ec c JU JUn niitt so sou us s E Ecl cliip pse se ( (ffiin n) )
Automatisation de tous les tests : intégration, fonctionnels, non-
Le code de la classe de test
régression, robustesse, ergonomie
Le résultat :
Utilisation à la fois côté maîtrise d’œuvre (tests d’intégration) et côté
maîtrise d’ouvrage (tests utilisateurs)
Création des scénarios de tests soit sous la forme de scripts, soit en
mémorisant les interactions d’un utilisateur
Enregistrement des scénarios dans un référentiel global
Exécution, analyse et comparaison des résultats des tests
Constitution de jeux d’essai (alimentation sous la forme de scripts
d’une base de données) et comparaison des données avec les
résultats attendus après les tests. Le plus souvent, cette fonctionnalité
nécessite un outil complémentaire.
Générer un rapport de test.
T TE ES ST TS S D DE E P PE ER RF FO OR RM MA AN NC CE E
T TE ES ST TS S D D’’I IN NT TE EG GR RA AT TI IO ON N ( (2 2/ /2 2) )
( (1 1/ /4 4) )
F Fo on nct ctiio on nn na alliitté és s d de es s o ou uttiills s d de e tte est sts s d de e p pe er rffo or rm ma an nc ce e ::
L Le es s p pr riin nci cip pa au ux x o ou uttiills s d de e tte est sts s ffo on nct ctiio on nn ne ells s ::
Création de profils de comportement utilisateur (enregistrement
QA Run (Compuware)
de scénarios d’interactions)
SQA Robot (Rational)
Création d’un scénario de test de charges en affectant à
WinRunner (Mercury)
différents profils de comportement, un nombre d’utilisateurs en
connexion simultanée
WebKing (Parasoft)
Assistant d’alimentation de bases de données (scripts)
JFunc (OpenSource)
Exécution du scénario
WatchDog (OpenSource)
Mise à disposition via une console d’indicateurs sur toute
Cactus (OpenSource)
l’infrastructure (serveurs, réseaux, base de données…)
Stockage des informations en base ou génération de rapports
Mise à disposition d’analyses et de diagnostics
T TE ES ST TS S D DE E P PE ER RF FO OR RM MA AN NC CE E T TE ES ST TS S D DE E P PE ER RF FO OR RM MA AN NC CE E
( (2 2/ /4 4) ) ( (3 3/ /4 4) )
L Le es s p pr riin nci cip pa au ux x o ou uttiills s d de e tte est sts s d de e p pe er rffo or rm ma an nc ce e ::
L Lo oa ad dr ru un nn ne er r
QA Load (Compuware) ( (M Me er rcu cur ry y) )
SQA Robot / SQA Load Test (Rational)
QA Partner et QA Performer (Segue Software)
Loadrunner et Astra LoadTest(Mercury)
WebKing (Parasoft)
AutoController (Auto Tester)
OpenSta (OpenSource)
JMeter (OpenSource)
HttpUnit (OpenSource)
JWebUnit (OpenSource)
8T TE ES ST TS S D DE E P PE ER RF FO OR RM MA AN NC CE E
T TE ES ST TS S D DE E R RO OB BU US ST TE ES SS SE E
( (4 4/ /4 4) )
O Op pe en nS ST TA A ( (O Op pe en nso sou ur rce ce) )
L Le es s tte est sts s d de e r ro ob bu ust ste esse sse
O Op pe en n S Sy ys stte em m T Te es sttiin ng g A Ar rc ch hiitte ec cttu ur re e p pe er rm me ett d de e r ré éa alliis se er r ::
L’élaboration des cas de tests repose sur des actions critiques
 des tests de montée en charge
au niveau utilisateur :
 des tests de stress d’applications
 répétition des clics de souris,
 la mesure et le suivi de la performance des infrastructures
 appui aléatoire sur le clavier,
L L''u uttiilliis sa attiio on n d de es s r re es ss so ou ur rc ce es s d de es s s se er rv ve eu ur rs s W We eb b,, d de es s s se er rv ve eu ur rs s
 arrêt brutal de la machine
d d''a ap pp plliic ca attiio on ns s,, d de es s s se er rv ve eu ur rs s d de e b ba as se e d de e d do on nn né ée es s e ett d de es s
 arrêt brutal d’un élément du système de communication…
s sy ys sttè èm me es s d d''e ex xp pllo oiitta attiio on n e en n tte es stt p pe eu utt ê êttr re e s su ur rv ve eiillllé ée e,,
r re ep pr ré és se en ntté ée e g gr ra ap ph hiiq qu ue em me en ntt e ett a an na ally ys sé ée e tto ou utt a au utta an ntt q qu ue e lle e
tte em mp ps s d de e r ré ép po on ns se e d de es s c co om mp po os sa an ntts s d de e ll''a ar rc ch hiitte ec cttu ur re e W WE EB B
d dé ép pllo oy yé ée e.. L Le es s iin ng gé én niie eu ur rs s e en n c ch ha ar rg ge e d de es s tte es stts s p pe eu uv ve en ntt a aiin ns sii
p plla an niiffiie er r e effffiic ca ac ce em me en ntt lle es s r re es ss so ou ur rc ce es s n né éc ce es ss sa aiir re es s e ett r ré éd du uiir re e lle es s
r riis sq qu ue es s lliié és s a au u d dé ép pllo oiie em me en ntt d de es s a ap pp plliic ca attiio on ns s w we eb b
D DO OS SS SI IE ER R D DE E T TE ES ST TS S ( (1 1/ /2 2) ) D DO OS SS SI IE ER R D DE E T TE ES ST TS S ( (2 2/ /2 2) )
L Le es s d diiffffé ér re en ntte es s p pa ar rttiie es s d du u D Do ossi ssie er r d de e T Te est sts s L Le es s d diiffffé ér re en ntte es s p pa ar rttiie es s d du u D Do ossi ssie er r d de e T Te est sts s ( (ffiin n) )
Cahier des tests
Introduction :
Modèles et nomenclature des documents à utiliser (TU + TI)
 Objectifs du document
 Cible du document
Référentiel des tests unitaires
 Terminologie et acronymes
Référentiel des tests d’intégration
 Structure du document
Journal de tests et tableaux de bord
 Documents de référence
Présentation et analyse de chaque exécution de test
Plan de tests :
 libellé et nature du test
 Objectifs des tests (cartographie, couverture…)  machine système utilisée
 date et heure d’exécution
 Documents de références et normes à respecter
 condition particulière de test, jeu d’essai
 Stratégie de mise en œuvre des tests (types de tests…)
 résultat de l’exécution
 Description du processus : conception, validation, exécution des différents
 mesures réalisées
tests (qui, quand, but, pré-requis, tâches, sorties)
 liste des références des anomalies identifiées
 Organisation du travail (ordonnancement, planning, responsabilités)
Bilan
 Usage contractuel (coût des tests, sous-traitance…)
C CO ON NC CL LU US SI IO ON N ( (1 1/ /2 2) ) C CO ON NC CL LU US SI IO ON N ( (2 2/ /2 2) )
7 7 iid dé ée es s p pr riin nci cip pa alle es s à à r re ette en niir r e en n tte er rm me e d de e r re ece cetttte e ::
1 11 1 iid dé ée es s p pr riin nci cip pa alle es s à à r re ette en niir r e en n tte er rm me e d de e r ré éa alliisa sattiio on n ::
Garder à l’esprit les différents leviers de productivité : Tests et état d’esprit
 prototype technique
Intégration des tests tout au long du cycle de vie
 outils : gestion de configuration et atelier de développement
Formalisation, préparation, planification
 best-practices
Affectation judicieuse des ressources
 frameworks et composants réutilisables
Viser l’efficacité plutôt que l’exhaustivité
 respect des normes et documentation
Suivi
Formation
Outils (revue de code, tests unitaires, tests d’intégration, tests
Capitalisation
de performance)
Communiquer
Tracer
Favoriser le feed-back
Respect des phases de validation et anticipation
9