Après avoir brièvement entendu parlé de WinDev et étant incapable de trouver des critiques basées sur des faits, j'étais sceptique et j'ai donc décidé de faire quelques essais. Aujourd'hui, je ne suis plus sceptique, alors je publie cette critique afin d'aider ceux qui se demandent si WinDev est vraiment une bonne idée.
Soyons clair, je ne vais pas passer mon temps sur les avantages de WinDev. Je ne vais pas non plus passer en revue tous ses inconvénients, car selon moi, ils sont trop nombreux et il y a aussi de nombreux plantages/défauts pour lesquels je ne peux pas fournir un scénario de test pour les reproduire. Je vais donc me concentrer sur les quelques éléments qu'un développeur qui veut « développer 10 fois plus vite » s'attendrait normalement à voir aujourd'hui en 2014. Cet avis n'est donc qu'une présentation de faits pour vous donner une idée de la vraie philosophie des produits PC SOFT.
Tous mes tests ont été effectués avec WinDev 17 et plus précisément :
- Produit concerné : WinDev 17.0
- Version interne : 01F170078n
- Version du produit : 17.0.203.0
Philosophie
Alors que de nombreux outils de développement sont développés par des entreprises spécialisées, WinDev développe un écosystème tout-en-un notamment composé de :
- un langage de programmation appelé WLangage et un ensemble de bibliothèques logicielles,
- un SGBDR (Système de gestion de base de données relationnelle) nommé HyperFileSQL,
- un IDE (Integrated Development Environment),
- un système de gestion des sources.
WinDev n'essaie pas seulement de vous faire « développer 10 fois plus vite » avec un seul de ces outils, mais avec chacun d'eux. C'est un défi très ambitieux pour une seule entreprise. Cela ne prouve rien mais gardez ça à l'esprit !
Licences
Tout l'écosystème est la propriété exclusive de PC SOFT et tout est fortement cloisonné. Je ne vais pas m'étendre sur les inconvénients des logiciels privateurs et des formats fermés sauf pour illustrer un exemple concret.
Les formats de fichier sont propriétaires et fermés, cela signifie que vous ne pouvez pas ouvrir un fichier source avec un éditeur de texte basique, cela aurait pour conséquence de projeter un paquet d'octets illisibles sur votre écran. Vous ne pouvez donc pas utiliser d'outils tierces comme votre éditeur de texte favori (vim, Emacs, Notepad + +, etc) ou votre système de gestion de sources préféré (git, mercurial, etc.). Autrement dit, vous êtes forcé d'utiliser leurs éditeurs et leur système de gestion de sources.
Coût
L'écosystème WinDev de base est payant. Si vous voulez quelques options « supplémentaires », vous devrez également payer un supplément. C'est le cas par exemple si vous souhaitez acquérir l'outil d'internationalisation pour extraire toutes les chaînes de textes de votre projet afin de les fournir aux traducteurs de votre application. Le package de base promettant de « développer 10 fois plus vite », je ne m'attendais pas à voir cet outil dans les options supplémentaires. Mais n'ayez pas d'inquiétudes, si vous n'avez pas cet outil, vous pouvez toujours internationaliser votre application ... en remplissant manuellement et individuellement chaque formulaire correspondant à chacune des traductions ... ou demander aux traducteurs de le faire eux-même tout en leur précisant d'être très prudent avec le code source de l'ensemble du projet.
Si vous n'utilisez pas la dernière version de l'année en cours, vous devez payer pour le support technique ou tout simplement l'éviter. Et ce même si vous leur fournissez un scénario simple pour reproduire un crash de leur IDE. Mais vous pouvez toujours demander à d'autres utilisateurs sur le forum PC SOFT qui, par ailleurs, est soumis à une modération à priori (http://forum.pcsoft.fr/fr-FR/pcsoft....lasse/read.awp).
Qualité
J'ai trouvé plusieurs erreurs dans la documentation. Voici un exemple (http://doc.windev.com/en-US/?6010002...tiation_object, https://web.archive.org/web/20140324...tiation_object) :
La variable gpo est mystérieusement renommée gpo1 et le dernier commentaire est faux, o3 est détruit, du moins si on en croit la version française de la page (http://doc.pcsoft.fr/fr-FR/?6010002&...nciation_objet, https://web.archive.org/web/20140324...nciation_objet).
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13 // declaration code of global variables gpo is Class1 dynamic gArr is array of Class1 dynamic // any code o1, o2, o3 are Class1 gpo1 = o1 Add(gArr, o2) // at the end of the process // o1 is not destroyed because it is referenced by the global variable gpo // o2 is not destroyed because it was added to the gArr array // o3 is not destroyed because there is only the local reference
Toujours à propos de la qualité, PC SOFT est également impliqué dans le web avec son produit WebDev. Je ne sais pas si ils utilisent leur produit pour leur propre site web, mais en tout cas, ils ne semblent pas vraiment préoccupés par les normes W3C :
- http://validator.w3.org/check?uri=ht...Inline&group=0
- http://validator.w3.org/check?uri=ht...Inline&group=0
Selon moi, cela révèle certaines méthodes de travail au sein de PC SOFT et en particulier l'absence de vérification de leur documentation. Peut-être préfèrent-ils investir d'avantages de temps dans le sujet suivant de cet article.
Femmes
Je comprends que l'utilisation des femmes peut aider à vendre du chocolat ou des voitures à un consommateur lambda, mais quand il s'agit d'ingénierie logiciel, je ne le comprends pas et je le prends même comme une insulte. Mais après tout, mettre l'accent sur ces dames plutôt que sur les éléments techniques aide peut-être à « développer 10 fois plus vite » ;-)
Références
Malgré un catalogue de témoignages conséquent (http://www.pcsoft.fr/pcsoft/120pages...gnagesWDWB.pdf), je n'ai jamais entendu parler d'un logiciel grand public (éditeur de texte, navigateurs, lecteur multimédia, …) réalisé avec WinDev.
On notera également que les illustrations du catalogue sont beaucoup plus axées sur les produits des clients de PC SOFT que les applications réalisées avec WinDev, WebDev et WinDev Mobile ! Ça me rappelle le point précédent !
Technique
Verbosité et confusion
« Explicite » est mieux que « implicite » et je suis totalement d'accord avec cela, je n'ai pas de problème avec les instructions à rallonge tant qu'elles améliore la lisibilité du code. Je préfère « numberOfCars » comme nom de variable plutôt que « number » ou pire « i ».
Cependant, les langages de programmation ne sont pas les langages naturelles et ne sont donc pas destinés à être parlé. En tentant cela malgré tout, le WLangage utilise différentes variantes de mots clés inutiles afin de pouvoir lire le code comme un langage naturel. Cela se traduit en un échec qui alourdit inutilement le code avec des mots clés n’ayant aucunes implications techniques et qui, par conséquent, ajoute de la confusion et/ou augmente le temps d'apprentissage du langage.
Par exemple, je peux déclarer quelques chaîne de caractères en procédant comme suit:
Vous voulez plus de choix? Codez en français ! Oui, tous les mots clés (ou presque) sont disponibles en anglais et en français.
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17 MyString1 is string MyString2 is a string MyString3 is strings MyString4 is a strings MyString5 are string MyString6 are a string MyString7 are strings MyString8 are a strings MyStringA1, MyStringB1 is string MyStringA2, MyStringB2 is a string MyStringA3, MyStringB3 is strings MyStringA4, MyStringB4 is a strings MyStringA5, MyStringB5 are string MyStringA6, MyStringB6 are a string MyStringA7, MyStringB7 are strings MyStringA8, MyStringB8 are a strings
Encore plus de choix? Je vous laisse faire le mélange des mots-clés français et anglais au sein d'une même instruction et de profiter de l'une des capacités les plus inutiles de WinDev !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25 MyString1 est chaîne MyString2 est une chaîne MyString3 est des chaîne MyString4 est chaînes MyString5 est une chaînes MyString6 est des chaînes MyString7 sont chaîne MyString8 sont une chaîne MyString9 sont des chaîne MyString10 sont chaînes MyString11 sont une chaînes MyString12 sont des chaînes MyStringA1, MyStringB1 est chaîne MyStringA2, MyStringB2 est une chaîne MyStringA3, MyStringB3 est des chaîne MyStringA4, MyStringB4 est chaînes MyStringA5, MyStringB5 est une chaînes MyStringA6, MyStringB6 est des chaînes MyStringA7, MyStringB7 sont chaîne MyStringA8, MyStringB8 sont une chaîne MyStringA9, MyStringB9 sont des chaîne MyStringA10, MyStringB10 sont chaînes MyStringA11, MyStringB11 sont une chaînes MyStringA12, MyStringB12 sont des chaînes
Cependant, de façon surprenante, aucune des formes simplifiées ci-dessous n'est autorisée :
Maintenant, passons aux choses sérieuses. Je viens de parler des types de variable définis par le système, mais supposez que je code en français et que j'ai créé la classe « Animal », voici ce que je peux écrire :
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 MyString1 string MyString2 chaîne
et voici ce que je ne peux pas écrire:
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3 Animaux est un tableau de 13 Animal Animaux est un tableau de 13 objet Animal Animaux est un tableau de 13 objets Animal
Dommage, nous avions presque atteint la perfection !
Code : Sélectionner tout - Visualiser dans une fenêtre à part
1
2 Animaux est un tableau de 13 Animals Animaux est un tableau de 13 Animaux
Gestion de la mémoire
Examinons un extrait de la documentation (http://doc.pcsoft.fr/fr-FR/?6010006&...oprietes#NOTE4) :
Je suppose que c'est ce qui se passe quand il n'y a pas de distinction claire entre ce qu'on appelle en C++ : variables, références et pointeurs.Lors de copies d'instances de classes, tous les membres de la classe sont recopiés dans la nouvelle instance, sauf les tableaux. Ainsi, si la valeur d'un membre de type tableau est modifiée, cette valeur est modifiée dans toutes les instances.
Et à cause de l'absence de différentes syntaxes (et les explications qui vont avec) entre les concepts de variable, référence et pointeur, vous pouvez potentiellement planter votre application lors de chaque accès à un membre d'une prétendue variable qu'une autre portion du code source aura transformée en sorte de pointeur null. Je vous laisse imaginer ce qui arrive à un développeur reprenant un gros projet codé façon spaghetti : le WLangage n'est pas son meilleur allié !
Recherches textuelles
La recherche de texte n'est-elle pas une des fonctions les plus importantes d'un éditeur de code ? J'ai essayé en vain de trouver une recherche de texte par expression régulière. Malheureusement, parce que le code source du projet utilise des formats de fichiers non standards, j'ai également dû accepter l'idée que l'utilisation d'expressions régulières ne me serait tout simplement pas possible.
Mélange des concepts généraux
Dans les produits PC SOFT, il règne une profonde confusion entre le concept de jeu de caractères et celui d'encodage de caractères. Par exemple, la documentation redéfinit le terme UNICODE comme ceci (http://doc.pcsoft.fr/fr-FR/?3024038&...nes_caracteres) :
Je suggère à PC SOFT de consulter cet article : http://www.joelonsoftware.com/articles/Unicode.html.L'UNICODE est un système de codage spécifiant un nombre unique pour chaque caractère. Ce codage est réalisé sur 16 bits. Ce nombre est lisible quelle que soit la plate-forme, le logiciel et la langue utilisée.
Gestion des sources
Aujourd'hui en 2014, pour « développer 10 fois plus vite » au sein d'une équipe, j'aurai tendance à choisir un système de gestion de sources décentralisé (DVCS) plutôt que centralisé. Malheureusement, WinDev ne me laisse pas le choix.
Conclusion
Ces précédents points ne sont que quelques exemples de ce qui ne m'aide pas à « développer 10 fois plus vite » avec WinDev.
Je veux juste ajouter, très honnêtement, que vous pouvez certainement construire un excellent logiciel avec WinDev. Cependant, ce n'est pas parce que vous pouvez faire quelque chose de formidable avec un outil que ça en fait un outil approprié. WinDev me rappelle ce billet de blog : « PHP: a fractal of bad design » (http://me.veekun.com/blog/2012/04/09...of-bad-design/). Et pourtant, Facebook a bien commencé avec du PHP. Cela dit, je n'ai jamais entendu parler d'un logiciel de type Facebook fait avec WinDev.
En conclusion, relativement à l'offre actuelle en terme d'outils de développement, j'affirme fermement que WinDev n'est pas un outil approprié pour réaliser un logiciel solide et durable.
Partager