|
Les termes « déterminé » et « indéterminé » ne sont pas des classifications standard pour les logiciels eux-mêmes. Cependant, ils peuvent s'appliquer à des *aspects* du comportement ou de la conception du logiciel. La distinction concerne généralement la prévisibilité et le contrôle :
* Logiciel (ou comportement) déterminé : Il s'agit d'un logiciel où, étant donné les mêmes entrées et conditions initiales, il produira *toujours* les mêmes sorties. Il n’y a aucun hasard ou comportement imprévisible. Le chemin d'exécution est entièrement déterminé par l'entrée et la logique du programme. Exemples :
* Une simple calculatrice : Étant donné 2 + 2, il renverra toujours 4.
* Un compilateur : Étant donné le même code source, il doit toujours générer le même code objet (sauf optimisations du compilateur qui pourraient réorganiser les instructions sans modifier le résultat).
* Une simulation déterministe : Une simulation physique qui utilise des règles fixes et n'intègre pas de hasard.
* Logiciel (ou comportement) indéterminé : Il s'agit d'un logiciel où, même avec les mêmes entrées et conditions initiales, la sortie peut varier. Cette imprévisibilité est souvent intentionnelle et résulte :
* Génération de nombres aléatoires : Utilisé dans les jeux, les simulations ou la cryptographie pour les éléments imprévisibles.
* Concurrence/Parallélisme : Dans les programmes multithread, l'ordre d'exécution des threads peut être non déterministe, conduisant à des résultats différents en fonction des décisions de planification prises par le système d'exploitation.
* Facteurs externes : Les logiciels interagissant avec des périphériques externes (capteurs, réseaux) peuvent recevoir différentes entrées, conduisant ainsi à des sorties différentes même avec le même état initial du programme.
* Algorithmes non déterministes : Certains algorithmes, de par leur conception, explorent différentes voies de solution, et il n'est pas garanti que leur résultat soit le même à chaque exécution (par exemple, certains algorithmes d'optimisation ou algorithmes de recherche aléatoire).
En résumé :
La principale différence réside dans la prévisibilité. Un logiciel déterminé est prévisible ; sa sortie est fonction uniquement de son entrée. Un logiciel indéterminé introduit un élément de caractère aléatoire ou d'imprévisibilité, ce qui entraîne des résultats potentiellement différents, même pour des entrées identiques. L'« indétermination » n'est pas nécessairement un bug; il s'agit souvent d'une fonctionnalité conçue dans le système à des fins spécifiques.
|