• เผยแพร่วันที่
    วันที่ 26 พฤศจิกายน 2024
  • Share

การสร้างโค้ดที่มีการออกแบบที่ดีและถูกต้องเป็นเป้าหมายของนักพัฒนาซอฟต์แวร์ทุกคน วิธีการหนึ่งที่โดดเด่นในการบรรลุเป้าหมายนี้คือการพัฒนาตามการทดสอบ (Test-driven development หรือ TDD) แม้ว่า TDD จะไม่ได้ออกแบบโค้ดของคุณหรือเขียนโค้ดให้คุณ แต่เป็นวิธีการพัฒนาซอฟต์แวร์ที่ช่วยให้คุณรับคำติชมอย่างรวดเร็วเกี่ยวกับการตัดสินใจออกแบบในวงจรการพัฒนาแบบวนซ้ำ 

การเขียนยูนิตเทสต์ก่อนหรือหลังการเขียนโค้ดหรือไม่เขียนเลยนั้นขึ้นอยู่กับทางเลือกของนักพัฒนา แน่นอนว่าการไม่เขียนเทสต์เลยจะทำให้เกิดสถานการณ์วิกฤตในการผลิต หากนักพัฒนาโชคดีก็จะค้นพบข้อผิดพลาดระหว่างขั้นตอนการทดสอบด้วยตนเอง 

การเขียนการทดสอบหลังจากเขียนโค้ดเสร็จแล้วนั้นดีกว่าไม่ทำการทดสอบเลย นักพัฒนาส่วนใหญ่รวมทั้งพวกเราด้วยนั้นใช้วิธีเขียนโค้ดก่อนแล้วค่อยเขียนการทดสอบ อย่างไรก็ตาม โค้ดที่เขียนก็ไม่ได้ดีไปกว่านี้เลย ข้อผิดพลาดในการทำงานบางอย่างอาจเกิดขึ้นได้หากเราลืมกรณีทดสอบ การเขียนกรณีทดสอบที่ล้มเหลวก่อนสำหรับโค้ดแต่ละชิ้นแล้วเพิ่มโค้ดเพื่อให้การทดสอบนั้นผ่านโดยปฏิบัติตามวงจร TDD นั้นดีกว่ามาก

ขณะนี้ เรากำลังหารือถึงวิธีที่เราจะใช้ Generative AI เพื่อทำให้การทำงานของเราเป็นระบบอัตโนมัติมากขึ้น ในการทำงานนี้ เราจะแนะนำการทดลองใหม่ที่ได้รับแรงบันดาลใจจาก บล็อกของอัลเลน เฮลตันเราเขียนกรณีทดสอบหลายกรณีสำหรับโครงการแล้วจึงขอให้ ChatGPT สร้างโค้ดที่เกี่ยวข้องกับการทดสอบ 

AI เชิงสร้างสรรค์สำหรับการพัฒนาแบบทดสอบก่อน 

เมื่อพิจารณาถึงความเสี่ยงที่จะเกิดข้อผิดพลาดของมนุษย์ในการทดสอบด้วยตนเอง คำถามที่เกิดขึ้นคือ เหตุใดจึงไม่ใช้ Generative AI เพื่อทำให้ TDD เป็นอัตโนมัติ Generative AI สามารถมีบทบาทในการเปลี่ยนแปลงใน TDD ได้โดยการทำให้การสร้างยูนิตเทสต์และโค้ดที่เกี่ยวข้องเป็นอัตโนมัติ นี่คือเวิร์กโฟลว์ที่เสนอ:

  1. การทดสอบที่เขียนโดยนักพัฒนา: นักพัฒนาเริ่มต้นด้วยการเขียนการทดสอบยูนิตเริ่มต้น โดยระบุผลลัพธ์ที่ต้องการสำหรับโค้ดของพวกเขา
  2. รหัสที่สร้างโดย AI: Generative AI จะอ่านการทดสอบยูนิตเหล่านี้และสร้างรหัสที่จำเป็นเพื่อผ่านการทดสอบ หากรหัสทำงานได้สำเร็จ รหัสจะถูกบันทึกลงในดิสก์ หากไม่สำเร็จ AI จะสร้างรายงานข้อผิดพลาดและพยายามสร้างรหัสที่ถูกต้องอีกครั้ง โดยสร้างลูปจนกว่าการทดสอบจะผ่าน การนำ AI มาใช้ในลักษณะนี้ช่วยให้ผู้พัฒนามั่นใจได้ว่ารหัสของตนได้รับการทดสอบและตรวจสอบอย่างละเอียดถี่ถ้วน ซึ่งจะช่วยลดความเสี่ยงของข้อผิดพลาดให้เหลือน้อยที่สุด
เอกราน เรสมี 2024-11-04 13.29.43.png

ประโยชน์ของการใช้ AI เชิงสร้างสรรค์ใน TDD

การสร้างโค้ดและทดสอบอัตโนมัติสามารถเร่งรอบการพัฒนาได้อย่างมาก นอกจากนี้ยังช่วยลดความเสี่ยงต่อข้อผิดพลาดของมนุษย์ในกรณีทดสอบและการเขียนโค้ด ขณะเดียวกันก็ต้องแน่ใจว่าการทดสอบทั้งหมดครอบคลุมอย่างครอบคลุมและสม่ำเสมอ และสามารถปรับขนาดกระบวนการพัฒนาได้อย่างง่ายดาย โดยไม่เพิ่มภาระงานด้วยตนเอง

ความท้าทายที่อาจเกิดขึ้นและแนวทางแก้ไข

แม้ว่าการรวม Generative AI เข้ากับ TDD จะมีประโยชน์มากมาย แต่ก็ไม่ได้ปราศจากความท้าทาย การตั้งค่าระบบ AI เบื้องต้นสำหรับ TDD อาจมีความซับซ้อนและใช้เวลานาน นักพัฒนาอาจต้องได้รับการฝึกอบรมเพื่อใช้และไว้วางใจเครื่องมือ AI ได้อย่างมีประสิทธิภาพ แต่แม้ว่านักพัฒนาจะพร้อมที่จะจัดการกับสิ่งนี้ AI อาจประสบปัญหาในการใช้กรณีพิเศษหรือกรณีขอบที่ไม่ได้แสดงไว้อย่างชัดเจนในข้อมูลการฝึกอบรม ซึ่งอาจทำให้สถานการณ์ที่ถามเกิดความสับสน Generative AI ตอบสนองด้วยโค้ดที่เหมาะสม แต่ไม่ใช่ตัวเลือกที่ยอดเยี่ยมและดีที่สุด เนื่องจากโค้ดยังไม่มีกลไกการตอบรับใดๆ เพื่อสร้างโค้ดที่ยอดเยี่ยม เราควรใช้กลไกการตอบรับกับ AI เช่น แนวทางการตรวจสอบโค้ดของนักพัฒนา เราสามารถรวม AI เข้ากับการดูแลของมนุษย์เพื่อจัดการกับสถานการณ์ที่ซับซ้อนได้ อย่างน้อยก็ในตอนนี้ :)

ข้อเสนอแนะการนำ AI เชิงสร้างสรรค์ไปใช้ใน TDD

เอกราน เรสมี 2024-11-04 13.31.52.png

กลไกป้อนกลับ

เพื่อปรับปรุงกระบวนการให้ดียิ่งขึ้น อาจมีการนำกลไกการตอบรับมาใช้ นักพัฒนาจะเขียนการทดสอบยูนิต และตัวแทนนักพัฒนาจะสร้างโค้ด จากนั้นจะเพิ่มเลเยอร์การตรวจสอบใหม่โดยมีตัวแทนผู้ตรวจสอบโค้ด ซึ่งจะตรวจสอบโค้ดและให้คำติชมแก่ตัวแทนนักพัฒนา

การปรับปรุงซ้ำ

ตัวแทนผู้พัฒนาจะแก้ไขโค้ดตามคำติชมของตัวแทนผู้ตรวจสอบ และส่งโค้ดใหม่อีกครั้งเพื่อตรวจสอบ กระบวนการแบบวนซ้ำนี้จะดำเนินต่อไปจนกว่าโค้ดจะผ่านการตรวจสอบสำเร็จ

การทดสอบครั้งสุดท้าย

เมื่อตัวแทนผู้ตรวจสอบอนุมัติโค้ดแล้ว จะทำการทดสอบยูนิต หากผ่านการทดสอบ โค้ดจะถูกบันทึก หากล้มเหลว รายงานข้อผิดพลาดจะถูกสร้างขึ้น และกระบวนการจะวนกลับไปที่การสร้างโค้ด

โดยพื้นฐานแล้วเวิร์กโฟลว์จะเป็นดังต่อไปนี้:

  1. นักพัฒนาเขียน unit tests.ev
  2. AI อ่านการทดสอบเหล่านี้และสร้างโค้ดที่จำเป็น
  3. หากการทดสอบทำงานสำเร็จ รหัสจะถูกบันทึก หากไม่สำเร็จ ระบบจะสร้างรายงานข้อผิดพลาด และ AI จะพยายามแก้ไขรหัสในลูป
  4. ระบบอัตโนมัติเบื้องต้นนี้สามารถสร้างโค้ดที่มีแนวโน้มเกิดข้อผิดพลาดได้ ซึ่งตรงนี้เองที่กลไกการตอบกลับจะเข้ามามีบทบาท
  5. นักพัฒนาเขียนการทดสอบยูนิต และตัวแทนนักพัฒนาสร้างโค้ดและวิธีการที่จำเป็น
  6. ตัวแทนผู้ตรวจสอบโค้ดจะตรวจสอบโค้ดและส่งคำติชมไปยังตัวแทนนักพัฒนา
  7. ตัวแทนนักพัฒนาจะปรับแต่งโค้ดตามคำติชมและส่งใหม่อีกครั้งเพื่อตรวจสอบ
  8. วงจรนี้จะดำเนินต่อไปจนกว่าตัวแทนผู้ตรวจสอบโค้ดจะอนุมัติโค้ด
  9. เมื่อได้รับการอนุมัติแล้ว การทดสอบยูนิตจะดำเนินการ หากประสบความสำเร็จ รหัสจะถูกบันทึก หากไม่สำเร็จ รายงานข้อผิดพลาดจะถูกสร้างขึ้น และลูปจะดำเนินต่อไป

การนำกลไกการป้อนกลับมาใช้ทำให้คุณภาพของโค้ดที่สร้างขึ้นดีขึ้นอย่างมีนัยสำคัญ และมั่นใจได้ว่าโค้ดจะตรงตามมาตรฐานที่จำเป็นและผ่านการทดสอบทั้งหมดอย่างน่าเชื่อถือ

สรุป

การผสานรวม Generative AI ในการพัฒนาที่ขับเคลื่อนด้วยการทดสอบ (TDD) มีศักยภาพที่จะปฏิวัติการพัฒนาซอฟต์แวร์ ด้วยการทำให้การสร้างการทดสอบยูนิตและโค้ดที่เกี่ยวข้องเป็นอัตโนมัติ นักพัฒนาสามารถรับประกันคุณภาพของโค้ดที่สูงขึ้น ลดข้อผิดพลาด และปรับปรุงเวิร์กโฟลว์ของตนได้ แม้ว่าจะมีความท้าทายที่ต้องเอาชนะ แต่ประโยชน์ที่ได้รับนั้นมีมากกว่าอุปสรรคเริ่มต้นมาก ทำให้แนวทางนี้มีแนวโน้มที่ดีสำหรับการเขียนโค้ดในอนาคต คุณสามารถตรวจสอบได้ โค้ดเดอร์ เอไอ โครงการหากคุณสนใจที่จะสนับสนุนการเขียนโปรแกรมโดยใช้ AI เชิงสร้างสรรค์ 

ทิศทางในอนาคต

มีสามสิ่งที่เราวางแผนจะสร้างจากแนวทางนี้:

  • การขยายการรองรับภาษา: ในขณะที่เรามุ่งเน้นไปที่ Java แต่วิธีการนี้สามารถขยายไปยังภาษาอื่นๆ เช่น Python, JavaScript และอื่นๆ ได้

  • การสร้างการทดสอบอัตโนมัติ: เราสามารถแจ้งให้ Generative AI เขียนการทดสอบตามข้อกำหนดระดับสูงที่นักพัฒนาจัดเตรียมไว้แทนที่จะต้องเขียนการทดสอบด้วยตนเอง 

  • การขยายทีม AI แบบตัวแทน: นอกเหนือจากผู้ตรวจสอบโค้ดแบบง่ายๆ แล้ว เรายังสามารถแนะนำตัวแทนเฉพาะทางอื่นๆ เช่น ตัวแทน QA สำหรับทดสอบกรณีขอบ ตัวแทนประสิทธิภาพสำหรับปรับแต่งประสิทธิภาพโค้ดให้เหมาะสม และอื่นๆ

เราขอแนะนำให้นักพัฒนาซอฟต์แวร์ทุกคนใช้เวลาในการเขียนกรณีทดสอบที่มั่นคงและแม่นยำยิ่งขึ้น จากนั้นจึงใช้ประโยชน์จากพลังของ Generative AI เพื่อสร้างโค้ดคุณภาพสูง

 

บทความที่เกี่ยวข้อง