Question

Je serais reconnaissant si quelqu'un pourrait me expliquer la différence entre les deux morceaux de code en termes de code de Visual Studio les règles métriques suivantes. Pourquoi l'indice maintenabilité n'augmente légèrement si je fais tout pas encapsulent au sein using ( )?

Exemple 1 ( note MI de 71 )

public static String Sha1(String plainText)
{
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        Byte[] text = Encoding.Unicode.GetBytes(plainText);
        Byte[] hashBytes = sha1.ComputeHash(text);
        return Convert.ToBase64String(hashBytes);    
    }
}

Exemple 2 ( Le score MI 73 )

public static String Sha1(String plainText)
{
    Byte[] text, hashBytes;
    using (SHA1Managed sha1 = new SHA1Managed())
    {
        text = Encoding.Unicode.GetBytes(plainText);
        hashBytes = sha1.ComputeHash(text);
    }
    return Convert.ToBase64String(hashBytes);   
}

Je comprends les paramètres sont en dehors de sens d'un contexte plus large et la compréhension, et les programmeurs doivent faire preuve de discrétion. Alors que je pourrait augmenter le score à 76 avec return Convert.ToBase64String(sha1.ComputeHash(Encoding.Unicode.GetBytes(plainText))), je ne devrais pas. Je RESSORTE simplement jouer avec les chiffres et ce n'est pas vraiment plus lisible ou maintenable à ce moment-là. Je suis curieux de bien à ce que la logique pourrait être derrière l'augmentation dans ce cas. Il est de toute évidence pas la ligne de comptage.

Était-ce utile?

La solution

Avoir vos variables tout Disposées en haut de sorte que vous savez ce qui est dans la fonction est plus « maintenable », au moins ce que celui qui décide des règles pour les métriques de code pense.

Que ce soit réellement vrai? dépend totalement de l'équipe travaillant sur le code. Il semble que vous le savez déjà par le ton de la question, mais prenez presque toutes les métriques de code avec un grain de sel, ils sont ce que quelqu'un pense est le mieux, cela ne peut pas être vrai pour les équipes en dehors de microsoft ... faire ce qui est le mieux pour votre équipe , pas ce que vous dit une calculatrice.

Je ne faire des changements qui nuisent à votre et les performances de codage de votre équipe (à moins que ce soit pour la performance réelle ou une meilleure gestion des erreurs, etc.) que vous jugez moins lisible pour obtenir quelques points sur le tableau de mesures.

Tout cela étant dit, si cela vous donne une très faible maintenabilité, il vaut probablement quelque chose de regarder ou de se décomposer en petits morceaux, comme un score très faible est probablement pas acceptable, pour à peu près toute l'équipe.

Autres conseils

Ceci est une vieille question, mais je pensais que je voudrais ajouter que le MI est en partie basé sur Halstead le volume , qui est basé sur un nombre de « opérateurs » et « opérandes ». Si la déclaration d'une variable par type est un « opérateur », cela signifierait que 2 échantillon a moins d'opérateurs, changeant ainsi le score. En général, parce que le MI est une mesure statistique, il est d'une utilité limitée lorsqu'il s'agit de petite taille des échantillons (comme une seule méthode courte.)

En raison de la plus grande distance entre la déclaration de vos variables et où ils sont utilisés.

La règle est de réduire la durée variable autant que possible, la durée est la distance entre la déclaration de la variable et où il est utilisé. Comme cette distance augmente, le risque augmente que le code est introduit par la suite qui affecte la variable sans que le programmeur réalisant l'impact plus bas dans le code.

Voici un lien vers un bon livre qui couvre cela et beaucoup d'autres sujets sur la qualité du code. http://www.amazon.com/Code-Complete-Practical-Handbook-Construction/dp / 0735619670 / ref = dp_ob_title_bk

Moi-même, je préfère voir return Convert.ToBase64String(sha1.ComputeHash(Encoding.Unicode.GetBytes(plainText))); c'est un devrait plutôt que ne devrait pas . Cette forme a l'avantage d'exprimer de manière concise les réelles flux de données; si vous ajoutez un tas de variables temporaires et les affectations, je dois maintenant lire les noms de variables et correspondent à leurs occurrences pour voir ce qui se passe réellement.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top