AI กำลังเปลี่ยนนิยามคำว่า ซอฟต์แวร์ที่ถูกต้อง
เทคโนโลยี AI กำลังทำให้ผลลัพธ์จาก CI pipeline แบบเดิมไม่เพียงพอ นักพัฒนาต้องเปลี่ยนผ่านจากการยึด Output Equality สู่ System Invariants

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
- Pipeline แบบเดิมที่ผ่าน CI ไม่ได้การันตีความถูกต้องของซอฟต์แวร์ AI อีกต่อไป
- AI agents มักสร้างชุดทดสอบที่สะท้อนข้อผิดพลาดเดิมของโค้ดที่ตัวเองเขียนขึ้น
- การแก้ปัญหาต้องเปลี่ยนนิยามความถูกต้องจากการเช็กผลลัพธ์มาสู่การคุมกฎรันไทม์
- คุณค่าของ Senior Engineer เปลี่ยนจากการเขียน Syntax ไปสู่การกำหนด System Boundary
ในอดีตวิศวกรซอฟต์แวร์เคยนิยามคำว่าซอฟต์แวร์ที่ถูกต้องผ่านกระบวนการ deterministic binary และ Expected Output แบบตรงไปตรงมา ตราบใดที่การทดสอบทั้งหมดผ่านและ CI pipeline เป็นสีเขียวก็ถือว่าใช้ได้ แต่แนวคิดนี้กำลังพังทลายลง โค้ดที่สร้างโดย AI จำนวนมากดูสมบูรณ์แบบทั้งหลักไวยากรณ์และผ่านชุดทดสอบ แต่กลับมีความผิดพลาดเชิงความหมายที่แฝงตัวไปโผล่ในระบบ Production จริง คอขวดของการพัฒนาซอฟต์แวร์จึงไม่ใช่การเขียนโค้ดอีกต่อไป แต่เป็นการตรวจสอบเจตนาของการทำงานต่างหาก
ระบบซอฟต์แวร์แบบดั้งเดิมพึ่งพา deterministic assertions โดยเราเขียนโค้ดที่มีเส้นทางควบคุมชัดเจนและตรวจสอบผลลัพธ์ที่แน่นอน สิ่งนี้ทำให้เราได้โค้ดที่ถูกต้องตามหลักไวยากรณ์และผ่านเทสต์ แต่กลับผิดพลาดในเชิงสถาปัตยกรรมระบบ
การที่โค้ดผ่านการทดสอบแบบดั้งเดิมไม่ได้แปลว่าระบบจะปลอดภัยเมื่อมี AI เข้ามาเกี่ยวข้อง เนื่องจากเครื่องมือ AI มักสร้างชุดทดสอบที่สอดรับกับตรรกะที่ตัวเองเพิ่งสร้างขึ้น ทำให้เกิดภาวะอคติยืนยัน (Confirmation Bias) ในยูนิตเทสต์ นักพัฒนาจึงต้องยกระดับการตรวจสอบให้ครอบคลุมถึงโครงสร้างภาพรวมของระบบ ไม่ใช่แค่การมองหาค่าที่ถูกต้องในฟังก์ชันเดียว
ปัญหาสำคัญคือ AI agents มีความเชี่ยวชาญเป็นพิเศษในการเขียนเทสต์สำหรับโค้ดที่มันเพิ่งสร้างขึ้นมา หากเอเจนต์สร้างการทำงานที่มีข้อบกพร่อง มันก็จะสร้าง assertion suite ที่มีข้อบกพร่องแบบเดียวกันมาจับคู่กัน ส่งผลให้ยูนิตเทสต์กลายเป็นเครื่องมือสร้าง confirmation bias ไปโดยปริยาย
แนวทางในการควบคุมโค้ดที่สร้างจาก AI เราจึงต้องเปลี่ยนนิยามของความถูกต้องจาก Output Equality (เช่น Assert.Equal) ไปสู่ System Invariants หรือการตรวจสอบข้อจำกัดในระดับ Execution Runtime แทน

ภาพประกอบจากคลังภาพสต็อก ไม่ใช่ภาพจากเหตุการณ์จริง
ภายใต้เวิร์กโฟลว์วิศวกรรมยุค AI-native ความถูกต้องจะถูกนิยามผ่าน bounded runtime guardrails และ architectural fitness functions แทนที่จะทดสอบว่าฟังก์ชันคืนค่ากลับมาเป็น 10 หรือไม่ ตัว engine ตรวจสอบจะบังคับใช้ข้อจำกัดเชิงโครงสร้างอย่างต่อเนื่องตลอดทั้งโมเดลการทำงานของโค้ดเบส ทำให้เราไม่ได้แค่มองผลลัพธ์การทดสอบ แต่เป็นการบังคับใช้กฎในขณะรันไทม์เพื่อให้มั่นใจว่าดีไซน์ของระบบยังคงถูกต้องไม่เปลี่ยนแปลง
การเปลี่ยนผ่านไปสู่สถาปัตยกรรมแบบ invariant-driven นำมาซึ่งข้อแลกเปลี่ยนทางวิศวกรรมที่ทีมพัฒนาต้องพิจารณา ดังนี้ครับ:
- เพิ่มความซับซ้อนในการออกแบบกฎข้อบังคับระดับสถาปัตยกรรม
- ต้องใช้ทรัพยากรประมวลผลเพิ่มขึ้นในการตรวจสอบขณะรันไทม์
- ทีมงานต้องปรับเปลี่ยนกรอบความคิดจากการเขียนเทสต์แบบเดิม
อย่างไรก็ตาม AI ไม่ได้เข้ามาทดแทนความจำเป็นของวิศวกรรมซอฟต์แวร์ แต่มันทำหน้าที่ยกระดับชั้นความนามธรรม (Level of Abstraction) ให้สูงขึ้น เมื่อการเขียนโค้ดไม่ใช่เรื่องยากอีกต่อไป คุณค่าหลักของ Senior Engineer จึงขยับจากการเขียน Syntax ไปสู่การกำหนดขอบเขตระบบ (System Boundary) โดยเราควรหยุดพึ่งพายูนิตเทสต์แบบเดิมเพียงอย่างเดียวในการตรวจสอบโค้ดจาก AI พร้อมทั้งสร้าง verification engines ที่ทำหน้าที่ปกป้องสถาปัตยกรรมและตรวจสอบความเสถียรในยักษ์ใหญ่ระบบรันไทม์
ความถูกต้องของซอฟต์แวร์ไม่ได้วัดจากการผ่านยูนิตเทสต์อีกต่อไป แต่เป็นการพิสูจน์ให้เห็นว่าระบบของคุณจะไม่ละเมิดกฎแก่นสำคัญที่ตั้งไว้
ที่มา: Dev.to
พบข้อมูลผิดพลาดในบทความนี้? แจ้งปัญหาบทความนี้
ความคิดเห็น
แสดงความคิดเห็น