[Code Contracts] Nouvelle release 1.6.60505.10 (21 Mai 2014)

Cela fait longtemps que l’équipe Code Contracts n’a pas publié de nouvelle Release (je pense que la cause principal est le fait que l’équipe doit synchroniser leurs développements avec l’équipe qui développe actuellement le nouveau compilateur Roslyn).

L’équipe de Code Contracts vient donc de publier une nouvelle Release de Code Contracts version 1.6.60505.10.

Cette Release apporte les améliorations suivantes :

  • Le support de Visual Studio 2013
  • Corrige bien évidemment des bugs au niveau de l’outil de ré-écriture et d’analyse statique du code.
  • De nouveaux contrats ont été ajoutés dans les bibliothèques du .NET Framework.
  • Et des améliorations au niveau de la performance de l’exécution de l’outil de vérification statique du code.

Vous pouvez télécharger cette release directement sur le site de la galérie de Visual Studio.

[TechDays 2014] Ask To Expert aux TechDays 2014 au Palais des Congrès de Paris

Je vous donne rendez-vous du 11 au 13 février 2014 au TechDays 2014 au Palais des Congrès de Paris où je serai ATE (Ask To Expert).

logo_mstechdays

Je me ferai un plaisir de répondre à vos questions concernant les technologies Microsoft durant les pauses. Pour me reconnaître, j’aurai un polos d’une couleur « flashy » où sera inscrit “Ask To Expert” (il est donc impossible de me rater !). Il y aura certains un stands dédiés aux communautés Microsoft que je viendrai squatter…

Depuis 2 ans, beaucoup de personnes viennent me contacter personnellement aux Tech Days ou MS Days afin de discuter sur ma technologie favorite : Code Contracts. Afin d’éviter de parler programmation « oralement », je vous invite à apporter votre ordinateur portable équipé d’un Visual Studio et de Code Contracts si vous souhaitez que je réponde plus précisément à vos questions sur vos projets !

Je vous invite à vous y rendre et à assister aux différentes sessions et en particulier celle dédiées aux dernières technologies Microsoft comme Visual Studio 2013 et Monaca, Windows Phone, Windows Azure et un paquet de session sur l’ALM…

Pour vous rendre aux TechDays 2014, il est nécessaire de s’inscrire sur le site de Microsoft à la rubrique dédié aux TechDays 2014.

[Code Contracts] Nouvelle release 1.5.60911.10 (11 Septembre 2013)

L’équipe de Code Contracts vient de publier une nouvelle Release de Code Contracts version 1.5.60911.10.

Cette release corrige énormément de bugs concernant l’outil de vérification statique du code (cccheck.exe).

Vous pouvez télécharger cette release directement sur le site de la galérie de Visual Studio.

[Code Contracts] Nouvelle release 1.5.60813.10 (13 Août 2013)

L’équipe de Code Contracts vient de publier une nouvelle release de Code Contracts version 1.5.60813.10.

Cela fait depuis longtemps (plus de 3 mois) que l’équipe n’avais sortie une nouvelle release… Dans cette release 2 améliorations majeures :

  • La prise en charge de la Preview de Visual Studio 2013
  • La possibilité d’utiliser les post-conditions sur des méthodes async en utilisant « Contract.Result<T>() » et non « Contract.Result<Task<T>>().Result ».

Vous pouvez télécharger cette release directement sur le site de la galérie de Visual Studio.

[Code Contracts] Les post-conditions : ce n’est pas uniquement pour contrôler la valeur de retour d’une méthode !

Aujourd’hui j’ai été en mission chez un client qui à mis en place Code Contracts et son outil de vérification statique du code. Lorsque j’ai relus une partie de son code, je me suis aperçu que certains développeurs posait des Contract.Assume() afin d’obliger l’outil de vérification statique à considérer la condition spécifiée en paramètre comme vraie. Voici le code en question (bien évidemment j’ai très simplifié le code…) :

public static class Programme
{
    public static void Main(string[] args)
    {
        Personne personne;
        personne = new Personne();

        InsérerPersonne(personne);

        Contract.Assume(personne.Id != 0, "Le ID ne la personne n'a pas été récupéré depuis la base de données");

        Afficher(personne);
    }

    public static void Afficher(Personne personne)
    {
        Contract.Requires<ArgumentNullException>(personne != null);
        Contract.Requires<ArgumentException>(personne.Id != 0);

        Console.WriteLine(personne.Id);
    }

    public static void InsérerPersonne(Personne personne)
    {
        Contract.Requires<ArgumentNullException>(personne != null);

        personne.Id = 1664;   // On suppose que l'ID provient d'un INSERT sur une base SQL.
    }
}

public class Personne
{
    public int Id
    {
        get;
        set;
    }
}

Bien évidemment je suis aller voir le développeur qui a écrit ce Contract.Assume() et lui ai demandé pourquoi il en avait besoin. Il m’a répondu que c’est l’outil de vérification statique qui lui a indiqué que la pré-condition « personne.Id != 0 » dans la méthode Afficher() ne peut être prouvée…

Contrat non prouvé

Bien évidemment, même si on a affecté le « Id » de la personne (en provenance d’une base de données) dans la méthode InsérerPersonne() il n’y a rien qui nous prouve que l’identifiant est supérieur à 0. J’ai donc poser la question suivante au développeur : « Pourquoi vous ne spécifiez pas une post-conditions qui indique que l’Id de personne est supérieur à 0 ». J’ai été surpris aussitôt surpris par sa réponse : « Les post-conditions, ce n’est pas pour contrôler le retour des méthodes ? ». Et bien non ! Les post-conditions, ce sont des conditions qui doivent être vérifiées à la fin de la méthode. Ces conditions peuvent vérifier le retour de la méthode, mais aussi si une exception est déclenchée, si un paramètre est correcte, si l’âge du capitaine n’a pas changé….

Bref, toute condition qui doit être vérifié à la fin de la méthode, peut-être marquée à l’aide des post-conditions. Rappelez-vous aussi que les post-conditions sont des bons indicateurs aux intégrateurs de votre méthode (ceux qui vont utilisés votre méthode) afin de leur indiquer le nouvel état des objets qui sont modifiés par la méthode (paramètres, propriétés d’une classe, retour de la méthode,…).

Si on reprend l’exemple précédent voici le code qui faudrait mettre dans la méthode InsérerPersonne() :

public static void InsérerPersonne(Personne personne)
{
Contract.Requires<ArgumentNullException>(personne != null);
Contract.Ensures(personne.Id != 0);

personne.Id = 1664;   // On suppose que l'ID provient d'un INSERT sur une base SQL.
}

au niveau du Main() bien évidemment on supprimera le Contract.Assume() :

public static void Main(string[] args)
{
    Personne personne;
    personne = new Personne();

    InsérerPersonne(personne);

    Afficher(personne);
}

Et voilà le résultat au niveau de l’outil de vérification statique du code de Code Contracts :

Contrats vérifiés

[Code Contracts] Nouvelle release 1.5.60502.11 (02 Mai 2013)

L’équipe de Code Contracts vient de publier une nouvelle Release de Code Contracts version 1.5.60502.11.

Cette release optimise le démarrage et la consommation mémoire utilisé par l’outil de réécriture (ccrewriter).

Vous pouvez télécharger cette release directement sur le site de la galérie de Visual Studio.

[TechDays 2013] Ask To Expert aux TechDays 2013 au Palais des Congrès de Paris

Je vous donne rendez-vous du 12 au 14 février 2013 au TechDays 2013 au Palais des Congrès de Paris où je serai ATE (Ask To Expert).

Logo des TechDays 2013

Je me ferai un plaisir de répondre à vos questions concernant les technologies Microsoft durant les pauses. Pour me reconnaître, j’aurai un polos d’une couleur « flashy » où sera inscrit “Ask To Expert” (il est donc impossible de me rater !). Il y aura certains un stands dédiés aux communautés Microsoft que je viendrai squatter…

Depuis 2 ans, beaucoup de personnes viennent me contacter personnellement aux Tech Days ou MS Days afin de discuter sur ma technologie favorite : Code Contracts. Afin d’éviter de parler programmation « oralement », je vous invite à apporter votre ordinateur portable équipé d’un Visual Studio et de Code Contracts si vous souhaitez que je réponde plus précisément à vos questions sur vos projets !

Je vous invite à vous y rendre et à assister aux différentes sessions et en particulier celle dédiées aux dernières technologies Microsoft comme Visual Studio 2012, Windows Phone, Office 365 et Windows Azure.

Pour vous rendre aux TechDays 2013, il est nécessaire de s’inscrire sur le site de Microsoft à la rubrique dédié aux TechDays 2013.