Journée Développeurs LabVIEW Eric MAUSSION Romain DUVAL
Processus de développement logiciel Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Architecture Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Programme de la journée Matin Après-midi Infrastructures de développement Prototypage de l interface utilisateur Design Patterns Types de données Implémentations & Exemples Documentation du projet Évaluation des performances du VI
Objectif de la journée Emmener vos applications LabVIEW au niveau supérieur
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Infrastructures de développement Multicœur Architecture Modulaire Types de données Exemples Documentation Real-Time Execution Trace Desktop Execution Trace Unit Test Framework FPGA Embedded
Gestion d un cahier des charges Cahier des charges LabVIEW Unités sous test
Spécifications Les spécifications écrites influencent positivement le style LabVIEW Un document listant les spécifications est requis avant de commencer le développement
Rédaction du cahier des charges Comment doit être ce document? Votre modèle s accorde-t-il avec les exigences de votre société?
NI Requirements Gateway
Logiciel de gestion d exigences Relation entre Documents d exigences et applications Relation de traçabilité entre documents (graphique) Satisfait aux besoins de systèmes complexes Traçabilité du cycle de vie d un projet Conformité aux normes Automobile, aérospatiale, défense Génération de rapport
Qu est-ce qu une exigence? Éléments désirés ou nécessaires Définition des fonctions du système Nécessité de tester les exigences Traçabilité dans les futurs développements Possibilité de modification (cycle de vie du projet)
NI Requirements Gateway - interfaçage DOORS Requirements Dedicated Interfaces Traceability NI Requirements Gateway Capture Dedicated Interfaces Navigation
Saisie des exigences
Couverture des exigences LabVIEW TestStand LabWindows/CVI Texte
Exemple de gestion sous LabVIEW
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Infrastructures de développement Multicœur Architecture Modulaire Types de données Exemples Documentation Real-Time Execution Trace Desktop Execution Trace Unit Test Framework FPGA Embedded
Développement multiprogrammeurs Risques et enjeux Contrôle de code source Solutions LabVIEW
Suivre les changements du code source Changement dans le code : source de problèmes lorsque non détecté Suivi des modifications de code importantes Quel changement? bug détecté bug introduit Correction Version de code
Collision de code Répertoire de dépôt Calculator.vi
Développement en groupe Deux développeurs, Joe et Jack, travaillent ensemble Jack copie le code de Joe Joe et Jack modifient la même application Suivi des changements (dépendances) et fusion complexe Code de Joe Fusion Version de code Code de Jack
Collision de code Développeur 1 Répertoire de Développeur 2 dépôt Changement sur la face avant Changement dans le diagramme
Collision de code Développeur 1 Répertoire de Développeur 2 dépôt Enregistrement des modifications
Collision de code Développeur 1 Répertoire de dépôt Développeur 2 Enregistrement des modification
Collision de code Répertoire de dépôt Travail du développeur 1 perdu, modifications écrasées
Solution sans contrôle de code source Fusion Version de code Verrouillage pour modification Développeur 1 Checked Out Checked In Get Latest Version Répertoire de dépôt Checked Out Checked In Checked Out Checked In Développeur 2 Check Out : extraire Check In : soumettre
Complexité du développement en groupe Gérer les collisions de code Maintenir la dernière version du code Tenir compte des différences de styles entre les développeurs Comprendre et incorporer les modifications Suivre les modifications et les versions
Solution avec contrôle de code source Répertoire de dépôt Développeur 1 Check out de Calculator.vi Peut modifier le VI Développeur 2 Voit : Calculator.vi en Check out Choix : ne pas faire Check out jusqu au Check in du développeur 1 Copie en lecture seule
Solution avec contrôle de code source Répertoire de dépôt Développeur 1 Check out de Calculator.vi Peut modifier le VI Développeur 2 Voit : Calculator.vi en Check out Choix : Check out de Calculator.vi Peut modifier le VI
Solution avec contrôle de code source Répertoire de dépôt Développeur 1 Check out de Calculator.vi Peut modifier le VI Soumet les modifications : Check in Développeur 2 Voit : Calculator.vi en Check out Choix : Check out de Calculator.vi Peut modifier le VI Tente un Check in Notification : nouvelle version Deux versions sauvegardées
Solution avec contrôle de code source Répertoire de dépôt La version finale tient compte des deux modifications
Avantages du contrôle de code source Répertoire de dépôt centralisé Gestion de plusieurs développeurs Détection et résolution des collisions de code Suivi des changements de comportement Identification de qui a fait les modifications et quand Garantie que chacun dispose de la toute dernière version Sauvegarde des anciennes versions
Interaction LabVIEW SCC Client SCC Serveur de Contrôle de Code Source Client SCC MKS Client SCC
Interaction LabVIEW SCC Serveur SCC Verrouiller Retrait Dépôt Client SCC Modifier
Logiciels compatibles Intégration avec : Microsoft Visual SourceSafe Microsoft Team System Perforce Rational ClearCase PCVS (Serena) Version Manager MKS Source Integrity Seapine Surround SCM Borland StarTeam Telelogic Synergy ionforge Evolution subversion** Accès aux outils SCC depuis le projet LabVIEW Configuration spécifique par projet* *Depuis LabVIEW 8.5 **subversion est Open Source et requiert un plug-in
Utiliser le SCC avec LabVIEW
Outils intégrés à LabVIEW Montrer les différences (LV Compare) Intégré dans le fenêtre de projet avec le SCC Comparer les modifications entre versions point à point Montrer l historique Retour à une version antérieure Avoir la dernière version Obtenir une instance de la nouvelle version
Résoudre les collisions de code Fusion manuelle LV Merge* Disponible dans l environnement de développement Peut être appelé de manière externe *Depuis LabVIEW 8.5
Recommandations Développement en groupe sous LabVIEW : Contrôle de Code Source Historique des versions / Suivi des modifications Prévention des collisions de code Revues de code et documentation de chaque dépôt LV Compare et LV Merge pour résoudre les collisions Distribution de sections de code avec les Project Libraries
Regroupement des exigences Prototypage de Prototypage IHM l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Prototypage IHM Architecture Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Interface utilisateur (UI) et utilisabilité IHM Éléments purement esthétiques Aide l utilisateur à effectuer une tâche de manière efficace Tâche ou processus de fond Fonctionnalité
Quelques règles Respecter l agencement Penser à l utilisateur La simplicité est de mise
Respect de l agencement Éléments familiers : Boutons Icônes Terminologie Boîtes de dialogue Menus
Respect de l agencement Créativité : Ne changez pas la manière dont des attributs similaires agissent Ne réinventez pas la roue
Le simplicité est de mise Avoir trop d éléments sur l écran d un seul coup est perturbant Permettre à l utilisateur de se concentrer sur ce qui est important
Pensez à l utilisateur Il n en connaît probablement pas autant que vous Expliquez ce que font les boutons Tenez-le informé Pensez à l environnement d utilisation de l application Souris, clavier? Écran tactile de gros boutons À l extérieur contraste élevé
Utilisation des styles de commandes Modernes / Argent* Classique Système Volume 3D * Depuis LabVIEW 2011 Personnalisation Dépendant du système d exploitation
Disposition de l IHM Élaborer une face-avant simple pour une meilleure compréhension de l utilisateur Utiliser des menus personnalisés pour alléger la face-avant Démo
Bibliothèques OpenG Disponibles dans VI Package Manager (VIPM)
Agencement de l IHM Décoration Onglets Face-avant secondaire Espace de travail IHM réduite - PDA Embarqué - Web
Navigation au clavier
Utiliser le bon type de données Chemins ou Chaîne de caractères Le format dépend de la plate-forme Navigation sur répertoires/fichiers
Utilisabilité des chaînes et chemins Les chaînes et chemins supportent nativement le glisser/déposer! Génère un événement Valeur changée Uniquement disponible sur des commandes
Prototypage de la face-avant Concevoir le VI avec les commandes et indicateurs souhaités Laisser le diagramme du VI vide Grouper les objets de la face-avant à la fin
Exemple d IHM Professionnel 1/3
Exemple d IHM Professionnel 2/3 Commande Onglet glissante Commande Onglet principale
Exemple d IHM Professionnel 3/3
Problématiques liées à l IHM Police & Texte Couleurs Graphiques Polices application, système, boîte de dialogue Dimensionnement - Extension Polices dépendantes de la plate-forme Minimum de couleurs Couleur neutres Blanc, gris, pastel Nuances Nuances de gris Diminution de performances Import d images Superposition d objets : Non
Localisation de l IHM Traduction et adaptation culturelle Création d application pour un autre langage Laisser de la place Éléments du diagramme Icônes/symboles internationaux Icônes sans texte Sous-titres / étiquettes
Recommandations Les interfaces les plus efficaces sont : Simples Lisibles Agencées logiquement Penser aux commandes et menus personnalisés
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Pré-requis Architecture Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Fonctions de synchronisation Pré-requis Notificateurs Files d attente
Notificateurs Pré-requis Avantages Synchronisation de deux boucles sur une boucle maître Code efficient, aucune attente active Inconvénients Ne stocke pas les données Risque de perte de données 71
Notificateurs Fonctionnement Obtenir un notificateur Envoyer une notification Libérer le notificateur Attendre une notification
Notificateurs Exemple
Files d attente Pré-requis Similaires aux notificateurs et stockage de plusieurs éléments Modèle FIFO (First In, First Out) Besoin de traiter toutes les données Les boucles productrice et consomatrice peuvent avoir des vitesses d exécution différentes 74
File d attente Fonctionnement Obtenir une file d attente Ajouter un élément Supprimer la file Retirer un élément
File d attente Exemple
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Architecture Architectures standard Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Architecture standard : à partir d un modèle À partir de modèle de conception LabVIEW (.vit) Compléter le modèle pour réponde à vos besoins
Modèles de conception VIs simples VI général Machine d états Boucles parallèles Maître/Esclave Producteur/Consommateur (Données) Producteur/Consommateur (Événements)
Architecture à VIs simples
Architecture à VIs générale
Utilisation des boucles Privilégier les registres à décalage Nommer les fils qui sortent du terminal de gauche Utiliser plusieurs critères pour la structure Condition Cadencer les boucles While Éviter d interroger en continu les objets graphiques
Programmation à états Programmation séquentielle Complexe lorsque : Changement de l ordre de la séquence Répétition d un élément de la séquence Exécution conditionnelle Arrêt du programme immédiat, sans attendre la fin de la séquence
Machine d états Très utile dans LabVIEW Mise en œuvre dans un diagramme d'états ou un organigramme Quand utiliser des machines d états? Pour la gestion d une interface utilisateur Pour les tests de processus
Machine d états Fonctionnement Boucle While Exécute de manière continue les différents états Régistre à décalage Contient l information de transition d état Structure Condition Contient code et condition pour chaque état Structure Condition Boucle While Registre à décalage
Machine à états Modèle standard
Projets Modèles Depuis LabVIEW 2012 Commencez par la Machine à états
Machine à états Règles Définition de type d énumérateur pour le sélecteur de condition Minimisez le code à l extérieur de la structure Condition Insérez des états pour l initialisation, l attente, l arrêt et un état vide/défaut
Concepts avancés JKI State Machine Accessible via VIPM!!
Modèle de conception boucles multiples
Modèle de conception Maître/esclaves Avantages Synchronisation Données disponibles globalement Considérations Deux boucles à la même vitesse Perte de données
Producteur/Consommateur Données Similaire au modèle de conception Maître/Esclave Partage de données entre des boucles s exécutant à des fréquences différentes Deux catégories de procédés Production de données Consommation de données Modèle efficace pour acquérir plusieurs séries de données et les traiter dans l ordre
Producteur/Consommateur Données Avantages Modèle FIFO Bufferisation Considérations Cadencer la boucle productrice Envoyer des données entre les boucles
Programmation événementielle Gère des événements dans un VI Synchronise l exécution du code avec les actions de l utilisateur sur la face-avant Stocke les événements de façon à n en perdre aucun La structure Événement attend un événement sur la face-avant sans attente active (scrutation)
Interface de gestions d événements
Ajout d événements
Notificateurs et filtres d événements Notificateurs d événements (flèche verte) Notifie LabVIEW qu un événement utilisateur a été détecté Filtres d événements (flèche rouge) Valide ou change les données de l événement avant traitement
Événements utilisateur Créer et enregistrer un événement utilisateur Générer un événement utilisateur Désenregistrer un événement utilisateur Supprimer l événement utilisateur
Création et enregistrement d événements
Structure Événement Producteur/Consommateur Avantages Réponse asynchrone à l interface utilisateur Les files d attente peuvent transférer n importe quel type de données
Structure Événement Producteur/Consommateur Fonctionnement Attente d une entrée sur une touche du clavier
Cas particulier Cluster d erreurs
Choix de l architecture de conception
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Architecture Architecture modulaire Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Application modulaire Concept Modularité : organisation d un programme en plusieurs modules indépendants, la modification de chacun ayant un impact minimal sur les autres Utilisation de sous-vis pour limiter les changements dans l application Connecteur Icône 108
Application modulaire Sous-VIs Gras : terminaux requis Normal : terminaux recommandés Grisé : terminaux optionnels 109
Application modulaire Règles Assigner les clusters d erreur aux terminaux en bas à gauche et à droite Sauter la plupart des diagrammes des sous-vis lors d une erreur en utilisant des structures Condition Utiliser le modèle Sous-VI avec gestionnaire d erreurs Vérifier les interactions entre les modules et les VI externes
Application modulaire Recommandations Entrées et sorties du module doivent être compréhensibles immédiatement Gestion des erreurs propres à un module par le module luimême ou gérées par un autre module Capacité à modifier un module facilement sans affecter les autres modules Interface simple pour accéder aux données dans chacun des modules Stockage de l état propre d un module localement
Modules avec sous-vis organisés Créer un set de sous-vis liés pour chaque fonction Utiliser un style correct pour implémenter chaque VI Créer un répertoire sur le disque pour chaque module Utiliser des bibliothèques de projet de LabVIEW pour organiser les VIs
Modules à VI principal multifonctions Utiliser une structure Condition contrôlée par un énum. Commander le module et ses fonctionnalités par l énum. Enregistrer les données dans le module en utilisant les registres à décalage d une boucle à itération unique
Variable Globale Fonctionnelle (FGV/ Action Engine) Boucle While Registre à décalage non initialisé - Mémoire Structure Condition Commande de type énum
Actions de base Définir la valeur du registre à décalage INITIALIZE INITIALIZE
Actions de base Acquérir la valeur stockée dans le registre GET GET
Moteur d actions Effectuer une action sur les données et enregistrer le résultat Afficher la nouvelle valeur en sortie ACTION ACTION
Comment cela fonctionne-t-il? FGV : VI non réentrant Exécution d actions sur des données Énum. pour sélectionner des actions Stockage des données dans un registre à décalage Execution unique de la boucle
Comparaison Variable globale fonctionnelle Pas de situation de compétition Pas de copie de données Gère les fils d erreur Temps de réalisation Réalisation d actions dans la FGV Variable locale et globale Situation de compétition Copie des données en mémoire Aucune action Ne gère pas les fils d erreur Glisser/déposer
FGV Implémentation Exemple d application classique : mesure de temps Objectif : Mesurer le temps écoulé entre chaque appel du sous-vi.
Application modulaire Exemple
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Types de données et structures Multicœur Architecture Modulaire Types de données Exemples Documentation Real-Time Execution Trace Desktop Execution Trace Unit Test Framework FPGA Embedded
Cluster Regroupe des données de types différents Équivalent Structures/Records Ordonnés 127
Cluster Assemblage Assembler un nouveau cluster Modifier un cluster existant 128
Cluster Désassemblage Utiliser certains éléments d'un cluster 129
Définitions de type Commandes perso. Augmente la variété des objets sur la face-avant Clic droit sur une commande ou un indicateur et sélectionnez Avancé»Personnaliser. 130
Définitions de type Styles Choix de style Commande Déf. de type Déf. de type stricte Type fixe pour les instances Esthétique fixe pour les instances 131
Définitions de type Cluster Structure très flexible Reflets du *.ctl dans les instances Évolution de l application (ajout de types) Sous-VIs non brisés lors de changement 132
Type pour transfert de données Variant Type de données générique Polymorphisme d application Conversion de données en variant Stocke les données et le type originaux Manipule les données indépendamment de leur type
Type pour transfert de données Variant Données Variant En variant transforme une donnée en type variant Variant en données convertit un variant en n importe quel type de données LabVIEW Recommandations Non supporté dans LabVIEW Real-Time Utilisez les chaînes de caractères si vous avez besoin d un type de données évolutif
Transfert de données Architecture Plug-In
Avantage pour une grosse application Type de données Cluster en définition de type Définition de type Énum. Variant N importe quel type de données supporté Deux boucles synchronisées Le producteur attend l événement Aucun événement ou donnée ne peut être perdu Architecture modulaire
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Implémentations et exemples Architecture Modulaire Types de données Exemples Documentation Real-Time Execution Trace Desktop Execution Trace Unit Test Framework FPGA Embedded
Mauvais VI
Bon VI Code évolutif, lisible, maintenable
Taille du diagramme appropriée La taille du diagramme affecte la lisibilité Utiliser une résolution n excédant pas 1024 x 768 pixels Proscrire un code LabVIEW de dimension trop importante Limiter l utilisation des barres de défilement par l utilisateur
Bonnes techniques de câblage Éviter les fils de liaison en arrière-plan des objets du diagramme Disposer les fils pour clairement identifier la connexion avec le terminal Limiter le nombre d incurvations dans les fils de liaison Utiliser des fils courts Effacer tout fil superflu Préférer un câblage aux variables locales lorsque cela est possible Proscrire le passage de fils dans des structures s ils ne sont pas utiles Espacer les fils de liaison parallèles
Implémentation d IHM Style Windows
Utilisez des panneaux Zone de titre Menu /Commandes Zone de contenu étirable Barre d état
Panneaux glissants
Tenez l utilisateur informé
Implémentation d IHM Style PDA Commande Onglet glissante Commande Onglet principale
Faire glisser une commande Move.vi Déplace un objet vers une position voulue Le déplacement de la moitié de la distance restante à chaque itération donne l apparence d un glissement naturel
Rassemblons tout!! Lorsqu une nouvelle vue est sélectionnée, on change la valeur de l onglet De nouveau, on stocke l ancienne position pour pouvoir la restaurer En maintenant le bouton menu appuyé, on glisse la commande onglet dans le champ visuel On stocke l ancienne position du menu, de cette manière, on peut le faire revenir à sa position initiale
Implémentation modulaire QSM
Fonctionnement Événement capturé par le producteur Le producteur place l élément dans la file d attente La machine d états du consommateur récupère les éléments Communication parallèle des sous- VIs par réference sur file d attente
Recommandation File d attente Utilisation d un cluster contenant un énum. et un variant comme type de données Référence de file d attente par nom => Disponible globalement
Explications
File d attente Maître
Événement
État et données sont mis en file d attente
Machine d États consommatrice
File d attente supplémentaires (Q1 et Q2)
États produits pour les autres files d attente
Gestion des files d attente
Sous-VIs consommant les données de Q1 & Q2
12 améliorations de LabVIEW 2012 Écritures de sorties conditionnelles en sortie de tunnel de boucles Indexation concaténée Menu clic-droit pour plusieurs objets Troncation des chemins fichiers longs Emplacements différents des étiquettes par défaut pour les commandes et les indicateurs Boîte de dialogue pour chaîne de caractères Étiquettes pour les sousdiagrammes Améliorations des boîtes de dialogue énumérées Suppression des fils brisés sélectionnés API Éditeur d icône Aide contextuelle sur les points de coercition des données Structure Événement dans la version de base
Fonctionnalités provenant du Idea Exchange Étiquettes de sous-diagrammes intégrées Étiquettes qui suivent et sont redimensionnées en même temps que les structures
Fonctionnalités provenant du Idea Exchange Menus déroulants pour plusieurs objets sélectionnés Gain du temps pour la modification d un ensemble d éléments
Fonctionnalités provenant du Idea Exchange Tunnel conditionnel sur les boucles Logique Approche d écriture simplifiée traditionnelle Simplifie les pratiques de codage pour la construction de tableaux conditionnels
Fonctionnalités provenant du Idea Exchange Boîte de dialogue d édition pour les constantes chaîne Edition de grandes portions de texte dans la constante chaîne code plus propre et efficace
Fonctionnalités provenant du Idea Exchange Emplacements différents pour les étiquettes par défaut pour les commandes et les indicateurs Diagramme plus propre sans réarrangement des étiquettes
Fonctionnalités provenant du Idea Exchange Aide contextuelle au niveau des points de coercition Renseigne rapidement sur les données attendues
Fonctionnalités provenant du Idea Exchange Tronquer les chemins de fichiers longs Simplifie l affichage des chemins de fichier longs en utilisant les conventions standards
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Documentation du projet Multicœur Architecture Modulaire Types de données Exemples Documentation Real-Time Execution Trace Desktop Execution Trace Unit Test Framework FPGA Embedded
Documenter les VIs, commandes Créer une description pour chaque VI Documenter les faces-avant Créer des descriptions pour les commandes et indicateurs
Documenter les VIs, commandes Entrées/Sorties nommées Commentaires Icônes distinctes Descriptions et astuces Impression en HTML Explication de la configuration
Documenter une architecture Inclure un diagramme d états dans un diagramme Commenter l architecture (étiquette libres et fils)
Fenêtre d historique et impression Fenêtre d historique Impression de documentation Enregistrer les modifications au fur et à mesure des versions Inclure dans l aide détaillée
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Améliorer les performances en LabVIEW Conception orientée objet Multicœur Architecture Modulaire Types de données Bonnes pratiques Exemples Documentation VI Analyzer Real-Time Execution Trace Desktop Execution Trace Unit Test Framework Real-Time FPGA Embedded
Pourquoi évaluer son code? Optimiser Améliorer l efficacité Améliorer la vitesse Benchmark Évaluer les performances Identifier les zones à problème
But de l optimisation La règle du 80/20 des performances logicielles 80% du temps d exécution a lieu dans 20% du code L amélioration des performances est plus efficace dans les 20% Trouver de quels 20% il s agit est difficile!
Statistiques de VIs Permet d identifier : Utilisation inappropriée de variables locales Sur-utilisation des structures Diagramme trop chargé
Profiler son code La règle du 80/20 des performances logicielles 80% du temps d exécution a lieu dans 20% du code
Profiler son code Allocation de mémoire
Améliorations Réallocation de mémoire LabVIEW essaie de minimiser la réallocation de mémoire Fonctions susceptibles d engendrer une réallocation de mémoire : Construire un tableau Concaténer des chaînes de caractères Grand nombre de réallocation La mémoire est pré-allouée
Améliorations Pré-allocation de mémoire Cas où une pré-allocation importante est nécessaire Ajout sur condition d éléments Taille maximale du tableau déterminable
Améliorations Coercition de type Modifier le type des données pour obtenir le type de données souhaité Les points indiquent automatiquement une coercition Nécessite une copie
Vitesse d exécution E/S (fichiers, GPIB, DAQ, Ethernet) : opérations lentes Réduire le nombre d accès aux E/S Structure d application transférant de grandes quantités de données à chaque appel Multiples appels aux E/S avec de petites quantités de données
Vitesse d exécution Amélioration de l IHM Réduire le nombre de commandes Garder l IHM aussi simple que possible Désactiver : échelle automatique des graphes, marqueurs d'échelle, grilles Éviter le chevauchement des commandes Laisser affichage asynchrone comme paramètre par défaut pour les commandes
Vitesse d exécution Réentrance Appeler un sous-vi simultanément à plusieurs emplacements Nécessite de la mémoire supplémentaire pour chaque instance Utilisation de VIs réentrants dans deux cas différents Permettre à un sous-vi d'être appelé en parallèle Permettre à une instance de sous-vi de maintenir son propre état
Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Tester & Valider les applications Multicœur Architecture Modulaire Exemples Documentation Real Desktop Time Execution Trace Desktop Unit Test Execution Framework Trace FPGA Embedded Types de données Unit Test Framework
Outils de débogage et de test Outils intégrés à LabVIEW Animation de l exécution Mode pas à pas Points d arrêt Sondes Sondes personnalisées
Simple Complexité Avancée Outils de débogage et de test Unit Test Framework Validation fonctionnelle du code Real Time Execution Trace Desktop Execution Trace Analyse dynamique du code VI Analyzer Toolkit Analyse statique du code Risque faible Criticité Risque élevé
VI Analyzer : analyse statique Guidelines Style de la face-avant Polices et styles Couleurs Contrôles personnalisés et graphes Répartition Tailles et positions Étiquettes Chemins ou chaînes Enums ou menus déroulants Valeurs par défaut et gammes Nœuds de propriétés Navigation au clavier Boîtes de dialogue Checklist Style VI Checklist IHM Checklist Block Diagram Checklist Style du diagramme Techniques de câblage Optimisation de mémoire et de vitesse Tailles et positions Organisation gauche à droite Commentaires du diagramme Appels DLL et nœuds de propriétés Définitions de type Structures Séquence Style d icône et de connecteur Icônes Icônes intuitives et internationales Connecteur pertinent
Analyse de code statique VI Analyzer
VI Analyzer Statistiques de complexité Disponible en LabVIEW 2009 E/S = 5 Nœuds = 3 Chemins = 1 True Case 1 Case 2 False Case 3 Complexité cyclomatique : 5 3 + 2 (1) = 4
Buts de l analyse dynamique de code Qu est-ce qui consomme de la mémoire? Est-ce que je récupère toutes les erreurs de mon application? Quel a été le dernier événement à se produire avant...? Quelle a été la chaîne d appel qui nous a conduit à...? Dans quel thread cela s exécute-t-il? Est-ce que je rentre dans un cas spécifique? Qu est-il arrivé à l intérieur de la structure? Dans quel ordre se sont produits les événements? Y-a-t-il un processus qui tourne en tâche de fond? Est-ce que le code se comporte différemment en exécutable?
Toolkit Desktop Execution Trace Trace pendant le Run-Time : Structure Événement Allocation de mémoire Files d attente/notificateurs Fuite mémoire de référence Identifiant de thread Erreur non gérée Sous-VI dynamique/statique Chaîne utilisateur personnalisée
Toolkit Desktop Execution Trace Trace pendant le Run-Time : Structure Événement Allocation de mémoire Files d attente/notificateurs Fuite mémoire de référence Identifiant de thread Erreur non gérés Sous-VI dynamique/statique Chaîne utilisateur personnalisée
Analyse dynamique Toolkit LabVIEW Desktop Execution Trace VIs et applications débogables Réseau Toolkit LabVIEW Real-Time Execution Trace Réseau Applications temps réel
Toolkit Desktop Execution Trace
LabVIEW Unit Test Framework Entrées Sorties VI sous test Unit Test Framework Sorties attendues Génération automatique de rapport Vecteur de test = Entrée(s) + Sortie(s) attendue(s)
Validation logicielle Unit Test Framework
Exemple de couverture de code 6 diagrammes, 3 diagrammes exécutés, 50 % de couverture de code
Exemple de couverture de code Premier vecteur de test Diagramme : 2 structures condition exécutées (2 + 1)/6 = 50 % de code couvert Second vecteur de test (se cumule au code déjà couvert) Diagramme : 5 structures Condition exécutées (4 + 1)/6 = 83,33 % de code couvert
Évaluer la couverture de code UTF
Test unitaire par programmation Appel par programmation : Test unitaire Génération de rapport
Conclusion
Processus de développement logiciel Regroupement des exigences Prototypage de l IHM Architecture de l application Développement Debogage et Test Déploiement Outils de développement logiciel et bonnes pratiques Requirements Gateway Outils graphiques Design Patterns Flux de données Performances Application Builder Contrôle de code source Commandes personnalisées Conception orientée objet Bonnes pratiques VI Analyzer Real-Time Multicœur Exemples Real-Time Execution Trace FPGA Architecture Modulaire Documentation Desktop Execution Trace Embedded Types de données Unit Test Framework
Synthèse Développement d applications Suivre de bonnes pratiques de développement : Réfléchir avant de coder Concevoir une IHM optimisée Utiliser les bons types de donnée pour l application Utiliser la bonne structure au bon moment Modulariser le code Documenter le projet Évaluer les performances
Formations NI Experienced User Advanced User Journée LabVIEW Également : Formations matériels (RT, FPGA, DAQ, Vision ) Autres formations (LabWindows/CVI, DIAdem, TestStand )
Livre : «The LabVIEW Style Book» Prentice Hall 2007 Développer des applications LabVIEW de qualité Plus de 200 règles de style Facilité d utilisation Efficacité Clarté de rédaction Simplicité Performance Durabilité Fiabilité
Site Web associé www.bloomy.com/lvstyle/ Reviews (critiques) Data sheet (données) Downloads (téléchargements) E-mail the author (contact) Purchase the book (achat du livre)
Poursuivre votre formation ni.com/support Accès aux manuels sur les produits, à la Base de connaissances, aux exemples de code, aux tutoriaux, aux notes d'application et aux forums de discussion Demande de support technique Info-LabVIEW : www.info-labview.org Programme Alliance : ni.com/alliance Wiki : http://wiki.lavag.org Forum : http://forums.lavag.org Nos partenaires : ni.com/alliance Publications : ni.com/france/livres/ Entraînez-vous!
Comment approfondir vos connaissances Formation dispensée par un instructeur LabVIEW Core 3 : apprenez à développer un projet en utilisant les bonnes techniques de programmation LabVIEW Connectivity : apprenez à utiliser : DLL, ActiveX,.NET, TCP/IP, UDP, et variables partagées Cours sur le matériel (sur l'acquisition de données et le traitement de signaux, par exemple) Cours en ligne (sur Machine Vision et LabVIEW Real-Time, par exemple). Large éventail d'outils et de solutions de formation conçus pour vous former à votre rythme
Des questions? Merci de votre attention!