Le développement logiciel est mené traditionnellement selon un postulat : le demandeur (maître d'ouvrage) définit ses besoins, les décrit, et le développeur (maître d'œuvre) réalise le logiciel correspondant. Le demandeur vérifie ensuite que le logiciel correspond bien à sa demande.
Le modèle du cycle en V est basé sur deux branches : la première descend depuis l'expression du besoin vers le codage, la seconde remonte du codage vers la mise en production, en passant par les phases de tests.
Le cycle en V nécessite l'intervention de deux acteurs majeurs : le maître d'ouvrage, celui qui définit ce qu'il veut, et le maître d'œuvre,celui qui réalise l'opération.
Cette dichotomie permet de séparer parfaitement les rôles : le maître d'ouvrage écrit le cahier des charges, le maître d'œuvre réalise ce qui a été demandé. Le maître d'ouvrage « paye » après avoir vérifié que ce qui lui a été livré correspond bien à sa demande.
Cette technique a été mise au point par l'industrie, et est parfaitement adaptée à la création d'objets... réels. Par exemple, si je veux faire fabriquer un boulon, il suffit que j'en fournisse le plan, que j'en donne les dimensions, les caractéristiques du matériau à employer (dureté, résistance, couleur...), le pas de vis à employer, la profondeur des sillons, etc.
Le fabricant fournit un premier jeu : il suffit de réaliser des tests unitaires, puis de lancer une pré-série, vérifier que tout va bien, et enfin contrôler la production. En cas de litige, c'est simple : soit le boulon correspond à ce qui est demandé, et il suffit de payer le montant convenu, soit il ne correspond pas, et le fabricant ne sera pas payé.
Dans le domaine de l'écriture d'un logiciel informatique, c'est beaucoup plus compliqué... On ne crée rien de tangible : on peut voir un dessin d'écran, et subodorer que cet écran va permettre d'obtenir d'autres informations, mais c'est à peu près tout. Un logiciel n'est qu'une « vue de l'esprit », une œuvre de création intellectuelle, à tel point que deux développeurs vont très probablement créer deux programmes différents pour le même usage...
De toute force, les équipes ou sociétés informatiques essaient de mettre en place le couple maître d'ouvrage/maître d'œuvre. C'est un modèle très confortable : un cahier des charges est rédigé, et il « suffit » d'y répondre pour considérer que le travail est mené à bien.
Malheureusement, la rédaction du cahier des charges est particulièrement compliqué : il est très difficile, pour des personnes qui ne sont pas rompues à l'informatique, qui n'ont pas une connaissance globale des nouveautés, de ce qu'on peut faire, des limites (en bref, la perle rare qui, si elle existait, serait payée bien plus que les dirigeants de multinationales...), d'établir précisément ce qu'elle veulent obtenir. À contrario, un informaticien ne connaît pas le métier de l'utilisateur final, ou en a une vue très partielle. Et même s'il pense comprendre ce que veut l'utilisateur, il doit rester très modeste : ce qu'il a compris, c'est ce qu'a été capable de lui transmettre le demandeur, et ce dernier n'a probablement pas une vision globale de ce qu'il veut.
Pour aider le maître d'ouvrage, soit ce dernier est formé à l'informatique (c'est coûteux et cela l'éloigne forcément de son métier d'origine), soit on fait appel à un assistant à maîtrise d'ouvrage (soit les deux), ce qui fait qu'on fait sous-traiter à un tiers l'expression des besoins et la mise en forme.
Une fois le cahier des charges rédigé (c'est souvent un pavé indigeste qui peut représenter plusieurs centaines de pages), il reste au maître d'œuvre, tout d'abord à y répondre dans le cadre d'un appel d'offres, et ensuite à réalisé ce qui est demandé.
Attardons-nous un peu à l'appel d'offres...
Réaliser un cahier des charges nécessite une débauche d'énergie importante. Il est souvent la synthèse de plusieurs avis, des compromis sont trouvés, l'objectif étant d'obtenir le logiciel qui fera tout pour tout le monde et, bien sûr, à un coût défiant toute concurrence (rare sont les sociétés qui ont de l'argent à gaspiller).
Les sociétés qui veulent se positionner commencent par lire le cahier des charges, et identifient rapidement ce qu'elles savent faire, ce qui leur paraît réalisable, et ce qui ne sera que difficilement mis en œuvre. Elles savent également qu'elles vont s'appuyer, très souvent, sur des outils qu'elles maîtrisent (frameworks de développement, progiciels...), qui ont leurs propres limites, et qu'elles devront adapter pour essayer de répondre à la demande.
L'objectif de la société est de remporter le marché pour gagner de l'argent. Pour remporter le marché, deux arguments sont mis en avant : d'une part le prix total, et d'autre part la « complétude » de la solution proposée, c'est à dire l'engagement que prend la société en terme de réalisation. La société qui répond à l'appel d'offres va passer un certain temps à répondre point par point au cahier des charges : il faudra parfois lire entre les lignes pour s'assurer que ce qui est écrit sera effectivement réalisé.
Le maître d'œuvre sait pertinemment qu'il ne pourra pas réaliser un certain nombre de points présents dans le cahier des charges. De même, il sait qu'il aura du retard (le contraire serait étonnant). Le cahier des charges prévoit des pénalités (de retard, de non réalisation, etc.). Que pensez-vous que va faire le maître d'œuvre quand il va établir son offre financière ? Il va tout simplement intégrer les coûts des pénalités qu'il estime peu probable d'éviter...
Une fois les offres déposées, elles sont étudiées sur le plan technique. Et très souvent, la réponse qui semble la mieux positionnée sur le plan technique est également... la plus chère. Le financeur, trop souvent, décidera de prendre la solution la moins disante (techniquement et surtout financièrement), en espérant en avoir pour son argent... Pas gagné, comme pari !
Mais revenons à notre projet...
Pour formaliser le développement selon ces approches, de nombreuses méthodes ont vu le jour, dont la plus courante est la méthode CMMI (Capability Maturity Model Integration). Il existe également une norme ISO, la norme 15504, également connue sous le nom de SPICE (Software Process Improvement and Capability Determination), les deux étant amenées à converger.
Les méthodes traditionnelles sont basées sur la rédaction du cahier des charges, qui est le « juge de paix » du projet. Le maître d'œuvre doit réaliser tout ce qui est prévu, et uniquement ce qui est prévu.
Si ce mécanisme est parfait sur le papier, il présente au moins deux inconvénients. Le premier tient à la difficulté de formaliser quelque chose qui n'existe pas (le logiciel) dans sa complétude (on l'a vu dans le paragraphe précédent). Si le cahier des charges est réalisé par des personnes peu au fait de l'informatique, on pourra aboutir à des demandes aberrantes : aujourd'hui, si un client réalisait un cahier des charges pour disposer d'un véhicule capable de se déplacer dans tous les environnements (terre, air, eau, espace), pouvant transporter 5 personnes, et à une vitesse de 10000 Km/h, il est probable qu'il n'obtiendrait pas le produit désiré... À contrario, si on ne fait confiance qu'à des informaticiens, on obtiendra un produit... fait pour des informaticiens !
Le second inconvénient tient à la durée du projet. Entre l'expression des besoins et la mise en production, beaucoup de temps peut s'écouler. Hélas, pendant cette période, les besoins peuvent évoluer, la concurrence s'exacerber, de nouveaux marchés apparaître... Le cahier des charges étant par définition intangible, sauf à multiplier des avenants, le logiciel mis en production risque fort d'être dépassé quand il sera terminé.
Il est également reproché aux méthodes traditionnelles d'être très consommatrices en papier – on parle de documentation pléthorique. La mise en place d'une démarche de ce type, par exemple CMMI, entraîne de nombreuses réunions à tous les niveaux du projet, avec rédaction systématique de comptes-rendus. Les incidents sont déclarés sur papier, confirmés, traités, puis leur correction vérifiée, le plus souvent dans le cadre d'une procédure d'assurance qualité. L'état d'avancement du projet est vérifié à partir de cette documentation, et non à partir du fonctionnement proprement dit du logiciel, le paradigme étant que la documentation reflète la réalité du développement. Sur de gros projets, cette documentation va finir par être très gourmande en temps, mobiliser plusieurs personnes uniquement pour dire que le développement du logiciel suit son cours ou qu'il fonctionne...
Pour éviter ces écueils, de nouvelles méthodes sont apparues ces dernières années, les méthodes agiles.
Face à la complexité de mise en œuvre de projets et pour limiter les risques inhérents aux démarches traditionnelles, à savoir, effet tunnel, retards de mise en œuvre, non prise en compte des besoins apparus en cours de développement, inadéquation du logiciel vis à vis des pratiques des utilisateurs..., sont apparues des méthodes basées sur des principes différents.
En 2001, aux États-Unis, dix-sept figures éminentes du développement logiciel se sont réunies pour débattre du thème unificateur de leurs méthodes respectives, dites méthodes agiles. Les plus connus d'entre eux étaient Ward Cunningham l'inventeur du Wiki via WikiWikiWeb, Kent Beck, père de l'extreme programming et cofondateur de JUnit, Ken Schwaber et Jeff Sutherland, fondateurs de Scrum, Jim Highsmith, prônant l'ASD, Alistair Cockburn pour la méthode Crystal clear, Martin Fowler, et Dave Thomas ainsi que Arie van Bennekum pour DSDM (Dynamic System Development Method) la version anglaise du RAD (Développement rapide d'applications). Ces 17 experts venant tous d'horizons différents réussirent à extraire de leur concepts respectifs des critères pour définir une nouvelle façon des développer des logiciels :
De cette réunion devait émerger le Manifeste Agile, considéré comme la définition canonique du développement Agile et de ses principes sous-jacents.
Le Manifeste Agile débute par la déclaration suivante :
Nous avons trouvé une voie améliorant le développement logiciel en réalisant ce travail et en aidant les autres à le faire. De ce fait nous avons déduit des valeurs communes.
Le Manifeste Agile est constitué de 4 valeurs et de 12 principes fondateurs.
a) Les 4 Valeurs
Les quatre valeurs fondamentales Agiles sont :
b) Les 12 principes
Les méthodes dites « agiles » s'affranchissent des contraintes inhérentes aux méthodes traditionnelles basées sur des cahiers des charges très complets et très lourds, avec rapidement des relations conflictuelles sur les délais de mise en œuvre ou la complétude fonctionnelle.
Elles sont basées sur quelques principes simples :
Il existe plusieurs méthodes actuellement, dont les plus connues sont2 SCRUM, Extreme Programming (XP), Rapid Application Developpement (RAD), Dynamic systems development method (DSDM), Adaptive software development (ASD), Feature Driven Development(FDD), Crystal clear, Processus Urbanisant les Méthodes Agiles (PUMA).
SCRUM (mélée en français) : cette méthode fournit un cadre de gestion de projet, mais pas de règles d'ingénierie logicielle. Elle peut être utilisée pour tout projet (et pas uniquement informatique), mais doit être complétée, pour les aspects techniques, par d'autres méthodes « techniques ».
Principe général :
Concrètement, chaque sprint démarre par une réunion qui permet de fixer les objectifs (ce qui va être réalisé pendant la durée du sprint). Chaque matin, une réunion de 10' maxi est organisée au sein de l'équipe, la mêlée (scrum). Tous les participants restent debout ! Enfin, en fin de sprint, une démo est présentée, suivie d'une réunion de rétrospective, qui permet de discuter sur ce qu'il s'est passé pendant le sprint.
Scrum, méthode de gestion du projet, est souvent associée à l'extreme programming, méthode de programmation.
Si elles présentent beaucoup d'avantages, elles ne peuvent être utilisées systématiquement dans tous les cas de figure.
sur des très gros projets, elles ne peuvent être mises en œuvre qu'à condition de segmenter les modules en une taille raisonnable ;
sur le plan réglementaire, il est très difficile de fixer des conditions dans le cadre d'un marché ou d'un contrat. Un contrat vise à fournir un logiciel répondant à des besoins, à un coût fixé. Mais les objectifs ou les prescriptions pouvant évoluer au cours du développement, l'équilibre entre le contenu fonctionnel et l'investissement réalisé par le prestataire peut être difficile à trouver.
De plus, l'estimation des coûts est beaucoup plus complexe à faire dans ce cadre. Enfin, la gestion des délais de livraison, et la qualité des « livrables » est plus difficile à cerner (pas de référence possible à telle fonction décrite dans le cahier des charges et non ou imparfaitement implémentée, par exemple).
La budgétisation de ces projets est plus complexe : il faut prévoir une partie fixe, et une partie variable, qui ne sera utilisée que si nécessaire.
Il faut un demandeur « actif », volontaire, et qui dialogue avec les développeurs. La relation doit être une relation de confiance, non de suspicion réciproque.
Néanmoins, dans tous les petits projets, leur mise en œuvre présente des intérêts indéniables, ne serait-ce que parce que l'implication obligatoire du demandeur augmente les chances que le logiciel sera utilisé in fine.
Sur des projets plus importants, il faut se tourner impérativement vers des méthodes éprouvées si l'on souhaite utiliser la méthodologie Agile, comme PUMA, ou SCRUM/XP, pour bénéficier au maximum de la normalisation qu'elles intègrent. Le passage à l'industrialisation et à la normalisation, au sein de l'organisation, devient alors obligatoire et ne peut être qu'un projet porté par l'entreprise (ou le service).
Mettre en place une norme, gérer des cahiers des charges et trois acteurs pour un même projet, cela fait « riche » pour de petits projets, souvent menés en interne ou par des équipes réduites, voire un développeur seul dont la tâche principale n'est pas forcément la programmation4.
En fait, sur un projet, quatre phases essentielles se rencontrent systématiquement :
Pour qu'un projet aboutisse, il faut que certains rôles et responsabilités soient parfaitement définis :
Les deux doivent travailler ensemble : un maître d'œuvre qui refuserait de prendre en compte un point particulier apparaissant en cours de développement, en s'en tenant exclusivement au cahier des charges initial, ne jouerait pas son rôle. Le maître d'œuvre ne doit jamais imposer son point de vue : ce n'est pas lui qui utilisera l'application, et il ne dispose pas de la compétence « métier » du demandeur.
De même, un maître d'ouvrage qui demanderait au maître d'œuvre de s'en tenir au cahier des charges, sans être capable d'évoluer en fonction de critères ou d'impossibilités techniques, qui refuserait de trancher sur des points mis à son arbitrage dans des délais raisonnables eu égard à l'ampleur du projet, manquerait à ses responsabilités.
« Il vaut mieux un mauvais accord qu'un bon procès ».
Pour qu'un projet aboutisse, il faut que chacun assume ses responsabilités et travaille en bonne intelligence. Cela n'exclut pas les conflits, qui sont souvent le résultat d'interprétations liées à des différences d'appréciations sur le cahier des charges, ou des points juridiques sur les droits d'auteur, de licence, de propriété intellectuelle... Si le projet est correctement dimensionné, et si chacun assume son rôle, il n'y a aucune raison qu'il n'aille pas à son terme.
Non formalisée, elle tient en général en une ligne ou une demi-page. L'archétype en est : « il faut informatiser telle procédure nouvelle, c'est un écran et un état, et c'est pour demain ».
Le premier travail consiste à rédiger la demande pour qu'elle puisse être exploitable, en s'attachant à définir :
L'informaticien, à ce stade, peut jouer un rôle de faciliteur, en aidant à faire exprimer la demande. Bien souvent, il faut « décrypter » le message, en isolant ce qui ressort de la valorisation personnelle du demandeur, pour prendre en compte la demande réelle. Deux écueils sont à éviter :
En résumé, il faut mettre en forme la demande, qui doit être la plus complète possible, avec, si nécessaire, un premier exercice de définition des priorités.
Dans la pratique, quand on développe à l'intérieur de sa société, la demande est orale... C'est à l'informaticien de la mettre par écrit, et de faire valider (et corriger) le document par le demandeur. Il est souvent beaucoup plus facile de se positionner ou de répondre à un texte déjà écrit plutôt que de partir de la page blanche. Et en plus, le demandeur à qui on aura transcrit sa demande sur papier aura un a priori largement favorable : non seulement vous avez su l'écouter, mais vous avez également su retranscrire sa demande !
Un projet s'inscrit dans un contexte : on ne part pas de rien. Des contraintes existent, qu'elles soient implicites (l'application doit être utilisée avec un micro-ordinateur fonctionnant sous le système d'exploitation le plus courant) ou explicitées dans la demande initiale.
Un projet ne pourra aboutir que s'il prend en compte les contraintes suivantes :
Au final, le projet s'intègre au sein de quatre éléments : le demandeur, l'utilisateur, les contraintes techniques et les contraintes réglementaires.
Ne pas tenir compte d'une de ces contraintes, c'est s'exposer à de graves difficultés, soit lors de la phase de développement (le demandeur se rend compte que le produit ne répond pas à sa demande), soit dans la phase de test et de mise en production (les utilisateurs ne veulent pas utiliser le produit parce qu'il ne correspond pas à l'application qu'ils font de la procédure), soit en production, quand on s'aperçoit que le logiciel ne respecte pas la réglementation.
Il s'agit de formaliser ce qui a été compris de la demande. Cette restitution va permettre :
C'est lors de cette phase que la viabilité du projet va être étudiée.
Pour restituer la demande, et en partant du principe qu'un mauvais dessin vaut mieux qu'un grand discours, il est préférable de s'appuyer sur un certain nombre de schémas UML :
Ce document doit faire l'objet d'une validation de la part du demandeur (le maître d'ouvrage). Cette validation est essentielle : elle permet à chacun de partir d'une plate-forme commune, même si cette plate-forme peut évoluer au fil du temps.
Elle est destinée aux informaticiens. Elle vise à dégrossir les processus, et doit impérativement déboucher sur une maquette.
On va utiliser de façon intensive les diagrammes d'objets et de classes pour décrire les entités manipulées, associés aux diagrammes de collaboration, voire d'activité.
A ce stade, on montre principalement les classes « physiques », celles qui représentent les objets réels, et qui seront pour la plupart implémentées en partie dans la base de données. On peut faire apparaître, si c'est nécessaire, des classes virtuelles, comme les modules de calcul ou de traitement lourd (exports, calculs financiers...).
Les grands ensembles de traitement (les modules) doivent être identifiés. C'est ce qui permettra de hiérarchiser le développement, c'est à dire l'ordre dans lequel les modules seront réalisés.
Il est fréquent que l'analyse initiale soit très réduite, voire inexistante : le plus simple est de commencer à coder un premier module, puis de rajouter, au fur et à mesure, les modules suivants en fonction des retours du demandeur (feedback). C'est au moment du codage qu'on réalisera les schémas nécessaires pour expliciter ce que doit faire le module, et comment.
Il y a quelques années, je conseillais de réaliser une maquette, puis de passer par une phase d'analyse, et enfin de coder... Aujourd'hui, la prise en compte de certains éléments des méthodes agiles me semble beaucoup plus cohérent.
Sauf si vous êtes un développeur aguerri, fixez-vous des itérations d'une durée constante et pas trop longues : pour moi, l'idéal est de 2 semaines. Avec le demandeur, faites une réunion toutes les 2 semaines pour :
- présenter le travail réalisé pendant la quinzaine ;
- fixer les objectifs pour les deux semaines à venir.
L'objectif d'une itération est de réaliser un module fonctionnel. Cela peut être, au début, d'implanter le framework, de mettre en place les outils de développement (gestion des versions, choix des bibliothèques, tests divers de faisabilité...). Puis il faudra s'astreindre à fournir quelque chose de fonctionnel : c'est typiquement un module de saisie, qui comprend :
- une zone de sélection (les critères de sélection) ;
- l'affichage d'une liste des enregistrements correspondants ;
- la création / modification d'une fiche.
Par la suite, cela peut être l'implémentation de fonctions de contrôle, des éditions, etc.
Ainsi, même si le projet n'est pas terminé à la fin de la période (fin du stage, par exemple), ce qui a été déjà développé sera fonctionnel et pourra, probablement, être utilisé ou complété. Le travail n'aura alors pas été réalisé pour rien5 !
L'intérêt de travailler par itérations, c'est que cela permet également au demandeur de se rendre compte assez vite si le projet dévie ou pas. Il peut remettre en question des choix techniques : ce n'est pas très grave, s'il n'y a que 2 semaines (au pire) de perdues ! Si cela se fait à la fin du projet, c'est, alors, une catastrophe.
Donc, même si vous travaillez tous seul et que le demandeur de l'application est rarement disponible, essayez de lui imposer une réunion régulière toutes les 2 semaines pour faire le point : c'est le minimum qui vous permettra de travailler à peu près correctement.
Surtout pour un jeune développeur, commencer à coder est difficile : le syndrome de la page blanche n'est pas loin...
Dans un premier temps, choisissez de coder un module simple, par exemple la saisie d'une fiche. Ce module va comprendre, en général :
- un écran de sélection ;
- une liste d'affichage des enregistrements correspondants ;
- un écran d'affichage du détail d'une fiche ;
- et enfin, l'écran de création / modification.
Commencez par dessiner un schéma général de fonctionnement en UML (diagramme de séquence, mais pas seulement, si vous voulez représenter l'enchaînement global, c'est à dire comment vous naviguez entre vos différents écrans).
Vous aurez très probablement besoin d'écrire la classe qui vous permettra d'accéder à vos informations (souvent, basée sur un moteur ORM – cf. II.E - Le couplage relationnel-Objet, page 27). Avant de créer votre classe, commencez par dessiner les tables qui seront nécessaires (il est possible que vous aurez besoin de tables de sélection, par exemple la table des civilités pour la saisie d'une fiche « individu »). Utilisez pour cela des outils qui permettent de générer le code de création des tables automatiquement, y compris quand vous réaliserez des modifications6.
Une fois vos tables générées, codez d'abord l'affichage de la liste, puis l'écran de création/modification d'une fiche : vous pourrez ainsi commencer à alimenter votre table. Rajoutez l'affichage du détail, puis les critères de recherche.
L'écriture du premier module sera probablement long : les modules suivants iront plus vite...
Le développement objet présente plusieurs avantages :
Mais également des inconvénients :
À ce sujet, une petite remarque vis à vis de PHP... Ce langage a pas mal de défauts (pas de typage des variables, par exemple, exécution interprétée), mais il a su, au fur et à mesure de son évolution, conserver son atout principal, à savoir la possibilité de faire cohabiter du code séquentiel (ou procédural) avec une gestion de classes. Cela lui donne une grande souplesse, ce qui permet de coder beaucoup plus vite qu'avec bien d'autres langages.
Pourtant, certains frameworks « professionnels », comme Symphony7, par exemple, ont décidé que le code procédural était à bannir, et ont copié le mode de développement utilisé en java. Dans ce cas, pourquoi développer en PHP, et pas en java ? J'avoue avoir du mal à comprendre la logique...
On distingue souvent deux types de tests, les tests unitaires, ceux qui sont effectués par le développeur, et les tests approfondis qui permettent de s'assurer que l'application répond à l'ensemble des besoins
Les test unitaires servent à s'assurer que le code fonctionne de façon correcte, de manière indépendante.
On va créer un jeu de tests, portant sur plusieurs items, et prenant en compte l'ensemble des cas de figure qu'on a intégré lors de la programmation. Chaque module doit être testé de façon indépendante, pour ne pas avoir de « pollution » par du code non débogué. L'important est de tester au fur et à mesure, pour s'assurer que ce qu'on vient d'écrire est cohérent. Si on ne fait pas ce travail, le débogage devient alors vite fastidieux pour retrouver le module qui pose problème. Utiliser des outils susceptibles d'afficher le contenu des variables et de mettre des points d'arrêt apporte un confort certain : la plupart des outils intègrent un débogueur, mais on peut aussi en simuler un en arrêtant l'exécution et en affichant manuellement les variables qui posent problèmes.
Les tests unitaires sont surtout utilisés pour vérifier le fonctionnement de l'interface.
Les tests approfondis vont permettre de s'assurer que l'application répond au besoin. Ils ne devraient pas être réalisés par le développeur, qui pourrait facilement les bâcler.
Aujourd'hui, les professionnels des tests recommandent de les décrire au moment où l'on définit les besoins. Cela va permettre de préciser la demande et d'éviter les biais liés au processus de développement (on modifie inconsciemment ce qu'il faut tester en fonction de ce qu'on a réalisé).
Il est préférable de faire tester par des personnes qui n'ont pas travaillé sur le développement, en y intégrant le demandeur (ou maîtrise d'ouvrage). La phase de test est un processus hélas trop souvent bâclé, qui aboutit souvent à des coûts cachés (bugs découverts sur le tard).
Les tests doivent s'attacher à expertiser la conformité de l'application :
Il faut ainsi impliquer plusieurs profils d'utilisateurs différents !
Dans la pratique, pour des applications relativement modestes, il faut prévoir une année de mise au point et de correction de bugs à partir de la mise en production. Au delà, les bugs sont nettement plus rares (courbe logarithmique). La correction est en général plus simple, le code plus « propre », en développement objet.
Avec les logiciels modernes, il est souvent superflu de réaliser des guides d'utilisation très détaillés, surtout si l'application doit être utilisée par un nombre restreint d'utilisateurs qui maîtrisent bien leur procédure8. Par contre, il est important de rédiger le guide « Administrateur », qui va décrire la solution technique retenue, l'implémentation de la base de données, le paramétrage, et la gestion des droits.
Sans ce document, il est souvent quasiment impossible de mettre en production le logiciel, surtout si celle-ci est décalée dans le temps.
Le code devra contenir des commentaires... normalisés !
1Source : http://fr.wikipedia.org/wiki/Manifeste_agile
2Source : http://fr.wikipedia.org/wiki/Méthode_agile
3Source : 01 Informatique du 13/03/2008
4Ce fut mon cas pendant plus de 25 ans !
5Je ne compte plus les logiciels ou les développements arrivés à maturité, mais jamais utilisés, ou si peu...
6Si vous travaillez avec une base de données Mysql, vous pouvez utiliser SQL Workbench - http://www.mysql.fr/products/workbench/. Avec les autres bases de données, Moskitt est probablement le plus complet, même s'il est plus complexe d'utilisation et comprend quelques limitations ou quelques bugs (http://www.moskitt.org/eng/)
7Ce framework présente d'autres inconvénients, dont notamment le fait qu'il dispose de son propre langage, et qu'il n'est pas réputé pour sa « frugalité » en ressources sytèmes...
8Et à condition que l'ergonomie respecte les standards... J'avoue avoir été particulièrement intrigué devant des logiciels « modernes », écrits en « full Ajax », qui m'ont laissé perplexe sur leur utilisation... Bien qu'étant informaticien et connaissant l'usage qui devait en être fait, j'ai du me retourner vers la documentation ou les formateurs pour comprendre comment les utiliser...