Gestion des sorties de produits : le retour d’expérience de SoftFluent – 12/12

Les erreurs courantes observées sur le terrain

Cette série de billets vise à partager notre expérience.

Nous avons détaillé notre propre approche et la façon dont nous traitons les différentes dimensions en interne en tant qu’éditeur.

Mais comme nous avons également l’expérience terrain en conseil aux éditeurs de logiciels, nous pensons utiles de répertorier les erreurs communes que nous avons observées sur le terrain et qui peuvent gravement affecter la capacité à maitriser le processus de gestion des produits.

  1. Lier une version du produit à un client particulier : sur le terrain, nous voyons beaucoup d’entreprises qui prétendent être des éditeurs de logiciels, mais en fait, lient fortement les versions du produit à un ou quelques clients. Selon notre expérience, il est très difficile de garder une véritable approche orientée produit quand vous avez une connexion à la clientèle trop forte. Cela aboutit souvent à avoir un développement personnalisé qui est trop spécifique pour le contexte client et ne peut se muer en réel produit.
  2. Placer de trop grandes attentes pour la version 1 : certains éditeurs de logiciels placent la barre très haut dès le début, ou pour leur nouvelle offre dans le cas du lancement un tout nouveau produit. Essayer de répondre à tous les besoins d’une manière très complète dans une première version est vouée à l’échec la plupart du temps.
  3. Démarrer sans une vision minimale du périmètre de vente : a contrario, nous voyons aussi des équipes qui commencent sans avoir une vision réelle du périmètre à atteindre et du produit à vendre. Poussées par les messages axés sur la méthodologie agile, certaines personnes pensent que vous n’avez pas besoin de savoir très bien où vous vous dirigez pour démarrer votre projet. Dans la plupart des cas, cela ne fonctionne pas. De notre point de vue, les méthodologies agiles fonctionnent bien lorsqu’elles sont utilisées comme une méthode de livraison à l’intérieur d’un processus de planification global plus macroscopique.
  4. Négliger la documentation: Parce qu’il n’est pas très amusant d’écrire de la documentation, notamment pour les profils développeur, cette zone n’est pas traitée avec le niveau de qualité approprié. En tant qu’éditeur, vous ne devriez jamais développer une fonctionnalité que vous n’êtes pas prêt à documenter. N’est-ce pas évident exprimé de cette façon ?
  5. Sous-estimer les tests: cette étape est cruciale pour le succès du logiciel. Elle englobe de nombreuses dimensions (voir notre billet précédent sur les meilleures pratiques de tests logiciels) et chaque éditeur devrait y allouer le bon niveau de ressources et d’attention.
  6. Considérer le code comme une production à faible ajoutée : Nous voyons des éditeurs de logiciels qui tentent d’appliquer les recettes de l’industrie avec un schéma simple en disant que toute la valeur réside dans la conception, et que le code peut être confié à des entreprises de services de bas niveau, ces sociétés étant locales, near-shore ou off-shore. C’est peut-être applicable pour certains logiciels de gestion de base qui offrent une large couverture, mais qui restent très simple dans les fonctionnalités et dont celles-ci sont parfaitement définies. Pourtant, la plupart du temps, vous seriez en mesure d’obtenir des résultats beaucoup plus efficaces avec 1/10e de l’investissement avec des ingénieurs logiciels de bon niveau disposant de l’expérience appropriée.
  7. Sous-traiter ce qui n’est pas maîtrisé en interne : nous croyons à la spécialisation et à la sous-traitance. Cela peut s’avérer très utile lorsqu’elle est utilisée correctement. Mais il y a une règle d’or apprise au fil du temps : vous ne pouvez sous-traiter que ce que vous comprenez bien. Vous devez avoir la capacité de piloter et de contrôler le travail de vos sous-traitants, et vous ne pouvez pas faire cela si vous perdez les connaissances de base des éléments clés. Ceci s’applique fortement dans toutes les dimensions du logiciel que vous envisagez de sous-traiter.
  8. Faire un saut technologique sans en mesurer les impacts méthodologiques : nous connaissons malheureusement de près des dizaines de projets qui sont tombés dans ce piège. Malgré la mise en avant des avantages des plates-formes .NET ou Java qui prônent la simplicité, ce n’est pas simple du tout dans la mise en œuvre, et c’est peu productif. Ces plates-formes donnent de nouvelles possibilités techniques et des capacités de connexion inégalées, mais elles sont plus complexes que jamais. Un éditeur passant d’une approche traditionnelle (comme Progress, PowerBuilder ou NSDK pour n’en nommer que quelques-uns) est plus que susceptible d’échouer dans ses nouveaux projets s’il ne mesure pas l’impact du changement technologique. La méthodologie doit être ajustée dans la mesure où les possibilités de mise en œuvre sont nombreuses dans des plates-formes ouvertes telles que .NET ou Java. Trouver le bon équilibre sur de nombreux sujets est plus que délicat et nécessite une réelle expérience sur ces technologies.

En conclusion, nous espérons que l’expérience que nous avons partagée pourrait vous être utile. Ce ne sont que nos points de vue et nous aurons certainement omis quelques points.

Comme nous sommes toujours désireux d’en apprendre davantage, nous nous réjouissons d’avance de vos commentaires sur ces éléments.

Daniel COHEN-ZARDI

SoftFluent, Président

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 11/12

Résumé des outils que nous utilisons

Au vu des nombreuses discussions qui tournent autour de ce sujet, nous vous dévoilons les différents outils que nous utilisons dans notre département R&D

 

Domaine

Outils

Roadmap

Outils internes : listes Excel des modules et fonctionnalités

Conception

Microsoft Visual Studio TFS 2010 et WorkItems en particulier

Développement

Microsoft Visual Studio 2008/2010µ
JetBrain ReSharper
Redgate .NET Reflector.

Intégré dans notre produit : Actipro SyntaxEditor

Documentation

Innovasys HelpStudio & DocumentX.
Outil interne pour schéma « DocMaker »

Test

Outil interne pour automatisation de l’Interface Utilisateur

Gestion des versions

TFS build, outils internes, moteur de template CodeFluent Entities

Gestion des publications

SoftFluent Licensing, directement intégré au site Web

Licences & activation

SoftFluent Licensing. Technologie d’activation interne

Support

WordPress blog, forum, boîte mail dédiée au client

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 10/12

Support Produit

Notre équipe support tire parti de 2 outils majeurs pour vous apporter le meilleur niveau d’information. Premièrement, l’équipe sélectionne des fonctionnalités produit et poste un exemple et une explication sur notre blog produit pour attirer l’attention sur cette fonctionnalité. En vous abonnant, vous apprendrez une nouveauté directement des membres de l’équipe SoftFluent, presque chaque jour.

image13

Au-delà de ce processus de flux d’informations à votre intention, l’équipe support surveille nos forums et fait en sorte que toutes les questions trouvent réponse dans les meilleurs délais. Si cela ressemble à un dysfonctionnement, nous essayons de reproduire le problème, s’il est avéré, nous le remontons à la R&D.

Si la question est plus ouverte, ou liée à la conception et que vous avez besoin de l’aborder différemment, notre équipe peut vous proposer des solutions pour étudier la question. Si nécessaire, vous pouvez également avoir recours à quelques heures de consulting moyennant facturation pour vous aider à implémenter une solution complète.

Nous obtenons des retours positifs sur notre réactivité et travaillons dur pour maintenir ce niveau car nous savons que c’est un facteur clé de réussite pour un produit ciblant les développeurs comme CodeFluent Entities.

image14

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 9/12

Gestion des publications ou “release”

SoftFluent met en œuvre ses propres mécanismes de protection des licences incluant les mécanismes d’activation et d’‘obfuscation’.

Lorsqu’une version est produite et qu’elle a passé les tests de qualité, nous la publions. C’est ce que vous pouvez voir lorsque vous téléchargez CodeFluent Entities. Les versions avec le drapeau vert sont considérées comme valides et ayant passé tous les tests.

image10

De notre côté, nous avons une application de gestion des licences grâce à laquelle nous pouvons gérer les publications sur le web ainsi que les différentes informations relatives à la mise en disposition des clés.

C’est là que nous pouvons ‘upgrader’ une licence personnelle en une version commerciale par exemple et modifier les métadonnées associées. C’est également l’outil qui nous permet d’activer manuellement une licence si vous choisissez l’option basée sur l’email.

image11

Un autre élément intéressant de notre processus de gestion des sorties est le "blog de mise à jour du produit". Sitôt qu’un développeur termine un élément de travail défini comme "public", il documente la modification avec un commentaire prêt pour l’utilisateur, qu’il s’agisse d’une nouvelle fonctionnalité ou d’une correction de bogue. Ce commentaire alimentera directement le fil RSS de "mise à jour produit", donnant à l’utilisateur toute l’information sur ce que contient une nouvelle version.

image12

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 8/12

Gestion des versions

Le processus de gestion des versions est également l’un des principaux piliers pour le succès de la gestion des publications.

Nous pouvons lancer la production d’une version presque n’importe quand, ce qui signifie que nous effectuons le check-in/check-out en évitant les ruptures. Nous n’effectuons pas de fabrication continue de version car nous ne voyons pas de bénéfices à le faire dans notre cas.

Le fait est que nous publions des versions dès l’instant où nous avons mis en œuvre un ensemble cohérent de fonctionnalités et au minimum, toutes les 6 semaines.

Le processus de version géré par Team Foundation Server version prend en charge les éléments suivants :

· construction des binaires

· occultation des binaires ‘obfusqués’

· authentification des binaires en utilisant un certificat de notre société (Authenticode)

· création des fichiers d’installation (.MSI) et aussi la signature utilisant Authenticode. Nous utilisons WIX (http://wix.sourceforge.net) pour générer les fichiers MSI. Les fichiers WIX sont en fait générés dynamiquement pour inclure automatiquement les nombreux fichiers que nous avons besoin d’envoyer avec le produit et dont le nombre varie en fonction de la version.

L’ensemble du processus gère également les variations Debug & Release comme les plateformes cibles 32-bit et 64-bit (voir CodeFluent Entities & Bitness pour une étude prospective.).

Le processus de version repose sur Team Foundation Server comme illustré sur la copie d’écran ci-après :

image9

Dès l’instant où nous avons livré une nouvelle version, nous effectuons des tests de plateforme et de programmes d’installation sur les diverses combinaisons d’environnements.

Nous n’utilisons pas forcément toutes les variantes possibles mais nous les mélangeons de sorte d’être certains de tester :

· Différents OS incluant le 32 et le 64-bit,

· Différentes versions de langue,

· Différentes versions de base de données (SQL 2005 à 2012),

· Différentes versions de Microsoft Visual Studio (nous supportons 2008, 2010 et 2012).

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 7/12

Documentation du logiciel

Notre processus de documentation est très étroitement lié à notre processus de développement.

Immédiatement après avoir développé une fonctionnalité, nous rédigeons la partie concernée de la documentation. Pour cela nous utilisons Innovasys HelpStudio et nous générons la documentation de référence en utilisant DocumentX. Toutefois, pour automatiser au maximum, nous avons aussi écrit un outil personnalisé (DocMaker CodeFluent) pour créer les fichiers concernant tous les schémas XML utilisés par le produit.

Tout cela fonctionne bien dès l’instant où vous avez la bonne discipline de développement en mettant les commentaires à l’endroit approprié dans les fichiers de code.

La documentation est générée en tant que :

· Fichier .CHM,

· fichier HXS,

· PDF d’environ 1.000 pages,

· Et publiée directement sur notre site.

image8

Nous avons de plus décidé de rendre publique notre documentation pour 2 raisons :

• Nous voulons que tous les développeurs voient les possibilités très étendues de notre produit,

• Nous bénéficions de l’indexation Google, les développeurs CodeFluent Entities peuvent facilement trouver les réponses aux sujets CodeFluent Entities en faisant des recherches "plein-texte" sur Google ce qui est naturel pour un développeur.

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 6/12

Test & Assurance Qualité

Nous avons un produit étendu ce qui signifie une grande complexité à tester toutes les différentes combinaisons d’options. En raison de cette complexité, nous avons réalisé rapidement que le recours à des testeurs classiques – même situé en offshore – serait prohibitif et exigerait beaucoup de temps pour valider chaque nouvelle version.

C’est pourquoi nous avons décidé d’investir de manière conséquente dans l’automatisation de la plupart de nos tests. Nous avons fait cela assez tôt pour la 1ère version de CodeFluent Entities (la version "Core" basée sur XML sans le Modeler graphique intégré à Visual Studio) et cela nous permet de comparer les fichiers générés par différentes versions.

A chaque version, nous générons de nombreux modèles, les modèles échantillons livrés avec le produit, des modèles qui ont été conçus pour utiliser toutes les options du produit et maximiser la couverture de nos tests et les modèles de projets clients réels afin de limiter au maximum les risques de régression.

Ensuite nous déroulons les résultats de ces tests automatisés et le rapport de test nous souligne les différences (voir ci-dessous). Parfois ces différences sont normales (un changement qui a été décidé par exemple) mais si ce n’est pas le cas, nous pouvons identifier rapidement un dysfonctionnement et réaliser une correction avant de publier la version.

image5

Depuis que nous avons développé le modeleur graphique, nous devons également faire des tests sur l’interface utilisateur. Cela s’avère d’autant plus délicat que les outils classiques de test d’interface utilisateur ne sont pas très résistants aux changements réels qui se produisent pendant le processus de développement. Si un contrôle est déplacé vers une position différente sur l’écran, il est probable qu’il faille réécrire le scénario, etc…

Nous avons donc construit notre propre framework de test pour introduire les concepts spécifiques à notre produit et proposer une API pour créer des scénarios de tests qui peuvent être programmés et rejoués sur l’interface utilisateur.

image6

En fait, nous nous appuyons sur les 2 briques en bleu qui sont fournies par Microsoft (et sont disponibles de base sur chaque installation de Windows), mais nous avons développé le framework suivant les couches décrites ci-après :

· Manipuler les concepts de scénario typiques, indépendants de tout produit : session, login, traçabilité, copies d’écran, souris, clavier etc… (Automatisation SoftFluent)

· Encapsuler les principaux éléments de l’interface utilisateur de Visual studio comme explorateur de solutions, la grille de propriété, la dialogue nouveau projet, menu principal etc… (Automatisation Visual Studio)

· Encapsuler les principaux éléments de l’interface utilisateur du modeleur graphique de CodeFluent Entities : ruban, menu principale et boîtes de dialogue spécifiques (Automatisation CodeFluent Entities Automation)

Notre scénario de test utilisateur final tire ensuite parti de ces couches pour simuler des actions sur l’interface utilisateur et nous pouvons jouer des scénarios complexes pendant des heures sur des machines différentes afin de maximiser notre couverture de test.

Notre outil enregistre tout ce qui se passe et prend une image de l’écran chaque fois que nous le demandons ou lorsqu’une erreur se produit (voir ci-dessous).

image7

C’est une approche très puissante dans la mesure où le travail n’est pas à refaire à chaque génération. Bien sûr, le scénario est testé ce faisant, et les erreurs relèvent parfois autant du scénario que du produit mais cela aide énormément à trouver rapidement les problèmes et à converger dans un temps court. Sans une bande passante humaine énorme, nous pouvons détecter la plupart des régressions susceptibles de se produire. Du coup, notre base de bogues connues reste proche de zéro, et est constituée essentiellement d’une zone tampon alimentée par le support.

Les tests d’utilisation sont également un domaine auquel nous pensons pour améliorer l’ergonomie et s’assurer que les développeurs aient la meilleure expérience avec notre produit dès la première utilisation. Nous prévoyons d’investir sur ce sujet dans le futur.

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 5/12

Développement

Notre processus de développement est itératif. Ce n’est pas une méthodologie agile purement académique, mais nous appliquons quelques uns des principes que nous affectionnons dans les approches agiles. Nous nous organisons pour rendre publique une nouvelle version toutes les 4 ou 6 semaines.

Nous réussissons à la faire en utilisant des estimations approximatives et en regroupant les fonctionnalités et les corrections de bogues qui relevant du même sujet. En fonction de la rapidité avec laquelle nous les implémentons, nous profitons parfois de l’opportunité qui nous est donnée d’intégrer des fonctionnalités mineures qui étaient planifiées plus tard.

Nous effectuons des revues de code, pas seulement par les pairs mais aussi avec l’œil neuf et non complaisant du Directeur technique. Cela garantit que non seulement nous avons atteint les résultats escomptés mais aussi que les règles de code sont respectées notamment pour tout ce qui concerne la capacité de maintenance et d’évolution.

Nous utilisons également des outils et générons une partie du code lorsque c’est approprié. Dans certains domaines, CodeFluent Entities est construit en utilisant CodeFluent Entities, ce qui est une conséquence classique de l’approche de génie logiciel.

Avec toutes les plateformes et les architectures cibles que nous supportons, le produit comprend maintenant 48 projets différents et environ 600 000 lignes de code écrit à la main (sans compter les blancs et le code généré bien sûr).

image4

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 4/12

Conception Produit

Au sein d’un module spécifique, la conception produit est le processus qui détaille les fonctionnalités et le comportement que le produit devra avoir pour les différents.

Nous suivons une approche très simple. Nous écrivons des spécifications courtes qui décrivent les scénarios clients que nous voulons supporter. Nous n’allons pas loin dans les détails de l’interface utilisateur dans la mesure où nous avons un produit orienté développeur, mais nous le faisons lorque cela s’avère pertinent pour aligner toute l’équipe sur les décisions clé. Nous l’avons fait pour notre assistant de démarrage par exemple.

En fait, au sujet des spécifications, nous sommes de fervents croyants dans le fait que presque tout le monde devrait être en capable de les lire sans utilisation d’un formalisme crypté ni de diplôme en modélisation UML. Notre philosophie sur ce sujet est d’ailleurs résumée dans un article précédemment publié sur notre blog en anglais : Formalizing specifications.

Spécifications

Nous créons des scénarios de test et, en raison de notre offre, cela signifie souvent de mini-applications utilisées comme échantillons pour illustrer la fonctionnalité. A certains stades, nous avons l’habitude de discuter les scénarios dans la mesure où nous avons 1.000 idées différentes de fonctionnalités possibles que, malheureusement, nous ne pouvons pas toutes mettre en œuvre.

Pour les bogues qui sont détectées par l’équipe du support (ou par des clients qui contactent le support) ils sont reproduits dans un 1er temps, pour être complètement qualifies et envoyés à la R&D avec les conditions exactes pour reproduire la bogue. Nous planifions ensuite la correction et intégrons ce cas dans nos scénarios de test.

En fin de compte, l’implémentation de fonctionnalités et les demandes de correction finissent comme "élément de travail" dans l’outil Team Foundation Server de Microsoft et sont distribués au sein de l’équipe de R&D.

Gestion des sorties de produits : le retour d’expérience de SoftFluent – 3/12

Gestion de la feuille de route et planification

Ce planning est essentiellement géré par un comité dédié. Chaque mois se tient une réunion de 2 heures dans laquelle nous :

1. Examinons les modules en cours

2. Approfondissons certaines fonctionnalités lorsqu’il est nécessaire d’affiner les limites d’un module spécifique,

3. Discutons des modules à venir et mettrons à jour la liste des priorités si nécessaire

4. Discutons des demandes orientées client importantes quand elles sont alignées avec notre feuille de route.

Sur ce dernier point, ci-après quelques exemples de demandes client valident selon notre point de vue :

· Dans le passé, l’ajout de la base de données Oracle, notre produit CodeFluent Entities supportant un nouveau producteur de base de données Oracle, était aligné avec une demande client. Nous savions qu’il souhaitait cet ajout mais nous avons attendu qu’il est un vrai projet à mettre en œuvre. De cette façon nous étions sûrs que le module développé serait rapidement en production avec de vrais retours immédiats. En tant qu’acteur de l’écosystème Microsoft avoir un retour de client sur Oracle était vraiment crucial.

· Nous avons aussi ajouté le support de Visual Basic pour la couche intermédiaire générée par CodeFluent Entities (aka Business Objet Model) en fonction de retours cohérents de clients. Ce n’est pas lié à un client en particuliers mais à plusieurs demandes de clients au travers de la communauté. De même nous avons prévu les producteurs MySQL et PostgreSQL pour l’année 2012.

· A l’avenir nous pourrions envisager de générer du code en Java, cela nous ouvrirait un marché plus large notamment dans des zones géographiques où Microsoft est inexistant, mais l’investissement étant ambitieux, nous ne l’avons pas fermement planifié, ce que nosu pourrions faire si plusieurs clients engageaient un budget pour cela.

· En revanche, si un client nous demande d’implémenter une fonctionnalité spécifique dans le BOM, comme par exemple de modifier le ‘caching’ nous n’allons pas le mettre dans notre feuille de route tout de suite. Nous allons lui expliquer comment faire cette extension lui-même ou lui proposer de le faire sous forme de mission de conseil.

En fin de compte, nous formalisons notre feuille de route à l’aide de 2 outils :

· De simples listes Excel de modules et de fonctionnalités, synchronisées avec une base centrale (ces listes ont été développées grâce à notre produit qui fournit cette intégration),

· Une diapositive visuelles qui résume les modules livrés et veux à venir. Il peut paraître inhabituel de détailler ce qui a été fait dans le passé et le timing, mais nous pensons que c’est important dans notre cas dans la mesure où la valeur de notre offre est de digérer les technologies Microsoft à un rythme pertinent. La diapositive ci-dessous le démontre donc de manière concrète.

image2

Suivre

Recevez les nouvelles publications par mail.

Joignez-vous à 30 followers