Les propriétés, une boussole pour le programmeur ✛ ✎

Original: "Accurate Programming: Thinking about programs in terms of properties"
· Walid Taha, Veronica Gaspes, Rex Page
arXiv:1109.0786 · 2011-09-05 · arXiv non-exclusive · analyse indépendante · 2 min
On peut vérifier un programme non pas avec des exemples, mais avec des règles qui sont toujours vraies.

Un programmeur regarde la fonction max, qui renvoie le plus grand de deux nombres. Comment s'assurer qu'elle fonctionne ? On peut écrire des tests : max(2,3)=3, max(5,5)=5. Mais que se passe-t-il si une erreur se cache au fin fond du code et ne se manifeste qu'avec le nombre 65536 ? Au lieu de deviner, on peut formuler une règle : « le résultat n'est jamais inférieur à chacun des arguments ». C'est une propriété, elle doit être vraie pour toutes les entrées possibles.

La bibliothèque ScalaCheck génère automatiquement des centaines de nombres aléatoires, les injecte dans la propriété et signale si la règle est violée. Ainsi, les propriétés agissent comme une boussole : elles ne vérifient pas un itinéraire précis, mais indiquent une direction valable pour tout chemin. Par exemple, pour la fonction sum (addition d'une liste de nombres), la propriété « si on ajoute un nombre positif, la somme augmente » détecte une erreur de dépassement que les tests classiques ne remarquent pas.

Les propriétés peuvent être affinées, comme on règle une boussole. D'abord, on dit : « le résultat est non négatif », mais cette règle est satisfaite même par une fonction qui renvoie toujours zéro. On ajoute : « pour une liste d'un seul élément, le résultat est égal à 1 », et zéro est éliminé. Pas à pas, les propriétés convergent vers le seul programme correct.

La programmation précise, c'est quand le développeur pense au code à travers ses propriétés. Au lieu de se perdre dans le brouillard de la complexité, il tient en main une boussole faite de règles vérifiables automatiquement. Cela rend les programmes plus fiables et leur modification plus sûre.

Le nom de la bibliothèque ScalaCheck fait référence à l'idée de vérification automatique de propriétés, et non à une « vérification de Scala » : c'est un outil pour vérifier des propriétés en Scala.

Dans la série « Westworld », le comportement des robots est déterminé par des règles complexes, mais leur correction n'est pas garantie. La programmation précise pourrait aider à formuler et vérifier des propriétés de comportement, évitant ainsi des défaillances inattendues.

Scientifiques
Erwin SchrödingerHugh Everett IIIMax BornAlbert EinsteinJohn von NeumannAugustin-Louis Cauchy
Notions
précision automatisation optimisation précision diagnostique traitement automatique du langage naturel temps réel algorithme quantique conception de médicaments open source convergence apprentissage automatique simulation informatique reconnaissance vocale médecine personnalisée intelligence artificielle robotique calcul classification solution exacte précision