Archive

Archives pour la catégorie ‘Développement’

La réflexivité en ingénierie du logiciel…

Un peu d'ingénierie

Crédits : photo-libre.fr

Pour bien commencer l’année, un article que nous avons rédigé en Ingénierie du Logiciel par Immersion et qui a été publié à l’EuroSPI 2009. Ce qui suit est un résumé, l’article original est accessible auprès de l’éditeur :

Article complet (anglais)

Construire un Observatoire des Cours d’Action en Ingénierie du Logiciel : Vers un lien entre la norme d’Ingénierie du Logiciel ISO/ESC et une Pratique Réfléxive

François-Xavier Bru , Gaëlle Frappin, Ludovic Legrand, Estéban Merrer, Sylvain Piteau, Guillaume Salou, Philippe Saliou and Vincent Ribaud

Afin de rester compétitif dans un marché en évolution, les petites entreprises de développement logiciel peuvent s’aider d’un observatoire des aspects observables de l’activité de chaque participant. Cette analyse fournit une description de l’activité de chacun et permet d’exprimer des recommandations concernant à la fois les situations individuelles et la situation collective de l’équipe. L’observatoire proprement dit est un ensemble articulé de méthodes de collecte de données, reposant sur un wiki sémantique et une application dédiée. Une étude de cas, basée sur l’activité d’une équipe de 6 jeunes ingénieurs de développement, décrit quelques aspects de la construction et du remplissage de l’observatoire d’activités. Au vu des premiers résultats de ce travail, nous pouvons penser qu’observer et analyser l’activité d’ingénieurs de développement aide à révéler ce qui régit tacitement leur comportement face aux tâches. Ceci peut aider les ingénieurs à établir des liens entre les process utilisés pour le projet et un modèle de référence de process, et contribue à améliorer l’adéquation entre le projet en action et la norme d’ingénierie logicielle utilisée.

Building an Observatory of Course-of-Action in Software Engineering: Towards a Link between ISO/IEC Software Engineering Standards and a Reflective Practice

François-Xavier Bru , Gaëlle Frappin, Ludovic Legrand, Estéban Merrer, Sylvain Piteau, Guillaume Salou, Philippe Saliou and Vincent Ribaud

As a help to compete in an evolving market, small software companies may use an observatory of their course-of-action. The course of action considers the observable aspect of the actor’s activity. Its analysis provides a description of actors’ activity and it can express recommendations concerning both the individual situations and the collective situation. The observatory is an articulated set of data collecting methods supported with semantic wikis and a dedicated application. A case study, based on the activity of a team of 6 young software engineers, depicts some aspects of the building and the filling of the course-of-action observatory. As primary results of this work, we may think that observing and analyzing software engineer’s activity help to reveal his/her theory-in-use – what governs engineers’ behavior and tends to be tacit structures – That may help engineers to establish links between “Project Processes-in-use” and a simplified Process Reference Model and contribute to reduce the fit between a project-in-action and espoused SE standards.

PHP : Le grand test

Crédits : photo-libre.fr

Crédits : photo-libre.fr

Houa, ce titre fait vraiment très racoleur, on se croirait presque sur France2 avec des tas d’invités-stars !

Bref. Vous êtes un particulier, une petite entreprise ou une société de services. Vous avez créé un site web en PHP. Il est super, il répond au besoin, il y a des tas de gens qui viennent dessus, tout le monde l’aime, tout le monde vous trouve génial, bref, c’est un succès.

Mais votre site PHP est-il bien fait ? Est-il vraiment robuste ? Est-il évolutif ? Est-ce que quelqu’un d’autre peut le maintenir sans tomber malade, sans sombrer dans une grave dépression ? Pour le savoir, positionnez votre site en le faisant rentrer dans une des catégories suivantes…

Niveau 0 : Néant

« Pas de PHP chez moi ! »

Résumé :

Votre site reste simple. Il n’y a pas besoin de dynamiser le contenu. Vous êtes manifestement seul à le mettre à jour ; vous connaissez bien le HTML, donc vous ne rencontrez aucun problème particulier. Il y a certes des redondances, des copier-coller ici et là pour uniformiser la charte, mais cela ne vous dérange pas outre mesure.

Résultat :

Si vous n’avez pas besoin de plus, restez dans cet état ! Vous avez le mérite de maîtriser tous les mécanismes de votre site, sans recourir à un CMS qui serait disproportionné par rapport à vos besoins.

Organisation type :

+ www/
  - index.html
  - menu.html
  - article.html

Niveau 1 : Scripts dispersés

« Je suis un débutant un peu perdu »

Résumé :

Votre site a commencé au niveau 0. Mais à partir d’un moment, par je ne sais quelle folie, vous avez voulu rajouter quelques fantaisies, comme afficher la date du jour, ou compter le nombre de visiteurs. Certes, cela donne immédiatement une classe folle à votre site, mais attention : vous venez de rentrer dans l’engrenage sans fin d’un site en PHP !

Vous avez tout d’abord inséré en plein milieu de votre code HTML des petits bouts de code trouvés de-ci, de-là lors de vos pérégrinations sur l’Internet. Puis vous avez commencé à apprendre la syntaxe de PHP, sans trop vous préoccuper de futilités comme le typage, l’indentation, les commentaires, MVC, la POO, etc. Vous avez rajouté vos propres morceaux de code, pour par exemple permettre aux visiteurs de s’inscrire, de laisser des commentaires ou de participer au contenu.

Résultat :

Votre site est un sacré bazar. Il a pris plus d’ampleur que ce que vous n’aviez prévu au début, et maintenant vous avez sur les bras tout plein de bouts de ficelles raccordés les uns aux autres. D’ailleurs, vous avez laissé tomber et votre site est à l’abandon.

Organisation type :

+ www/
  - index.php
  - script_kikoo_by_PHPCS.php
  - menu.php3
  - article.php4

Niveau 2 : Scripts factorisés

« Je suis un amateur, mais avisé »

Résumé :

Dégoûté par votre expérience du niveau 1, vous avez décidé de faire un brin de refactoring, en rassemblant toutes vos précédentes petites horreurs en un seul endroit. Organisées en fonctions distinctes, vous venez de créer une vraie petite bibliothèque de fonctions !

Désormais, vous avez un gros fichier avec une nom très cool, comme « fonctions.php », qui contient tous vos traitements PHP. Du coup, vos pages HTML se contentent d’appeler les fonctions qui leur plaisent, et c’est tout de suite plus lisible. En plus, cela vous a permis de factoriser un peu certaines redondances, comme les connexions à la base de données.

Résultat :

Vous avez bien rattrapé le coup, votre code redevient à peu près maintenable. En revanche, votre fichier faisant office de bibliothèque devient de plus en plus long. Mais cela ne vous perturbe pas, vous avez le dernier éditeur à la mode qui permet de « collapser » les fonctions à volonté !

Organisation type :

+ www/
  - index.php
  - menu.php
  - article.php
  - fonctions.php

Niveau 3 : Mi-script, mi-objet

« Je suis un gros cool avec mon PHP et mes objets partout »

Résumé :

Très satisfait des progrès apportés par votre passage au niveau 2, vous avez décidé de ne pas vous arrêter en si bon chemin. D’ailleurs, vous venez de lire sur un site quelconque plutôt mauvais que la programmation orientée objet, c’est ou’achement bien. Il paraît que cet oiseau là il permet de faire du code clair, structuré, réutilisable et donc… maintenable ! En plus, c’est la grosse nouveauté de PHP5, alors c’est forcément à la mode !

Ni une, ni deux, vous foncez sur un tutoriel plutôt mauvais pris au hasard, et paf ! Vous devenez expert en POO (même si c’est marqué que non). Vous rajoutez des classes à droite, à gauche, portant des noms qui prouvent que vous avez porté une attention toute particulière à la modélisation : « class PageAccueil {} », « class FonctionsDiverses {} », « class MotDePasse {} ». Par la même occasion, vous avez rempli la racine de votre site avec une multitude de nouveaux fichiers aux noms fumeux, qui contiennent vos classes fraîchement créées.

Résultat :

Vous ne voyez pas l’intérêt de faire de l’objet par rapport à votre bonne vieille bibliothèque. Vous êtes bien embêté car vous avez l’impression que quelque chose ne va pas, que quelque chose cloche dans votre « architecture », bref, que tout ça n’est pas très logique. En plus, vous vous retrouvez avec pleins de fichiers. Votre code est redevenu immaintenable.

Organisation type :

+ www/
  - index.php
  - PageAccueil.php
  - mot_de_passe.class.php
  - fonctionsDiverses.php
  - article.php
  - menu.php

Niveau 4 : Objet

« Les objets, c’est mon dada »

Résumé :

Après plusieurs périodes de dépression impliquées par votre passage par le niveau 3, vous avez décidé d’apprendre la programmation orientée objet autrement qu’en lisant simplement la syntaxe d’une classe en PHP. Vous avez alors découvert de nouveaux horizons, et vous rigolez bien en lisant votre code de niveau 3 : « Haha, comment j’étais un gros naze ».

Typiquement, vous êtes un étudiant qui a appris le Java ou le C++ en cours, et vous vous êtes acheté un livre sur le PHP, parce-qu’à après tout, tout cela se ressemble drôlement.

Vous avez donc entièrement ré-écrit votre code PHP. Vous avez désormais des classes qui représent quelque chose de concret : « class Utilisateur {} », « class BaseDeDonnees {} », « class Article {} » etc. Comble du luxe, vous avez même fait du polymorphisme, avec des tas d’héritages, de surcharges et de redéfinitions. Vous avez rassemblé tout ça dans un répertoire « class » pour faire plus propre.

Résultat :

Votre code ressemble de nouveau à quelque chose. Vous êtes satisfait de votre modèle objet ; il est clair, logique et bien commenté. Toutes mes félicitations.

Organisation type :

+ www/
  - index.php
  - menu.php
  + class/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  - article.php

Niveau 5 : Modèle, Vue et Contrôleur

« Du HTML dans du PHP, ou du PHP dans du HTML ? »

Résumé :

Maintenant que vous avez passé le niveau 4 et que votre modèle objet est sans défauts, vous jetez un oeil du côté de votre code HTML. Et là, vous vous posez une question existentielle : « Pourquoi c’est illisible ? ». En effet, vous voyez des tas de if/else, de boucles, d’appels de méthodes, de créations d’objets éparpillés au milieu de balises HTML. À d’autres endroits, c’est l’inverse : des tas d’ »echo » qui génèrent du code HTML, ce qui rend la structure de la présentation parfaitement incompréhensible.

Alors, qu’est-ce qu’il faut faire ? Du PHP dans du HTML, ou du HTML dans du PHP ? Et bien je vais vous le dire : du PHP dans du HTML. Sinon, il est inutile de faire du PHP, n’importe quel langage avec CGI serait beaucoup plus adapté. L’avantage de PHP étant en effet de pouvoir s’intégrer directement dans le code source d’une page web. Les « echo(« <h1>Coin coin</h1> ») » sont donc à bannir ! Bien sûr, il est quand même nécessaire pour la lisibilité de minimiser les appels PHP dans votre page web, en créant un maximum de classes/méthodes dans des fichiers à part.

Par exemple, tous les traitements qui suivent la validation d’un formulaires sont beaucoup mieux en dehors du fichier de la page HTML. De même, toutes les variables calculées utilisées dans la page seront aussi bien dans un fichier PHP à part, qui affichera ensuite la page HTML en lui passant les variables en paramètre (par exemple).

Résultat :

Bravo ! Sans vous en rendre compte, vous avez appliqué la structure MVC à votre site ! Votre modèle objet est bien séparé de votre vue HTML, elle-même séparée des différents traitements de contrôle.

Organisation type :

+ www/
  - index.php
  + modele/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  + vue/
    - article.php
    - menu.php
    - edition.php
  + controleur/
    - article.ctrl.php
    - menu.ctrl.php
    - identification.ctrl.php

Niveau 6 : Collaboratif

« Je me sens un peu seul »

Résumé :

Maintenant que vous avez séparé le modèle de la vue du contrôleur (!), il devient assez simple pour n’importe qui de venir vous aider. On peut très bêtement imaginer trois personnes travaillant sur votre site : la première se charge du modèle, la deuxième du contrôleur et la troisième de la vue.

Et bien en fait, cela ne marche pas. Le modèle n’est pas amené à beaucoup changer, donc il y aura deux personnes sur le contrôleur. Et quand les interfaces seront terminées, il y aura trois personnes travaillant possiblement sur le même fichier. Soit vous jouez à celui qui enregistrera le fichier en dernier, soit vous utilisez un VCS pas trop mal bien que discutable. Vous optez pour la deuxième solution, et tout devient plus simple : vous pouvez tous envoyer allègrement vos modifications sans craindre des conflits insolubles, revenir à une ancienne version, faire des développements parallèles, visualiser l’historique des modifications et plein d’autres choses encore.

Par la même occasion, vous utilisez un « bugtracker » pour permettre aux utilisateurs de remonter les problèmes, pour vous répartir les tâches à faire et pour en discutailler joyeusement (au lieu de travailler).

Résultat :

C’est bien. Vous êtes plusieurs, vous allez plus vite.

Organisation type :

+ trunk/
  + modele/
  + vue/
  + controleur/
+ branches/
+ tags/

Niveau 7 : Templates

« Les <?php … ?> c’est rigolo 5 minutes »

Résumé :

Vous avez admiré votre strucutre MVC pendant des semaines durant, et maintenant vous êtes un peu lassé. Vous voulez aller plus loin. D’ailleurs, vous trouvez que votre code HTML n’est pas encore assez séparé du code PHP, et que certaines parties de votre contrôleur (celles qui appellent les pages HTML), pourraient être automatisées. En fait, vous voudriez que votre code HTML ne soit plus qu’un squelette, un gabarit… bref : un template. Et parfois même, vous vous surprenez à rêver d’un système de cache qui accélèrerait l’affichage de vos pages pour vos visiteurs.

Il vous faut donc un moteur de template ! Vous en prenez un au hasard, lisez un minimum de documentation et paf ! C’est fini. Puisque vous aviez déjà séparé au maximum le PHP du HTML, en réduisant le PHP dans le HTML à de simples appels de fonctions, la transition a été immédiate.

Résultat :

Votre code a tout de suite une allure beaucoup plus scintillante. Et désormais, n’importe quel designer pourra relooker vos pages sans avoir à se soucier une seule seconde de votre code PHP !

Organisation type :

+ www/
  - index.php
  + modele/
    - BaseDeDonnees.class.php
    - Utilisateur.class.php
    - Administrateur.class.php
    - Article.class.php
  + smarty/
  + vue/
    - article.tpl
    - menu.tpl
    - edition.tpl
  + controleur/
    - article.ctrl.php
    - menu.ctrl.php
    - identification.ctrl.php

Niveau 8 : Framework

« Marre de réinventer la roue (carrée) »

Résumé :

Voilà maintenant longtemps que votre site est en ligne. Au fur et à mesure de vos développements, vous vous êtes aperçu que certaines parties auraient pu être générées, car elles sont en fait très classiques. Par exemple : vos classes de gestion des utilisateurs, des identifications, etc. et les requêtes à la base de données correspondantes.

Par ailleurs, vous aimeriez être guidé pour vos développements futurs afin de mettre en place les « best-practices » qui ont fait leur preuves, et non plus vos propres conventions que vous seul connaissez.

Vous décidez donc d’utiliser un framework rien chouette ! En trois coups de cuillère à pot, vous indiquez via yaml, xml ou autre le modèle de votre architecture, et le bazar vous génère tout comme un grand ! Il ne vous reste plus qu’à compléter avec vos morceaux de codes spécifiques, la plupart des traitements étant déjà implémentés pour vous. De plus, le framework vous propose des tas de facilités, comme des appels Ajax simplifiés. La classe américaine quoi.

Résultat :

Votre code est devenu terriblement agréable à lire. Le framework vous a forcé à faire les choses de la meilleure façon, la plupart des traitements complexes sont cachés, la structure est claire et compréhensible.

Organisation type :

+ www/
  + sf_sandbox/
    + apps/
      + frontend/
    + cache/
    + config/
    + data/
    + doc/
    + lib/
    + log/
    + plugins/
    + test/
    + web/
      + css/
      + images/
      + js/

(Qui a dit que j’ai tout lâchement copié/collé ?)

Niveau 9 : Utilisateur

« C’est déjà fait et c’est mieux »

Résumé :

Vous venez de découvrir qu’un système déjà tout prêt fait exactement la même chose que votre site. Mais en mieux. Et en plus joli. Et en moins buggé. Du coup, vous téléchargez (ou achetez ?) le CMS/Blog/Wiki/ERP qui fait ce dont vous avez besoin. Comble du luxe, vous pouvez y adjoindre des modules pour qu’il fasse des choses auxquelles vous n’auriez jamais pensé.

Résultat :

C’est l’idéal : vous n’avez plus de code à maintenir ! Vous utilisez le logiciel en tant qu’utilisateur, comme une boîte noire. Vous n’avez plus à vous souciez de rien, sauf de votre contenu. Vous gagnez en tout, et surtout en temps.

Organisation type :

+ www
  - wordpress

(Oui, je me foule de moins en moins).

Niveau 10 : Logiciel Libre

« Je suis libre d’utiliser, d’étudier, de modifier et de redistribuer »

Résumé :

Le logiciel que vous avez choisi au niveau 9 est libre. Joie ! Quand certaines fonctionnalités manquent pour votre site, vous pouvez les ajouter, et même en faire profiter la communauté !

Mieux : c’est votre logiciel (celui qui date du niveau 0 et que vous avez rendu open-source), que les gens utilisent, étudient, modifient et redistribuent ! Vous êtes devenu une sorte de guru du logiciel libre. Félicitations.

Résultat :

Vous avez tout compris, vous êtes trop fort. Vous êtes l’avenir de l’informatique.

Organisation type :

(Heu, ça dépend)

Et voilà

Comme dirait l’instructeur de tir : « Au résultat ! »

Un chronomètre pour le Nokia 5800 XpressMusic

16/04/2009 F-eeks 11 commentaires
Crédit : mea.nokia.com

Crédit : mea.nokia.com

Hop, d’emblée et sans introduction (elle viens après car elle n’intéresse personne) :

Télécharger l’application ToucheMonChrono pour Nokia 5800 XpressMusic.

Note pour les utilisateurs d’Internet Explorer : votre imbécile de navigateur ne comprend rien et renomme en douce le fichier en *.zip. Ne vous laissez pas faire et renommez-le en *.jar une fois téléchargé !

Ensuite l’application s’installe bêtement avec le logiciel PC Suite de Nokia. Promi plus tard je ferai un article plus détaillé avec les sources et les trucs à savoir pour bien faire une application JavaME/MIDP. Ho et puis non, pas promi. Peut-être.

Voilà, on peux commencer. Donc. Je me suis acheté il y a peu avec mes petits sous un smartphone, pas trop cher et plutôt bien équipé. Vous trouverez plus d’informations sur un blog pas trop prétentieux que j’aime bien : le bloggeur (Nicolas) n’est pas un expert en téléphonie mobile, juste un passionné de Nokia qui passe un temps fou à entretenir un blog amateur et à répondre à tous les emails qu’on lui envoie. Chapeau.

Mais il manque à ce téléphone une application toute bête : un chronomètre ! Du coup je me suis retrouvé bien embêté le jour où j’ai voulu répéter une présentation en public qui ne devait pas dépasser 10 minutes. Qu’à cela ne tienne, j’ai développé moi-même un petit chronomètre basique, mais fonctionnel. Certes, il existe déjà pléthore de chronomètres écrits en Java qui doivent fonctionner sur ce smartphone. Mais le Nokia 5800 a une résolution très particulière ainsi qu’un écran tactile, alors il serait dommage de se contenter d’un affichage minuscule et de petits boutons. Il existe aussi des chronomètres adaptés au Nokia 5800, mais ils sont payants. Oui, je trouve ça stupide de payer pour un bête chronomètre. Bon d’accord trêve d’excuses bidon, la vraie raison c’est que j’avais envie de faire un truc en JavaME/MIDP.

Donc voilà une petite application de chronomètre, pas très avancée mais bon. La version en téléchargement plus haut est estampillée « touchemon5800.canalblog.com », histoire de faire un petit geste pour le fameux Nicolas. Bref. Voilà un petit screenshot :

(Ha ben non en fait, pas de screenshot. Mon appareil photo a l’air de faire grêve. Bon c’est pas grave, cela m’aura quand même fais passer un coup de chiffon sur l’écran de mon téléphone, qui avait l’air d’avoir été astiqué à coups de couennes de jambon de campagne.)

Mode d’emploi express (=bâclé) :

Pour lancer le chronomètre, on appui sur le triangle, pour le mettre en pause sur les deux barres verticales et pour le remettre à zéro surle carré. Si on appuie sur le texte du temps, le marqueur juste en-dessous se met à jour. Si on bascule le téléphone en mode paysage, l’affichage s’adapte (à son rythme, faut pas être trop pressé). On peut changer de couleur à la volée : bleu, rouge ou argent (les trois coloris actuels du smartphone, oui ça ne sert à rien). Ha oui, et les millisecondes sont surtout là pour rigoler, le téléphone n’a pas l’air de supporter trop de raffraîchissements avec du Java… logique.

Voilà, bon c’est pas très intéressant mais un jour je ferai un article sur les détails plus techniques.