برنامه نویسی

به هوش مصنوعی اعتماد نکنید، به آزمایشات اعتماد کنید

Summarize this content to 400 words in Persian Lang
در اولین داستانم، در مورد تجربه خود با هوش مصنوعی در قالب GitHub Copilot صحبت کردم. دوباره به من خیانت کرد اما من به آرامی توسط معشوق واقعی ام دستگیر شدم: UnitTest

من در حال حاضر روی کدی کار می کنم که یک فایل را با استفاده از جریان grpc دریافت می کند. فایل به صورت تکه های بایتی ارسال می شود. Go عملکرد خوبی دارد که می توانید نوع رسانه یک فایل را از 512 بایت اول تعیین کنید. من نمی خواهم تمام بایت های ارسال شده را در حافظه نگه دارم، بنابراین هدف من این است که یک آرایه بایت دقیقاً 512 بایت در پایان داشته باشم تا نوع رسانه را بشنوم. تمام بایت های دیگر باید در یک ذخیره سازی فایل فیزیکی نوشته شوند و سپس دور ریخته شوند.

من در کار با آرایه ها و برش ها در Golang و نه در زبان های دیگر آنقدر تجربه ندارم. برای موارد آزمایشی، من انتخاب می کنم که تکه های کوچکتر از 512 بایت، دقیقاً 512 بایت و بزرگتر از 512 بایت را آزمایش کنم. اگر تعجب می کنید که چرا، بررسی کنید که تست های مرزی چیست. من تجربه زیادی در نوشتن تست دارم.

جای تعجب نیست که تست تنها با 4 بایت شکست خورد. مدتی طول کشید تا عمیق‌تر به کتابخانه‌های استاندارد بروید. من از تست‌ها برای این کار (سوء) استفاده می‌کنم، زیرا نوشتن، اجرا، و اشکال‌زدایی قطعات کوچک کد بسیار آسان است. در اینجا مثال یادگیری من است:

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هوش مصنوعی با توضیحات به من کمک می کند و به من درک بهتری از نحوه استفاده از برش ها در Go می دهد. همیشه برای یک پیرمرد لذت بخش است که از جوانی سرشار از ایده های جدید چیزی بیاموزد.

با کمک GitHub Copilot، تست های اول و دوم من قبول می شوند. کدی که استفاده کردم اینه:

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

من این نسخه کوتاهتر را به هوش مصنوعی پیشنهاد دادم و نظرش را در مورد کدم جویا شدم. هوش مصنوعی از راه حل من بسیار راضی بود.

… اما وقتی دوباره تست ها را اجرا کردم، ترازو از چشمانم افتاد. GitHub Copilot درست می گوید، من بیشتر از 512 بایت کپی نمی کنم. اما در مورد تست که من کمتر از 512 بایت دارم، این کد کار نمی کند. هوش مصنوعی پاسخی را برای خوشحالی من انتخاب کرد و از اشاره به اشتباه من اجتناب کرد. من با کد زیر به پایان رسیدم. این بهترین از هر دو جهان است.

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

وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

من به شدت معتقدم که یک مهندس نرم افزار باید تست بنویسد. نوشتن تست ها گاهی سخت است، کار خسته کننده احمقانه ای است و برای نگهداری از آنها باید زمان صرف کنید. اما آنها مانند یک مادر زندگی شما را تضمین می کنند و از شما مراقبت می کنند. با آنها می توانم مثل یک نوزاد بدون نگرانی بخوابم. حالا هوش مصنوعی هم همین کار را می کند.

عکس توسط ایزاک کوسادا در Unsplash

خوب بخواب، هوش مصنوعی. UnitTest شما را دوست دارد و از شما محافظت می کند.

در اصل در Medium ارسال شده است.

در اولین داستانم، در مورد تجربه خود با هوش مصنوعی در قالب GitHub Copilot صحبت کردم. دوباره به من خیانت کرد اما من به آرامی توسط معشوق واقعی ام دستگیر شدم: UnitTest


من در حال حاضر روی کدی کار می کنم که یک فایل را با استفاده از جریان grpc دریافت می کند. فایل به صورت تکه های بایتی ارسال می شود. Go عملکرد خوبی دارد که می توانید نوع رسانه یک فایل را از 512 بایت اول تعیین کنید. من نمی خواهم تمام بایت های ارسال شده را در حافظه نگه دارم، بنابراین هدف من این است که یک آرایه بایت دقیقاً 512 بایت در پایان داشته باشم تا نوع رسانه را بشنوم. تمام بایت های دیگر باید در یک ذخیره سازی فایل فیزیکی نوشته شوند و سپس دور ریخته شوند.

من در کار با آرایه ها و برش ها در Golang و نه در زبان های دیگر آنقدر تجربه ندارم. برای موارد آزمایشی، من انتخاب می کنم که تکه های کوچکتر از 512 بایت، دقیقاً 512 بایت و بزرگتر از 512 بایت را آزمایش کنم. اگر تعجب می کنید که چرا، بررسی کنید که تست های مرزی چیست. من تجربه زیادی در نوشتن تست دارم.

جای تعجب نیست که تست تنها با 4 بایت شکست خورد. مدتی طول کشید تا عمیق‌تر به کتابخانه‌های استاندارد بروید. من از تست‌ها برای این کار (سوء) استفاده می‌کنم، زیرا نوشتن، اجرا، و اشکال‌زدایی قطعات کوچک کد بسیار آسان است. در اینجا مثال یادگیری من است:

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]
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

هوش مصنوعی با توضیحات به من کمک می کند و به من درک بهتری از نحوه استفاده از برش ها در Go می دهد. همیشه برای یک پیرمرد لذت بخش است که از جوانی سرشار از ایده های جدید چیزی بیاموزد.

توضیح مفید

با کمک GitHub Copilot، تست های اول و دوم من قبول می شوند. کدی که استفاده کردم اینه:

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])
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید

من این نسخه کوتاهتر را به هوش مصنوعی پیشنهاد دادم و نظرش را در مورد کدم جویا شدم. هوش مصنوعی از راه حل من بسیار راضی بود.

درست، ...

… اما وقتی دوباره تست ها را اجرا کردم، ترازو از چشمانم افتاد. GitHub Copilot درست می گوید، من بیشتر از 512 بایت کپی نمی کنم. اما در مورد تست که من کمتر از 512 بایت دارم، این کد کار نمی کند. هوش مصنوعی پاسخی را برای خوشحالی من انتخاب کرد و از اشاره به اشتباه من اجتناب کرد. من با کد زیر به پایان رسیدم. این بهترین از هر دو جهان است.

if totalFileSize  512 {
  missingBytes := 512 - totalFileSize
  remaingBytesInChunk := uint64(len(chunkMessage.Chunk))
  if remaingBytesInChunk  missingBytes {
    missingBytes = remaingBytesInChunk
  }
  copy(sniff[totalFileSize:], chunkMessage.Chunk[:missingBytes])
}
وارد حالت تمام صفحه شوید

از حالت تمام صفحه خارج شوید


من به شدت معتقدم که یک مهندس نرم افزار باید تست بنویسد. نوشتن تست ها گاهی سخت است، کار خسته کننده احمقانه ای است و برای نگهداری از آنها باید زمان صرف کنید. اما آنها مانند یک مادر زندگی شما را تضمین می کنند و از شما مراقبت می کنند. با آنها می توانم مثل یک نوزاد بدون نگرانی بخوابم. حالا هوش مصنوعی هم همین کار را می کند.

مامان بچه رو دوست داره
عکس توسط ایزاک کوسادا در Unsplash

خوب بخواب، هوش مصنوعی. UnitTest شما را دوست دارد و از شما محافظت می کند.

در اصل در Medium ارسال شده است.

نوشته های مشابه

دیدگاهتان را بنویسید

نشانی ایمیل شما منتشر نخواهد شد. بخش‌های موردنیاز علامت‌گذاری شده‌اند *

دکمه بازگشت به بالا