AL5L Architecture logicielle Séance 1 Introduction Sébastien Combéfis lundi 10 novembre 2014
Ce(tte) œuvre est mise à disposition selon les termes de la Licence Creative Commons Attribution Pas d Utilisation Commerciale Pas de Modification 4.0 International.
Informations générales AL5L Architecture logicielle 30h de labo Documents utilisés sur Eole Slides, énoncés des labos et ressources complémentaires Dr Ir. Sébastien Combéfis <s.combefis@ecam.be> 3
Objectifs Passer en revue plusieurs éléments d architecture logicielle Focus sur le code source et son architecture Trois aspects couverts Motifs de conception Aspects de sécurité Qualité et «beauté» du code 4
Architecture logicielle Définition Description symbolique et schématique des différents composants d un ou de plusieurs programmes informatiques, leurs interrelations et leurs interactions Focus au niveau du programme 5
Composants Une architecture logicielle est une représentation abstraite d un système composants logiciels en interaction avec des connecteurs Chaque composant représente une unité fonctionnelle Les connecteurs assurent les interactions entre composants 6
Modèles d architecture Diagramme de classe Diagramme d objets Vue logique Vue implémentation Diagramme de composants Diagramme d états Diagramme d activités Diagramme de séquence Diagramme de collaboration Vue comportement Vue utilisateur Diagramme de cas Diagramme de déploiement Vue déploiement 7
Critères de qualité logicielle Autonomie Compatibilité Composabilité Efficacité Extensibilité Fiabilité Intégrité Interopérabilité Maintenabilité Portabilité Réutilisabilité Simplicité Transparence Validité Vérifiabilité 8
Première partie I Motif de conception
Motif de conception Modèle réutilisable pour générer des choses Design pattern en anglais Quatre éléments essentiels Le nom du pattern Une description du problème pour lequel le pattern s applique La solution comme description de l application du pattern Les conséquences de l application du pattern 10
Catégorisation des design patterns Création Automatisation de la création d éléments Factory, Singleton... Structurel Organisation de la structure du code Decorator, Adapter... Comportemental Gestion d un comportement particulier Observer, Visitor... 11
Exemple : Le pattern Singleton I Concevoir une classe avec une seule instance au plus Rendre accessible cette unique instance S assurer que de nouvelles instances ne soient pas créées Solution Tous les constructeurs privés La classe crée elle-même sa propre instance unique Offrir une méthode permettant de récupérer l instance 12
Exemple : Le pattern Singleton II 1 p u b l i c f i n a l c l a s s S i n g l e t o n 2 { 3 // V a r i a b l e de c l a s s e pour s t o c k e r l i n s t a n c e 4 p r i v a t e s t a t i c S i n g l e t o n i n s t a n c e ; 5 6 // C o n s t r u c t e u r p r i v é 7 p r i v a t e S i n g l e t o n ( ) { } 8 9 // Méthode de c l a s s e pour r é c u p é r e r l i n s t a n c e 10 p u b l i c s y n c h r o n i z e d s t a t i c S i n g l e t o n g e t I n s t a n c e ( ) 11 { 12 i f ( i n s t a n c e == n u l l ) 13 { 14 i n s t a n c e = new S i n g l e t o n ( ) ; 15 } 16 r e t u r n i n s t a n c e ; 17 } 18 } 13
Deuxième partie II Sécurité
Aspects de sécurité Cycle de vulnérabilité du développement d un logiciel Découverte d une vulnérabilité Installation du patch Développement d un patch 15
Attaque Acte intentionné et malicieux contre un système Différents buts Tester un système Voler Embarrasser Trois niveaux d attaque Architecture/Design Implémentation Opération 16
Attaque au niveau de l architecture Faille due à un choix de conception Telnet transfère les informations en clair Plusieurs types d attaque Man-in-the-middle, Race condition Replay, Sniffer Session hijacking, Session killing 17
Attaque au niveau de l implémentation Liées au langage de programmation utilisé Failles liées à la technologie utilisée Plusieurs types d attaque Buffer overflow Back door Parsing error 18
Attaque au niveau opérationnel Se produisent lors de l exécution de l application Mettent en défaut le service rendu par le programme Plusieurs types d attaque Denial-of-service Default accounts Password cracking 19
Exemple : Buffer overflow 1 i n t main ( ) 2 { 3 char b u f f e r [ 1 5 ] ; 4 i n t p a s s = 0 ; 5 6 p r i n t f ( " E n t r e z v o t r e mot de p a s s e : \ n " ) ; 7 g e t s ( b u f f e r ) ; 8 9 i f ( strcmp ( b u f f e r, " s u p e r p a s s w o r d " ) ) 10 { 11 p r i n t f ( " Mauvais mot de passe, bye bye. \ n " ) ; 12 } 13 e l s e 14 { 15 p r i n t f ( "Mot de p a s s e c o r r e c t! \ n " ) ; 16 p a s s = 1 ; 17 } 18 19 i f ( p a s s ) 20 { 21 p r i n t f ( " Vous avez t o u s l e s a c c è s maintenant! \ n " ) ; 22 } 23 24 r e t u r n 0 ; 25 } 20
Troisième partie III Qualité et «beauté» du code
KISS Keep it Simple, Stupid Il faut éviter de rendre les problèmes plus compliqués Principe phare en ingénierie logicielle Many great problem solvers were not great coders, but yet they produced great code! [Source : http://people.apache.org/~fhanik/kiss.html] 22
Quelques citations Simplicity is the ultimate sophistication Leonardo Da Vinci Everything should be made as simple as possible, but no simpler Albert Einstein Perfection is achieved not when there is nothing more to add, but when there is nothing left to take away Antoine de Saint Exupéry 23
Machine de Rube Goldberg 24
DRY vs WET Write Everything Twice Duplication de code Don t Repeat Yourself Il faut réfactorer son code et factoriser les parties communes 25
Bad smell Bad smell (ou code smell) popularisé par Kent Beck Il ne s agit pas de bugs, mais de faiblesses de design Réfactoring nécessaire pour améliorer son code Quelques exemples Code dupliqué Longue méthode, longue classe Trop de paramètres Complexité cyclomatique 26
Exemple : The Blob Une classe monopolise tout le système (God Class) Tout le traitement est fait par une seule classe Les autres classes stockent les données Casse le concept «une classe = une fonctionnalité» 27
Exemple : Code dupliqué 1 d e f p r i n t V e r d i c t ( s c o r e ) : 2 i f s c o r e > 1 0 : 3 p r i n t ( " Vous avez obtenu %d p o i n t s e t vous avez r é u s s i! " % ( s c o r e ) ) 4 e l s e : 5 p r i n t ( " Vous avez obtenu %d p o i n t s e t vous avez r a t é! " % ( s c o r e ) ) 6 7 i f name == " main " : 8 t r y : 9 p o i n t s = i n t ( i n p u t ( " E n t r e z vos p o i n t s : " ) ) 10 i f 0 <= p o i n t s <= 2 0 : 11 p r i n t V e r d i c t ( p o i n t s ) 12 e l s e : 13 r a i s e V a l u e E r r o r 14 except ValueError : 15 p r i n t ( " V e u i l l e z e n t r e r un nombre e n t i e r c o m p r i s e n t r e 0 e t 20 " ) 28
À vous de jouer Préparer une présentation en binôme Présentation d un exemple de programme Centré sur un design pattern Prenant en compte des aspects de sécurité Contenant des bonnes pratiques de qualité de code Projet 1 (15 décembre 2014) Code commenté Rapport succinct décrivant le programme et argumenté Présentation de 20 minutes 29
Livres de référence I ISBN ISBN ISBN ISBN 0-201-63361-2 978-0-321-41309-3 978-0-596-80675-0 978-0-201-61622-4 30
Livres de référence II ISBN 0-596-00242-4 ISBN 978-0-321-21335-8 ISBN 0-471-74487-5 31
Livres de référence III ISBN 978-0-13-235088-4 ISBN 978-0-7356-1967-8 ISBN 978-0-596-51004-6 32
Crédits http://fr.wikipedia.org/wiki/machine_de_rube_goldberg#mediaviewer/file:professor_lucifer_butts.gif http://sourcemaking.com/antipatterns/the-blob Photos des livres depuis Amazon 33