10 septembre 2006

Initiation à la programmation

Qu'est-ce que la programmation ?

"La programmation est l'art d'écrire un programme !"

Malheureusement, force est de constater, que ce soit chez les étudiants ou même chez les professionnels, que parfois, les programmes sont mal conçus, mal écrits, peu robustes, ou qu'ils ne correspondent pas aux désirs du client.

Il est des domaines d'application où ce genre de comportement est inacceptable (avionique, médical, nucléaire). D'une façon générale, un programme instable ou peu performant est extrêmement mal perçu par le client, et l'image de l'entreprise ou la réputation de l'auteur s'en trouve largement ternie. Il faut donc prendre des mesures pour éviter ça.

"La bonne programmation est l'art d'écrire correctement un programme !"

Le secret de la réussite d'un projet informatique tient en trois points essentiels :
  • Une conception solide
  • Une réalisation impeccable
  • Une vérification profonde
Il s'agit donc de mettre en oeuvre, de la meilleure façon possible, la succession d'étapes qui permet de traduire une application en un langage compréhensible par une machine. Les étapes principales sont :
  • La définition du projet (que veux-t-on faire ?)
  • La conception du projet (comment allons-nous le faire ?)
  • La réalisation (transcription du comportement en algorithmes, automates, fonctions)
  • Le codage dans un langage de programmation (C, Ada, Pascal, PhP etc.)
  • La traduction en langage machine (assembleur, compilateur, interpréteur)
L'ensemble de ses opérations s'inscrit dans le schéma plus général de la gestion d'un projet qui se décompose en 5 phases principales :
  1. La définition
  2. La conception
  3. La réalisation
  4. L'intégration
  5. La validation
La programmation concerne principalement les phases 1 à 4 de la gestion d'un projet, avec une insistance particulière sur le point 3. Elle consiste donc à maitriser l'ensemble de ces phases.

1 - La définition
C'est l'étape initiale qui permet de définir le projet. Par définition, on entend :

  • La spécification des interfaces (IHM, autres machines, fichiers)
  • La spécification des comportements (Normal, Extrême, Hors limite)
  • La specification des performances minimales attendues
2 - La conception

Cette étape découle obligatoirement de la précédente. L'ensemble des caractéristiques spécifiées est regroupé en grandes entités appelées blocs fonctionnels (BF), puis, chaque BF est découpé en entités plus petites selon une hiérarchie de type arborescente.

Les comportements sont décrits en détail par des algorithmes ou des machines à états. Les interfaces sont pris en compte. Des choix technologiques peuvent être effectués (qui fait quoi, matériel, logiciel). Il peut être choisi de recourir à des technologies plus ou moins existantes ou innovantes. Ces choix sont importants et déterminent en grande partie la réussite du projet.

La phase de conception est difficile et nécessite une bonne expérience et une certaine intuition. A ma connaissance, il n'existe pas de recette miracle ni de méthode toute faite pour réaliser une bonne conception

3 - La réalisation

C'est ici qu'intervient tout l'art du programmeur. Les phases précédentes sont essentielles, mais n'ont fait que préparer le terrain. Il s'agit maintenant de passer au choses sérieuses, au concret, au réel.

La conception fixe le cadre du développement. Elle défini les sous ensembles, les blocs fonctionnels et les comportements détaillés.

Une bonne méthode de réalisation d'un composant logiciel quelconque consiste à écrire les tests unitaires qui vérifient la conformité du composant en terme d'interface, de comportement et de performances, puis d'écrire le composant lui-même, et de vérifier le comportement au fur et à mesure.

Une bonne réalisation est aussi basée sur une connaissance approfondie du langage que l'on utilise. En effet, il est absolument primordial de s'assurer qu'en aucun cas, il ne puisse se produire de comportement indéfini (Undefined Behaviour ou UB). Le UB est la plaie du programmeur. Il en suffit d'un pour semer le doute sur la fiabilité du programme en entier.

Il faut donc être absolument sûr que chaque ligne de code est écrite dans le respect absolu de la définition du langage. C'est particulièrement vrai avec des langages 'souples' et au typage faible comme le C.

Il est important de souligner que les conséquences d'un UB étant imprévisibles par définition, il est illusoire de compter sur les tests pour le révéler. Encore une fois, seule une excellente maitrise du langage, éventuellement confirmée par une lecture croisée (travail en binôme) est à même de garantir la qualité d'un code en terme d'absence de comportements indéfinis.

Ensuite, le test sert à vérifier la conformité du code aux spécifications (nominales, extrêmes, hors limites).

4 - Intégration

C'est l'assemblage des composants et vue de réaliser le produit final. Les composants étant testés et réputés fiables, seuls les comportements globaux sont testés.

5 - Validation

C'est tout simplement la vérification de la conformité du produit à ses spécifications.

1 septembre 2006

Introduction

Bonjour,

En prolongement de mon site http://www.bien-programmer.fr/ consacré à la programmation, je crée ce blog destiné à améliorer l'interactivité avec le site.

Voici quelles seront les têtes de chapitres

  • Initiation à la programmation
  • Notions d'algorithmique
  • Initiation au langage C
  • Organisation du développement
  • Algorithmique en C
  • Pièges à éviter en C
  • C avancé
  • Programmation système
A bientôt

Emmanuel Delahaye