IFT3912 - Développement, maintenance de logiciels

Hiver 2013

Nouvelles et mises à jour

Personnel

Horaire

Plan de cours

Le plan de cours est maintenant disponible en ligne (pdf).

Notes de cours

Projet

Vous pouvez consulter la description du projet à réaliser.

Tâches à réaliser au cours de la session

Création d'équipe
À compléter avant le 8 février.
  • Vous pouvez créer votre équipe à l'aide du formulaire en ligne (une seule soumission par équipe).
  • Chaque équipe doit être composée de 4 ou 5 personnes.
  • Chaque membre de l'équipe devra obtenir un compte github avant la soumission.
À remettre le 15 février.
À remettre le 22 février.

Quelques outils qui pourraient être utiles pour la génération de diagramme de Gantt:

  • Ganttic (en ligne, gratuit pour 10 ressources et moins)
  • gantter.com (en ligne, gratuit)
  • teamgantt.com (en ligne, commercial avec période d'évaluation)
  • OpenProj (toutes les plateformes, gratuit)
  • GanttProject (toutes les plateformes, gratuit)
  • OmniPlan (Mac seulement, commercial avec période d'évaluation)
  • Microsoft Project (Windows seulement, commercial avec période d'évaluation)
À remettre le 4 mars.
À remettre le 1er avril.
À remettre le 18 avril.
Présentation (en classe)

Horaire des présentations (déterminé au hasard par un script):

ÉquipeJour et heure
Équipe 9Lundi 22 avril 15:30
Équipe 5Lundi 22 avril 15:50
Équipe 4Lundi 22 avril 16:10
Équipe 8Lundi 22 avril 16:30
Équipe 1Mercredi 24 avril 9:30
Équipe 2Mercredi 24 avril 9:50
Équipe 6Mercredi 24 avril 10:10
Équipe 7Mercredi 24 avril 10:30
Équipe 10Mercredi 24 avril 10:50
Équipe 3Mercredi 24 avril 11:10
Rencontres avec le professeur
Dates à déterminer. Détails à venir

Ressources pour la réalisation du projet

Ce modèle de projet devra être utilisé comme point de départ. Il est utilisable avec ou sans Eclipse. Ce modèle contient un fichier de configuration pour Ant contenant les cibles nécessaires pour la remise de projet. Les bibliothèques suivantes sont includes et préconfigurée pour l'utilisation dans Eclipse :
Version corrigée du fichier Ant build.xml qui règle un problème de classpath lors de la génération de documentation javadoc.

Exemples de code

Handler simple pour Jetty, retourne une page contenant la date courante.
Handler simple pour Jetty, retourne une page contenant le paramètre "say" passé par le client.
Démonstration d'un serveur de fichiers pour Jetty.
Démontre une séquence de Handlers pour Jetty.
Démontre l'utilisation de contextes de requêtes pour Jetty.
Servlet simple pour Jetty.
Démontre l'utilisation de sessions avec les servlets de Jetty.
Démontre l'utilisation de servlets comme handlers avec Jetty.
Téléverser des fichiers (upload)
Voir la démonstration #4 sur StudiUM.
Démontre l'utilisation de sessions sans utiliser des servlets.
Démontre l'utilisation de la classe HttpClient de Jetty pour effectuer des tests unitaires. Requiert aussi SimpleMessageHandler.java.

Exemples de vidéos

Generation de code HTML

Plusieurs outils peuvent simplifier la génération de code HTML dans votre implémentation, par exemple:

Ces outils permettent d'écrire des pages HTML presque complètes et de fournir l'information manquante au cours de l'exécution pour compléter chaque page.

Voici un exemple qui utilise jMustache:

template.mustache (télécharger)
<html>
  <body>
    Items:
    <ul>
      {{#users}}
        <li>Hello, {{name}}!</li>
      {{/users}}
    </ul>
  </body>
</html>
MustacheTest.java (télécharger)
public class MustacheTest {
    static class User {
        private String username;

        public User(String name) {
            this.username = name;
        }

        public String getName() {
            return username;
        }
    }
	
    public static void main(String[] args) throws IOException {
        MustacheFactory mf = new DefaultMustacheFactory();
        Reader in = new BufferedReader(new FileReader("template.mustache"));
        Writer out = new OutputStreamWriter(System.out);
        Mustache template = mf.compile(in, "test");
		
        HashMap scopes = new HashMap();
        scopes.put("users", Arrays.asList(new User("Alice"), new User("Bob")));
		
        template.execute(out, scopes);
        out.flush();
    }
}
Résultat
<html>
  <body>
    Items:
    <ul>
        <li>Hello, Alice!</li>
        <li>Hello, Bob!</li>
    </ul>
  </body>
</html>