Complexité accidentelleEn développement logiciel le terme complexité accidentelle désigne la complexité introduite dans des programmes informatiques non en raison de la complexité du problème, mais de manière accidentelle en raison de choix de développement non pertinents. Il a été inventé par Frederick Brooks dans son article No Silver Bullet [1]. Ce terme est réutilisé dans différentes études proposant des outils pour lutter contre ce phénomène [2],[3]. DescriptionLe terme de complexité accidentelle est lié au problème créé par une implantation ou un langage donné. Ce terme s'oppose à celui de complexité essentielle qui lui décrit la complexité propre à un problème. Les causes sont diverses :
SolutionLes solutions pour contrer ces causes sont :
Dans un monde utopique, il existerait un programme capable de simplifier n'importe quel code afin d'en éliminer sa complexité accidentelle. ExempleAfin d'illustrer cet anti-patron, nous allons essayer de répondre au problème de la somme des premiers nombres impairs.
Dans une première implantation du problème, nous utilisons une variable unsigned int somme_n_impairs(unsigned int n) {
unsigned int somme_impairs = 0;
unsigned int impair_suivant = 1;
for (int i = 0; i < n; n++) {
somme_impairs = somme_impairs + impair_suivant;
impair_suivant = impair_suivant + 2
}
return somme_impairs;
}
Cet algorithme possède une complexité temporelle en . Comme attendu, il existe une solution algorithmique répondant à ce problème en une complexité temporelle restreinte () : unsigned int somme_n_impairs(unsigned int n) {
return n * n;
}
Pour répondre à ce problème, il suffit de monter au carré le paramètre : . Articles connexesNotes et références
|
Portal di Ensiklopedia Dunia