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] }
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.
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)
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) }
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]) }
Saya mencadangkan versi yang lebih pendek ini kepada AI dan meminta pendapatnya tentang kod saya. AI sangat berpuas hati dengan penyelesaian saya.
…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]) }
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.
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!