INF3143 Modélisation et spécification formelles des logiciels Hiver 2017 Alexandre Terrasa Département d’informatique, UQÀM Conclusion Retours sur le plan de cours 2 Description du cours Le cours vise à initier les étudiants aux méthodes formelles de spécification et à leur rôle dans le cycle de développement des logiciels. ● Entres autres, il vise à familiariser les étudiants avec le mode descriptif de spécifications plutôt qu'avec le mode opérationnel (algorithme) auquel ils sont habitués. ● Il vise aussi à familiariser les étudiants avec les notions d'assertions, de contraintes et de contrats avec leur utilisation pour le développement de logiciels. 3 Spécifications et méthodes formelles Rôle des spécifications et méthodes formelles ● raisonner à l’aide de la logique mathématique ● utiliser une notation formelle ● pour valider un programme en fonction d’une spécification 4 Descriptions de composants logiciels Introduction à certaines notions formelles pour décrire des systèmes et composantes logiciels ● ● ● ● diagrammes de classes contraintes OCL automates et systèmes de transitions contrats. 5 Approche basée sur les contraintes et contrats Approfondissement d'une approche basée sur les contraintes et contrats (OCL) ● logique: propositions et prédicats, quantificateurs, modélisation conceptuelle et description de propriétés ● types abstraits: ensemble et multi-ensembles, séquences ● spécifications comportementales, modélisation de composants divers (fonctions, types muables, types immuables), invariants, pré/post conditions. 6 Utilisation des assertions et contrats durant le développement Utilisation des assertions et contrats à l'étape de construction de logiciels : test unitaires, vérification dynamique de contrats ● utilisation des assertions en Java ● tests unitaires avec JUnit ● vérification de contrats avec Cofoja 7 Objectifs du cours 8 Objectifs du cours Le cours vise à initier les étudiants aux méthodes formelles de spécification et à leur rôle dans le cycle de développement des logiciels. ● vérifier le respect de la spécification ● prédicats et quantificateurs ● types abstraits fondamentaux (collections) 9 Objectifs du cours Entres autres, il vise à familiariser les étudiants avec le mode descriptif de spécifications plutôt qu'avec le mode opérationnel (algorithme) auquel ils sont habitués. ● spécifier le comportement et les propriétés d’opérations et de types de données ● invariants, pré-conditions, post-conditions 10 Objectifs du cours Il vise aussi à familiariser les étudiants avec les notions d'assertions, de contraintes et de contrats avec leur utilisation pour le développement de logiciels. ● assertions: en Java, OCL, Cofoja, Junit… ● contraintes: OCL (USE, Dresden) ● contrats: Java, Eiffel et C/C++ 11 Auto-évaluation À la fin du cours l’étudiant devrait être capable de... 12 Je suis capable de... Lire et naviguer dans des diagrammes de classe UML ● comprendre la notation UML ○ classes, propriétés, relations et associations ● naviguer dans un diagramme de classes ○ suivre les associations entre les classes ○ navigabilité, cardinalité 13 Je suis capable de... Expliquer les différents rôles que peuvent jouer les assertions dans le développement de logiciels ● comprendre la notion d’assertion ○ une expression qui doit être évaluée à vrai ● utiliser des assertions ○ pour vérifier et valider des logiciels 14 Je suis capable de... Utiliser de façon pratique la logique et les assertions pour spécifier le comportement et les propriétés d'opérations et de types de données ● utiliser des assertions ○ en Java, en OCL, dans les contrats, dans les tests unitaires... ● spécifier des comportements ○ pré-conditions, post-conditions, invariants 15 Je suis capable de... Écrire des contraintes et contrats en utilisant la notation OCL ● utiliser la notation OCL ○ OCL standard, USE-OCL, Dresden-OCL ● écrire des contraintes en OCL ○ invariants ● écrire des contrats en OCL ○ pré-conditions et post-conditions 16 Je suis capable de... Lire et comprendre des contrats écrits dans d'autres langages (par ex., JASS, iContract, Eiffel ou JML) ● Eiffel ● Java: IContract, Cofoja ● C/C++: préprocesseur, APP 17 Je suis capable de... Expliquer comment des assertions peuvent être utilisées pour obtenir des programmes plus robustes et faciliter le débogage ● énoncer les règles à respecter ○ spécification du programme ○ pour les clients, pour les mainteneurs ● documenter ces règles ○ documentation toujours à jours ● les faire appliquer ○ quand les exceptions sont activées ⇒ debug 18 Conclusion 19 La semaine prochaine... Révisions pour l’examen final ● ● ● ● assertions tests-unitaires contrats correction de l’exemple d’examen Une requête particulière pour les révisions? ● envoyez moi un email avant lundi prochain 20