AI สำหรับการสร้าง Test: จุดที่ช่วยได้ และจุดที่ควรระวัง

AI เขียน test ได้รวดเร็ว แต่มันก็เขียน test ที่ดูเหมือนจริงแต่กลับตรวจสอบผิดจุดด้วยเช่นกัน

คุณวางฟังก์ชันลงใน AI เพียงสามสิบวินาทีต่อมา คุณก็ได้ test ที่ผ่านการทดสอบถึงสิบสองรายการ คะแนน coverage ของคุณเพิ่มขึ้น คุณรู้สึกว่าตัวเองทำงานได้มีประสิทธิภาพ

จากนั้นบั๊กก็โผล่มาใน production เมื่อคุณกลับไปดู test ทั้งสิบสองรายการนั้น คุณจึงตระหนักว่าไม่มีตัวไหนเลยที่จะตรวจจับบั๊กนี้ได้

AI ทดสอบในสิ่งที่โค้ดของคุณ "ทำ" ไม่ใช่สิ่งที่โค้ดของคุณ "ควรจะทำ"

AI มีประโยชน์ แต่คุณต้องรู้วิธีใช้งานมัน

จุดที่ AI ทำได้ดี:

  • การสร้าง boilerplate เช่น setup และ teardown blocks
  • การเขียน factory helpers และ data objects ที่ซ้ำซาก
  • การสร้างรูปแบบ test pattern ที่หลากหลายจากต้นแบบที่ดีเพียงชุดเดียว
  • การจัดการ edge cases ที่เห็นได้ชัด เช่น null, empty strings หรือ zero

จุดที่ AI ล้มเหลว:

  • การทดสอบที่ยึดตามการ Implement (Implementation-based tests): มันเขียน test ที่เดินตามโครงสร้างของโค้ดแทนที่จะเป็น business logic หากคุณทำการ refactor โค้ด test เหล่านี้จะพังทันที แม้ว่าผลลัพธ์จะยังถูกต้องก็ตาม
  • Edge cases ที่ผิวเผิน: มันตรวจพบข้อผิดพลาดที่เห็นได้ชัด แต่พลาดบั๊กเฉพาะทางของโดเมน (domain-specific bugs) มันไม่รู้เรื่องความซับซ้อนของ timezone, ข้อจำกัดของฐานข้อมูล หรือกฎทางธุรกิจเฉพาะของคุณ
  • Mock ที่เปราะบาง: มันทำ mock บริการภายในที่ควรจะเป็นของจริง ซึ่งทำให้การดูแลรักษา test เป็นไปได้ช้าและพังได้ง่ายเมื่อมีการ refactor

วิธีใช้ AI โดยไม่สร้าง "ละครโรงทดสอบ" (test theater):

  1. กำหนดสัญญา (contract) เป็นอันดับแรก เขียนประโยคภาษาอังกฤษง่ายๆ หนึ่งประโยคว่า test นี้ต้องพิสูจน์อะไร ตัวอย่างเช่น: "An expired code must return the original amount."
  2. ส่งประโยคนั้นให้ AI ปล่อยให้ AI เขียนโค้ด แต่คุณต้องเป็นเจ้าของเจตจำนง (intent) นั้น
  3. ทำ mock เฉพาะที่ขอบเขต (boundary) เท่านั้น ใช้ instance จริงสำหรับโมดูลภายในของคุณ และทำ mock เฉพาะ API หรือฐานข้อมูลภายนอกเท่านั้น
  4. เขียน domain edge case ด้วยตัวเองหนึ่งอย่าง AI จัดการ edge cases ที่ "เห็นได้ชัด" ส่วนคุณต้องจัดการ edge cases แบบ "ตีสาม" (3 AM) ที่เป็นสาเหตุของอุบัติการณ์ใน production จริงๆ

อย่าปล่อยให้ AI ตัดสินใจว่า test จะตรวจสอบอะไร ใช้มันเพื่อพิมพ์โค้ด แต่คุณต้องเป็นคนให้ตรรกะ (logic)

Source: https://dev.to/nazar_boyko/ai-for-test-generation-where-it-helps-and-where-it-lies-jhm