Introduction Aux Systèmes d’Information et Multimédia

41
Introduction Aux Systèmes d’Information et Multimédia T. Bourdeaud’huy S. Collart-Dutilleul P. Kubiak IG 2 I - Saison 2006/2007 ASP / Pages Web Statiques

description

Introduction Aux Systèmes d’Information et Multimédia. ASP / Pages Web Statiques. T. Bourdeaud’huy S. Collart-Dutilleul P. Kubiak IG 2 I - Saison 2006/2007. Séance 3. QCM Objet Server Bases de données Accès au Système de fichiers du serveur (à présenter APRES global.asa) - PowerPoint PPT Presentation

Transcript of Introduction Aux Systèmes d’Information et Multimédia

Page 1: Introduction Aux Systèmes d’Information et Multimédia

Introduction Aux Systèmes d’Information et Multimédia

Introduction Aux Systèmes d’Information et Multimédia

T. Bourdeaud’huy S. Collart-Dutilleul

P. KubiakIG2I - Saison 2006/2007

ASP / Pages Web StatiquesASP / Pages Web Statiques

Page 2: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 2 T. Bourdeaud’huy – IG2I Saison 2006-2007

Séance 3Séance 3

QCM

Objet Server– Bases de données– Accès au Système de fichiers du serveur

– (à présenter APRES global.asa)

Fichier Global.asa Gestion des erreurs

Rappel : – Exemples de CTP sur le cours ReM2

Page 3: Introduction Aux Systèmes d’Information et Multimédia

OBJET SERVEROBJET SERVER

Page 4: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 4 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet SERVERObjet SERVER Représente le serveur Web et le moteur ASP Propriété

– ScriptTimeout : Temps maximum d'exécution des scripts ASP (90 secondes par défaut)

Méthodes – CreateObject(ObjectID) :

Crée une instance du composant serveur identifié par l'ObjectID – GetLastError :

Renvoie une instance d'objet ASPError représentant la dernière erreur survenue – HTMLEncode(chaine) :

Applique les règles d'encodage et de syntaxe du HTML à la chaîne de caractères passée en paramètre – URLEncode(chaine) :

Applique les règles d'encodage des URLs à la chaîne de caractères passée en paramètre – MapPath :

Transforme un chemin relatif ou virtuel pointant vers une ressource du site en un chemin physique– Execute(url) :

Exécute le script ASP indiqué par l'URL, puis rend la main au script appelant– Transfer(url) :

Exécute le script ASP indiqué par l'URL, sans rendre la main au script appelant

Exercice 20 : – Utiliser la fonction URLEncode pour passer un message dans l’url contenant les caractères spéciaux : <, &, = – Utiliser la fonction HTMLEncode pour afficher ce texte– Utiliser la fonction execute pour exécuter un script situé sur une autre page– Tester la fonction Mappath pour connaître le répertoire correspondant à votre répertoire partagé \\webasp\login$

sur le serveur

Page 5: Introduction Aux Systèmes d’Information et Multimédia

BASES DE DONNEESBASES DE DONNEES

Page 6: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 6 T. Bourdeaud’huy – IG2I Saison 2006-2007

Connexion à une base de données

Connexion à une base de données

Création d’un objet de connexion ODBC– SET objetConn = Server.CreateObject("ADODB.Connection")

Méthodes – Open("Nom_Lien_ODBC") : Ouverture de la base– Close : Fermeture de la base– Execute("Commande SQL") : Exécute une requête SQL

Renvoie un objet recordset

Ex : SET recordSet = objetConn.execute(SQL)

Page 7: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 7 T. Bourdeaud’huy – IG2I Saison 2006-2007

Sources de données ODBC

Sources de données ODBC

ODBC : Object Database Connectivity Source de données : DSN : Data Source Name

Privilèges d’Administration du Serveur : création de la source dans Panneau de Configuration/Administration/Sources de données ODBC/DSN Système

Chaînes sans DSN : spécifier driver & chemin de la BDD– "DBQ=" & Server.Mappath("mabase.mdb") & ";Driver={Microsoft Access

Driver (*.mdb)};DriverId=25" 

– "Provider=Microsoft.Jet.OLEDB.4.0;Data Source=" & Server.mappath("compteur.mdb")

– Cf. moodle : syntaxe à respecter strictement

Page 8: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 8 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet RecordSetObjet RecordSet

Propriétés– Eof Plus d’enregistrement disponible

Collections– Fields : Enregistrements retournés (cas SELECT)

– Accès à des sous-éléments :

– rs.fields(0) : Premier champ de l’enregistrement

– rs.fields.count : Nombre de champs

– rs.fields(0).name : Nom du champ

Méthodes– MoveNext Passer à l’enregistrement suivant

– MoveFirst Retourner au premier enregistrement

– Move <n> Passer <n> enregistrements

Page 9: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 9 T. Bourdeaud’huy – IG2I Saison 2006-2007

Rappels de SQL (Structured Query Language)

Rappels de SQL (Structured Query Language)

SELECT [DISTINCT] <*|champ1,champ2> FROM `<Table>` SELECT … WHERE <ChampTexte>=‘<valeur>’ SELECT … WHERE <ChampNum>=<valeurNum> SELECT … WHERE <Champ> LIKE ‘%<valeur>%’ SELECT … WHERE <Champ> IN (‘val1’,’val2’) SELECT … WHERE <Champ> BETWEEN <Num1> AND <Num2> SELECT … WHERE … ORDER BY <champ1> ASC|DESC, … INSERT INTO <Table>(<champ1>, …) VALUES (‘<val1>’,…) DELETE FROM <Table> WHERE … UPDATE <Table> WHERE … SET <champ1>=‘<val1>’, …

Page 10: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 10 T. Bourdeaud’huy – IG2I Saison 2006-2007

ExercicesExercices

Exercice 21 : Modifier l’exemple d’identification pour lire les données à partir de la base de données– Ajouter des scripts d’administration : ajout, suppression et

modification des logins et passwords

Exercice 22 : Créer une page permettant d’entrer et d’exécuter une requête SQL quelconque – Afficher ses résultats dans le cas d’une requête de sélection

Page 11: Introduction Aux Systèmes d’Information et Multimédia

Système de fichiers du serveurSystème de fichiers du serveur

+ d’infos : poly compléments ASP sur moodle

Page 12: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 12 T. Bourdeaud’huy – IG2I Saison 2006-2007

Accès au système de fichiers

Accès au système de fichiers

Objet FILESYSTEMOBJECT : permet d’accéder aux fichiers et répertoires et disques du serveur

Création d’un objet de connexion au fichier systèmeSet OFS = Server.CreateObject("Scripting.FileSystemObject")

Permet de– Créer des objets d’accès aux disques– Créer des objets d’accès aux répertoires– Disposer de méthodes de manipulation des fichiers et répertoires– …

Rappel : chemin d’accès physique à un fichier :– cheminFichier = Server.MapPath("nom_fichier")

Page 13: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 13 T. Bourdeaud’huy – IG2I Saison 2006-2007

Disques : Objets DRIVE

Disques : Objets DRIVE

Collection DRIVES de FileSystemObject – Éléments de type DRIVE

Propriétés d’un objet « DRIVE » :DriveLetter : Lettre de lecteur

DriveType : Type du disque (0 : inconnu, 1 : Amovible, 2 : Fixe, 3 : Réseau, 4 : CD-Rom, 5 : Lecteur

RAM)

IsReady : Le média est inséré ou non

AvailableSpace : Espace disponible (également FreeSpace)

TotalSize : Espace disque total

VolumeName : Nom du disque

RootFolder : Objet FOLDER représentant la racine

… Exercice 23 : lister les lecteurs du serveurs

Page 14: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 14 T. Bourdeaud’huy – IG2I Saison 2006-2007

Répertoires : Objets FOLDER

Répertoires : Objets FOLDER

Propriétés– Name, Size, Attributes– DateCreated, DateLastAccessed, DateLastModified– ParentFolder : Objet FOLDER contenant son répertoire parent

Méthodes– Copy (chemin physique) : Copie le répertoire– Delete : Supprime le répertoire– Move (chemin physique) : Déplace le répertoire

Collections– Files : Objets FILE représentant les fichiers du répertoire– SubFolders : Objets FOLDER représentant ses sous-répertoires

Exercice 24 : lister les noms des sous-répertoires d’une lecteur– Version récursive avec une fonction

Page 15: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 15 T. Bourdeaud’huy – IG2I Saison 2006-2007

Fichiers : Objets FILE

Fichiers : Objets FILE

Propriétés

– Attributes, Datecreated, Datelastaccessed, Datelastmodified

– Name, Path, Size, Type

– Parentfolder : Objet FOLDER représentant le parent Méthodes

– Copy (chemin physique) : Copie le fichier

– Delete : Supprime le fichier

– Move (chemin physique) : Déplace le fichier

– Openastextstream (IOMode) Ouvre le fichier et retourne un objet TEXTSTREAM

– IOMode 1/ForReading | 2/ForWriting | 8/ForAppending

Exercice 25 : Ajouter à l’exercice précédent les noms des fichiers

Page 16: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 16 T. Bourdeaud’huy – IG2I Saison 2006-2007

Fichiers Ouverts : Objets TEXTSTREAM

Fichiers Ouverts : Objets TEXTSTREAM

Propriété– AtEndOfLine, AtEndOfStream, Column, Line : position courante

Méthodes– Close() – Read(max) : Lit un nombre donné de caractères– ReadAll () : Lit le contenu intégral de l’objet– ReadLine() : Lit une ligne entière

– Write text : Écrit une chaîne– WriteLine text : Écrit une chaîne et ajoute le saut de ligne

Exercice 26 : proposer d’ouvrir un des fichiers listés pour l’afficher

Page 17: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 17 T. Bourdeaud’huy – IG2I Saison 2006-2007

Méthodes de l’Objet FILESYSTEMOBJECT Méthodes de l’Objet

FILESYSTEMOBJECT

Manipulation fichiers : – CopyFile, MoveFile, CreateTextFile, DeleteFile, FileExists, OpenTextFile, GetFile

Manipulation répertoires : – CopyFolder, MoveFolder, CreateFolder, DeleteFolder, FolderExists, GetFolder

Créer un nouveau fichier texte– CreateTextFile(nom_fichier, [BoolEcraser])

Ouvrir un fichier texte – OpenTextFile(nom_fichier, IOMode)

Exercice 27 : proposer la création de nouveaux fichiers Exercice 28 : Améliorer le formulaire de saisie d’une requête quelconque en

listant (champ select) les bases de données disponibles

Page 18: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 18 T. Bourdeaud’huy – IG2I Saison 2006-2007

Méthodes de l’Objet FILESYSTEMOBJECT

Méthodes de l’Objet FILESYSTEMOBJECT

Manipulation des noms de fichiers :

GETBASENAME(chemin) – Nom du dernier composant du chemin

GETEXTENSIONNAME(chemin) – Retourne l’extension du fichier

GETFILENAME (chemin) – Extrait et retourne le nom de fichier

GETPARENTFOLDERNAME (chemin) – Retourne le parent d’un chemin

Page 19: Introduction Aux Systèmes d’Information et Multimédia

GLOBAL.ASAGLOBAL.ASA

Page 20: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 20 T. Bourdeaud’huy – IG2I Saison 2006-2007

Fichier Global.asa /1Fichier Global.asa /1 Fichier unique placé dans le répertoire racine du site

– Il comporte quatre sous-routines exécutées lors de la création et suppression des objets application et session

– Permet la définition de paramètres (et variables) globaux– Session.Timeout, Server.ScriptTimeout

Structure<SCRIPT Language="VBScript" RUNAT="Server">

Sub Application_OnStart' action à exécuter lors du démarrage de l'application ‘ seuls objets autorisés : application et serveur

END SUBSUB Application_OnEnd

' actions à réaliser lors de l’arrêt du Site.END SUB

Page 21: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 21 T. Bourdeaud’huy – IG2I Saison 2006-2007

Fichier Global.asa /2Fichier Global.asa /2

SUB Session_OnStart

' action à exécuter lors de la création d’une nouvelle session

END SUB

SUB Session_OnEnd

' actions à réaliser lors de la fermeture de la session

END SUB

</SCRIPT>

Exercice 29 : Définir un mécanisme de comptage du nombre d’utilisateurs en ligne

Page 22: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 22 T. Bourdeaud’huy – IG2I Saison 2006-2007

Global.asaObjets Statiques

Global.asaObjets Statiques

Section <object> Les objets déclarés dans la section object ne sont pas instanciés avant

d'être appelés dans un script Utilisés dans les collections StaticObjects des objets session et application

Structure <Object RunAt="Server"

Scope="Session|Application" Id="Identifiant" {ProgId="ProgId"|ClassId="ClassId"}>

</Object>

Exemples<Object RunAt="Server" Scope="Session" Id="Connection_id"

ProgId="ADODB.Connection"> </Object> <OBJECT runat="Server" scope="Session" id="MyADRot"

progid="MSWC.ADRotator"> </OBJECT>

Page 23: Introduction Aux Systèmes d’Information et Multimédia

Gestion des ErreursGestion des Erreurs

Objet ASPERROR : Version 3.0 d’ASP

Page 24: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 24 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet ERRObjet ERR

ON ERROR RESUME NEXT – Active une gestion d’erreur spécifique

Propriétés– DESCRIPTION : Description de l’erreur– HELPCONTEXT : Identifiant d’une rubrique d’aide– HELPFILE : Chemin du fichier d’aide– NUMBER : Code de l’erreur– SOURCE : Source de l’erreur

Méthodes– CLEAR() Réinitialisation des propriétés

Page 25: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 25 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet ASPERRORObjet ASPERROR Permet de recueillir des informations sur les erreurs survenues lors de

l'exécution du code ASP de la page Utile pour les pages de traitement des erreurs e.g. custom500.asp

Création : méthode GetLastError de l’Objet SERVER– SET Error = Server. GetLastError

Propriétés (lecture seule)– ASPCode : Code d’erreur– ASPDescription : Description détaillée de l’erreur– Category : Code source responsable de l’erreur– Column : Numéro de colonne de l’erreur – Description : Description courte de l’erreur– File : Nom du fichier traité lorsque l’erreur s’est produite– Line : Numéro de ligne de l’erreur– Number : Numéro de l’erreur COM standard– Source : Code source responsable de l’erreur

Page 26: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 26 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet RegExpObjet RegExp

SET oRegExp = NEW REGEXP Propriétés

– GLOBAL Indique si la recherche doit être effectuée pour toutes les occurrences de la chaîne ou seulement la 1ère

– IGNORECASE Indique si la chaîne est sensible à la casse– PATTERN Indique la chaîne modèle à rechercher

Méthodes– EXECUTE(str) Retourne un objet collection MATCHES contenant

les informations relatives à la comparaison– REPLACE(str1,str2) Remplace toutes les sous-chaînes trouvées

par une autre– TEST str Retourne un booléen indiquant si la recherche s’est

effectuée avec succès

Page 27: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 27 T. Bourdeaud’huy – IG2I Saison 2006-2007

Objet MatchObjet Match

Propriétés– FIRSTINDEX Indique la position dans la chaîne source où

l’expression régulière a été rencontrée– LENGTH Indique le nombre de caractères correspondant dans la

chaîne– VALUE Le texte trouvé dans la chaîne

Collection MATCHES : – Propriétés COUNT et ITEM

Page 28: Introduction Aux Systèmes d’Information et Multimédia

AnnexesAnnexes

Administration du Server Composants additionnels Conventions de Nommage Critères d’évaluation des CTP et exercices

Page 29: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 29 T. Bourdeaud’huy – IG2I Saison 2006-2007

Composants AdditionnelsComposants Additionnels

Cdont : Envoi de Mails AcxImage : Génération d’images

Cf. http://www.laltruiste.comAdRotator Afficher des annonces différentes à chaque affichage d'une page ASP BrowserType Indiquer les caractéristiques du navigateur du client ContentRotator Afficher un texte différent à chaque affichage d'une page ASPCounters Gérer des compteurs permanents IISLog Administrer /Explorer un fichier journal généré par le serveur IIS MyInfo Stocker des valeurs de propriétés qui peuvent être créées dynamiquementNextLink Gérer une liste d'adresses URL dans un fichier texte. PageCounter Comptabiliser le nombre d'ouverture d'une page ASPPermissionChecker Vérifier si un utilisateur à le droit d'accéder à un fichierTools Utilitaires (tester l'existence d'un fichier, traiter un formulaire HTML, générer

une valeur entière aléatoire, …) ASPSmartUpload Gérer les téléchargements de fichiers en Upload ou en

Download à partir d'un serveur hôte

Page 30: Introduction Aux Systèmes d’Information et Multimédia

Administration du Serveur IISAdministration du Serveur IIS

Démo sous Windows XP

Répertoires virtuels

DSN systèmes

Page 31: Introduction Aux Systèmes d’Information et Multimédia

Conventions de NommageConventions de Nommage

Déclaration et initialisation des variables Variables ASP Variables de requêtes, formulaires Fonctions Répertoires et fichiers Modularité Clarté et lisibilité du code

Page 32: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 32 T. Bourdeaud’huy – IG2I Saison 2006-2007

Déclaration et Initialisation des

variables

Déclaration et Initialisation des

variables

Utiliser <%OPTION EXPLICIT%> (1ère ligne du source) : provoque des erreurs de compilation si des variables ne sont pas déclarées

Utiliser les mots-clés DIM et CONST Toujours initialiser les variables : EMPTY, "", 0 Les chaînes de requête SQL sont définies et initialisées

avant d’être utilisées

Page 33: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 33 T. Bourdeaud’huy – IG2I Saison 2006-2007

Variables ASPVariables ASP

Variables en minuscules : nomVar1, maSuperVariable Constantes et mots-clés du langage en MAJUSCULES Utilisation de noms pertinents (pas de « toto ») Des préfixes sont utilisés pour définir :

– La portée des variables : Session/Application/Globale/Locale– Le type de la variable : Int/Str/Bool/Date/Objet/Tab

Exemples : – Un compteur à l’intérieur d’une fonction : lInt_i– Une variable globale : gStr_nomUser– Une variable de session : sStr_idOk– Le résultat d’un test : lBool_isTrue

Page 34: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 34 T. Bourdeaud’huy – IG2I Saison 2006-2007

Variables de formulaires, Requêtes

Variables de formulaires, Requêtes

Un préfixe décrit le type de champ de formulaire : – txt, passwd, textarea, radio, submit, button, hidden, select, …

Tous les formulaires ont un nom, e.g. formCoord Les variables de formulaire utilisent ce nom :

– formCoord_txtMail, formCoord_txtLogin Les variables ASP qui récupèrent des champs de formulaires

portent le nom de la variable correspondante :– gStr_mail, gStr_login

Les chaînes de requête SQL et les objets de connexion et de résultat correspondants doivent porter un nom fondé sur le même motif

DANS TOUS LES CAS UTILISER UN NOMMAGE HOMOGENE

Page 35: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 35 T. Bourdeaud’huy – IG2I Saison 2006-2007

FonctionsFonctions

Indiquer dans le nom d’une fonction ce qu'elle fait (verbe) : – get : récupération d’une valeur– set : modification d’une valeur– mk : réalisation d’un traitement– show/write/print : affichage

Un préfixe peut être utilisé pour indiquer ce qu’elle renvoie

Exemples : – Affichage d’un tableau : showTab()– Vérification d’une identification : boolVerifUser()

Page 36: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 36 T. Bourdeaud’huy – IG2I Saison 2006-2007

Répertoires et fichiersRépertoires et fichiers

Les répertoires ne doivent pas être imbriqués Les extensions dépendent de la fonction du fichier :

– asp, htm – inc, js pour les librairies asp et javascript

Des préfixes permettent de connaître le contenu du fichier : – f formulaire x traitement sans affichage– m menu– c cadre html

Page 37: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 37 T. Bourdeaud’huy – IG2I Saison 2006-2007

ModularitéModularité

Découper les traitements en fonctions génériques Utiliser des inclusions de fichiers pour les fonctions

communes à plusieurs pages– Attention : des fichiers inclus ne doivent pas en inclure d’autres

(notion de module)

Attention à la portée des variables Séparer le code client (HTML, javascript) du code ASP

– Fonctions, inclusions, appels en haut de la page– Quand c’est nécessaire, veiller à minimiser les

ouvertures/fermetures <% %>

Page 38: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 38 T. Bourdeaud’huy – IG2I Saison 2006-2007

Clarté et lisibilité du code

Clarté et lisibilité du code

Indentation BSD pour l’ASP ET le HTML ! User et abuser de commentaires pertinents :

– Au moment de la déclaration d’une variable– Avant la déclaration d’une fonction– A chaque fois que l’on effectue un traitement non trivial (début

d’une boucle, calcul d’index, … )

Commenter la fin d’une boucle par son nom : WHILE lInt_i IN …

DO

traitements

LOOP ‘lInt_i

Page 39: Introduction Aux Systèmes d’Information et Multimédia

Critères d’évaluation des CTP & Exercices

Critères d’évaluation des CTP & Exercices

Forme /3 Qualité du programme /3 Fonctionnalités attendues /14

Page 40: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 40 T. Bourdeaud’huy – IG2I Saison 2006-2007

FormeForme

Tout ce qui permet de s’y retrouver quand on reprend le programme Indentation : tabulations, passage à la ligne Quantité, mise en forme et pertinence des commentaires Lisibilité globale : enchevêtrement html/php/javascript , définition

des fonctions au début de chaque page Choix des noms de paramètres, variables, fonctions, librairies

pertinents Respect des nommages html/php Esthétique du résultat dans les limites du raisonnable (ni trop beau

si toutes les questions n'ont pas été faites, ni l’inverse)

Page 41: Introduction Aux Systèmes d’Information et Multimédia

ISIM1 – Active Server Pages 41 T. Bourdeaud’huy – IG2I Saison 2006-2007

Qualité du programmeQualité du programme

Tout ce qui est indépendant de la fonction du programme Emploi de structures de contrôle adaptées et évoluées quand c’est

nécessaire (foreach, switch) Structure de la base de données conforme aux spécifications, qui

permet l'ajout de fonctionnalités supplémentaires facilement Fermeture des bases de données, fichiers, … Tests aux limites : absence de résultats d'une requête … Utilisation raisonnée des variables globales et locales Modularité adaptée (traitements réutilisables, paramètres utiles et

bien documentés, pas d'effets de bord néfastes), utilisation de librairies

Robustesse, messages d'erreur pour l'utilisateur