Création de logiciels : de l'agilité à l'artisanat

Intégration

Troisième volet de la saga sur la conception émergente. Après avoir implémenté la logique de notre premier scénario, il est temps d'obtenir une première version utilisable de notre application. Pour cela, il suffit de donner corps aux composants d'interaction avec l'environnement du logiciel, l'interface utilisateur et l'accès à des documents XML, puis d'intégrer l'ensemble de nos composants au sein d'un exécutable. L'utilisation de TDD pour la réalisation de composants d'interaction externe est toujours un point délicat. Si le monde extérieur est lourd à simuler, les tests unitaires perdent de leur intérêt car le temps passé à mettre en oeuvre l'environnement de test devient prohibitif. En même temps, si les composants ne sont pas suffisamment testés, la mise au point de l'ensemble après intégration peut rapidement devenir fastidieuse.

TDD sur page blanche

Après quelques considération d'ordre général sur la conception émergente, il est temps d'entrer dans le vif du sujet. Comme prévu, nous allons essayer de faire émerger la "conception" du code que nous allons écrire. Comme nous en sommes au début du projet, nous n'avons aucune base sur laquelle ancrer notre code mais ce n'est pas grave. L'essentiel est de faire un peu de conception sur papier -- suffisamment pour démarrer l'écriture d'un premier test. Le TDD fera le reste. Le premier scénario à implémenter est "L'utilisateur s'abonne à un flux de podcast et visualise la liste de ses éléments". Nous allons donc commencer par en proposer une représentation simple sous forme de diagramme de séquence, puis, nous implémenterons la logique de ce scénario à travers un ensemble de composants mis en évidence par le diagramme.

Conception émergente

Le développement dirigé par les tests ou TDD, popularisé par eXtreme Programming, est une technique de développement logiciel très usitée au sein des personnes pratiquant les méthodes agiles. Son principe de base, "toujours écrire un test qui rate avant d'écrire le code qui permet de le faire passer", a pour avantage de focaliser l'attention du développeur sur l'écriture de code destiné exclusivement à remplir les fonctionnalités souhaitées pour le logiciel. Il participe ainsi à la mise en application d'un des principes du manifeste agile "Working software is the primary measure of progress".
Par ailleurs, son approche très séquentielle (un test après l'autre) et sécurisée (les tests déjà présents garantissent le bon fonctionnement de l'ensemble au fur et à mesure des modifications) fait écho à un principe non moins important : "Welcome changing requirements, even late in development".

Le TDD, de par son nom plutôt trompeur, est parfois considéré à tort comme une méthode de test. En réalité, il n'est rien de moins qu'une méthode de développement qui, par affinages successifs, guide la conception d'un logiciel.
Contrairement à d'autres méthodes qui prévoient une phase dite "de conception" où un grand nombre d'abstractions composant le logiciel sont imaginées et documentées en amont de l'écriture de code, le TDD favorise une conception au fil de l'eau au fur et à mesure que les abstractions recherchées apparaissent dans le code déjà écrit et testé. On parle alors de conception émergente.

Pod pod pod pod

Thanks to Jeremy D. Miller I just discovered a place that is worth a web surf: Process, People, and Pods. Fred George started to blog less than a month ago and, in a few articles, he described the very nature of agile software development.
From agility inner secret to encounters of the third kind (of developers) and path to development wisdom, we go through all what we would like to tell about our jobs if we knew the words for that.

Oh, and did I tell you about the pods? You should really read those ones too!

Les exigences non satisfaites, le cancer du logiciel

Les Burndown Chart de Release fournissent un bon moyen de visualiser l'avancement d'un projet de développement logiciel à l'échelle de l'itération. Ils permettent d'estimer visuellement la bonne marche de l'équipe et ainsi d'anticiper les retards trop importants en modulant le contenu du projet.
Certains jours, l'interprétation que l'on peut avoir de ces graphiques prend une saveur assez particulière...

XP Day France 2007

XP Day France, manifestation consacrée à XP et à l'agilité, va voir sa 2ème édition se dérouler les 2 et 3 mai prochains.

Pour diverses raisons personnelles, je n'y serai pas mais je relaie ici l'information car, suite à ma participation au 2ème SIGMA Toulouse, je suis de plus en plus convaincu que de tels évènements auraient intérêt à se multiplier si les professionnels du logiciels ne veulent pas rester englués dans des approches datant d'une époque révolue.

Je suggère donc à tous ceux qui ont la possibilité de s'y rendre, qu'ils soient chefs de projet, manager ou simple développeur de ne pas manquer le rendez-vous. Ils auront une occasion unique de dialoguer avec des personnes qui peuvent vraiment leur apporter une vision différente et efficace d'envisager leur pratique professionnelle.

SIGMAT 2.0

Le deuxième SIGMAT a eu lieu aujourd'hui et je suis vraiment très content d'avoir pu y participer autant comme intervenant que comme membre de l'auditoire.

J'ai tout particulièrement été surpris que plusieurs personnes fassent le déplacement à Toulouse depuis Montpellier ou Bordeaux pour parler d'agilité pendant quelques heures. Cela me conforte dans l'idée que je ne suis pas seul à penser qu'il y a du bon dans les méthodes agiles et que les idées qu'elles véhiculent gagneraient à être mieux médiatisées dans les métiers du logiciel.
Ma conclusion est sans appel : expérience à renouveler.

Je joins ici les slides de ma présentation qui, je l'espère, n'aura choqué personne en ce qui concerne les traits parfois un peu poussifs utilisés pour décrire les principes agiles (mais qui est donc ce dingue qui veut transformer les développeurs en kolkhozniks ?...)

MOE et MOA sont dans un bateau

Un excellent billet de Claude Aubry sur les notions de "Maîtrise d'ouvrage" et "Maîtrise d'oeuvre" dans un monde agile me donne l'occasion de parler d'un syndrome assez fréquent dans le monde du développement logiciel : celui de l'emprunt abusif à d'autres disciplines.

Wikipédia l'explique très bien : MOA et MOE sont des termes empruntés au secteur des Travaux publics.

Alors, pourquoi ont-ils débarqués dans le logiciel ?

Scrumification

Dans le cadre de mon activité professionnelle, j'ai toujours appliqué une démarche de dissémination de pratiques agile dans un processus existant, ce qui produit en pratique des méthodes de travail un peu bricolées et spécifiques à un contexte donné.

En ce début d'année, je change un peu mon fusil d'épaule. Ce changement n'a rien de dogmatique et découle plutôt d'une démarche opportuniste. Il est des contextes où les changements que peuvent apporter de légères orientations un peu plus agiles obtiennent de très bon rendements. Il en est d'autres où les mêmes changements apportent moins que ce que l'on espérait : il faut alors savoir se poser les bonnes questions...

Accusé, levez-vous !

Hier, je parlais de l'article de Valtech Mag sur le chef de projet agile et de l'utilité d'une telle notion. Le hasard a fait que je lise ce soir un billet de Tom Looy sur le DDR : "Développement Dirigé par la Responsabilité" (ou ADD : Accountability Driven Development en version originale).
Le hasard faisant, selon la formule, toujours bien les choses, Tom Looy apporte une réponse à une des questions que je me posais : qu'est-ce qui pousse les gens à encore raisonner en termes de chef de projet là où il n'y en a plus forcément besoin ?

Y-a-t-il un chef dans le projet ?

Le Valtech Mag nous parle du chef de projet dans un fonctionnement agile. Le sujet mérite que l'on s'y attarde car, comme le dit à juste titre l'article "l’agilité est bel et bien en train de révolutionner le rôle du chef de projet".

The Time Dilation of an Ideal Day

Ideal Day, Story Points, Load Factor, Velocity... Lots of concepts for a simple goal : predicting the amount of work that will get done for a given date. Anybody who went through this kind of measurement system probably tried to grasp its validity. Dave Churchville wonders "How long is an ideal day ?" in calendar time. Ed Gibbs rebounds on the difficulty that people have with story points when time units come more naturally.

I'm no exception. I used plain story points for a while but I recently started to trick this tool to get (I hope) a better matching between the developer estimates and the amount of work units.

Exprimer ses besoins

Il y a quelques temps, dans un billet sur la qualité, j'ai mentionné le rôle que joue l'expression des besoins dans la réalisation d'un produit de qualité. J'y raconte comment les pratiques de XP on-site customer et small release permettent de s'assurer que les attentes exprimées sont les bonnes et que l'on n'en prend pas en compte un trop grand nombre simultanément.

Aujourd'hui, un billet de Claude Aubry qui explique le besoin de prioritisation des exigences lors de la réalisation d'un système m'incite à revenir sur le sujet en réfléchissant à la meilleure façon d'exprimer les attentes d'un client dans une approche agile.

Black-box project management

I love metaphors on project management. I just read a good one by Tom Looy : "How Long is a Piece of String?". You can get an estimate by looking at it but you will get a more accurate value by measuring it with a ruler. Estimating is not an easy job, especially when it comes to predicting when a piece of software is done. In the early stages of a software project, when you can barely estimate and certainly not measure anything, fixing scope, cost and dates is impossible.

Years ago, I was appointed software project manager for the first time. Being a software developer, I intuitively knew that I should be careful with scope, cost and dates issues. I was reluctant to draw a full gannt chart too early in the project because I suspected that people would rely too heavily on it. The projects director I was reporting to told me : "This is not a way to run a project. You must list every task for the project, estimate them and put them in the chart then you will get a release date. From there you will start tracking the team progress". I complied with the order.
Any experienced project manager obviously knows what happened : as the first tasks were not completed on time, the release date started to slip.
The estimates were indeed very bad. Half of the developers had just graduated from university and relying on their estimates was the worst thing to do but the rookie project manager didn't know that.

Now imagine this project is a big black box with 3 levers...

QOTD

Garry Berteig says:
I mentioned an example of agile effectiveness in terms of Visa.
The waterfall example is to have to go to the bank for a loan, fill out forms in a meeting, reschedule for approval, and sign off on contract. On the other hand Visa lets the borrower make the decisions about how much and how often within a predetermined limit.
People go for Visa because it allows for iterations that are self determined, and very frequent compared to a bank loan process.


Il reste à se demander qui est l'équivalent de Cofidis, Sofinco et Finaref...


Dis moi comment tu codes, je te dirai qui tu es

Au cours d'une récente discussion sur xp-france au sujet du recrutement de membres d'une équipe XP a été inévitablement évoqué la question de l'utilisation de tests techniques au cours de la procédure de recrutement.
Je reviens ici sur cette pratique qui me parait essentielle car elle permet d'en dire bien plus long sur une personne que la stricte évaluation des compétences techniques.

Comment être vraiment sûr de recruter un mauvais ingénieur informatique

Vianney Lecroart explique comment recruter un mauvais ingénieur informatique. Dans l'ensemble, les règles décrites dans ce billet me semblent bien illustrer certaines erreurs classiques de recrutement dans le développement logiciel.
Malheureusement, ces règles ont un défaut. Elles laissent transparaître, de manière diffuse, un des travers que l'on retrouve de plus en plus souvent chez les agilistes : la croyance que constituer une équipe de développement consiste principalement à réunir un ensemble de personnes très ouvertes au dialogue et capables d'acquérir les connaissances qu'elles n'ont pas.

Je propose donc ici quelques règles supplémentaires qui peuvent permettre de se laisser définitivement phagocyter par cette idéologie.

Que fait-on dans la dernière itération ?

Dans un billet récent, Claude Aubry rapporte l'existence de plusieurs articles sur l'agilité dans l'édition de juin 2006 de 'Software Test & Performance'. Un de ces articles, signé Dean Leffingwell, décrit les méthodes agiles du point de vue de l'activité de test. Cet article est de bonne qualité, ou presque. Dans la toute dernière partie, celle où l'on décrit le passage de la théorie au monde réel, il y est raconté à quel point il est impossible de tout tester dans chaque itération et que certains aspects du logiciel ne peuvent, en fin de compte, n'être testés qu'à la fin lors d'une itération dite de "durcissement".
S'il est vrai que la dernière itération peut avoir un statut particulier (le RUP parle, par exemple, de phase de transition), on peut légitimement se demander si les activités de test et de correction de bugs décrites dans cet article y ont véritablement leur place. J'ai abordé ce point en commentaire sur le billet de Claude Aubry mais, en réfléchissant un peu, je me suis dit qu'il y avait matière à creuser un peu plus le sujet.

Jardiner agile n'est pas si facile

Hier soir, j'ai regardé une émission de télé-réalité de France 3.
Je n'ai pas pour habitude d'aller chercher des exemples d'agilité ou de non-agilité dans des domaines qui n'ont qu'un très lointain rapport avec le développement logiciel mais, sur ce coup, le discours de certains protagonistes m'a inévitablement fait penser à quelque chose de connu.

To Fix or Not to Fix : That is the Question

Dave Churchville talks about things you should care about when planning bug fixes. I totally agree with his point. On one hand, it does not make sense to implement more and more features without fixing serious hazards first. This is sometimes called creeping featuritis. On the other hand, stopping any shipping till every bug is fixed can make more harm than good : a buggy software can provide more value to the user than no software at all.
I must confess that I had not fully understood the arguments in his first post. Indeed, one of the biggest misconception in software development is that bugs don't need to be prioritized just like any other feature.
That being said, it is a wise decision to let the business, the customer or the product owner, decide if the development team should implement new features or fix a few more bugs. Now the problem is : does the business have enough information to make a good decision ?

- page 4 de 5 -