La Théorie des Bugs

par Christophe Camel


I) Univers des buggés

On pose :

Alors :

U : Univers des buggés.
Un élément X appartient à cet univers si et seulement si la quantité de bugs qui le contient est au minimum égale à 1.


Proposition: Tout logiciel appartient à U.


Proposition : Tout programme trivial est exclu de U. L'ensemble des programmes triviaux est appelé Ù. (U barre).


II) Fonctions de transfert inter-univers

Le transfert d'un élément X d'un univers vers un autre consiste en la modification de cet élément pour que la règle d'appartenance soit vérifiée dans le nouvel univers.

On définit la fonction B comme suit :

B : X --------> Y
     Ù --------> U

La fonction Y = B(X) est appelé fonction de Buggage. Elle "transforme" un programme trivial en logiciel (programme buggé) par le passage de l'univers débuggé Ù à l'univers des buggés U. La fonction B est n'est pas une fonction bijective.

La fonction réciproque D = B-1 peut se définir comme cela :
X --------> Y
U --------> Ù

D réalise le passage d'un logiciel buggé à l'univers débuggé, c'est la fonction de débuggage TOTAL. Cette fonction n'existe pas, du fait de l' inégalité de Von Neuman. (La fonction B n'est pas bijective).


III) Partitions de l'espace U

a) Définition

L'espace U peut se voir partitionné en sous ensembles Un. X appartient à Un si et seulement si : [X] = n.

L'union de tous les Un donne U.

b) U est ordonné.

Ainsi : U0 < U1 < U2 < U3 < .... < Up

(p tend vers l'infini)

c) Débuggage partiel

Le principe de débuggage partiel est l'opération qui fait passer X de Un à Up avec p < n.


III) Comportements asymptotiques de la bogosité

Théorème : La bogosité d'un élément X est bornée.

Il existe également une borne supérieure : h.
h est la bogosité maximale. C'est une fonction croissante de la taille de X.

|X| = cte => lim [X] = h
                       h(|X|) croissant.


IV) Principes de correction

a) Patch.

Un patch est aussi un élément de U. On appelle pouvoir correcteur CP du patch P, le rapport : CP = bc / [P] avec :
bc est le nombre de bugs qu'il corrige,
[P] la bogosité (intrinsèque) du patch.

Un CP > 1 indique un patch efficace. Il corrige plus de bugs qu'il n'en apporte.

{ CP > 1 } -> [Y] < [X] + [P]                 avec Y = X + P et bc <[X]

Un CP < 1 indique un patch inefficace.

{ CP < 1 } -> [Y] > [X] + [P]

Inégalités des ajouts patchés :

     [P1] + [P2] > [P1+P2]      
CP1  + CP2 <    CP

Le pouvoir correcteur ajouté a une performance moindre qu'un patch global. Ceci montre bien que l'application d'une infinité de patch à un programme fait tendre la bogosité de celui vers 0 sans jamais l'atteindre.

Ainsi, l'application répété de patchs fait passer X de Un vers Up avec (p-n) tendant vers 0

b) Patch autocorrecteur

Est dit patch autocorrecteur, tout patch à CP infini.

Ceci implique une bogosité intrinsèque nulle. Le patch est en fait un patch pour le programme mais aussi pour lui-même. Il s'agit du modèle parfait du patch, qui n'a pas sa place en milieu industriel.


Christophe Camel <ChrisCamel@COMPUSERVE.COM>




Me laisser un mot

Retour à la page humour

Retour à la page principale.