Dans ma toute première histoire, j'ai parlé de mon expérience avec l'IA sous la forme de GitHub Copilot. Cela m'a encore trahi. Mais j'ai été doucement attrapé par mon véritable amant : UnitTest
Je travaille actuellement sur du code qui reçoit un fichier en utilisant un flux grpc. Le fichier est envoyé en morceaux d'octets. Go a une fonctionnalité intéressante qui vous permet de déterminer le type de média d'un fichier à partir des 512 premiers octets. Je ne souhaite pas conserver tous les octets envoyés en mémoire, mon objectif est donc d'avoir un tableau d'octets d'exactement 512 octets à la fin pour détecter le type de média. Tous les autres octets doivent être écrits dans un stockage de fichiers physique, puis supprimés.
Je n'ai pas beaucoup d'expérience dans le travail avec des tableaux et des tranches en Golang, ni dans d'autres langages. Pour mes cas de test, j'ai choisi de tester des morceaux inférieurs à 512 octets, exactement 512 octets et supérieurs à 512 octets. Si vous vous demandez pourquoi, découvrez ce que sont les tests de limites. J'ai beaucoup d'expérience dans la rédaction de tests.
Sans surprise, le test avec seulement 4 octets a échoué. Il m'a fallu un certain temps pour approfondir les bibliothèques standard. J'utilise (à mauvais escient) des tests pour cela car il est si facile d'écrire, d'exécuter et de déboguer de petits extraits de code. Voici mon exemple d'apprentissage :
func TestArray(t *testing.T) { //target2 := [6]int{} target := make([]int, 6) first := []int{1, 2, 3} second := []int{4, 5} size := 0 copy(target[size:], first) size += len(first) copy(target[size:], second) size += len(second) target = target[:size] }
L'IA m'aide avec les explications et me permet de mieux comprendre comment utiliser les tranches dans Go. C'est toujours un plaisir pour un vieil homme d'apprendre quelque chose de la jeunesse pleine d'idées nouvelles.
Avec l'aide de GitHub Copilot, mes premier et deuxième tests réussissent. Voici le code que j'ai utilisé :
var totalFileSize uint64 = 0 sniff := make([]byte, 512) copy(sniff[totalFileSize:], chunkMessage.Chunk)
Le test sur plus de 512 octets a échoué car ma tranche était hors de portée. Il est peut-être temps pour moi d’admettre que j’ai encore beaucoup à apprendre. GitHub Copilot a proposé la solution suivante :
if totalFileSize < 512 { remaining := 512 - totalFileSize if len(chunkMessage.Chunk) > remaining { chunkMessage.Chunk = chunkMessage.Chunk[:remaining] } copy(sniff[totalFileSize:], chunkMessage.Chunk) }
Dans mon arrogance de vieux sage, je pensais pouvoir faire mieux. Pour ma défense, chunkMessage.Chunk ne peut pas être modifié car tous les octets doivent être copiés dans le fichier final. J'ai implémenté une version plus courte qui a bien fonctionné, du moins à mes yeux.
if totalFileSize < 512 { missingBytes := 512 - totalFileSize copy(sniff[totalFileSize:], chunkMessage.Chunk[:missingBytes]) }
J'ai proposé cette version plus courte à l'IA et lui ai demandé son avis sur mon code. L'IA a été très satisfaite de ma solution.
… mais quand j'ai refait les tests, les écailles sont tombées de mes yeux. GitHub Copilot a raison, je ne copie pas plus de 512 octets. Mais dans le cas de test où j'ai moins de 512 octets, ce code ne fonctionne pas. L’IA a choisi une réponse pour me plaire et a évité de souligner ce que j’avais mal fait. Je me suis retrouvé avec le code ci-dessous. C'est le meilleur des deux mondes.
if totalFileSize < 512 { missingBytes := 512 - totalFileSize remaingBytesInChunk := uint64(len(chunkMessage.Chunk)) if remaingBytesInChunk < missingBytes { missingBytes = remaingBytesInChunk } copy(sniff[totalFileSize:], chunkMessage.Chunk[:missingBytes]) }
Je crois fermement qu'un ingénieur logiciel doit écrire des tests. Les tests sont parfois difficiles à écrire, c'est un travail stupide et ennuyeux et il faut passer du temps à les maintenir. Mais telle une mère, elles sécurisent votre vie et prennent soin de vous. Avec eux, je peux dormir comme un bébé sans soucis. Maintenant, l'IA fait de même.
Photo d'Isaac Quesada sur Unsplash
Dors bien, AI. UnitTest vous aime et vous protège.
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!