Tout logiciel à grande échelle n'est pas entièrement conçu dès le début, mais est amélioré, édité, testé unitairement, réparé par les développeurs, les révisions de code sont résolues et les problèmes sont résolus à plusieurs reprises jusqu'à ce que les exigences en ligne soient remplies. dépôt.
La connaissance du contrôle de l'ensemble du processus s'appelle Génie logiciel.
L'ingénierie logicielle n'est pas un processus indépendant, mais se compose de développeurs, de réviseurs de code, de rapporteurs de bogues, d'architectes logiciels et de divers outils de développement (tels que des compilateurs, des tests unitaires, des connecteurs, des analyseurs statiques) qui communiquent entre eux.
Récemment, Google a annoncé son propre framework DIDACT (Dynamic Integrated Developer ACTivity, activité de développeur intégrée dynamique) , qui utilise la technologie de l'IA pour améliorer l'ingénierie logicielle et utilise le statut intermédiaire du développement logiciel comme données de formation pour aider les développeurs à rédiger , Modifiez le code et découvrez le développement de logiciels en temps réel.
DIDACT est un modèle multitâche formé aux activités de développement comprenant l'édition, le débogage, la correction et la révision du code
Les chercheurs ont construit et déployé trois outils DIDACT en interne, l'analyse des annotations, la correction des builds. , et la prédiction d'indices, chaque outil est intégré à une étape différente du flux de travail de développement.
Pendant des décennies, la chaîne d'outils d'ingénierie logicielle de Google a stocké chaque opération liée au code sous forme de journal d'interaction entre l'outil et le développeur.
En principe, les utilisateurs peuvent utiliser ces enregistrements pour rejouer en détail le processus de changement clé dans le processus de développement logiciel, c'est-à-dire comment la base de code de Google a été formée, y compris chaque édition de code, compilation, commentaire, changement de nom de variable, etc. .
L'équipe de développement de Google stockera le code dans un monorepo (dépôt mono), qui est un référentiel de code contenant tous les outils et systèmes.
Les développeurs de logiciels expérimentent souvent des modifications de code dans des espaces de travail locaux de copie sur écriture gérés par les systèmes Clients in the Cloud (CitC).
Lorsqu'un développeur est prêt à regrouper un ensemble de modifications de code pour accomplir une certaine tâche (comme la correction d'un bug), il ou elle doit créer une liste de modifications (CL) dans Critique, le système de révision de code de Google.
Comme les systèmes de révision de code courants, les développeurs communiquent avec les pairs réviseurs sur les fonctionnalités et le style, puis modifient CL pour résoudre les problèmes soulevés lors des commentaires de révision.
Finalement, le critique a déclaré le code "LGTM!" et a fusionné le CL dans la base de code.
Bien sûr, en plus des conversations avec les réviseurs de code, les développeurs doivent également entretenir un grand nombre de « dialogues » avec d'autres outils d'ingénierie logicielle, notamment des compilateurs, des frameworks de test, des éditeurs de liens, des analyseurs statiques, des outils de test de fuzz, etc. .
Illustration du réseau complexe d'activités impliquées dans le développement logiciel : activités des développeurs, interactions avec les réviseurs de code et appels à des outils tels que les compilateurs.
DIDACT exploite l'interaction entre les ingénieurs et les outils pour renforcer les modèles d'apprentissage automatique, aidant ainsi la participation des développeurs de Google en suggérant ou en optimisant les actions des développeurs lors de l'exécution de tâches de génie logiciel Processus de génie logiciel.
À cette fin, les chercheurs ont défini un certain nombre de tâches concernant les activités individuelles des développeurs : réparer les builds défectueux, prédire les commentaires de révision de code, traiter les commentaires de révision de code, renommer les variables, éditer les fichiers, etc.
Définissez ensuite un formulaire commun pour chaque activité : obtenez un certain State (fichier de code), une Intent (annotation spécifique à une activité, comme une annotation de révision de code ou une erreur du compilateur), et générez une Action (Actions utilisées pour traiter tâches).
Action est comme un mini langage de programmation qui peut être étendu aux activités nouvellement ajoutées, couvrant l'édition, l'ajout de commentaires, le renommage des variables, le marquage des erreurs de code, etc. Ce langage peut également être appelé DevScript.
Les invites d'entrée du modèle DIDACT sont des tâches, des extraits de code et des commentaires liés à la tâche, et la sortie est des actions de développement, telles que l'édition ou les commentaires
State-Intent-Action (State-Intent-Action) formulaire de définition Être capable de capturer différentes tâches de manière commune et, plus important encore, DevScript peut exprimer des actions complexes de manière concise sans avoir besoin de générer l'intégralité de l'état (code original) après que l'action se soit produite, ce qui rend le modèle plus efficace et interprétable.
Par exemple, renommer peut modifier plusieurs endroits dans le fichier de code, mais le modèle n'a besoin de prédire qu'une seule opération de renommage.
DIDACT fonctionne très bien sur les tâches auxiliaires personnelles. Par exemple, l'exemple suivant montre le travail de nettoyage du code de DIDACT une fois la fonction terminée, en saisissant d'abord les commentaires finaux du réviseur de code (étiquetés). humain dans l'image), puis prédire les opérations nécessaires pour résoudre le problème soulevé dans l'annotation (affiché avec diff).
À partir d'un premier extrait de code et de commentaires attachés à l'extrait par le réviseur de code, la tâche de nettoyage avant soumission de DIDACT génère des opérations d'édition (insertion et suppression de texte) qui gèrent ces commentaires
DIDACT Le La nature multimodale de Python donne également lieu à de nouveaux comportements qui émergent à mesure que l'échelle augmente. L'une de ces fonctionnalités est l'augmentation de l'historique, qui peut être activée via des invites. Le modèle permet de mieux prédire ce que les développeurs devraient faire ensuite. .
Démonstration de l'achèvement du code amélioré par l'historique
La tâche d'achèvement du code amélioré par l'historique peut démontrer cette capacité. Dans l'exemple ci-dessus, le développeur a ajouté un nouveau paramètre de fonction (1) et déplacé. le curseur dans le document (2). Sur la base de l'historique des modifications du développeur et de la position du curseur, le modèle est capable de prédire avec précision l'entrée docstring pour le nouveau paramètre et d'effectuer la troisième étape.
Dans la tâche plus difficile de prédiction de modification augmentée par l'historique, le modèle est capable de sélectionner l'emplacement de la prochaine modification d'une manière historiquement cohérente.
Démonstration de prédiction d'édition sur plusieurs itérations enchaînées
Si le développeur supprime l'argument de fonction (1), le modèle peut historiquement prédire correctement les caractères du document pour la chaîne d'argument supprimée (2) est mis à jour (sans que le développeur humain ait à y placer manuellement le curseur), et l'instruction dans la fonction (3) est mise à jour syntaxiquement (et sans doute sémantiquement) correctement.
Avec l'historique, le modèle peut décider sans ambiguïté comment continuer correctement le "processus d'édition du code", alors que sans historique, le modèle n'a aucun moyen de savoir que les paramètres de fonction manquants étaient intentionnels (car le développeur travaillait sur un processus plus long). opération d'édition pour supprimer le paramètre) ou une situation inattendue (le modèle doit rajouter le paramètre pour résoudre le problème).
De plus, le modèle peut également effectuer davantage de tâches, comme partir d'un fichier vierge et exiger que le modèle prédise en continu les prochaines opérations d'édition jusqu'à ce qu'un fichier de code complet soit écrit.
Mieux encore, ce modèle aide à écrire du code étape par étape, ce qui est naturel pour les développeurs :
Commencez par créer un travail complet avec des importations, des indicateurs et un cadre de fonctions principales de base, puis ; ajoutez progressivement de nouvelles fonctionnalités, telles que la lecture et l'écriture des résultats à partir de fichiers, et ajoutez la possibilité de filtrer certaines lignes en fonction des expressions régulières fournies par l'utilisateur.
DIDACT transforme le processus de développement logiciel de Google en démonstrations de formation pour les assistants développeurs d'apprentissage automatique et utilise ces données de démonstration pour former des modèles, créer du code étape par étape, interagir avec les outils et les réviseurs de code.
Les méthodes DIDACT complètent les grandes réalisations des modèles linguistiques à grande échelle de Google et d'autres sociétés pour réduire la charge de travail, augmenter la productivité et améliorer la qualité du travail des ingénieurs logiciels.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!