Jangan percaya AI, percaya ujian

王林
Lepaskan: 2024-07-16 09:18:21
asal
1007 orang telah melayarinya

Dalam cerita pertama saya, saya bercakap tentang pengalaman saya dengan AI dalam bentuk GitHub Copilot. Ia mengkhianati saya lagi. Tetapi saya telah ditangkap dengan lembut oleh kekasih sejati saya: UnitTest


Saya sedang mengusahakan kod yang menerima fail menggunakan strim grpc. Fail dihantar dalam ketulan bait. Go mempunyai fungsi yang bagus di mana anda boleh menentukan jenis media fail daripada 512 bait pertama. Saya tidak mahu menyimpan semua bait yang dihantar dalam ingatan jadi matlamat saya adalah untuk mempunyai tatasusunan bait tepat 512 bait pada penghujungnya untuk menghidu jenis media. Semua bait lain hendaklah ditulis pada storan fail fizikal dan kemudian dibuang.

Saya tidak begitu berpengalaman dalam bekerja dengan tatasusunan dan kepingan dalam Golang, mahupun dalam bahasa lain. Untuk kes ujian saya, saya memilih untuk menguji ketulan yang lebih kecil daripada 512 bait, tepat 512 bait dan lebih besar daripada 512 bait. Jika anda tertanya-tanya mengapa, lihat apakah ujian sempadan itu. Saya mempunyai banyak pengalaman dalam ujian penulisan.

Tidak menghairankan, ujian dengan hanya 4 bait gagal. Saya mengambil sedikit masa untuk mendalami perpustakaan standard go. Saya (salah) menggunakan ujian untuk ini kerana ia sangat mudah untuk menulis, melaksanakan dan menyahpepijat coretan kecil kod. Berikut ialah contoh pembelajaran saya:

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]
}
Salin selepas log masuk

AI membantu saya dengan penjelasan dan memberi saya pemahaman yang lebih baik tentang cara menggunakan kepingan dalam Go. Memang seronok untuk orang tua belajar sesuatu daripada belia yang penuh dengan idea baharu.

Helpful explanation

Dengan bantuan GitHub Copilot, ujian pertama dan kedua saya lulus. Inilah kod yang saya gunakan:

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

copy(sniff[totalFileSize:], chunkMessage.Chunk)
Salin selepas log masuk

Ujian untuk lebih daripada 512 bait gagal kerana kepingan saya berada di luar julat. Mungkin sudah tiba masanya untuk saya mengaku pada diri saya yang masih banyak yang perlu saya pelajari. GitHub Copilot menghasilkan penyelesaian berikut:

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

Dalam keangkuhan saya sebagai orang tua yang bijak, saya fikir saya boleh melakukan yang lebih baik. Dalam pembelaan saya, chunkMessage.Chunk tidak boleh diubah suai kerana semua bait mesti disalin dalam fail akhir. Saya melaksanakan versi yang lebih pendek yang berfungsi dengan baik, sekurang-kurangnya pada pandangan saya.

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

Saya mencadangkan versi yang lebih pendek ini kepada AI dan meminta pendapatnya tentang kod saya. AI sangat berpuas hati dengan penyelesaian saya.

Right, ...

…tetapi apabila saya menjalankan semula ujian, sisik jatuh dari mata saya. GitHub Copilot betul, saya tidak menyalin lebih daripada 512 bait. Tetapi dalam kes ujian di mana saya mempunyai kurang daripada 512 bait, kod ini tidak berfungsi. AI memilih jawapan untuk menggembirakan saya dan mengelak daripada menunjukkan kesalahan yang saya lakukan. Saya berakhir dengan kod di bawah. Ini adalah yang terbaik dari kedua-dua dunia.

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

Saya sangat percaya bahawa seorang jurutera perisian perlu menulis ujian. Ujian kadangkala sukar untuk ditulis, ia adalah kerja yang membosankan dan anda perlu meluangkan masa untuk mengekalkannya. Tetapi seperti seorang ibu, mereka menjamin hidup anda dan menjaga anda. Dengan mereka, saya boleh tidur seperti bayi tanpa risau. Kini AI melakukan perkara yang sama.

Mummy loves baby
Foto oleh Isaac Quesada auf Unsplash

Tidur lena, AI. UnitTest menyayangi dan melindungi anda.

Atas ialah kandungan terperinci Jangan percaya AI, percaya ujian. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

sumber:dev.to
Kenyataan Laman Web ini
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn
Tutorial Popular
Lagi>
Muat turun terkini
Lagi>
kesan web
Kod sumber laman web
Bahan laman web
Templat hujung hadapan