Université du Québec en Outaouais Département d'informatique et d'ingénierie
Sigle : INF1583  Gr. 01
Titre : Développement des systèmes informatiques
Session : Automne 2018  Horaire et local
Professeur : Iglewski, Michal et Levasseur, Valérie
1. Description du cours paraissant à l'annuaire :

Objectifs

Introduire l'étudiant à l'approche professionnelle utilisée dans les différentes étapes du développement de systèmes informatiques (y compris des systèmes à temps réel). Lui présenter les différentes techniques formelles existantes dans le domaine et montrer comment les appliquer dans un projet informatique. Lui apprendre à documenter un système informatique. Introduire l'étudiant au travail en équipe.

Contenu

Principaux types de documents dans un système informatique et définitions de leurs contenus. Rôle des spécifications et méthodes formelles. Introduction à certaines notations formelles pour décrire les exigences et spécifications de composants et systèmes logiciels : modélisation abstraite, spécifications algébriques des types abstraits et/ou automates et systèmes de transition. Méthode rigoureuse de développement. Techniques de validation, tests, inspection. Travail en équipe, gestion de l'équipe, productivité, métriques. Outils de programmation supportant le développement des logiciels.

2. Objectifs spécifiques du cours :

Apprentissage par problèmes et par projets.

3. Stratégies pédagogiques :

Au cours de cette activité, diverses formules pédagogiques seront utilisées, notamment: cours magistraux, devoirs, exercices en classe et lectures personnelles. Les attentes sont que les étudiant(e)s investissent au moins 90 heures de travail personnel en plus des 45 heures de cours.

Les devoirs seront effectués en utilisant Angular 5, Firebase et GitHub comme outil de gestion de projets.

La page Moodle sera utilisée pour communiquer d'autres informations au cours de la session.

Huit séances de travaux dirigés (2h/semaine) viendront appuyer les séances de cours. Ces séances se font en présence d'un assistant. La présence des étudiants à ces laboratoires est obligatoire.

4. Heures de disponibilité ou modalités pour rendez-vous :

Consultations : mardi : 11h30 à 12h30 ou sur rendez-vous.

Les étudiants sont priés de respecter les heures des consultations. En dehors des heures de consultation, les foires aux questions de Moodle constituent la voie principale de communication entre les étudiants et le professeur.

5. Plan détaillé du cours sur 15 semaines :
Semaine Thèmes Dates
1   
  • Présentation du cours
    • Présentation du plan de cours
    • Présentation du projet de session
  • Gestion d'un système en développement
    • Comment savoir que l'on développe le «bon» système : introduction à la vérification et la validation de systèmes
    • Gestion des versions

TD - le 6 sept.

  • Rencontre du client
  • Utilisation du système de gestion de versions Git
04 sept. 2018 
2   

Outils de développement

  • Les assertions
    • Définition et utilisation
    • Exemples en Java
  • Les tests
    • Les types de tests
    • L'utilisation des assertions dans les tests
    • Exemples de tests unitaires avec JUnit
  • Introduction à la qualité du code
    • Qu'est-ce que du code de qualité ?
    • Comment évaluer la qualité du code

À remettre avant le début de la séance : Compte GitHub utilisé pour le cours

TD - le 13 sept.

  • Atelier de mise à niveau sur les langages et cadres d'application utilisés dans le projet
    • Mini application Angular
    • Firestore : requêtes et manipulation d'une base de données NoSQL
    • Gestion des dépendances (versionnage sémantique)
11 sept. 2018 
3   

Qualité du code (suite)

  • Inspection

Étapes de production d'un livrable : les outils de build

  • Outils make, ant, Maven
  • Gestion des dépendances dans Java et Javascript

Les métriques logicielles

  • SonarQube

TD - le 20 sept.

  • Accès à SonarQube
  • Écriture de tests et calcul de couverture
  • Inspection de code
18 sept. 2018 
4   

Utilité des méthodes formelles (notions de génie logiciel)

  • Vérification formelle

Outils mathématiques

  • Paradoxes, ensembles, formules logiques, variables libres

  • Construction "where"

  • Fonctions et relations

  • Prédicats

  • Relation d'équivalence

  • Représentations tabulaires

  • Automates à états

TD - le 27 sept.

  • Atelier de mise à niveau sur l'utilisation des outils mathématiques
25 sept. 2018 
5   

Spécifications des programmes

  • Quelques concepts

    • Programmes vs modules
    • Déterminisme vs non-déterminisme
  • Spécification des programmes

    • Qu'est-ce qu'une spécification et qu'est-ce qu'elle doit contenir ?
    • Relation entre le code et sa spécification
    • Spécification de programmes déterministes sous forme de fonctions
  • Spécification de programmes non déterministes

    • Comment faire la spécification de programme non déterministe ?
    • Introduction aux LD-relations

TD - le 4 octobre

  • Exercices sur la spécification de programmes
02 oct. 2018 
6   

Semaine d'études

09 oct. 2018 
7   

Examen de mi-session (2 heures)

Présentation de l'itération 1 par l'équipe 1 et recommendations pour les prochaines itérations

Aperçu de la documentation lors du développement des systèmes informatiques

16 oct. 2018 
8   

Spécifications des programmes (suite)

  • programmes déterministes et non-déterministes
  • spécifications des programmes sous forme de « fonctions de programme » (LD-relations)
  • tables décrivant les fonctions de programme
  • exemples de spécifications
  • documentation de programmes avec « displays »
  • étude de cas
23 oct. 2018 
9   

Modules

  • Conception modulaire
    • Définition des modules
    • Principes de conception
    • Études de cas
  • Aperçu de la documentation des modules
    • Guide des modules, spécification de l'interface, document de conception interne des modules
  • Guide des modules

TD - le 1er novembre

  • Spécification de programmes à l'aide des LD-relations
  • Documentation de programmes avec displays
30 oct. 2018 
10   

Spécifications d'interfaces de modules (suite)

  • Exemples en Lotos et Z
  • Les spécifications
    • Rappels
    • Propriétés
    • Techniques de spécifications
    • Règles, structure et contenu
  • Spécification de modules vs spécification de programmes
  • Contenu de la spécification d'interfaces de modules
06 nov. 2018 
11   

Spécifications d'interfaces de modules (suite)

  • Retour sur le contenu de la spécification d'interfaces de modules
  • Règles pour des spécifications formelles et abstraites
  • Méthode de traces
  • Exemples de spécifications de module
13 nov. 2018 
12   

Documentation interne de modules

  • Choix de la structure de données et définition de la fonction d'abstraction
  • Exemples

TD - le 22 novembre

  • Spécification d'interfaces de module
20 nov. 2018 
13   

Processus de conception des systèmes informatiques

  • Principes de conception des systèmes informatiques
    • Approche fonctionnelle

    • Documentations des besoins

  • Présentation du dernier devoir
  • Étude de cas : système de gestion d'examens

    • Définition et spécification des besoins
    • Spécification d'interfaces et conception interne de modules

TD - le 29 novembre

  • Conception interne des modules
  • Exercices de révision
27 nov. 2018 
14   

Retour sur les étapes de développement

  • Présentation finale des équipes (30 min par équipe)
  • Retour sur le contenu du cours
  • Études de cas
04 déc. 2018 
15   

Examen final

11 déc. 2018 
6. Évaluation du cours :

L'évaluation est l'appréciation du niveau d'apprentissage atteint par l'étudiant par rapport aux objectifs des cours et des programmes.

L'attribution des notes se fera selon la répartition suivante :

  • Examen de mi-session : 20 %
  • Examen de fin de session : 20 %
  • Devoirs : 60 %

Pour les devoirs d'équipe, les notes peuvent être attribuées d'une manière individuelle selon la contribution de l'étudiant.

Attention: La présence aux cours est fortement recommandée.

7. Politiques départementales et institutionnelles :
8. Principales références :

Volumes suggérés :

  • Sommerville, I.; Software Engineering; Addison-Wesley, 2010, 9/e, ISBN: 9780321313799
  • Articles :
    • Articles : Parnas, D.L., Madey, J., "Functional Documents for Computer Systems", Science of Computer Programming, 25, 1, pp. 41-61.
    • Parnas, D.L., "On the Criteria to be Used in Decomposing Systems into Modules", Communications of the ACM, Vol. 15, No. 12, December 1972, pp. 1053-1058.
    • Parnas, D.L., Madey, J., Iglewski, M., "Formal Documentation of Well-Structured Programs", IEEE Transactions on Software Engineering, Vol. 20, No.12, 1994, pp.948-976.
    • Parnas, D.L., Clements, P.C., "A Rational Design Process: How any Why to Fake It", IEEE Transactions on Software Engineering, Vol. SE-12, No. 2, February 1986, pp. 251-257.

Volumes de références:

  • Brooks, F.P., No Silver Bullet--Essence and Accidents of Software Engineering, Computer, 20(4), 1987 (aussi un chapitre dans The Mythical Man Month: Essays on Software Engineering, Anniversary Edition, Addison-Wesley, 1995).
  • Ghezzi, C., Jazayeri, M., Mandrioli, D.; Fundamentals of Software Engineering; 2e, Prentice-Hall, 2002, ISBN 0-13-305699-6.
  • Pressman, R.; Software Engineering: A Practitioner's Approach; McGraw-Hill, 7/e, 2010, ISBN: 0073375977.
9. Page Web du cours :
http://moodle.uqo.ca/course/view.php?id=26751