Villkoren "bestämma" och "obestämd" är inte standardklassificeringar för programvaran själv. De kan emellertid ansöka om * aspekter * av mjukvarubeteende eller design. Skillnaden hänför sig vanligtvis till förutsägbarhet och kontroll:
* Bestämma programvara (eller beteende): Detta hänvisar till programvara där med samma ingångar och initiala förhållanden kommer det * alltid * att producera samma utgångar. Det finns inget slumpmässighet eller oförutsägbart beteende. Utföringsvägen bestäms fullständigt av ingången och programmets logik. Exempel:
* En enkel kalkylator: Med tanke på 2 + 2 kommer den alltid att returnera 4.
* en kompilator: Med tanke på samma källkod bör den alltid generera samma objektkod (spärrar kompilatoroptimeringar som kan ordna om instruktioner utan att ändra resultatet).
* En deterministisk simulering: En fysiksimulering som använder fasta regler och inte innehåller slumpmässighet.
* obestämd programvara (eller beteende): Detta hänvisar till programvara där, även med samma ingångar och initiala förhållanden, utgången kan variera. Denna oförutsägbarhet är ofta avsiktlig och uppstår från:
* Slumpmässigt nummergenerering: Används i spel, simuleringar eller kryptografi för oförutsägbara element.
* Samtidighet/parallellism: I flertrådade program kan ordningen på utförandet av trådar vara icke-deterministiska, vilket leder till olika resultat beroende på schemaläggningsbeslut som fattats av operativsystemet.
* Externa faktorer: Programvara som interagerar med externa enheter (sensorer, nätverk) kan få olika ingångar, vilket leder till olika utgångar även med samma initiala programtillstånd.
* icke-deterministiska algoritmer: Vissa algoritmer, genom design, utforska olika lösningsvägar, och deras resultat är inte garanterat att vara detsamma på varje körning (t.ex. en del optimeringsalgoritmer eller randomiserade sökalgoritmer).
Sammanfattningsvis:
Kärnskillnaden ligger i förutsägbarhet. Att bestämma programvara är förutsägbar; Dess utgång är en funktion enbart av dess ingång. Obestämd programvara introducerar ett element av slumpmässighet eller oförutsägbarhet, vilket resulterar i potentiellt olika utgångar även för identiska ingångar. "Obestämdhet" är inte nödvändigtvis ett fel; Det är ofta en funktion som är utformad i systemet för specifika ändamål.