Nouveau logiciel étant développé au MIT se révèle capable de réparer de façon autonome les bogues logiciels par des emprunts auprès d'autres programmes et à travers différents langages de programmation, sans nécessiter l'accès au code source. Cela pourrait sauver des milliers de développeurs heures de temps de programmation et de plomb à un logiciel beaucoup plus stable.

Bugs sont le fléau de la vie de développeur du logiciel. Les changements qui doivent être faites pour les corriger sont souvent trivial, impliquant généralement en changeant seulement quelques lignes de code, mais le processus d'identification exactement quelles lignes doivent être fixe peut être un processus fastidieux et souvent très frustrant même, en particulier dans les grands projets.

Mais maintenant, un nouveau logiciel du MIT pourrait prendre soin de cela, et plus encore. Le système, baptisé CodePhage, peut corriger les bugs qui ont à voir avec les contrôles variables, et pourrait bientôt être élargi pour fixer beaucoup plus de types d'erreurs. Remarquablement, selon chercheur du MIT Stelios Sidiroglou-Douskos, le logiciel peut faire ce genre de traduction de code dynamique et la transplantation (surnommé "la greffe de code horizontal," à partir de la procédé analogue en génétique) sans avoir accès au code source et à travers différents langages de programmation, en analysant le fichier exécutable directement.

Comment ça marche

A titre d'exemple, disons que vous avez écrit un programme informatique simple qui demande à l'utilisateur d'entrée deux nombres et renvoie le premier nombre divisé par le second. Disons aussi que, dans votre code, vous avez oublié de vérifier que le deuxième numéro est non nul (une division par zéro est mathématiquement undefined).

CodePhage commence avec un (buggé) application et deux entrées - celle qui déclenche aucune erreur ("d'entrée de sécurité») et celui qui le fait ("entrée dangereux»). En utilisant une grande base de données d'applications, il en trouve un qui peut lire et traiter correctement les deux entrées. Dans notre cas, le système devait chercher dans une vaste dépôt d'une fonction qui peut diviser deux nombres en toute sécurité.

"Nous avons des tonnes de code source disponible dans les dépôts open-source, des millions de projets, et beaucoup de ces projets en œuvre des spécifications similaires," dit-Sidiroglou Douskos. "Même si cela peut ne pas être la fonctionnalité de base du programme, ils ont souvent des sous-composants qui partagent fonctionnalité à travers un grand nombre de projets."

Le système fait la différence entre un programme «donneur» - le logiciel à partir de laquelle le correctif sera emprunté - et un programme de «bénéficiaire» - le code de punaisés laquelle le système MIT va essayer de réparer.

La première étape consiste à alimenter l'entrée "sûre" pour le code des bailleurs de fonds et dynamiquement suivre les contraintes qui sont imposées sur les variables d'entrée. Ensuite, le logiciel fait la même chose avec le deuxième, entrée «dangereux» et compare les deux ensembles de contraintes. Les points de divergence entre les deux identifient une contrainte qui a été atteint par l'entrée de sécurité, mais pas par une dangereuse, et est donc susceptible d'être un contrôle de sécurité qui manque à partir du code de destinataire.

Dans notre exemple, l'entrée de sécurité serait le diviseur étant un nombre quelconque non nulle, et l'entrée dangereuse serait le diviseur étant nulle. Le système MIT ne détecter que la condition «diviseur doit être différent de zéro" est atteint par l'entrée de sécurité, mais pas par le seul risque, identifier correctement que le chèque pour cette condition spécifique est manquant dans le code de destinataire et est la cause probable du bogue.

À ce stade, CodePhage prendra toutes les divergences dans les contrôles d'entrée dans le logiciel des bailleurs de fonds et de les traduire dans le langage de programmation du logiciel du destinataire. Le système va alors essayer d'ajouter les nouveaux contrôles pour le code source du programme de destinataire dans différentes parties du code, jusqu'à ce que l'entrée dangereuse est traitée correctement (et le programme se comporte toujours comme prévu lorsque vérifié contre un suite de tests).

Vers logiciels sans bug?

"La vision à long terme est que vous ne devez jamais écrire un morceau de code que quelqu'un d'autre a écrit avant," dit le professeur Martin Rinard MIT, qui faisait partie de l'étude. "Le système trouve ce morceau de code et met automatiquement en même temps que quelque morceaux de code que vous devez faire de votre programme de travail."

Rinard et l'équipe disent un développeur pourrait, par exemple, réduire le développement et les efforts de test en omettant les chèques pour les entrées illégales, et ensuite utiliser leur outil pour transférer automatiquement des contrôles de logiciel plus robuste, y compris closed-source, des applications propriétaires.

Selon les chercheurs, dans le logiciel commercial moderne, des contrôles de sécurité peuvent prendre jusqu'à 80 pour cent du code - et donc l'impact sur les temps de programmation pourrait, au moins en théorie, être assez important. Qui plus est, alors que le système est actuellement limitée à l'analyse des contrôles variables, les chercheurs affirment que les mêmes techniques sont également conçus pour suivre, extraire et insérer tout calcul, tant que le système est capable d'identifier correctement les valeurs attribuées aux variables le logiciel de donateurs.

Le système MIT pourrait également être utilisé pour transférer des contrôles entre les différentes versions de la même application, pour essayer d'empêcher les correctifs et les mises à jour logicielles nouvellement libérés d'introduire de nouveaux bogues.

Lorsque testé sur sept programmes open-source commune, CodePhage aurait été en mesure de rafistoler le code vulnérable à chaque fois, en prenant un maximum de 10 minutes par réparation. Dans les versions futures, les chercheurs espèrent réduire ce temps autant que possible de latence.

L'avance a été présenté à l'Association pour la conception du langage de programmation et de mise en œuvre de la conférence Computing Machinery ce mois-ci, et un document à accès ouvert décrivant le système peut être trouvé en ligne.