ホームページ  >  記事  >  バックエンド開発  >  AIを信頼するのではなく、テストを信頼しましょう

AIを信頼するのではなく、テストを信頼しましょう

王林
王林オリジナル
2024-07-16 09:18:21988ブラウズ

私の最初のストーリーでは、GitHub Copilot の形で AI を使用した私の経験について話しました。またしても裏切られました。でも、本当の恋人 UnitTest

が優しく受け止めてくれました。

私は現在、grpc ストリームを使用してファイルを受信するコードに取り組んでいます。ファイルはバイト単位で送信されます。 Go には、最初の 512 バイトからファイルのメディア タイプを判断できる優れた機能があります。送信されたすべてのバイトをメモリ内に保持したくないので、私の目標は、メディア タイプをスニッフィングするために、最後にちょうど 512 バイトのバイト配列を用意することです。他のすべてのバイトは物理ファイル ストレージに書き込まれてから破棄される必要があります。

私は Golang や他の言語で配列やスライスを扱う経験があまりありません。私のテスト ケースでは、512 バイトより小さいチャンク、ちょうど 512 バイト、および 512 バイトより大きいチャンクをテストすることを選択します。その理由が気になる場合は、境界テストとは何なのかを調べてください。私はテストを書いた経験が豊富です。

当然のことながら、わずか 4 バイトのテストは失敗しました。 Go の標準ライブラリをさらに深く理解するには時間がかかりました。コードの小さな断片を記述、実行、デバッグするのは非常に簡単なので、私はこのためにテストを(誤って)使用しています。これが私の学習例です:

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]
}

AI は説明を手伝ってくれて、Go でのスライスの使い方をよりよく理解できるようにしてくれます。新しいアイデアに満ちた若者から何かを学ぶのは、老人にとっていつも嬉しいことです。

Helpful explanation

GitHub Copilot の助けにより、最初と 2 番目のテストは合格しました。私が使用したコードは次のとおりです:

var totalFileSize uint64 = 0
sniff := make([]byte, 512)

copy(sniff[totalFileSize:], chunkMessage.Chunk)

スライスが範囲外だったため、512 バイトを超えるテストは失敗しました。おそらく、私にはまだ学ぶべきことがたくさんあることを自分自身に認める時期が来たのかもしれません。 GitHub Copilot は次の解決策を考え出しました:

if totalFileSize < 512 {
    remaining := 512 - totalFileSize
    if len(chunkMessage.Chunk) > remaining {
        chunkMessage.Chunk = chunkMessage.Chunk[:remaining]
    }
    copy(sniff[totalFileSize:], chunkMessage.Chunk)
}

老賢人としての傲慢さの中で、私はもっとうまくやれると思っていました。私の弁護としては、最終ファイルではすべてのバイトをコピーする必要があるため、chunkMessage.Chunk は変更できません。少なくとも私の目にはうまく機能する短いバージョンを実装しました。

if totalFileSize < 512 {
  missingBytes := 512 - totalFileSize
  copy(sniff[totalFileSize:], chunkMessage.Chunk[:missingBytes])
}

私はこの短いバージョンを AI に提案し、私のコードについて意見を求めました。 AI は私のソリューションに非常に満足しました。

Right, ...

…しかし、テストを再実行してみると、目から鱗が落ちました。 GitHub Copilot は正しいです。512 バイトを超えるコピーは行いません。しかし、512 バイト未満のテスト ケースでは、このコードは機能しません。 AI は私を喜ばせる答えを選び、私の間違いを指摘することを避けました。最終的に以下のコードになりました。これは両方の長所です。

if totalFileSize < 512 {
  missingBytes := 512 - totalFileSize
  remaingBytesInChunk := uint64(len(chunkMessage.Chunk))
  if remaingBytesInChunk < missingBytes {
    missingBytes = remaingBytesInChunk
  }
  copy(sniff[totalFileSize:], chunkMessage.Chunk[:missingBytes])
}

私はソフトウェアエンジニアはテストを書かなければならないと強く信じています。テストを書くのは時々難しく、愚かで退屈な作業であり、テストを維持するには時間を費やす必要があります。しかし、母親のように、彼らはあなたの命を守り、世話をします。彼らがいれば、安心して赤ちゃんのように眠ることができます。 AI も同じことを行います。

Mummy loves baby
Unsplash による Isaac Quesada の写真

よく眠れ、AI。 UnitTest はあなたを愛し、守っています。

以上がAIを信頼するのではなく、テストを信頼しましょうの詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。