Passer au contenu
Cet article a été traduit du japonais à l'aide de l'IA
Lire en japonais
Cet article est dans le domaine public (CC0). N'hésitez pas à l'utiliser librement. CC0 1.0 Universal

Développement axé sur le développement et Tests axés sur le refactoring

Le développement consiste à créer à plusieurs reprises quelque chose de nouveau et d'utile.

Lorsque nous entendons le mot « développement », le développement de nouveaux produits vient souvent à l'esprit. Cela diffère de la fabrication de produits individuels ; cela implique, pour ainsi dire, la création des plans ou des moules du produit.

Par conséquent, les conceptions et les moules créés grâce au développement de nouveaux produits sont utilisés à plusieurs reprises dans les usines pour produire en masse des produits identiques.

Le mot « développement » est également utilisé pour désigner le développement de capacités individuelles, ou le développement d'une société et d'une nation. Cela n'implique pas seulement une augmentation de ce qui est possédé, mais plutôt la capacité d'utiliser et de bénéficier à plusieurs reprises des capacités développées.

Bien que la puissance économique des individus et des sociétés puisse fluctuer en fonction des conditions économiques, les capacités développées sont généralement permanentes.

Même si elles diminuent, cela est perçu comme un déclin, et non comme une fluctuation comparable à la prospérité économique.

En outre, il y a le développement de la technologie et des connaissances. Contrairement aux capacités des individus ou des sociétés spécifiques, celles-ci ont la particularité d'être facilement partageables.

Et parmi les résultats de ces développements – produits, capacités, connaissances et technologies – certains peuvent être utiles pour un développement ultérieur.

En développant de tels résultats utiles, le champ du développement s'élargit, et l'efficacité et la qualité s'améliorent également.

Développement logiciel piloté par l'IA

Généralement, le développement exigeait un temps et des efforts considérables. D'autant plus que la société progresse et que les choses se complexifient, la création de nouveautés devient de plus en plus difficile.

Cependant, avec l'avènement de l'IA générative, cette situation est en train de changer. Actuellement, le développement logiciel connaît une transformation spectaculaire, grâce aux capacités de programmation avancées de l'IA générative.

Une vision d'avenir où des agents autonomes basés sur l'IA générative deviendront des ingénieurs logiciels centraux pour le développement logiciel est déjà en passe de devenir une réalité.

Nous traversons actuellement une période de transition. Bien que nous ne puissions pas entièrement confier le développement à l'IA générative, son utilisation habile peut propulser le développement logiciel.

C'est ce que l'on appelle le développement logiciel piloté par l'IA.

Développement axé sur le développement

Lorsque l'IA générative rationalise le développement logiciel, elle peut non seulement rendre plus efficace le développement du logiciel cible final, mais aussi le développement de logiciels qui facilitent le développement lui-même.

Comme mentionné précédemment, les résultats facilitant le développement élargissent la portée du développement et contribuent à accroître l'efficacité et la qualité. De plus, s'ils sont créés efficacement, ils peuvent être réutilisés dans d'autres projets de développement.

Par conséquent, en développant des logiciels utiles au cours du développement logiciel, l'efficacité globale peut être augmentée, et ces actifs peuvent être également exploités pour le développement futur.

Traditionnellement, le développement de tels logiciels facilitant le développement était une pratique courante dans le domaine, mais cela nécessitait son propre temps et ses propres efforts de développement, exigeant une évaluation minutieuse et une mise en œuvre ciblée.

En utilisant l'IA générative, des logiciels simples pour automatiser de petites tâches impromptues peuvent être créés rapidement. Pour les tâches dont les processus sont clairs, l'IA générative peut générer des programmes précis avec presque aucune erreur.

Cela rend plus facile que jamais le développement de logiciels qui facilitent le développement pendant le développement logiciel.

Et en y regardant de plus près, un style de développement émerge où des outils utiles sont continuellement développés pendant le processus de développement, transformant ainsi la méthode de développement elle-même.

Nous appellerons cela le Développement axé sur le développement.

Pour pratiquer le Développement axé sur le développement, il faut prendre l'habitude d'observer objectivement son propre développement logiciel pour déterminer quelles parties peuvent être déléguées au logiciel et quelles parties ne peuvent être réalisées que par des humains, ainsi que la compétence nécessaire pour développer de tels logiciels facilitant le développement.

De plus, l'IA générative peut être intégrée dans ces outils logiciels. En l'intégrant dans le logiciel, contrairement à un agent d'IA générative autonome, la portée du traitement peut être réduite et un chemin clair peut être défini dans une certaine mesure.

Bien que les agents d'IA puissent obtenir des résultats similaires via des prompts, les logiciels intégrant l'IA générative peuvent plus facilement augmenter la précision en combinant à la fois les programmes et les prompts.

Si le Développement axé sur le développement peut être mis en pratique, le deuxième projet verra des améliorations à la fois en qualité et en coût par rapport au premier. De plus, avec chaque projet suivant — le troisième, le quatrième, et ainsi de suite — les améliorations continueront de s'accumuler.

Ceci est entièrement différent du simple développement de logiciels à l'aide de l'IA générative. Un écart significatif se creusera au fil du temps entre les équipes qui se contentent de maîtriser les outils d'IA générative et celles qui pratiquent le Développement axé sur le développement.

Tests axés sur le refactoring

Il existe un concept appelé Développement piloté par les tests (TDD), qui consiste d'abord à concevoir des tests basés sur les spécifications, puis à développer un logiciel capable de réussir ces tests.

Initialement, j'ai également pensé qu'avec l'IA générative facilitant le développement de programmes de test pour l'automatisation des tests, le Développement piloté par les tests pourrait être praticable.

Cependant, à mesure que j'ai commencé à pratiquer le Développement axé sur le développement, j'en suis venu à croire que l'approche consistant à concevoir des tests avant l'implémentation n'était pas toujours appropriée.

Particulièrement pour les logiciels tels que les applications web, qui impliquent des aspects subjectifs comme la convivialité et le design visuel que l'on peut expérimenter en interagissant avec, j'ai réalisé que l'exécution et l'interaction concrètes avec le logiciel prenaient le pas sur les tests détaillés.

En effet, si des insatisfactions significatives au niveau de l'UI/UX apparaissent lors de l'interaction, il est possible que des éléments fondamentaux tels que le cadre, l'architecture de base, le modèle de données ou les cas d'utilisation doivent être modifiés.

Dans mon projet de développement logiciel personnel actuel, j'ai également remarqué des problèmes de flexibilité fonctionnelle et de performance, ce qui m'a amené à remplacer deux frameworks par d'autres.

Il y avait aussi une partie avec une faible efficacité d'utilisation de la mémoire, ce qui a nécessité une refonte complète du traitement.

C'est lors de ces points de refactoring que le test devient une considération consciente.

Si cela se produit au début du développement, ou si les fonctionnalités et les spécifications sont de toute façon susceptibles de changer considérablement, les tests pourraient ne pas être nécessaires.

Cependant, si le développement est déjà bien avancé et qu'il y a de nombreux éléments à vérifier, des tests seront probablement nécessaires lors du refactoring pour s'assurer qu'il n'y a pas de déficiences fonctionnelles ou d'omissions.

Par conséquent, l'idée de créer des programmes de test au moment où le développement a progressé jusqu'à un certain point et que le refactoring devient nécessaire n'est pas mauvaise.

À ce stade, l'essentiel n'est pas de créer des tests pour tout le code, mais de concentrer les tests sur les parties matures qui sont peu susceptibles de changer à l'avenir, en laissant les parties encore fluides sans tests automatisés.

Cela peut être appelé Test axé sur le refactoring.

Conclusion

L'IA générative transforme radicalement le développement logiciel.

Dans des articles précédents, j'ai souligné l'importance de viser à devenir un Ingénieur omnidirectionnel, capable d'aller au-delà du rôle traditionnel d'ingénieur full-stack pour développer des systèmes omnidirectionnels combinant divers domaines, infrastructures et environnements d'exécution.

J'ai également rédigé un article suggérant que nous entrons dans une ère de Développement axé sur l'expérience et le comportement, qui se concentre sur l'amélioration de l'expérience utilisateur par le comportement du logiciel, plutôt que sur l'approche traditionnelle de développement logiciel consistant à aligner les spécifications sur l'implémentation.

Le Développement axé sur le développement et les Tests axés sur le refactoring sont précisément les approches qui nous mèneront vers ces nouveaux horizons du développement logiciel.