CSI1502 Principes fondamentaux en conception des logiciels

Transcription

CSI1502 Principes fondamentaux en conception des logiciels
Objectifs du cours:
Génie logiciel
CSI1502
Principes fondamentaux en
conception des logiciels
„
„
Chapter 10:
Introduction au Génie Logiciel
La qualité de logiciel est un résultat direct du
processus utilisé lors de la création
Comprendre et connaître l`utilité de ce qui suit:
„ Modèles de conception de logiciel
„ Les cycles de vie logiciel et leurs implications
„ Développement linéaire vs. Itératif
„ Objectifs et techniques des tests
„ Une approche évolutionnaire au développement OO
2
Au sujet de la
Maintenance
Cycle de vie logiciel
„
Le cycle de vie d`un logiciel inclue l`utilisation et la
maintenance
Développement
„
Utilisation
„
„
Maintenance
„
„
Une version du logiciel qui est mis à la disposition
d`un utilisateur est dénommé «release»
La maintenance inclues toutes les modifications sur un
programme existant;
„ Améliorations et
„ Correction de défaut
Un bon concept et développement facilitent la
maintenance
Les efforts de maintenance ont tendance à demander plus
de travaille que le développement initial du logiciel
Le But du génie logiciel:
„ Réduire au maximum le travail nécessaire à la création
et le maintien d`un programme
3
Développement vs.
Maintenance
4
Développement et
Effort au Maintient
Développement
Développement
Développement
Utilisation et
Maintenance
En exemple:
Le bug de l`an 2000
Maintenance
Maintenance
Une petite augmentation du temps de développement peut
Réduire l`effort nécessaire à la maintenance Æ
Passez plus de temps à la conception, vé
vérification et documentation
5
6
1
Développer du logiciel de haute
qualité:
Modèles de conception de logiciel
Développement et
Effort au Maintient
„
„
„
Souvent ceux qui maintiennent le logiciel ne sont pas ceux
qui l`ont développé («règle» des 3 ans en moyenne)
Les mainteneurs doivent être capable de comprendre le
programme qu`ils n`ont pas conçus.
L`habilité de lire et comprendre un programme dépend de:
„ Comment clairement les besoins initiaux ont été définis
„ La qualité du concept du programme
„ La qualité de l`implémentation du programme
„ La qualité de la documentation du programme
„
„
un modèles de conception de logiciel est une approche
organisée afin de créer du logiciel de qualité
Trop de programmeurs suivent une approche écrire-et-
modifier
„
„
„
Ils écrivent un programme et le modifient jusqu`à ce
que il soit fonctionnel, sans égard pour la conception du
système
Les erreurs sont adressé au fur et à mesure qu`elles
sont découvertes; si elles le sont
Il ne s`agit pas vraiment d`un vrai modèle
7
8
L`approche écrire-et-modifier
Le modèle «Waterfall»
„
„
Écrire le
programme
Modifier le
programme
„
„
9
Le modèle «Waterfall» fut développé dans les années `70
Les activités suivantes doivent être adressées
spécifiquement durant le développement
„ Établir clairement et sans ambiguïté les besoins
„ Créer un concept propre à partir des besoins
„ Implémenter le concept
„ Vérifier l`implémentation
Originalement ce modèle fut proposé de façon linéaire
sans «backtracking»
Ceci est un objectif noble, mais irréaliste.
10
Développement itératif:
Le modèle «Waterfall»
avec «backtracking»
Le modèle «Waterfall»
„
Établir
les besoins
Créer un
concept
„
Implémenter
le concept
Vérifier le
système
„
11
Le développement itératif permet aux développeurs de
faire des boucles aux travers des diffèrents stages du
développement
Le «Backtracking» ne doit pas être utilisé
aléatoirement
Quand utiliser le «Backtracking» ?
„ Pour s`occuper de problème inattendus lors des stages
finaux du développement
12
2
Processus du développement
itératif:
Important:
Vérification itérative
„
Établir
les besoins
Créer un
concept
Implémenter
le concept
Vérifier le
système
„
„
Les résultats de chaque stage doivent être
prudemment vérifié avant de poursuivre le prochain
stage
Avant de commencer la conception, par exemple, les
besoins devraient être vérifiés afin d`assurer:
„ Clarté, cohérence et complet
Une évaluation du concept devrait s`assurer que chaque
besoin à été addressé suffisament
13
14
Techniques de Vérification:
Créer des cas test
Techniques de Vérification:
Revue
„
Un concept ou un implémentation peut-être évaluée
durant une revue
En général, le but de la vérification est de trouver des
erreurs.
Ceci est souvent dénommé vérification des défauts
Un bon test trouve des problèmes dans un programme
Un cas test inclus
„ Un ensemble de données d`entrée
„ Actions d`utilisateur ou d`autres conditions initiales
„ Données de sortie attendues
„
„
„
L`objectif d`une revue est de identifier les problèmes et
non de les résoudre
„
„
Il n`est pas possible de vérifier tous les cas possible
„
15
16
Techniques de Vérification:
Vérification de Boîte Noire
„
„
„
Techniques de Vérification:
Vérification de Boîte Blanche
Vérification Boîte Noire détermine un ensemble spécifique
de données d`entrées et de données de sortie attendues
Une catégorie d`équivalence est une collection de données
d`entrées
„ En exemple: chiffres positifs , 0..99
„ Cas test: -9, -500, 5, 12, 101, 300
Deux ensemble d`entrée appartienne à la même catégorie
d`équivalence si il y a de raison de croire si l`un marche
que l`autre aussi va marcher
„ Donc la vérification d`un des ensemble d`entrée vérifies
toutes la catégorie d`équivalence
17
„
„
„
Vérification Boîte Blanche aussi dénommé vérification de
boîte de ver
„ Se concentre sur la logique interne, tel que
l`implémentation d`une méthode Æ nous vérifions le
code en soi-même
«Statement coverage» garantie que toutes les
commandes dans une méthode soient exécutées
«Condition coverage» garantie que toutes exécutions
conditionnelles dans une méthodes soient exécutées
18
3
Prototypes jetables vs.
Prototypes évolutionnaires
Prototypes:
Utile pour vendre vos idées
„
„
„
„
Un prototype est un programme crée pour explorer un
certain concept
Faire des prototypes est plus que utile, efficace (du point de
vu temps, coût) que d`agir sur une assomption qui pourrait
se revirer
Usuellement un prototype est crée pour communiquer au
un client :
„ Pour une tâche particulière
„ La faisabilité d`un des besoins
„ Une interface d`utilisateur
C`est une façon de valider les besoins
„
„
„
„
„
„
20
Le développement évolutionnaire divise le procesus de
conception en
„ Concept architectural (haut niveau) – classe primaire
et interactions majeures
„ Concept détaillée – classes spécifiques, méthodes, et
algorithmes
Ceci permet de créer des cycles de raffinement
Chaque cycle de raffinement se concentre sur un des
aspects du système
Pour chaque cycle de raffinement qui passe, le système
évolue
Modèle de
développement évolutionnaire
Établir
les besoins
„
„
Concept
architectural
Établir la
portée
Vérification
d`unité et
intégration
Vérification
de Système
Identifier les
classes & objet
Identifier les
relations
Implémentation
Concept
détaillée
21
22
Cycle d`amélioration: #1
Etablir la portée
„
Car un prototype évolutionnaire est conçu de façon plus
prudente, il peut se faire incorporer dans le système final
„ Les prototypes évolutionnaires offrent un double
bénéfice mais à un coût plus élevé
19
Développement de logiciel large:
Une approche de
développement évolutionnaire
„
Un prototype rapide («hack» en anglais) pour vérifier une
idée ou concept est dénommé prototypes jetables
„ Les prototypes jetables ne sont pas incorporés dans le
système final
Cycle d`amélioration: #2
Identifier les classes & objets
Nous devons d`abord établir la porté du raffinement
afin de définir la nature spécifique du prochain raffinement
Par exemple:
„ L`interface usager
„ La faisabilité d`un besoin particulier
„ Des classes outils pour le support général du programme
„
La programmation OO est bien conçue pour cette approche
Choisir le raffinement le plus appropriés est important et
demande de l`expérience
„
23
„
Identifier les classes et objets qui ont rapport au
raffinement courant. Regarder aux noms dans le document
des besoins. Catégories candidates incluent :
„ Objets Physiques (livres, boules, etc…)
„ Personne (étudiant, professeur, etc…)
„ Places (salle, aéroport, etc…)
„ Contenant (liste de transaction, boîte, etc…)
„ Evénements (vente, rencontre, accident, etc…)
„ Base de Données (catalogue, etc…)
Les catégories peuvent faire partie l`une de l`autre
Considérez de réutiliser les classes existantes
24
4
Cycle d`amélioration: #3
Identifier les relations
„
„
„
Cycle d`amélioration: #3(cont.)
l`héritage
Identifier les relations entre classe
„ Association générale («utilise»)
„ agrégation («à-un»)
„ héritage (“est-un”)
Les Objets associés s`utilisent l`un l`autre pour les services
qu`ils donnent
Agrégation, aussi dénommé composition, permets à un obje
de devenir une partie d`un autre
„ La Cardinalité décrit la relation numérique entre les
objets
„ En exemple une auto à quatre roues qui lui sont
25
associées
„
„
L`héritage, tel que vu en détail au chapitre 7, permet à la
création d`une nouvelle classe abstraite «parent» dont le
seul objectif est de
„ Réunir des données et méthodes communes en une
seul place
Utilisez le diagramme de classe UML pour montrer les
rélation
26
Cycle d`amélioration: #4-6
conception détaillé, implémentation
et vérification
„
„
„
Spécification du code
Finalement, un cycle de raffinement inclus la conception
détaillé, implémentation et la vérification
„ Tous les membres de chaque classe doivent être définis
„ Chaque classe doit être implementé
„ Des «Stubs» sont parfois crées pour permettre de raffiner
le code à vérifier
„
„
Une vérification unitaire se concentre sur un membre
particulier tel que une méthode ou un classe
Une vérification intégration test se concentre sur
l`interaction entre les membres du système
Spécification détaillé de conception
Invariant: une collection de faits qui sont vrais
„ Pré condition/ Post condition
„ Pré condition : Conditions qui nécessitent que
le code exécute correctement
„ Post conditions: Corrige les changements après
que le code ait exécuté
27
28
Spécification du code:
Un Exemple (AlarmClock class)
Spécification du code:
Un Exemple (AlarmClock class)
Méthodes mise à jour
public void advanceTenMinutes()
Invariant
L`objet Alarmclock
Garde en mémoire un temps d`alarme unique en terme de temps et
minutes
Ne peut faire la distinction entre AM et PM
À des valeurs limité tel que:
1 <= hour <= 12 et 0 <= minutes <= 59
pré condition
minutes < 50
change
minutes
post condition
La valeur de minutes est 10 unités plus grande que avant
Méthodes mise à jour
public void advanceOneHour()
-
pré condition
hour < 12
-
change
hour
post condition
La valeur de hour est unité plus grande que avant
Nous pouvons utiliser la logique formelle pour exprimer
l`ensembre invariant et les conditions pré/post
Nous pouvons utiliser la logique formelle pour prouver qu`un
morceau de code est «vrai»
Source: “The object of Jva, David D Riley, Addison-Wesley, 2002
29
30
5
Obtenir les besoins:
Le projet PaintBox
„
Le projet PaintBox :
Besoins
Tâche (Haut Niveau):
„ Créer un programme qui permet à un usager de
peindre divers formes et tailles sur un écran
„
„
„
„
Comment peut-on accomplir ceci?
„
„
„
Avoir une interface d`usager graphique avec souris
Permettre à l`usager de tracer des lignes, cercles,
ovales, rectangles et carrées
Permettre à l`usager de changer la couleur de dessin
Permettre à l`usager de remplir une forme, tous sauf
une ligne avec une couleur
Permettre à l`usager de commencer un nouveau dessin
Permettre à l`usager de créer des lignes multiples
31
32
Le projet PaintBox :
Étapes initiales de raffinement
„
„
„
„
„
„
Le projet PaintBox :
l`interface usager de base
Créer l`interface usager de base
Permettre à l`usager de dessiner et remplir les formes et
de changer de couleur
Permettre à l`usager de choisir, bouger et modifier les
formes
Permettre à l`usager de couper, coller et copier les formes
Permettre à l`usager de sauver et charger des dessins
Permettre à l`usager de commencer un nouveau dessin
n`importe quand
File Edit
Select
Line
Oval
Rect
Color
Drawing Area
33
34
Le projet PaintBox:
Raffinement restant
Le projet PaintBox :
„
„
„
Discussions avec le client créent de nouveaux besoins qui
sont intégré dans le document de besoin
Ensuite le concept architectural est préparé
Les étapes de raffinement sont déterminé
„ #1: l`interface d`usager graphique avec souris
„ #2: dessiner des forme de bases en utilisant des couleurs
„ #3: couper, copier et coller des formes
„ #4: choisir, bouger et remplir les formes
„ #5: modifier les dimensions des formes
„ #6: sauvegarder et charger les dessin
„ #7: touche final tel que un écran de présentation
35
„
„
L`implémentation au complet peut être téléchargé du site
web du livre
Voir section 10.4 du livre
36
6
Obtenir les besoins de
l`usager
„
„
Sommaire:
Chapitre 10
Problème de la collection de connaissances:
„ Il est difficile d`extraire des informations d`humains
Type de personnalité différents:
„ Niveau de détail, conception, pensée, etc…
„ Myers Briggs (16 types), entre autres
„ Traitement de données et informations: concret vs abstrait
„ Prise de décision: logique et objectif vs relation de valeur et
subjectif
„ Introverti vs extraverti: stimuli de l`externe ou de l`interene
„ Jugement: aléatoire vs «ouvert d`esprit»
„ Voir l`Internet pour les test et pour les sceptiques!!!
37
„
Le Chapitre 10 en résumé:
„ Modèles de conception de logiciel
„ Les cycles de vie logiciel et leurs implications
„ Développement linéaire vs. Itératif
„ Objectifs et techniques des tests
„ Une approche évolutionnaire au développement OO
38
7