IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Windev Mobile Discussion :

Avis sur code Windev


Sujet :

Windev Mobile

  1. #1
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut Avis sur code Windev
    Bonjour


    Pour un projet de StartUp, nous avons fait appel à un développeur qui a choisi WindevMobile développer notre application. N'étant pas nous même compétants en informatique nous souhaiterions un avis d'autant que nous rencontrons des difficultés sur ce projet (retard, livraisons non fonctionnelles,...)


    Il s'agit d'une application mobile qui ne gère pas une base de donnée mais qui au travers de multiples interaction avec un utilisateur déroule un arbre de décision complexe pour fournir une prédiction.

    L'arbre de décision est composé d'une cinquantaine de sous-arbres ayant chacun plusieurs étapes incluant des tests, des boucles,... chaque étape nécessitant une interaction avec l'utilisateur, et manipulant de nombreuses données structurées).
    L'application manipule divers concepts métier notamment des mesures d'optique composées de 3 valeurs (sphère cylindre axe) qui sont toujours manipulées ensemble.



    Je me pose plusieurs questions :

    Windev est-il l'outil le plus adapté pour ce type d'application, sachant qu'il ne s'agit pas de gérer une base de donnée mais des interactions utilisateur, de combiner de multiples données structurées et de dérouler des arbres de décision complexes et de communiquer en bluetooth avec un hardware ?

    J'ai pu me procurer une petite portion de code du projet et je souhaiterai avoir un retour sur la qualité du code.
    Au regard des difficultés que nous rencontrons sur ce projet (retard, application non fonctionnelle,...) peut-on se faire un avis sur le reste de l'application à partir de ce code ? Doit-on s'inquiéter ou le projet peut-il aboutir ?

    La portion de code est une procédure qui réalise l'addition de deux mesures optiques dont l'une est une constante (sphere=0, cyl=-0.5, axe=90) en l’occurrence elle ne fourni pas le résultat attendu et le développeur ne comprend pas pourquoi, mais ma question n'est pas de trouver pourquoi ça ne marche pas, mais est ce que sa démarche de développement est "professionnelle" et est ce qu'on a une chance d'obtenir une application fiable et commercialisable.


    Un grand merci d'avance pour votre aide et votre regard extérieur.

    Nathalie


    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
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    PROCEDURE Kerato(oeil,Cylindre1,Axe1)     
    // Cylindre1 et Axe1 = > astigmatisme cornéen reçu en paramètre Cylindre1 et Axe1
    // œil => détermine si le calcul porte sur l'œil droit "OD" ou gauche "OG"
    // Valeurs d'Ajout  +(-0.50)90°  à l'astigmatisme cornéen
    nSphere2 est un entier = 0 
    Cylindre2 est un monétaire = - 0.50
    Axe2 est un entier = 90
     
    NouvelAxe est un monétaire
    NouveauCylindre est un monétaire
    NouvelleSphere est un monétaire
     
    Cylindre1_x_sin2Axe1 est un monétaire = (Cylindre1 * Sinus(2 * Axe1))
    Cylindre2_x_sin2Axe2 est un monétaire = (Cylindre2 * Sinus(2 * Axe2))          
    Cylindre1_x_cos2Axe1 est un monétaire = (Cylindre1 * Cosinus(2 * Axe1))
    Cylindre2_x_cos2Axe2 est un monétaire = (Cylindre2 * Cosinus(2 * Axe2))      
     
    NouvelAxe = ArcTang((Cylindre1_x_sin2Axe1 + Cylindre2_x_sin2Axe2) / (Cylindre1_x_cos2Axe1 + Cylindre2_x_cos2Axe2)) / 2  
     
    // conversion de radian en degrés 
    NouvelAxe  = (180 * NouvelAxe)/ ValPI 
    // Traitement axe négatif 
    SI NouvelAxe < 0 ALORS
     NouvelAxe = ((1 - (Abs(2 *NouvelAxe)/(2 *NouvelAxe))) * 90) + (2 * NouvelAxe)
    SINON
     SI  NouvelAxe = 0 ALORS
     NouvelAxe = ((1 - 0) * 90) + (2 * NouvelAxe) 
    FIN
    FIN
    moCos01 est un monétaire = Cosinus (2*(NouvelAxe - Axe1))
    moCos02 est un monétaire = Cosinus (2*(NouvelAxe - Axe2))
     
    NouveauCylindre = Cylindre1 * Cosinus (2*(NouvelAxe - Axe1)) +  Cylindre2 * Cosinus(2*(NouvelAxe - Axe2))
    NouvelleSphere = (Cylindre1 + Cylindre2 - NouveauCylindre) / 2 
     
    // Astigmatisme Total Attendu (Cornéen + Interne) => ATA
    //Bascule du résultat en mémoire
    SI oeil = "OD" ALORS                                                        
     gmoOD_ATA_Sphère = NouvelleSphere                          
     
     gmoOD_ATA_Cylindre  = NouveauCylindre                     
     gnOD_ATA_Axe = NouvelAxe                                          
    SINON  
     gmoOG_ATA_Sphère = NouvelleSphere                         
     gmoOG_ATA_Cylindre  = NouveauCylindre                 
     gnOG_ATA_Axe = NouvelAxe
    FIN

  2. #2
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Mon avis (personnel) sur l'utilisation de Windev Mobile vs développement natif :
    - s'il s'agit de faire un développement multi plateformes (Android, IOS), WM présente l'énorme avantage de ne pas avoir à maîtriser les deux éco-systèmes
    - en Android (sujet que je maîtrise), pour faire une application simple WM présente l'avantage d'offrir un développement très rapide en utilisant les fonctions offertes par le framework WM (attention dans ma remarque : un développeur Android aguerri peut aller sans doute aussi vite s'il maîtrise les outils Google)
    - si des fonctions ne sont pas offertes par le framework, l'avantage de WM est que l'on peut inclure des modules java natif (cela a été mon cas en particulier pour les fonctions liées au GPS)
    - autre avantage également: dans mon cas, j'avais une préparation de données à faire sur PC, et donc quasi tout le soft "technique" a pu être testé avant sur PC en WD :-), et énorme avantage, les bases de données HFSQL étaient portables de Windows à Android directement
    - PCSOFT fait vraiment un gros job pour offrir une solution facile à manier et à faire évoluer, avec des fonctionnalités qui intègrent progressivement toutes les fonctionnalités du SDK Android (typiquement le gradle par exemple ...)

    Par contre inconvénients :
    - pas de debug en exécution sur "cible" ; il faut bien déverminer son code avant ou alors utiliser les fonctions de trace via ADB (Android Debugger)
    - pour des trucs "pointus" (de plus en plus rare), il faut inclure du code java natif

    Des points sur lesquels je me pose des questions :
    - réactivité : en WM pour WCE, il était clair que cela se voyait, mais maintenant avec des processeurs puissants dans les smartphones, le différentiel est peut être imperceptible
    - autre sujet délicat : évolution relative du SDK Android avec WM -> Google fait ce qu'il veut, et il est donc nécessaire d'avoir un WM à jour pour que cela suive (des tonnes de post dans ce site sur les pbs rencontrés entre un vieux WM et un SDK Android à jour)

    En résumé, le bon outil est celui que l'on maîtrise ;-) ....

    Maintenant, le souci du code fourni :
    - quel est l'âge et l'expérience du développeur : si c'est un apprenti, faut pas lui demander la lune par exemple ...
    - pour une fonction qui doit renvoyer une donnée, il faut la déclarer en "FONCTION" et ne pas oublier de renvoyer la donnée calculée en fin avec "RENVOYER DonneeCalculeeParExemple"
    - l'utilisation de "Monétaire" pour un réel est space .... si vous vouliez de la précision, un REEL SUR N octets était plus judicieux....

    PS : cliquer un pouce si ma réponse vous satisfait (il y a longtemps que mon compteur n'a pas incrémenté :-) .. )

  3. #3
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Bonjour,
    Bien que windev ne permet pas de gérer les "pointeurs", notion très importante pour représenter des structures dynamiqus (arbre liste pile...etc), il est toute fois possible de s'en passer pour représenter une structure arborescente de manière dynamique. J'ai eu à appliquer des algorithmes sur une structure arborescente à l'aide de windev. Ça n'a pas été évident au départ étant donné que la notion de pointeur n'existe pas. Cependant, on peut toujours trouver des moyen pour contourner cette contraintes.
    Pour ce qui est du code, il est difficile de l'évaluer étant donné que aucune info sur la méthode de calcul n'a été fournie. Ceci dit, je vous conseil de calculer sur un exemple de données à la main (papier et crayon et calculette). Voir les résultats intermédiaire,afficher ces résultats dans le code et les comparer. Vous saurez ainsi ou est ce que ça cloche.
    Si vous avez besoin d'un freelancer pour ce travail, je suis à votre disposition.
    Bien à vous.
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  4. #4
    Membre éprouvé
    Homme Profil pro
    Responsable des études
    Inscrit en
    Février 2010
    Messages
    553
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Responsable des études
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Février 2010
    Messages : 553
    Points : 1 075
    Points
    1 075
    Par défaut
    Si vous avez WD, débugger sur PC pour les fonctions techniques complexes. Ici c'est vraiment très simple, mais il peut être judicieux de faire du debug des calculs avant de l'intégrer.

    Utiliser aussi le GDS !!!! pour partager les modules de calcul entre les projets WD et WM : je le fais tous les jours. Super utile (par exemple pour traiter des trames NMEA ...)

  5. #5
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci pour ces réponses.


    Courdi95 , le développeur se présente comme sénior expérimenté (+de 50 ans).
    La chose est qu'au bout de 9 mois de dev a plein temps, l'appli plante beaucoup, ne fait pas encore grand chose (env 10% de ce qu'elle devrait faire). Du coup on a des doutes sur sa maitrise du sujet.
    Tu écris "pour une fonction qui doit renvoyer une donnée, il faut la déclarer en "FONCTION" ...." mais est ce qu'une fonction peut retourner plusieurs valeurs ? Ici sphere, cynlindre, axe ?

    b_reda_31, est ce que les pointeurs sont la même chose que les objets ? Certaines personnes me disent qu'il faudrait utiliser des objets. Qu'en est-t-il ? Est ce qu'on peut utiliser les objets avec Windev?

  6. #6
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    9 mois sur l'appli telle que vous l'avez présentée, ça paraît beaucoup. Ceci étant, il y a peut-être des aspects complexes qui n'apparaissent pas dans votre description.
    La POO (Programmation Orientée Objet) est tout à fait possible avec Windev. Il y a peut-être de légères lacunes, mais pas bloquantes. Le truc, c'est que la POO n'était pas enseignée aux informaticiens des années 80, ceux qui ont 50 ans aujourd'hui. Ce n'est donc pas une notion intuitive pour eux. (Pour nous devrais-je dire )

    Une fonction peut renvoyer plusieurs valeurs. (Depuis Windev Version 19). Mais si on se réfère à la doc, ça ne marche pas sous Androïd. https://doc.pcsoft.fr/fr-FR/?1510007...sp=220#NOTE0_4
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  7. #7
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par natChat Voir le message

    b_reda_31, est ce que les pointeurs sont la même chose que les objets ? Certaines personnes me disent qu'il faudrait utiliser des objets. Qu'en est-t-il ? Est ce qu'on peut utiliser les objets avec Windev?
    Non un pointeur n'est pas un objet, mais il est possible d'affranchir l'absence de pointeur sous windev par l'utilisation d'objet / classe dynamique.

    Cependant, une limite qui m'a vraiment gêné lors de la manipulation d'arbres sous windev est la limite du nombre d'appels récursif. En effet, windev limite la pile d’exécution des appels récursifs. Ce qui est vraiment génant, car la plupart des algorithmes de manipulation d'arbre sont récursifs. il m'a fallu les réécrire en itératifs, l’écriture n'est pas très intuitive...

    Pour ce qui est des fonctions qui renvoie plusieurs valeurs, sous android il est toujours possible de contourner le problème par diverses façons ( Renvoyer une structure, un tableau, une chaine avec séparateur...etc)
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  8. #8
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci Reda.

    Donc ici dans le cas de cette procédure comment fait-il pour renvoyer 3 données ?

  9. #9
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par natChat Voir le message
    Merci Reda.

    Donc ici dans le cas de cette procédure comment fait-il pour renvoyer 3 données ?
    Solution 1:
    En commençant par déclarer en global, une structure qui va encapsuler toutes les valeurs à renvoyer. Ex :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    STRetourFonction est une Structure
    	rSphere est un réel;
    	rCylindre est un réel;
    	rAxe est un réel
    FIN
    Ensuite au niveau de la fonction, vous calculer vos valeurs (sphere,Axe,Cylindre).
    Ces valeurs vont devoir être encapsuler dans une variable r de type STRetourFonction. Et c'est justement cette variable qui devra être renvoyée par la fonction :
    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
     
    PROCEDURE MaFonction()
     
    r est un STRetourFonction;
     
    rAxe1,rSphere1,rCylindre1 sont des réel;
     
    //Calculer vos valeurs
    rAxe1=10.5;
    rSphere1=20.2;
    rCylindre1=3.45;
     
    // Encapsuler ces valeurs dans la structure
    r:rAxe=rAxe1;
    r:rCylindre=rCylindre1;
    r:rSphere=rSphere1;
    //Renvoyer la structure
    RENVOYER r;

    Au niveau de l'appel, idem, vous récuperer les résultat dans une variable de type STRetourFonction, vous les splittez afin d'en faire ce que vous voulez :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    stRes est un STRetourFonction;
    stRes = MaFonction();
    Info(stRes:rAxe,stRes:rCylindre,stRes:rSphere);
    Solution 2 :
    Au lieu d'utiliser une structure, vous pouvez générer et renvoyer une chaine de caractères avec séparateur exemple : ValeurSphere*ValeurCylindre*ValeurAxe.
    Lors de l'appel, on extrait les résultats selon le caractère de séparation (voir ExtraitChaine)
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

  10. #10
    Nouveau Candidat au Club
    Femme Profil pro
    Assistant aux utilisateurs
    Inscrit en
    Octobre 2017
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Val d'Oise (Île de France)

    Informations professionnelles :
    Activité : Assistant aux utilisateurs

    Informations forums :
    Inscription : Octobre 2017
    Messages : 4
    Points : 0
    Points
    0
    Par défaut
    Merci pour cet exemple détaillé.
    Ca n'a pas l'air d'être comme ça qu'il fait.

    Je vais lui suggérer, mais je me demande s'il s'y prends bien dans l'ensemble.

  11. #11
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 053
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 053
    Points : 9 392
    Points
    9 392
    Par défaut
    Ici, le programme passe par des variables globales (gmoOD_ATA_Sphère etc etc ...). C'est un choix. C'est peut-être moins élégant que la solution passant par des structures, peut-être plus difficile à maintenir dans l'absolu ( encore que ici, les noms des variables globales sont suffisamment explicites, et donc apportent quasiment la même practicité que des structures).

    Le point qui me choque, c'est que vous semblez dire que l'application est très orientée vers les questions d'optique / de géométrie / de trigonométrie. Or l'erreur principale dans le code présenté, c'est : Dans Windev , les fonctions trigonométriques traitent des angles en degrés, et non en radians comme dans beaucoup d'autres langages. (et votre développeur fait comme si Windev travaillait en radians). Si il ne sait pas que Windev travaille avec des angles en degrés, tout ce qu'il a fait sur les questions de trigonométrie est forcément faux. Et ça va être très facile à corriger avec cette nouvelle information.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  12. #12
    Membre éprouvé Avatar de b_reda31
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Avril 2007
    Messages
    899
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 40
    Localisation : Algérie

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : Avril 2007
    Messages : 899
    Points : 961
    Points
    961
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Dans Windev , les fonctions trigonométriques traitent des angles en degrés, et non en radians comme dans beaucoup d'autres langages. (et votre développeur fait comme si Windev travaillait en radians). Si il ne sait pas que Windev travaille avec des angles en degrés, tout ce qu'il a fait sur les questions de trigonométrie est forcément faux. Et ça va être très facile à corriger avec cette nouvelle information.
    +1 tbc92 ! bien vu!
    C'est assez flagrant, ArcTang retourne le résultat en degré dans "NouvelAxe", puis ce dernier est converti en degré ! tbc92 a bien fait remarquer que votre développeur considère que windev gère les fonctions trigonométriques en radian alors qu'elles le sont en degrés
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    NouvelAxe = ArcTang((Cylindre1_x_sin2Axe1 + Cylindre2_x_sin2Axe2) / (Cylindre1_x_cos2Axe1 + Cylindre2_x_cos2Axe2)) / 2  
    // conversion de radian en degrés 
    NouvelAxe  = (180 * NouvelAxe)/ ValPI
    « Il est assez difficile de trouver une erreur dans son code quand on la cherche. C’est encore bien plus dur quand on est convaincu que le code est juste!!»

Discussions similaires

  1. [Débutant] Avis sur code
    Par agparchitecture dans le forum C#
    Réponses: 16
    Dernier message: 29/07/2015, 09h16
  2. Réponses: 2
    Dernier message: 12/01/2012, 18h57
  3. Quel est votre avis sur Code::Blocks ?
    Par doudoustephane dans le forum Code::Blocks
    Réponses: 54
    Dernier message: 12/06/2009, 11h58
  4. [Code Prof]votre avis sur un code?
    Par granquet dans le forum Réseau
    Réponses: 6
    Dernier message: 11/04/2006, 20h41

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo