การทดสอบซอฟต์แวร์เป็นเหมือนการแข่งกับเวลามาโดยตลอด หน้าต่างการปล่อยซอฟต์แวร์ (Release windows) สั้นลง โค้ดเบส (Codebases) ใหญ่ขึ้น ทีมงานถูกคาดหวังให้ส่งมอบงานได้เร็วขึ้นโดยไม่ทำให้ระบบพัง ช่วงหลังมานี้ AI ได้ก้าวเข้ามาในสภาวะที่กดดันนี้พร้อมกับคำสัญญาว่าจะช่วยแบ่งเบาภาระ มันสามารถสร้าง test cases ได้ภายในไม่กี่วินาที สแกนโค้ดหลายพันบรรทัดเพื่อหาความผิดปกติ และรันชุดการทดสอบที่ซ้ำซากในขณะที่ทีมของคุณกำลังหลับ ความเร็วนั้นเป็นเรื่องจริง แต่ความเร็วที่ปราศจากทิศทางก็เป็นเพียงวิธีที่ทำให้เกิดการพุ่งชนได้เร็วขึ้นเท่านั้น
ความเป็นจริงก็คือ AI ในการทดสอบทำงานได้ดีที่สุดในฐานะตัวเร่งความเร็ว (accelerator) ไม่ใช่ระบบขับเคลื่อนอัตโนมัติ (autopilot) หากใช้อย่างถูกวิธี มันจะช่วยลดงานที่ต้องทำซ้ำๆ (grunt work) และช่วยให้พบจุดบกพร่อง (bugs) ได้เร็วขึ้น แต่หากใช้โดยไม่ระมัดระวัง มันจะสร้างจุดบอดและทำให้คุณรู้สึกปลอดภัยอย่างผิดๆ การเข้าใจว่า AI ช่วยตรงไหนและล้มเหลวตรงไหน คือความแตกต่างระหว่างการส่งมอบซอฟต์แวร์ที่เสถียร กับการส่งมอบโค้ดที่พังแต่มาถึงตรงตามกำหนดเวลา
จุดที่ AI แสดงศักยภาพได้อย่างแท้จริง
เริ่มจากสิ่งที่ AI จัดการได้ดี การทำ regression testing ที่ซ้ำซากคือชัยชนะที่เห็นได้ชัด การรันขั้นตอนการ login, การตรวจสอบความถูกต้องของฟอร์ม (form validations) และขั้นตอนการชำระเงิน (checkout steps) เดิมๆ ซ้ำๆ ผ่านเบราว์เซอร์และอุปกรณ์หลายสิบรูปแบบนั้นเป็นเรื่องที่น่าเบื่อหน่ายสำหรับมนุษย์ แต่เป็นเรื่องง่ายดายสำหรับเครื่องจักร AI-driven test runners สามารถรันชุดการทดสอบเหล่านี้ข้ามคืน และแจ้งเตือนเมื่อพบ visual regressions หรือประสิทธิภาพที่ลดลง ซึ่งวิศวกรที่เหนื่อยล้าอาจจะเลื่อนผ่านไป
การสร้างข้อมูลทดสอบ (Test data generation) เป็นอีกหนึ่งจุดแข็ง เมื่อคุณต้องการข้อมูลหนึ่งหมื่นรายการที่มีชื่อ ที่อยู่ ประวัติการทำธุรกรรม และเขตเวลาที่ดูสมจริงแต่เป็นข้อมูลสมมติ AI สามารถสร้างสิ่งนั้นขึ้นมาได้ทันที สิ่งนี้สำคัญมากเมื่อคุณกำลังทำ load-testing กับฐานข้อมูล หรือตรวจสอบว่า analytics dashboard ของคุณจัดการกับข้อมูลที่มีความหลากหลายสูง (high-cardinality data) ได้อย่างไร การสร้างข้อมูลจำนวนมหาศาลด้วยตนเองไม่เพียงแต่จะช้า แต่ยังไม่สมจริงอีกด้วย
AI ยังช่วยเร่งความเร็วในการเขียน boilerplate test scripts อีกด้วย หากคุณต้องการ unit test มาตรฐานสำหรับ API endpoint ใหม่ หรือสคริปต์พื้นฐานเพื่อตรวจสอบว่าหน้าเว็บโหลดขึ้นหรือไม่ ผู้ช่วย AI สามารถร่างโครงสร้าง (scaffold) ให้คุณได้ คุณจะได้ทั้งโครงสร้าง, ข้อมูลนำเข้าสมมติ (dummy inputs) และตัวสำรองสำหรับการตรวจสอบ (assertion placeholders) โดยไม่ต้องพิมพ์ขั้นตอนพื้นฐานทั้งหมดตั้งแต่ต้น มันเป็นจุดเริ่มต้นที่ดี
ประโยชน์เหล่านี้จับต้องได้จริง บั๊กจะถูกตรวจพบได้เร็วขึ้นเพราะต้นทุนในการรันการทดสอบที่ครอบคลุมกว้างขวางนั้นลดลง งานที่ทำซ้ำๆ จะไม่มาเบียดบังเวลาของมนุษย์อีกต่อไป และทีมงานสามารถไปโฟกัสกับปัญหาที่ซับซ้อนกว่าได้
จุดบอดที่ไม่มีใครพูดถึง
ปัญหามักเริ่มขึ้นเมื่อทีมสับสนระหว่าง "ความครอบคลุมที่กว้าง" (broad coverage) กับ "ความครอบคลุมที่ลึก" (deep coverage) AI ค้นหารูปแบบ (patterns) มันคาดเดาว่าบั๊กทั่วไปมีลักษณะอย่างไรโดยอิงจากข้อมูลที่มันถูกฝึกฝนมา นั่นหมายความว่ามันจะเก่งในเรื่องที่ธรรมดา แต่จะล้มเหลวซ้ำแล้วซ้ำเล่าในเรื่องที่แปลกประหลาด
ลองพิจารณา edge cases ดู โมเดลที่ถูกฝึกมากับเส้นทางการใช้งานของผู้ใช้ทั่วไป (standard user journeys) มักจะพลาดบั๊กที่จะเกิดขึ้นก็ต่อเมื่อผู้ใช้เปิด modal dialog ขึ้นมาสามอัน กดปุ่ม back ของเบราว์เซอร์ และกด refresh ในระหว่างที่กำลังบันทึกข้อมูลแบบ asynchronous สิ่งเหล่านี้ไม่ใช่เรื่องสมมติ เหตุการณ์ในระบบ production มักเกิดจากลำดับขั้นตอนที่ชุดข้อมูลฝึกฝนไม่มีตัวแทนที่เพียงพอ เพราะมันเกิดขึ้นได้ยากทางสถิติ AI มักจะวิ่งเข้าหาจุดกึ่งกลางของโค้งระฆังคว่ำ (bell curve) แต่บั๊กที่ร้ายแรงที่สุดของคุณมักจะอยู่ในส่วนปลาย (tails)
สัญชาตญาณของมนุษย์มีความสำคัญในจุดนี้ นักทดสอบที่มีประสบการณ์จะมองฟีเจอร์ใหม่และคิดถึงความเสี่ยงทางธุรกิจ พวกเขาจะตั้งคำถามว่าผู้ใช้ที่กำลังหงุดหงิดอาจจะใช้งานฟอร์มในทางที่ผิดได้อย่างไร หรือจะเกิดอะไรขึ้นเมื่อ payment gateway หมดเวลา (timeout) ในช่วงที่มีปริมาณการใช้งานสูงในวันหยุด นี่คือการคิดเชิงบริบท (contextual thinking) AI ไม่ได้รู้สึกถึงความกดดันทางธุรกิจ มันไม่รู้ว่าระบบคลังสินค้าของคุณเปราะบางเพราะการเชื่อมต่อกับระบบเก่า (legacy integration) จากเมื่อหลายปีก่อน มันเขียนสิ่งที่ "ดูเหมือนจะถูกต้อง" ไม่ใช่สิ่งที่ "ถูกต้อง" สำหรับโดเมนเฉพาะของคุณ
นอกจากนี้ยังมีประเด็นเรื่องการหลอน (hallucination) และการทำ automation ที่เปราะบาง (brittle automation) สคริปต์การทดสอบที่สร้างโดย AI อาจดูสมเหตุสมผล แต่สามารถมี selector ที่ไม่ถูกต้อง, assertion ที่ผิด หรือการสมมติโครงสร้าง DOM ที่จะเปลี่ยนไปในการ sprint หน้า หากคุณรันสคริปต์เหล่านี้โดยไม่อ่านก่อน คุณจะได้ผลลัพธ์ที่เป็น false positives ซึ่งทำให้เสียเวลา หรือ false negatives ที่ปล่อยให้บั๊กหลุดรอดไป เครื่องหมายถูกสีเขียวบนแดชบอร์ดการทดสอบจะไม่มีความหมายเลย หากการทดสอบนั้นไม่ได้ตรวจสอบพฤติกรรมที่ถูกต้องจริงๆ
