Outils d analyse statique
|
|
- Germaine Léger
- il y a 8 ans
- Total affichages :
Transcription
1 Année : 2006/2007 GLG101 : Test et Validation du logiciel Nom du fichier : OUTILS_ANALYSE_STATIQUE.doc Rédacteur : Jean-Yves Bouttery Remis le 15 mai 2007 Destinataires : Mr ANDRZEJAK Willy Outils d analyse statique
2 INTRODUCTION. L analyse statique de programmes est une famille de techniques permettant de dériver des résultats sur l'exécution de programmes sans exécuter ces derniers. Au lieu de reconnaître le comportement du programme à l exécution, il s agit ici de découvrir ce qu il serait par une simple lecture et analyse du code source ou binaire selon le cas. Cette façon de faire offre des avantages sur l autre approche. Puisqu il n y a pas d exécution, la crainte de dommages n est plus et il n y a plus de temps d exécution. Par contre, il n est pas possible d être certain de certaines propriétés avec l analyse statique à cause du problème de l indécidabilité. Par exemple, dans un programme assembleur, une instruction indique de sauter à une adresse contenue dans un registre quelconque. Puisqu il n y a pas d exécution, on ne connaît pas cette adresse et les possibilités de valeurs du registre peuvent être très grandes. On ne pourra donc pas étudier statiquement tous les scénarios d exécution possibles du programme. Du fait de la complexité des programmes informatique, nous utilisons des programmes qui se nomment outils d analyse statique. Dans un premier chapitre, nous verrons les différentes utilisations possibles de ces outils. Nous verrons ensuite les informations utiles que nous pouvons retirer de cette analyse et nous essaierons de comprendre les méthodes qui permettent aux outils de trouver à ces informations. Nous terminerons enfin par une série de tableaux avec des noms d outils d analyse statique. 2
3 I. Les différents objectifs de l analyse statique Métriques. L analyse statique est utilisée en génie logiciel dans le but de calculer certaines métriques sur le code source d un programme. La proportion de code à l intérieur de boucles dans le programme et le nombre de scénarios d exécution possibles en sont des exemples. Une autre métrique peut être le taux de commentaires dans le programme. Cela a pour utilité d inciter et d aider les programmeurs à faire des programmes plus lisibles et donc plus faciles à maintenir. Détection d erreurs pouvant survenir à l exécution. Une autre fonctionnalité des outils d analyse statique est d étendre le travail des compilateurs. Il arrive que certaines erreurs provoquent l arrêt d un programme en cours d exécution parce qu elles n ont pas pu être détectées au cours de la compilation. Pour cette raison, ce sont ces problèmes de programmation qui prennent le plus de temps à être réglé. Les outils d analyse statique peuvent découvrir certaines de ces erreurs en lisant le code source. L accès à une variable à partir d un pointeur nul ou l accès à un tableau à l extérieur de ses bornes en sont des exemples. Les graphes. Certains outils d analyse statique construisent quelques types de graphes que nous verrons par la suite. Dans le cas où l outil en question ne va pas plus loin, c est-à-dire que son objectif est de faire les graphes associés à un programme, il faudrait être en mesure de récupérer la structure de données des graphes dans le but de l analyser avec un autre programme par la suite. Le découpage. Les outils qui font du découpage de programmes sont des outils d analyse statique. Puisque le découpage utilise le graphe de dépendance d un programme pour calculer ses résultats, le choix d un outil de découpage sera fait en fonction de la qualité des dépendances qu il trouve à l intérieur du programme analysé. 3
4 Politique de sécurité. Un outil d analyse statique peut faire de la détection de code malicieux. Il doit se baser sur une politique pour donner son verdict sur le programme analysé. Une façon de faire est l utilisation d automates de sécurité. Les transitions de ces automates correspondent aux instructions du programme. Ils comportent un ou plusieurs états qui ne doivent pas être atteints ; s ils le sont, cela signifie que la politique n a pas été respectée. Si un scénario d exécution du programme possède une suite d instructions, donc de transitions de l automate, qui fait atteindre un état tel que la politique n est pas respectée, le programme est considéré comme malicieux. 4
5 II. Informations retirées et méthode utilisées 1. Les informations retirées. Dans les sections de ce chapitre, il sera d abord question des informations utiles qu on peut tirer du code source d un programme et leurs représentations, souvent sous forme de graphes. Ensuite, la technique du découpage (aussi appelé focalisation ou slicing) qui est utile entre autres pour la détection de code malicieux sera présentée. Enfin, il sera question de l étape de vérification du programme en se servant des différentes informations recueillies. L arbre syntaxique. Avant de tirer les informations pertinentes d un programme, il est important, dans le cas d un code source, de vérifier que ce dernier respecte bien les règles de syntaxe du langage utilisé pour l écrire. La syntaxe d un langage étant représentée par une grammaire, il est possible de faire un arbre syntaxique du programme. C est à partir de cet arbre que les informations seront tirées puisque ce dernier écarte les détails inutiles reliés au code comme les commentaires et l indentation. Dans le cas du code exécutable, il peut être nécessaire que le programme soit d abord désassemblé dans le but d obtenir le code assembleur et ainsi obtenir un arbre syntaxique pour ce type de code qui sera utilisé par la suite pour l analyse. Le graphe de flot de contrôle. Il s agit d un graphe orienté dans lequel les noeuds représentent des instructions. Pour tout noeud, un arc quitte vers chaque noeud pour lequel les instructions peuvent suivre immédiatement celles du noeud courant. Il met en évidence les boucles, instructions conditionnelles et branchements. Un chemin dans ce graphe représente un scénario void main() { int x = 0; int y = 1; while (y < 10) { y = 2 * y; x = x + 1; } printf ("%d",x); printf ("%d",y); } d exécution du programme. Le programme suivant servira à donner un exemple pour ce type de graphe (voir figure 2.1) et sera également utilisé pour les autres graphes. 5
6 Le graphe de dépendance de contrôle. Ce graphe montre quelles instructions seront exécutées en fonction de la valeur d une expression dans le programme. Les noeuds du graphe sont les mêmes que ceux du graphe de flot de contrôle. Pour deux noeuds p et q, un arc va de p vers q si la valeur de l expression p a un impact sur le fait que l instruction q soit exécutée ou non. La figure 2.2 en montre un exemple. Dans cet exemple, on peut noter que la présence de la boucle sur l expression y < 10 est dû au fait qu elle devra être évaluée de nouveau si elle est vraie puisque le corps de cette boucle doit s exécuter tant qu elle est vraie, c est à dire jusqu à ce qu elle soit fausse. L analyse du flot de données Le flot de données peut aussi être analysé. Il informe sur le déplacement des données entre le programme, les disques, le réseau, etc. Il s agit ici du flot de données à travers les périphériques, mais on peut aussi analyser le flot de données à l intérieur du programme. Il permet d avoir de l information sur l utilisation des variables dans le temps. Il y a vraiment plusieurs méthodes plus ou moins complexes pour étudier le flot de données et celles-ci mènent à des informations différentes. Par exemple, une information de base qui peut être très utile est l ensemble des variables utilisées et celui des variables modifiées pour chaque instruction du programme. Voici l illustration de cette méthode sur le programme étudié ; les ensembles sont décrits à la suite de chaque ligne de code. void main() { int x = 0; int y = 1; while (y < 10) { y = 2 * y; Utilise={} Définit={x} Utilise={} Définit={y} Utilise={y} Définit={} Utilise={y} Définit={y} x = x + 1; Utilise={x} Définit={x} } printf ("%d",x); Utilise={x} Définit={} printf ("%d",y); Utilise={y} Définit={} } 6
7 Le graphe de dépendance de données Un autre graphe dont les noeuds sont les mêmes que celui du graphe de flot de contrôle peut être fait. Dans ce graphe, un arc va de p vers q s il est possible que la valeur d une des variables modifiées à l instruction p soit utilisée à l instruction q sans qu elle ne soit modifiée entre temps. La figure 2.3 en montre un exemple. Le graphe de dépendance de programme ou du système Un nouveau graphe est le graphe de dépendance de programme. Il n est rien d autre que l union du graphe de dépendance de contrôle et du graphe de dépendance de données (voir figure 2.4). On peut, pour garder plus de précision, différencier dans ce graphe les arcs venant des deux graphes en les étiquetant arc de contrôle et arc de données, c est pourquoi on entend rarement parler des deux autres. 7
8 Jusqu ici, les explications n ont pas fait mention qu un programme peut être composé de plusieurs procédures. Si c est le cas, on commence par faire le graphe de dépendance de programme pour chaque procédure de façon indépendante. Il y a ensuite une façon de relier ces graphes pour faire le graphe de tout le programme que l on appellera graphe de dépendance du système. Pour chaque appel de fonction, le noeud représentant le point d appel est relié par un arc de contrôle au point d entrée de la fonction appelée ainsi qu à un noeud représentant chaque paramètre effectif et la sortie effective (variable qui accepte la valeur retournée par la fonction). Ce dernier point, s il existe, possédera des dépendances de données vers les instructions qui utilisent sa valeur. à l intérieur de la fonction appelée, il y a un arc de dépendance de contrôle qui va du point d entrée vers un noeud représentant chaque paramètre formel et la sortie formelle (valeur retournée par la fonction). Il y a un arc de dépendance de données de chaque paramètre effectif vers le paramètre formel associé ainsi que de la sortie formelle vers la sortie effective pour chaque point d appel. De plus, il y aura les arcs de dépendance de données adéquats des paramètres formels vers les instructions de la fonction et des instructions vers la sortie formelle. La figure 2.5 montre un exemple de graphe de dépendance du système pour le programme suivant. Dans ce graphe, les arcs inter procéduraux sont en pointillés. Parmi ces arcs, ceux en lignes courbes sont des arcs de contrôle, les autres sont des arcs de données. int somme(int a,int b) { int c; c = a + b; return c; } void main() { int x; int y; x = somme(2,3); printf("%d",x); y = somme(x,3); printf("%d",y); } 8
9 Le découpage. Le découpage est une technique utilisée dans le but de faire ressortir certaines instructions d un programme en relation avec une propriété. Le Résultat du découpage est donc un sousensemble du programme. Il en existe deux types, le découpage arrière et le découpage avant dont les résultats seront présentés à la section suivante. Cette technique est utile à la réutilisation du code. Par exemple, si un programme calcule plusieurs résultats simultanément en mélangeant les calculs nécessaires à chacun d eux, mais qu un seul de ces résultats est utile pour un autre programme, un découpage arrière sur la variable qui contient ce résultat dans le programme donne un sous-programme sans les instructions superflues. Elle sert aussi à comprendre des programmes compliqués puisque son résultat est un programme plus petit, donc plus facile à analyser. Une utilité particulièrement intéressante est la possibilité de réduire le problème de l indécidabilité de l analyse statique. Pour appliquer cette technique sur un programme composé d une seule fonction, on se sert du graphe de dépendance du programme. Il est aussi possible de faire le découpage selon le flot de données seulement ou le flot de contrôle seulement en ne considérant que les arcs de contrôle ou les arcs de données dans le graphe. Dans le graphe de dépendance du programme, on choisit le noeud correspondant à l instruction sur laquelle on désire effectuer le découpage. Dans le cas du découpage arrière, il s agit des noeuds qui peuvent atteindre le noeud choisi, ceux accessibles en suivant les arcs à contresens à partir du noeud choisi. La figure 2.6 montre le graphe de dépendance de programme en mettant en évidence (par des arcs en gras) le découpage arrière sur l instruction printf(y). La figure 2.7 montre le nouveau graphe de flot de contrôle pour le sous-programme résultant de ce découpage. 9
10 Dans le cas du découpage avant, le sous-programme contient les instructions représentées par les noeuds que l on peut atteindre à partir du noeud choisi en suivant les arcs. Voici maintenant comme faire pour un programme composé de plusieurs fonctions. Le découpage est plus difficile à faire lorsqu il nécessite une analyse inter procédurale. Dans ce cas, il faut utiliser le graphe de dépendance du système. La façon de faire est la même que pour le découpage intra procédural, mais il faut faire attention à une chose. Par exemple, pour le découpage avant, si on entre dans une fonction en suivant les flèches, lorsqu on arrivera à la sortie formelle qui est le dernier point à l intérieur de la fonction appelée avant d en ressortir, il faudra seulement choisir l arc qui retourne vers le site d appel et non tous les arcs comme il faut faire d habitude. Dans le cas du découpage arrière, c est la même chose, il faut revenir sur les arcs qui vont vers les paramètres effectifs du site d appel par lequel on était entré (par la sortie) dans la fonction appelée. La figure 2.8 montre un découpage avant sur le deuxième appel de la fonction somme fait à partir du graphe de dépendance du système à la figure 2.5 en mettant les arcs et les noeuds en gras. A la sortie de la fonction somme, une croix est dessinée sur une des flèches pour montrer qu il ne faut pas l emprunter, car elle ne retourne pas dans la fonction main à l endroit où la fonction somme a été appelée. 10
11 2. Les méthodes utilisées. Analyse statique par analyse lexicale et syntaxique L analyse lexicale consiste à découper le programme en petites entités appelées tokens (opérateurs, mots réservés, variables, constantes numériques, alphabétiques ). Exemple : for i :=1 to vmax do a :=a+i; On peut dégager la suite de tokens suivante et construire la table des symboles. Ensuite, l énoncé peut s écrire sous la forme d une suite de référence à la table des symboles : 10, 1000, 100, 5001, 11, 1002, 12, 1001, 100, 1001, 101, 1000, 13 for i := 1 to vmax do a + a + i ; Lors de l'analyse syntaxique, on vérifie que l'ordre des tokens correspond à l'ordre défini pour le langage. On dit que l'on vérifie la syntaxe du langage à partir de la définition de sa grammaire. Cette phase produit une représentation sous forme d'arbre de la suite des tokens obtenus lors de la phase précédente (fig. suivante). 11
12 A partir de ces analyses, on peut extraire certaines métriques. Les métriques de complexité Halstead ont été développées par le défunt Maurice Halstead comme un moyen de déterminer une mesure quantitative de complexité directement des opérateurs et opérandes dans le module afin de mesurer la complexité d'un module de programme directement depuis le code source. Parmi les précurseurs de la métrique de logiciel, ils sont les indicateurs forts de la complexité de code. Du fait qu'ils soient appliqués au code, ils sont plus souvent utilisés comme une métrique de maintenance. Il est évident que les mesures Halstead sont aussi utiles durant le développement, pour accéder à la qualité du code dans les applications denses. Elles font partie des plus vieilles mesures de complexité de programme (introduites en 1977). Les métriques de Halstead sont basées sur l'interprétation du code comme une séquence de marqueurs, classifiés chacun comme étant un opérateur ou une opérande. nombre d'opérateurs uniques (distints)(n1) nombre d'opérandes uniques (distinctes)(n2) nombre total d'opérateurs (N1) nombre total d'opérandes (N2) Le nombre d'opérateurs et opérandes uniques (n1 et n2), aussi bien que le nombre total d'opérateurs et d'opérandes (N1 et N2) sont calculés en collectant les fréquences de chacun des opérateurs et opérandes pris dans le programme source. D'autres mesures sont dérivées de ces quatre quantités avec des formules décrites plus tard. Les Opérandes : Les marqueurs des catégories suivantes sont comptés comme des opérandes par CMT++ 1 IDENTIFIER Toutes les marques qui ne sont pas des mots réservés TYPENAME TYPESPEC CONSTANT (spécificateurs de type) Mots réservés qui spécifient le type : bool, char, double, float, int, long, short, signed, unsigned, void. Cette classe inclut aussi quelques mots clefs non standards spécifiques de compilateur. caractère, nombre, constante ou chaîne de caractères. 1 CMT++ et CMT JAVA : outils de mesure de complexité pour c++ et java. 12
13 Les opérateurs : Les marqueurs des catégories suivantes sont tous comptés comme opérateurs par les directives du pré processeurs de CMT++ (cependant, les marqueurs asm et this sont comptés comme opérandes) : SCSPEC TYPE_QUAL RESERVED OPERATOR (spécificateurs de classes de stockage) mots réservés qui spécifient la classe de stockage : auto, extern, inlin, register, static, typedef, virtual, mtuable. (qualifieurs de type) mots réservés qui qualifient le type : const, friend, volatile. Autres mots réservés de C++ : asm, break, case, class, continue, default, delete, do, else, enum, for, goto, if, new, operator, private, protected, public, return, sizeof, struct, switch, this, union, while, namespace, using, try, catch, throw, const_cast, static_cast, dynamic_cast, reinterpret_cast, typeid, template, explicit, true, false, typename. Cette classe inclut aussi quelques mots clefs non standards spécifiques de compilateur. Un des suivants :!!= % %= & && &= ( ) * *= =, = ->.... / /= : :: < << <<= <= = == > >= >> >>=? [ ] ^ ^= { } = ~ Les structures de contrôle suivantes case...: for (...) if (...) seitch (...) while for (...) et catch (... )sont traitées d'une manière spéciale.les ':' ';' et les parenthèses sont considérés comme étant une partie des constructions. Le cas et les ':' ';' ou les for (...) if (...) switch (...) while for (...) et catch (...) et les parenthèses sont comptés ensemble comme un opérateur. Les commentaires : COMMENTS Les commentaires délimités par /* et */ ou // et les nouvelles lignes n'appartiennent pas à l'ensemble de marques de C++, mais ils sont comptés par CMT++. 13
14 Le nombre d'opérateurs et opérandes uniques (n1 et n2), aussi bien que le nombre total d'opérateurs et opérandes (N1 et N2) sont calculés en collectant les fréquences de chaque opérateur et opérande trouvé dans le programme source. Toutes les autres mesures de Halstead sont dérivées des quatre quantités utilisant l'ensemble suivant de formules. La longueur du programme (N) : La longueur du programme (N) est la somme du nombre total d'opérateurs et d opérandes du programme : N = N1 + N2 La taille du vocabulaire (n) : La taille du vocabulaire (n) est la somme du nombre d'opérateurs et d opérandes uniques: n = n1 + n2 Le volume du programme (V) : Le volume du programme (V) est le contenu de l'information du programme, mesuré en bits mathématiques. Il est calculé avec la longueur du programme multipliée par le logarithme 2 de la taille du vocabulaire (n) : V=N* Log2(n) Le volume d'halstead (V) décrit la taille de l'implémentation d'un algorithme. Le calcul de V est basé sur le nombre d'opérations effectuées et d'opérandes gérées dans l'algorithme. Par conséquent V est moins sensible à la disposition du code que les mesures de lignes de code. Le volume d'une fonction devrait être au moins de 20 et au plus de Le volume d'une fonction, d'une ligne et sans paramètre, qui n'est pas vide est d'environ 20. Un volume plus grand que 1000 indique de la fonction comporte probablement trop de choses. Le volume d'un fichier devrait être d'au moins 100 et au plus Ces limites sont basées sur les volumes mesurés pour les fichiers pour lesquels LOCpro et v(g) sont près de leurs limites recommandées. Les limites de volume peuvent être utilisées pour une double vérification. CMT++ calcule les métriques de lignes de code suivantes : LOCphy: nombre de lignes physiques (total des lignes des fichiers source) LOCbl: nombre de lignes vides (une ligne vide comprennant un bloc de commentaires est considéré comme une ligne de commentaires) 14
15 LOCpro: nombre de lignes de programme (déclarations, définitions, directives, et code) LOCcom: nombre de lignes de commentaire v(g) : Le nombre cyclomatique de McCabe v(g) montre la complexité du flux de contrôle dans une partie du code. v(g) est le nombre de branches conditionnelles dans l'organigramme. La complexité cyclomatique (également référée comme complexité de programme ou complexité de McCabe) est le membre le plus largement répandu des métriques statiques. Il peut être considéré comme une large mesure de solidité et de confiance pour un programme. La complexité cyclomatique a été introduite par Thomas McCabe en Elle mesure le nombre de chemins linéaires indépendants dans un module de programme. La complexité McCabe est l'un des métriques de software les plus largement acceptées, elle est conçue pour être indépendante du langage et du format de langage. Le nombre cyclomatique McCabe v(g) est calculé à partir des définitions de fonctions (ou membres) et des déclarations de classes/structures. Il est calculé sur le fichier source en entier. Lorsque le test est concerné, le nombre cyclomatique v(g) est l'une des plus importantes mesures de complexité. Du fait que le nombre cyclomatique décrive la complexité du flux de contrôle, il est évident que les modules et les fonctions ayant un nombre cyclomatique élevé auront besoin de plus de cas de tests que les modules ayant un nombre cyclomatique plus bas. Comme principe de base, chaque fonction devrait avoir un nombre de cas de tests au moins égal au nombre cyclomatique. Le nombre cyclomatique d'une fonction devrait être inférieur à 15. Si une fonction a un nombre cyclomatique de 15, il y a au moins 15 (mais probablement plus) chemins d'exécution dans son contenu. Plus de 15 chemins sont difficiles à identifier et tester. Les fonctions contenant un état de sélection avec beaucoup de branches constituent une exception. Un nombre cyclomatique limite raisonnable maximum d'un fichier est de 100. En résumé, pour le calcul du nombre cyclomatique, les constructions de langage suivants incrémentent le nombre cyclomatique: if (...), for (...), while (...), case...:, catch (...), &&,,?, #if, #ifdef, #ifndef, #elif.. 15
16 Le niveau de difficulté (D) : Le niveau de difficulté ou propension d'erreurs du programme est proportionnel au nombre d'opérateurs uniques dans le programme. D est aussi proportionnel au ratio entre le nombre total d'opérandes et le nombre d'opérandes uniques (ex : si les mêmes opérandes sont utilisées plusieurs fois dans le programme, il est plus enclin aux erreurs) : D = ( n1 / 2 ) * ( N2 / n2 ) Le niveau de programme (L) : Le niveau de programme (L) est l'inverse de la propension d'erreurs du programme Ex : un programme de bas niveau est plus enclin aux erreurs qu'un programme de haut niveau. L = 1 / D L effort à l'implémentation (E) : L'effort à l'implémentation (E) ou la compréhension d'un programme est proportionnel au volume et au niveau de difficulté du programme : E = V * D Le temps pour implémenter (T) : Le temps pour implémenter ou comprendre un programme (T) est proportionnel à l'effort. Des expérimentations empiriques peuvent être utilisées pour le calibrage de cette quantité. Halstead a découvert que diviser l'effort par 18 donne une approximation pour le temps en secondes : T = E / 18 Le nombre de bugs fournis (B) : Le nombre de bugs fournis (B) corrèle avec la complexité globale du logiciel. Halstead donne la formule suivante pour B : B = ( E (2/3) ) / 3000 Les bugs livrés d'halstead sont une estimation du nombre d'erreurs dans l'implémentation. Les bugs livrés dans un fichier devraient être moins de 2. Des expériences ont montrées que, quand on programme en C ou C++, un fichier source contient presque toujours plus d'erreurs que B ne suggère. Le nombre de défaut tend à grandir plus rapidement que B. Quand le test de dynamique est concerné, la métrique de Halstead la plus importante est le nombre de bugs livrés. Ce nombre approche le nombre d'erreurs dans un module. Comme objectif, au moins autant d'erreurs que B indique devraient être trouvées pendant le test du module. 16
17 Analyse statique par interprétation abstraite. Les logiciels complexes comportant quasiment tous des erreurs, les chercheurs ont développé des méthodes de preuve de la correction des programmes. Ceci consiste à fournir une sémantique décrivant formellement les exécutions d'un programme, puis à démontrer un théorème exprimant que ces exécutions ont une certaine propriété (comme par exemple qu'un résultat attendu est fourni en un temps fini). Des résultats mathématiques fondamentaux montrent qu'il n'est pas possible de faire faire ces preuves automatiquement par des ordinateurs. Devant cette difficulté fondamentale, l'interprétation abstraite procède par approximation correcte de la sémantique. Si l'approximation est suffisamment grossière, elle est calculable par un ordinateur. Si elle est suffisamment fine, elle permet d'obtenir une preuve formelle de correction. L'objectif est donc de rechercher des approximations suffisamment précises et peu coûteuses à calculer. L'analyse statique par interprétation abstraite a été introduite par P. Cousot et R. Cousot 2. Elle s'appuie sur la sémantique des langages de programmation, l abstraction choisie sur le domaine de la sémantique et l analyseur statique pour décrire mathématiquement les comportements d'un programme informatique. Avec cette description, il est possible de vérifier statiquement (sans exécution du programme) des propriétés dynamiques, c'est-à-dire dépendantes de l'exécution (code mort, débordement de tableau, flot de données, etc.). A un programme P décrit dans un langage de programmation quelconque, on associe une sémantique concrète définissant le comportement de P. Cette sémantique est souvent trop "précise" et on ne peut pas vérifier le comportement du programme pour toutes les entrées possibles. La génération de tests pour les logiciels permet de choisir des valeurs particulières pour connaître si le programme P fait bien ce qu'on attend de lui, dans certains cas. Le "model checking"(spin/promela, etc.) modélise le programme sous une forme différente (réseaux de Pétri, automates, etc.) et teste exhaustivement tous les états du programme. L'explosion combinatoire empêche, dans une grande partie des cas, d'aboutir sur des résultats concluants. L'analyse statique peut permettre, grâce à l'utilisation de la logique de Hoare 3 de prouver certaines propriétés des programmes. (outil Caveat),
18 Ces propriétés peuvent être de différentes natures : - fonctionnelles : le système remplit la fonction attendue, - structurelles, par exemple l'absence de code mort ou encore la couverture des instructions par un ensemble de tests, - de sûreté, par exemple l'absence d'erreurs à l'exécution comme une division par zéro ou un blocage, - etc. L'interprétation abstraite modifie la sémantique concrète du programme en une sémantique abstraite, moins précise, permettant de limiter les états du programme. Par cette méthode, il est ainsi plus aisé de vérifier que, pour une certaine plage d'entrées, l'exécution du programme P ne génère pas certaines erreurs. L'avantage principal de cette méthode est de permettre une automatisation du procédé d'analyse. Cette technique se base sur des outils mathématiques telles que les fonctions monotones sur des ensembles ordonnés, en général des treillis. Il faut cependant montrer que la sémantique abstraite décrit correctement, par rapport à la sémantique concrète le comportement du programme même si une approximation est faite. La correspondance entre la sémantique abstraite et la sémantique concrète se fait par le biais d'une correspondance de Galois 4. Cette construction mathématique permet de définir la sémantique abstraite constructivement à partir de la sémantique concrète, et permet ainsi de garantir la correction de l'analyse. PolySpace C Verifier est un outil d analyse statique conçu par la compagnie PolySpace Technologies. Il détecte les erreurs pouvant survenir à l exécution dans les programmes en langage C en se servant de l interprétation abstraite. Cet outil n est pas gratuit, mais il est possible d en demander une copie d évaluation. Polyspace technologies et sa technologie unique au monde consiste à détecter les erreurs commises sur les programmes de logiciels embarqués. Avec ses deux produits phares, Polyspace Ada Verifier (Ariane v) et Polyspace C Verifier, cette PME détient 90 % du marché pour les systèmes embarqués (en 2001) et se positionne dans les domaines critiques (aéronautique, ferroviaire, l'automobile, l'énergie ou le médical)
19 III. Bibliographie des outils trouvés : Voici une liste des outils trouvés présentée par les tableaux suivants. Cette liste ne peut pas être exhaustive tant le nombre d outils d analyse statique est grand. 19
20 Les deux tableaux ci-dessous donnent un complément (fig. 3.1 et 3.2). 20
21 21
22 Des analyseurs syntaxiques sont aussi développés dans les universités. Conclusion. Nous avons vu que les outils d analyse statique peuvent répondre à beaucoup de questions telles que l analyse de métriques, les problèmes de fonctionnement d un programme, les problèmes liés à la sécurité, la qualité du développement Mais l analyse statique n est pas suffisante pour garantir le bon fonctionnement d un programme. En effet il y a toujours le problème de l indécidabilité de certaines actions, c est pour cela que l analyse statique doit être couplée à l analyse fonctionnelle. 22
Grandes lignes ASTRÉE. Logiciels critiques. Outils de certification classiques. Inspection manuelle. Definition. Test
Grandes lignes Analyseur Statique de logiciels Temps RÉel Embarqués École Polytechnique École Normale Supérieure Mercredi 18 juillet 2005 1 Présentation d 2 Cadre théorique de l interprétation abstraite
Plus en détailINITIATION AU LANGAGE C SUR PIC DE MICROSHIP
COURS PROGRAMMATION INITIATION AU LANGAGE C SUR MICROCONTROLEUR PIC page 1 / 7 INITIATION AU LANGAGE C SUR PIC DE MICROSHIP I. Historique du langage C 1972 : naissance du C dans les laboratoires BELL par
Plus en détail1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.
1. Structure d un programme C Un programme est un ensemble de fonctions. La fonction "main" constitue le point d entrée pour l exécution. Un exemple simple : #include int main() { printf ( this
Plus en détailIntroduction au langage C
Introduction au langage C Cours 1: Opérations de base et premier programme Alexis Lechervy Alexis Lechervy (UNICAEN) Introduction au langage C 1 / 23 Les premiers pas Sommaire 1 Les premiers pas 2 Les
Plus en détailProgrammer en JAVA. par Tama (tama@via.ecp.fr( tama@via.ecp.fr)
Programmer en JAVA par Tama (tama@via.ecp.fr( tama@via.ecp.fr) Plan 1. Présentation de Java 2. Les bases du langage 3. Concepts avancés 4. Documentation 5. Index des mots-clés 6. Les erreurs fréquentes
Plus en détailQualité du logiciel: Méthodes de test
Qualité du logiciel: Méthodes de test Matthieu Amiguet 2004 2005 Analyse statique de code Analyse statique de code Étudier le programme source sans exécution Généralement réalisée avant les tests d exécution
Plus en détailTP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile
TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile Dans ce TP, vous apprendrez à définir le type abstrait Pile, à le programmer en Java à l aide d une interface
Plus en détailLicence ST Université Claude Bernard Lyon I LIF1 : Algorithmique et Programmation C Bases du langage C 1 Conclusion de la dernière fois Introduction de l algorithmique générale pour permettre de traiter
Plus en détailLes structures de données. Rajae El Ouazzani
Les structures de données Rajae El Ouazzani Les arbres 2 1- Définition de l arborescence Une arborescence est une collection de nœuds reliés entre eux par des arcs. La collection peut être vide, cad l
Plus en détailCours 1 : La compilation
/38 Interprétation des programmes Cours 1 : La compilation Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr PPS - Université Denis Diderot Paris 7 2/38 Qu est-ce que la compilation? Vous avez tous déjà
Plus en détailClaude Delannoy. 3 e édition C++
Claude Delannoy 3 e édition Exercices Exercices C++ en en langage langage delc++ titre 4/07/07 15:19 Page 2 Exercices en langage C++ AUX EDITIONS EYROLLES Du même auteur C. Delannoy. Apprendre le C++.
Plus en détailIN 102 - Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C
IN 102 - Cours 1 Qu on le veuille ou non, les systèmes informatisés sont désormais omniprésents. Même si ne vous destinez pas à l informatique, vous avez de très grandes chances d y être confrontés en
Plus en détailINTRODUCTION A JAVA. Fichier en langage machine Exécutable
INTRODUCTION A JAVA JAVA est un langage orienté-objet pur. Il ressemble beaucoup à C++ au niveau de la syntaxe. En revanche, ces deux langages sont très différents dans leur structure (organisation du
Plus en détailCours d Algorithmique et de Langage C 2005 - v 3.0
Cours d Algorithmique et de Langage C 2005 - v 3.0 Bob CORDEAU cordeau@onera.fr Mesures Physiques IUT d Orsay 15 mai 2006 Avant-propos Avant-propos Ce cours en libre accès repose sur trois partis pris
Plus en détailCours d Algorithmique-Programmation 2 e partie (IAP2): programmation 24 octobre 2007impérative 1 / 44 et. structures de données simples
Cours d Algorithmique-Programmation 2 e partie (IAP2): programmation impérative et structures de données simples Introduction au langage C Sandrine Blazy - 1ère année 24 octobre 2007 Cours d Algorithmique-Programmation
Plus en détailCentre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :
Algorithmique et programmation : STRUCTURES DE DONNÉES A. Structure et enregistrement 1) Définition et rôle des structures de données en programmation 1.1) Définition : En informatique, une structure de
Plus en détailManuel d utilisation 26 juin 2011. 1 Tâche à effectuer : écrire un algorithme 2
éducalgo Manuel d utilisation 26 juin 2011 Table des matières 1 Tâche à effectuer : écrire un algorithme 2 2 Comment écrire un algorithme? 3 2.1 Avec quoi écrit-on? Avec les boutons d écriture........
Plus en détailLES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN
LES OUTILS D ALIMENTATION DU REFERENTIEL DE DB-MAIN Les contenues de ce document sont la propriété exclusive de la société REVER. Ils ne sont transmis qu à titre d information et ne peuvent en aucun cas
Plus en détailÉvaluation et implémentation des langages
Évaluation et implémentation des langages Les langages de programmation et le processus de programmation Critères de conception et d évaluation des langages de programmation Les fondations de l implémentation
Plus en détailPrénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004. Loc Jeudi 29/4/2004
Questionnaire d'examen final INF1101 Sigle du cours Nom : Signature : Prénom : Matricule : Sigle et titre du cours Groupe Trimestre INF1101 Algorithmes et structures de données Tous H2004 Professeur(s)
Plus en détailUE Programmation Impérative Licence 2ème Année 2014 2015
UE Programmation Impérative Licence 2 ème Année 2014 2015 Informations pratiques Équipe Pédagogique Florence Cloppet Neilze Dorta Nicolas Loménie prenom.nom@mi.parisdescartes.fr 2 Programmation Impérative
Plus en détailINF2015 Développement de logiciels dans un environnement Agile. Examen intra 20 février 2014 17:30 à 20:30
Examen intra 20 février 2014 17:30 à 20:30 Nom, prénom : Code permanent : Répondez directement sur le questionnaire. Question #1 5% Quelle influence peut avoir le typage dynamique sur la maintenabilité
Plus en détailRappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme
Rappel Ralf Treinen Université Paris Diderot UFR Informatique Laboratoire Preuves, Programmes et Systèmes treinen@pps.univ-paris-diderot.fr 6 mai 2015 Jusqu'à maintenant : un petit langage de programmation
Plus en détailProgrammation C++ (débutant)/instructions for, while et do...while
Programmation C++ (débutant)/instructions for, while et do...while 1 Programmation C++ (débutant)/instructions for, while et do...while Le cours du chapitre 4 : le for, while et do...while La notion de
Plus en détailJava Licence Professionnelle CISII, 2009-10
Java Licence Professionnelle CISII, 2009-10 Cours 4 : Programmation structurée (c) http://www.loria.fr/~tabbone/cours.html 1 Principe - Les méthodes sont structurées en blocs par les structures de la programmation
Plus en détailAssurance Qualité. Cours de génie logiciel. Renaud Marlet. LaBRI / INRIA http://www.labri.fr/~marlet. (d'après A.-M. Hugues) màj 23/04/2007
1 Cours de génie logiciel (d'après A.-M. Hugues) Assurance Qualité Renaud Marlet LaBRI / INRIA http://www.labri.fr/~marlet màj 23/04/2007 2 Les deux facettes de la qualité Conformité avec la définition
Plus en détailLES TYPES DE DONNÉES DU LANGAGE PASCAL
LES TYPES DE DONNÉES DU LANGAGE PASCAL 75 LES TYPES DE DONNÉES DU LANGAGE PASCAL CHAPITRE 4 OBJECTIFS PRÉSENTER LES NOTIONS D ÉTIQUETTE, DE CONS- TANTE ET DE IABLE DANS LE CONTEXTE DU LAN- GAGE PASCAL.
Plus en détailInfo0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java
Info0101 Intro. à l'algorithmique et à la programmation Cours 3 Le langage Java Pierre Delisle, Cyril Rabat et Christophe Jaillet Université de Reims Champagne-Ardenne Département de Mathématiques et Informatique
Plus en détailLe langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie
Chapitre I : Les bases du C++ Le langage C++ est un langage de programmation puissant, polyvalent, on serait presque tenté de dire universel, massivement utilisé dans l'industrie du logiciel, et ce depuis
Plus en détailSUPPORT DE COURS. Langage C
Dpt Informatique 2010-2011 SUPPORT DE COURS Langage C Semestre 1 par : «CaDePe» Marie-Françoise Canut Marianne de Michiel André Péninou Table des Matières 1 Généralités...8 1.1 Introduction aux langages
Plus en détailCours 1 : Qu est-ce que la programmation?
1/65 Introduction à la programmation Cours 1 : Qu est-ce que la programmation? Yann Régis-Gianas yrg@pps.univ-paris-diderot.fr Université Paris Diderot Paris 7 2/65 1. Sortez un appareil qui peut se rendre
Plus en détailChapitre 2. Classes et objets
Chapitre 2: Classes et Objets 1/10 Chapitre 2 Classes et objets Chapitre 2: Classes et Objets 2/10 Approche Orientée Objet Idée de base de A.O.O. repose sur l'observation de la façon dont nous procédons
Plus en détailIntroduction à Java. Matthieu Herrb CNRS-LAAS. Mars 2014. http://homepages.laas.fr/matthieu/cours/java/java.pdf
Introduction à Java Matthieu Herrb CNRS-LAAS http://homepages.laas.fr/matthieu/cours/java/java.pdf Mars 2014 Plan 1 Concepts 2 Éléments du langage 3 Classes et objets 4 Packages 2/28 Histoire et motivations
Plus en détail3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes
PLAN CYCLE DE VIE D'UN LOGICIEL EXPRESSION DES BESOINS SPÉCIFICATIONS DU LOGICIEL CONCEPTION DU LOGICIEL LA PROGRAMMATION TESTS ET MISE AU POINT DOCUMENTATION CONCLUSION C.Crochepeyre Génie Logiciel Diapason
Plus en détailACTIVITÉ DE PROGRAMMATION
ACTIVITÉ DE PROGRAMMATION The purpose of the Implementation Process is to realize a specified system element. ISO/IEC 12207 Sébastien Adam Une introduction 2 Introduction Ø Contenu Utilité de l ordinateur,
Plus en détailUtilisation de l analyse statique comme outil d aide au développement. par. Yves Gauthier
Utilisation de l analyse statique comme outil d aide au développement par Yves Gauthier essai présenté au Département d'informatique en vue de l'obtention du grade de maître en technologies de l information
Plus en détailCours de Génie Logiciel
Cours de Génie Logiciel Sciences-U Lyon Diagrammes UML (2) http://www.rzo.free.fr Pierre PARREND 1 Avril 2005 Sommaire Les Diagrammes UML Diagrammes de Collaboration Diagrammes d'etats-transitions Diagrammes
Plus en détailConventions d écriture et outils de mise au point
Logiciel de base Première année par alternance Responsable : Christophe Rippert Christophe.Rippert@Grenoble-INP.fr Introduction Conventions d écriture et outils de mise au point On va utiliser dans cette
Plus en détailBases de programmation. Cours 5. Structurer les données
Bases de programmation. Cours 5. Structurer les données Pierre Boudes 1 er décembre 2014 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike 3.0 License. Types char et
Plus en détailSuivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs)
Modularité Extensions Suivant les langages de programmation, modules plus avancés : modules imbriqués modules paramétrés par des modules (foncteurs) généricité modules de première classe : peuvent être
Plus en détailEPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE
EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE QCM Remarque : - A une question correspond au moins 1 réponse juste - Cocher la ou les bonnes réponses Barème : - Une bonne réponse = +1 - Pas de réponse = 0
Plus en détailTravaux pratiques. Compression en codage de Huffman. 1.3. Organisation d un projet de programmation
Université de Savoie Module ETRS711 Travaux pratiques Compression en codage de Huffman 1. Organisation du projet 1.1. Objectifs Le but de ce projet est d'écrire un programme permettant de compresser des
Plus en détailTraduction des Langages : Le Compilateur Micro Java
BARABZAN Jean-René OUAHAB Karim TUCITO David 2A IMA Traduction des Langages : Le Compilateur Micro Java µ Page 1 Introduction Le but de ce projet est d écrire en JAVA un compilateur Micro-Java générant
Plus en détailUE C avancé cours 1: introduction et révisions
Introduction Types Structures de contrôle Exemple UE C avancé cours 1: introduction et révisions Jean-Lou Desbarbieux et Stéphane Doncieux UMPC 2004/2005 Introduction Types Structures de contrôle Exemple
Plus en détailPour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère
L'héritage et le polymorphisme en Java Pour signifier qu'une classe fille hérite d'une classe mère, on utilise le mot clé extends class fille extends mère En java, toutes les classes sont dérivée de la
Plus en détailGénéralités sur le Langage Java et éléments syntaxiques.
Généralités sur le Langage Java et éléments syntaxiques. Généralités sur le Langage Java et éléments syntaxiques....1 Introduction...1 Genéralité sur le langage Java....1 Syntaxe de base du Langage...
Plus en détailSeance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.
Seance 2: Complétion du code de jeu. (durée max: 2h) Mot clé const et pointeurs: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu. Implémentez jeu_recupere_piece
Plus en détailÉléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if
Éléments d informatique Cours 3 La programmation structurée en langage C L instruction de contrôle if Pierre Boudes 28 septembre 2011 This work is licensed under the Creative Commons Attribution-NonCommercial-ShareAlike
Plus en détailbasée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML
basée sur le cours de Bertrand Legal, maître de conférences à l ENSEIRB www.enseirb.fr/~legal Olivier Augereau Formation UML http://olivier-augereau.com Sommaire Introduction I) Les bases II) Les diagrammes
Plus en détailLangage et Concepts de ProgrammationOrientée-Objet 1 / 40
Déroulement du cours Introduction Concepts Java Remarques Langage et Concepts de Programmation Orientée-Objet Gauthier Picard École Nationale Supérieure des Mines de Saint-Étienne gauthier.picard@emse.fr
Plus en détailRecherche dans un tableau
Chapitre 3 Recherche dans un tableau 3.1 Introduction 3.1.1 Tranche On appelle tranche de tableau, la donnée d'un tableau t et de deux indices a et b. On note cette tranche t.(a..b). Exemple 3.1 : 3 6
Plus en détailUEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.
UEO11 COURS/TD 1 Contenu du semestre Cours et TDs sont intégrés L objectif de ce cours équivalent a 6h de cours, 10h de TD et 8h de TP est le suivant : - initiation à l algorithmique - notions de bases
Plus en détailPlan. Exemple: Application bancaire. Introduction. OCL Object Constraint Language Le langage de contraintes d'uml
OCL Object Constraint Language Le langage de contraintes d'uml Plan 1. Introduction 2. Les principaux concepts d'ocl Object Constraint Language 1 Object Constraint Language 2 Exemple: une application bancaire
Plus en détailAlgorithmique et Programmation, IMA
Algorithmique et Programmation, IMA Cours 2 : C Premier Niveau / Algorithmique Université Lille 1 - Polytech Lille Notations, identificateurs Variables et Types de base Expressions Constantes Instructions
Plus en détailAnalyse de sécurité de logiciels système par typage statique
Contexte Modélisation Expérimentation Conclusion Analyse de sécurité de logiciels système par typage statique Application au noyau Linux Étienne Millon UPMC/LIP6 Airbus Group Innovations Sous la direction
Plus en détailChapitre 10. Les interfaces Comparable et Comparator 1
Chapitre 10: Les interfaces Comparable et Comparator 1/5 Chapitre 10 Les interfaces Comparable et Comparator 1 1 Ce chapitre a été extrait du document "Objets, Algorithmes, Patterns" de [René Lalement],
Plus en détailLes diagrammes de modélisation
L approche Orientée Objet et UML 1 Plan du cours Introduction au Génie Logiciel L approche Orientée Objet et Notation UML Les diagrammes de modélisation Relations entre les différents diagrammes De l analyse
Plus en détailCours intensif Java. 1er cours: de C à Java. Enrica DUCHI LIAFA, Paris 7. Septembre 2009. Enrica.Duchi@liafa.jussieu.fr
. Cours intensif Java 1er cours: de C à Java Septembre 2009 Enrica DUCHI LIAFA, Paris 7 Enrica.Duchi@liafa.jussieu.fr LANGAGES DE PROGRAMMATION Pour exécuter un algorithme sur un ordinateur il faut le
Plus en détailCours 1 : Introduction. Langages objets. but du module. contrôle des connaissances. Pourquoi Java? présentation du module. Présentation de Java
Langages objets Introduction M2 Pro CCI, Informatique Emmanuel Waller, LRI, Orsay présentation du module logistique 12 blocs de 4h + 1 bloc 2h = 50h 1h15 cours, 45mn exercices table, 2h TD machine page
Plus en détailSTAGE IREM 0- Premiers pas en Python
Université de Bordeaux 16-18 Février 2014/2015 STAGE IREM 0- Premiers pas en Python IREM de Bordeaux Affectation et expressions Le langage python permet tout d abord de faire des calculs. On peut évaluer
Plus en détailMachines virtuelles Cours 1 : Introduction
Machines virtuelles Cours 1 : Introduction Pierre Letouzey 1 pierre.letouzey@inria.fr PPS - Université Denis Diderot Paris 7 janvier 2012 1. Merci à Y. Régis-Gianas pour les transparents Qu est-ce qu une
Plus en détailI. Introduction aux fonctions : les fonctions standards
Chapitre 3 : Les fonctions en C++ I. Introduction aux fonctions : les fonctions standards A. Notion de Fonction Imaginons que dans un programme, vous ayez besoin de calculer une racine carrée. Rappelons
Plus en détailPrésentation du langage et premières fonctions
1 Présentation de l interface logicielle Si les langages de haut niveau sont nombreux, nous allons travaillé cette année avec le langage Python, un langage de programmation très en vue sur internet en
Plus en détail1 Recherche en table par balayage
1 Recherche en table par balayage 1.1 Problème de la recherche en table Une table désigne une liste ou un tableau d éléments. Le problème de la recherche en table est celui de la recherche d un élément
Plus en détailPolymorphisme, la classe Object, les package et la visibilité en Java... 1
Polymorphisme, la classe Object, les package et la visibilité en Java. Polymorphisme, la classe Object, les package et la visibilité en Java.... 1 Polymorphisme.... 1 Le DownCast... 4 La Classe Object....
Plus en détailCours 1 : Introduction Ordinateurs - Langages de haut niveau - Application
Université de Provence Licence Math-Info Première Année V. Phan Luong Algorithmique et Programmation en Python Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application 1 Ordinateur Un
Plus en détailTP 1. Prise en main du langage Python
TP. Prise en main du langage Python Cette année nous travaillerons avec le langage Python version 3. ; nous utiliserons l environnement de développement IDLE. Étape 0. Dans votre espace personnel, créer
Plus en détailProgrammation C. Apprendre à développer des programmes simples dans le langage C
Programmation C Apprendre à développer des programmes simples dans le langage C Notes de cours sont disponibles sur http://astro.u-strasbg.fr/scyon/stusm (attention les majuscules sont importantes) Modalités
Plus en détailNotions fondamentales du langage C# Version 1.0
Notions fondamentales du langage C# Version 1.0 Z 2 [Notions fondamentales du langage Csharp] [Date : 25/03/09] Sommaire 1 Tout ce qu il faut savoir pour bien commencer... 3 1.1 Qu est ce qu un langage
Plus en détailInitiation à la programmation en Python
I-Conventions Initiation à la programmation en Python Nom : Prénom : Une commande Python sera écrite en caractère gras. Exemples : print 'Bonjour' max=input("nombre maximum autorisé :") Le résultat de
Plus en détailAnnexe : La Programmation Informatique
GLOSSAIRE Table des matières La Programmation...2 Les langages de programmation...2 Java...2 La programmation orientée objet...2 Classe et Objet...3 API et Bibliothèque Logicielle...3 Environnement de
Plus en détail1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)
1/4 Objectif de ce cours /4 Objectifs de ce cours Introduction au langage C - Cours Girardot/Roelens Septembre 013 Du problème au programme I passer d un problème exprimé en français à la réalisation d
Plus en détailConception des systèmes répartis
Conception des systèmes répartis Principes et concepts Gérard Padiou Département Informatique et Mathématiques appliquées ENSEEIHT Octobre 2012 Gérard Padiou Conception des systèmes répartis 1 / 37 plan
Plus en détailCorrigé des exercices sur les références
Corrigé des exercices sur les références Exercice 3.1.1 dessin Pour cet exercice, vous allez dessiner des structures de données au moyen de petits schémas analogues à ceux du cours, comportant la pile
Plus en détailProgrammation en C/C++
INSA de Lyon Département Génie Electrique Module IF1,IF3,IF4 Programmation en C/C++ Thomas Grenier Nicolas Ducros Tanneguy Redarce Lyon, le 3 mars 2015 2 / 63 Table des matières 1 Développement en C++
Plus en détailInitiation. àl algorithmique et à la programmation. en C
Initiation àl algorithmique et à la programmation en C Initiation àl algorithmique et à la programmation en C Cours avec 129 exercices corrigés Illustration de couverture : alwyncooper - istock.com Dunod,
Plus en détailConception de circuits numériques et architecture des ordinateurs
Conception de circuits numériques et architecture des ordinateurs Frédéric Pétrot Année universitaire 2014-2015 Structure du cours C1 C2 C3 C4 C5 C6 C7 C8 C9 C10 C11 Codage des nombres en base 2, logique
Plus en détailMICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C
Haute Ecole d Ingénierie et de Gestion Du Canton du Vaud MICROINFORMATIQUE NOTE D APPLICATION 1 (REV. 2011) ARITHMETIQUE EN ASSEMBLEUR ET EN C Programmation en mode simulation 1. DOCUMENTS DE RÉFÉRENCE...
Plus en détailas Architecture des Systèmes d Information
Plan Plan Programmation - Introduction - Nicolas Malandain March 14, 2005 Introduction à Java 1 Introduction Présentation Caractéristiques Le langage Java 2 Types et Variables Types simples Types complexes
Plus en détailSHERLOCK 7. Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5
SHERLOCK 7 Version 1.2.0 du 01/09/09 JAVASCRIPT 1.5 Cette note montre comment intégrer un script Java dans une investigation Sherlock et les différents aspects de Java script. S T E M M E R I M A G I N
Plus en détailExceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;
CNAM NFP121 TP 10 19/11/2013 (Séance 5) Objectif Manipuler les exceptions ; 1 Entrées/sorties Exercice 1 : Lire un entier à partir du clavier Ajouter une méthode readint(string message) dans la classe
Plus en détailCours d introduction à l informatique. Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions
Cours d introduction à l informatique Partie 2 : Comment écrire un algorithme? Qu est-ce qu une variable? Expressions et instructions Qu est-ce qu un Une recette de cuisine algorithme? Protocole expérimental
Plus en détailContexte et motivations Les techniques envisagées Evolution des processus Conclusion
Vérification de logiciels par analyse statique Contexte et motivations Les techniques envisagées Evolution des processus Conclusion Contexte et motivations Specification Design architecture Revues and
Plus en détailTest et Validation du Logiciel
Test et Validation du Logiciel McInfo4_ASR Tests Janvier 2009 Patrick FELIX patrick.felix@labri.fr IUT Bordeaux 1 Plan Introduction : Pourquoi de la VVT? 1 Introduction au test de logiciels 2 Le test fonctionnel
Plus en détailInformatique Générale
Informatique Générale Guillaume Hutzler Laboratoire IBISC (Informatique Biologie Intégrative et Systèmes Complexes) guillaume.hutzler@ibisc.univ-evry.fr Cours Dokeos 625 http://www.ens.univ-evry.fr/modx/dokeos.html
Plus en détailCOMMUNICATEUR BLISS COMMANDE PAR UN SENSEUR DE POSITION DE L'OEIL
COMMUNICATEUR BLISS COMMANDE PAR UN SENSEUR DE POSITION DE L'OEIL J. TICHON(1) (2), J.-M. TOULOTTE(1), G. TREHOU (1), H. DE ROP (2) 1. INTRODUCTION Notre objectif est de réaliser des systèmes de communication
Plus en détailPlan du cours. Historique du langage http://www.oracle.com/technetwork/java/index.html. Nouveautés de Java 7
Université Lumière Lyon 2 Faculté de Sciences Economiques et Gestion KHARKIV National University of Economic Introduction au Langage Java Master Informatique 1 ère année Julien Velcin http://mediamining.univ-lyon2.fr/velcin
Plus en détailIntroduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr
Introduction à la programmation orientée objet, illustrée par le langage C++ Patrick Cégielski cegielski@u-pec.fr Mars 2002 Pour Irène et Marie Legal Notice Copyright c 2002 Patrick Cégielski Université
Plus en détailIntroduction à l algorithmique et à la programmation M1102 CM n 3
Introduction à l algorithmique et à la programmation M1102 CM n 3 DUT Informatique 1 re année Eric REMY eric.remy@univ-amu.fr IUT d Aix-Marseille, site d Arles Version du 2 octobre 2013 E. Remy (IUT d
Plus en détailVérification et Validation
Vérification et Validation Génie Logiciel Master 1 II Mihaela Sighireanu Objectifs I. Introduire la vérification et la validation (V&V) du logiciel et comprendre leurs différences. II.Définir le plan de
Plus en détailStructure d un programme et Compilation Notions de classe et d objet Syntaxe
Cours1 Structure d un programme et Compilation Notions de classe et d objet Syntaxe POO 1 Programmation Orientée Objet Un ensemble d objet qui communiquent Pourquoi POO Conception abstraction sur les types
Plus en détailASR1 TD7 : Un microprocesseur RISC 16 bits
{Â Ö Ñ º ØÖ Ý,È ØÖ ºÄÓ Ù,Æ ÓÐ ºÎ ÝÖ Ø¹ ÖÚ ÐÐÓÒ} Ò ¹ÐÝÓÒº Ö ØØÔ»»Ô Ö Óº Ò ¹ÐÝÓÒº Ö» Ö Ñ º ØÖ Ý»¼ Ö½» ASR1 TD7 : Un microprocesseur RISC 16 bits 13, 20 et 27 novembre 2006 Présentation générale On choisit
Plus en détailCOMPARAISONDESLANGAGESC, C++, JAVA ET
REPUBLIQUE DU BENIN *******@******* MINISTERE DE L ENSEIGNEMENT SUPERIEUR ET DE LA RECHERCHE SCIENTIFIQUE(MESRS) *******@******* UNIVERSITE D ABOMEY CALAVI(UAC) *******@******* ECOLE POLYTECHNIQUE D ABPOMEY
Plus en détailPROJET ALGORITHMIQUE ET PROGRAMMATION II
PROJET 1 ALGORITHMIQUE ET PROGRAMMATION II CONTENU DU RAPPORT A RENDRE : o Fiche signalétique du binôme o Listing des différents fichiers sources o CD sources o Il sera tenu compte de la présentation du
Plus en détailCours Informatique Master STEP
Cours Informatique Master STEP Bases de la programmation: Compilateurs/logiciels Algorithmique et structure d'un programme Programmation en langage structuré (Fortran 90) Variables, expressions, instructions
Plus en détailC++ Programmer. en langage. 8 e édition. Avec une intro aux design patterns et une annexe sur la norme C++11. Claude Delannoy
Claude Delannoy Programmer en langage C++ 8 e édition Avec une intro aux design patterns et une annexe sur la norme C++11 Groupe Eyrolles, 1993-2011. Groupe Eyrolles, 2014, pour la nouvelle présentation,
Plus en détailProgrammation Objet - Cours II
Programmation Objet - Cours II - Exercices - Page 1 Programmation Objet - Cours II Exercices Auteur : E.Thirion - Dernière mise à jour : 05/07/2015 Les exercices suivants sont en majorité des projets à
Plus en détailProgrammation en Java IUT GEII (MC-II1) 1
Programmation en Java IUT GEII (MC-II1) 1 Christophe BLANC - Paul CHECCHIN IUT Montluçon Université Blaise Pascal Novembre 2009 Christophe BLANC - Paul CHECCHIN Programmation en Java IUT GEII (MC-II1)
Plus en détailTP1 : Initiation à Java et Eclipse
TP1 : Initiation à Java et Eclipse 1 TP1 : Initiation à Java et Eclipse Systèmes d Exploitation Avancés I. Objectifs du TP Ce TP est une introduction au langage Java. Il vous permettra de comprendre les
Plus en détailCette application développée en C# va récupérer un certain nombre d informations en ligne fournies par la ville de Paris :
Développement d un client REST, l application Vélib 1. Présentation L application présentée permet de visualiser les disponibilités des vélos et des emplacements de parking à la disposition des parisiens
Plus en détail