ERP en LOGICIEL LIBRE dédié aux PME-PMI

           Devenez partenaire Principal ou Majeur de Neogia

Bonnes Pratiques


Contents

Modification de code Ofbiz

Aujourd'hui, OfbizNéogia comporte environ 260 fichiers ofbiz modifiés, sachant qu'une synchronisation demande entre 4 et 5 heures de travail pour étudier et résoudre tous les conflits causés par ces fichiers, je vous propose de respecter les BestPractices suivantes lorsque vous modifiez un fichier ofbiz, ce qui diminuerait considérablement le temps consacré :

Règles générales :

La modification de code existant doit être fait en respectant le formalisme décrit ci-dessous. Respectez les libellés exacts, c'est utilisé pour des traitements lors de synchronisation ofbiz pour repérer tous les spécifiques Neogia.

En java :

// Begin neogia specific : comment
/*
old code
*/
new code
// End neogia specific : comment


En xml :

<!-- Begin neogia specific : comment -->
<!--
old code
-->
new code
<!-- End neogia specific : comment -->


En ftl :

<#-- Begin neogia specific : comment -->
<#--
old code
-->
new code
<#-- End neogia specific : comment -->

En respectant ce formalisme, on diminue automatiquement le nombre de conflits lors des synchronisations car le code ofbiz en commentaire n'est pas modifié.


À ne pas faire :


<!-- old code -->
new code

Dans ce cas, un conflit peu apparaître car old code est modifié


<!-- Begin neogia specific : comment
old code
End neogia specific : comment -->

Ce format de commentaire pose des problèmes de relecture


<!-- Begin neogia specific : FR127343 -->
<!--
old code
-->
new code
<!-- End neogia specific : FR127343 -->

Le n° de tracker n'est pas suffisant. Lors de la synchronisation je n'ai pas le temps d'aller interroger sourceforge pour savoir le but de la modification.

Le commentaire 'comment' doit correspondre au titre de la tâche, il peut aussi contenir le n° du tracker pour obtenir un complément d'information.


Si le nombre de modifications apporté à un fichier devient trop important, il faut alors se demander s'il ne vaut pas mieux réaliser un fork et arrêter de vouloir suivre les évolutions d'Ofbiz.

Modification de diagrammes UML

Les diagrammes UML sont gérés dans le cvs de Néogia comme des fichiers binaires. Il est par conséquent impossible de suivre les modifications apportées au modèle et d'apporter des modifications à ces fichiers dans une branche.

  1. La modifications de diagrammes UML doit toujours être réalisée dans HEAD
  2. Afin de valider qu'il n'y a pas d'écrasement de version, il faut ajouter dans le diagram package dans le commentaire prévu à cette effet, le nouveau numéro de version avec un commentaire explicite de la modification effectuée.
  3. lors du commit, mettre en commentaire du commit le commentaire saisie dans le diagram UML et il faut vérifier que le nouveau numéro de version CVS correspond à celui du commentaire. Si ce n'est pas le cas il y a eu un écrasement, il faut regarder l'historique des commits et le comparer aux commentaire du diagram UML.
  4. Après une modification de diagramme, le code doit être regénéré dans HEAD pour conserver la cohérence du modèle avec le code généré.
  5. Pour chaque modification UML, il faut mettre à jour la page du wiki du diagram correspondant et mettre des explications sur les entités ou attribus ajoutés. Comme cela n'a pas toujours était fait, en profiter pour ajouter quelques explications sur l'existant. (pensez à mettre à jours la page en Anglais ;-)

Messages de debug

Niveau des messages

 if (Debug.verboseOn()) Debug.logVerbose(message, module);

Réalisation de tâche et Wiki

Les pages de documentations du wiki doivent être renseignées lors de la réalisation des tâches, bientôt ce sera obligatoire pour que la tache soit validé sur Head.

Il y a deux pages où il faut mettre de la documentation :

Technical Manual (Manuel Technique)

Concerne l'analyse ou la réalisation. Tout ce qui est noté pendants l'analyse ou la réalisation (c'est donc plutot technique) doit être noté dans documentation/Technical Manual/{le sous-composant où se trouve la modif}. Si possible faire une revue finale juste avant le passage de la tâche en TBT, pour avoir quelque chose de correct (par exemple supprimer les hypothèses non retenues)

Functional Manual (Manuel Fonctionnel)

Juste avant le passage de la tâche en TBT, cette documentation doit être renseignée, elle doit s'adresser à des utilisateurs (ou plutôt des consultants connaissant le reste du fonctionnel). Elle peut comporter la procédure de test de la fonction, (c'est le meilleur moyen de l'expliquer), ou juste un détail de l'objectif de cette fonctionalité et de son usage.

Ecrire des tests fonctionnels avec Selenium

Always reinitialize session at the begining of the test

  1. logout of the application to test
  2. fill username
  3. fill password
  4. select language
  5. submit login form

Tous les tests DOIVENT démarrer par ces lignes

(au nom de composant pret)
Example (begining of application/party/webapp/tests/TestCreatePerson.html) :

<!-- Begin of standard login procedure -->
<tr>
	<td>open</td>
	<td>/partymgr/control/logout</td>
	<td></td>
</tr>
<tr>
	<td>type</td>
	<td>USERNAME</td>
	<td>admin</td>
</tr>
<tr>
	<td>type</td>
	<td>PASSWORD</td>
	<td>ofbiz</td>
</tr>
<tr>
	<td>select</td>
	<td>locale</td>
	<td>value=en</td>
</tr>
<tr>
	<td>clickAndWait</td>
	<td>submitButton</td>
	<td></td>
</tr>
<!-- End of standard login procedure -->


pour plus d'infos : selenium

Test à ajouter après chaque transaction

Dans la plupart des cas il faut ajouter ce test juste aprés l'ajout automatique de selenium du test asserTitle

<tr>
       <td>assertElementNotPresent</td>
       <td>//div[@class='errorMessage']</td>
       <td></td>
</tr>

Création de report

Si un report comporte des calculs portant sur une variable BigDecimal il faut impérativement utiliser les fonctions prévues pour les BigDecimal. ex : subtract(), add()


À faire :

<variableExpression><![CDATA[$V{debit}.subtract($V{credit})]]></variableExpression>


À ne pas faire :

<variableExpression><![CDATA[new BigDecimal( $V{debit}.doubleValue()-$V{credit}.doubleValue() )]]></variableExpression>

Cela permet d'éviter des erreurs de calcul liés aux arrondis