169 wordpress feature image (10)

นั่งงมมาทั้งวันก็ยังไม่ไปไหน

แล้วก็เริ่มสงสัยว่า “หรือเราเองที่เก่งไม่พอ” 🫠 เป็นกันมั้ยคะ เวลาที่ติดอยู่กับอะไรซักอย่างมาทั้งวัน คิดเท่าไหร่ก็คิดไม่ออกบั๊กที่ทำยังไงก็หาวิธี reproduce ไม่ได้Requirement ที่แสนจะซับซ้อน ที่คิด test case ยังไงก็รู้สึกว่ายังไม่ครบAutomation Test ที่เขียวๆ แดงๆ หาทางแก้ไม่ได้ซักที งานที่มัน “ควรจะเสร็จได้แล้ว” แต่ทำยังไงก็ไม่มีความคืบหน้าซักที พอเวลาผ่านไปนานเข้า เสียงในหัวก็เริ่มเปลี่ยนจาก“มันติดตรงไหนกันนะ” ไปเป็น “หรือจริงๆ ปัญหาไม่ได้อยู่ที่งาน… แต่อยู่ที่ตัวเราที่ยังเก่งไม่พอ” แล้วก็จมอยู่ตรงนั้น พยายามฝืนทำต่อไปเรื่อยๆ เพราะคิดว่า “มันต้องเสร็จได้แล้ว” . แต่จริงๆ แล้ว อาจจะไม่ใช่แบบนั้นนะคะการที่เราติดปัญหาอะไรซักอย่างนานๆ หาทางไปต่อไม่ได้ มันไม่ได้แปลว่าไม่เก่งเสมอไปแต่มันอาจจะแปลว่า สมองเรา overload แล้ว สมองเราตอนนั้นมันเหมือนสมองที่ไม่ยอม clear cache ออกไปซักทีมันมักจะมีอะไรเดิมๆ ค้างอยู่เต็มไปหมด ไม่ว่าจะเป็น assumption ที่เราคิดว่าน่าจะใช่มุมมองที่เราเคยคิดไปแล้ววิธีที่เราเคยลองไปแล้วแล้วมันก็จะวนๆ อยู่อย่างนั้น ที่สำคัญคือ สิ่งที่เราชอบทำกันเวลาที่ติดแบบนี้คือ “ฝืนทำต่อไปเรื่อยๆ”นั่งยาวๆ ไม่ยอมลุก ไม่พักกินข้าว บอกตัวเองว่า ขอดูตรงนี้อีกนิด

นั่งงมมาทั้งวันก็ยังไม่ไปไหน Read More »

169 wordpress feature image (9)

คำถามสัมภาษณ์ QA ที่เจอบ่อยๆ และสิ่งที่คนสัมภาษณ์อยากได้ยินจริงๆ

❓ “เคยปล่อยบั๊กหลุดขึ้น production มั้ย” เป็นคำถามที่พี่กิ่งใช้ถามเวลาสัมภาษณ์บ่อยมากเลยค่ะและก็จะสังเกตว่า หลายๆ คน จะตอบว่า “ไม่เคย” แล้วก็จบ พี่กิ่งก็ไม่แน่ใจเหมือนกันว่าในใจของคนที่ตอบว่า “ไม่เคย” จะคิดอะไรอยู่นะคะอาจจะอยากแสดงความมั่นใจว่าเป็น QA ที่จับบั๊กได้ทุกตัวเป็น QA ที่เขียน test case ได้ครอบคลุมจนไม่เคยมีบั๊กหลุด แต่จริงๆ แล้ว “ไม่เคย” อาจจะไม่ใช่คำตอบที่ดีเสมอไปมันอาจจะแปลว่า ไม่เคยไปตามดูเลยว่าหลังเทสเสร็จแล้ว เกิดอะไรขึ้นบ้างหรืออาจจะแปลว่า ไม่เคยเจอ เพราะทีม track production bug ที่ user ส่งเข้ามาไว้ใน project ของ customer support ทำให้ไม่เคยเห็นหรืออาจจะแปลว่า ไม่เคย จริงๆ ก็ได้ (นั่นแปลว่าคุณโชคดีมากๆ ค่ะ 😂) . แล้วในฐานะคนสัมภาษณ์ อยากได้คำตอบแบบไหน 📍 ถ้าไม่เคยจริงๆ ก็ตอบไปตามตรงได้เลยค่ะ อาจจะเล่าต่อซักหน่อยว่า มีกระบวนการยังไง ที่ทำให้มั่นใจได้ว่าจะเจอบั๊กก่อนขึ้นจริง หรือมีการ

คำถามสัมภาษณ์ QA ที่เจอบ่อยๆ และสิ่งที่คนสัมภาษณ์อยากได้ยินจริงๆ Read More »

169 wordpress feature image (8)

วาง Data ผิดที่ แก้นิดเดียว พังทั้งก้อน

พอถึงจุดนึง Automation Test ของเราจะเริ่ม “หนัก” มีใครกำลังเจอบ้างคะ . ไม่ใช่หนักเพราะมี test case เยอะ มีข้อใหม่ๆ เพิ่มขึ้นทุกวัน แต่มันหนักเพราะ ทุกครั้งที่กลับมาอ่าน เราจะงง และต้องใช้เวลาทำความเข้าใจมากกว่าเดิมคนในทีมต้องมาทำต่อ ก็งง “ตัวแปรนี้มาจากไหนเหรอ เอาไว้ทำอะไร”ส่งให้ Dev ช่วยดูก็งง ให้ Business ช่วยเช็ค ก็งง หรือไม่ก็ แก้ requirement นิดเดียว แต่ Test พังหลายที่รัน local ผ่าน แต่ขึ้น CI แล้วต้องไปลุ้นตลอด . ส่วนใหญ่เรามักจะคิดว่า ก็ Test มันซับซ้อนขึ้น เยอะขึ้น มันก็เป็นเรื่องธรรมดาแต่จริงๆ ปัญหามักไม่ได้อยู่ที่โค้ดของ Automation Test ของเราค่ะหลายครั้งที่พี่กิ่งเจอ ต้นเหตุส่วนหนึ่งมาจาก test data ที่กระจัดกระจายอยู่เต็มไปหมดเพราะเราไม่ได้วางมันไว้ให้ถูกที่ตั้งแต่แรก . ลองนึกภาพตามดูค่ะ

วาง Data ผิดที่ แก้นิดเดียว พังทั้งก้อน Read More »

169 wordpress feature image (7)

กลัว = สัญญาณว่ากำลังจะเติบโต

เคยเป็นมั้ยคะ โดน assign งานที่ไม่เคยทำมาก่อน พอเห็นก็คิดในใจเลยว่า อันนี้มันเกินไป ทำไม่ได้แน่ๆ ยังไม่ทันได้เริ่มทำเลย แต่ในหัวก็ตัดสินไปแล้วว่าสู้ไม่ได้ ความรู้สึกนี้มันปกติมากเลยนะคะ ไม่ได้แปลว่าเราไม่เก่งด้วยค่ะความกลัวแบบนี้ มันเป็นของแถมที่มักจะพ่วงมากับงานของเราเสมอ แต่ไม่ค่อยมีใครพูดถึงกันแต่จริงๆ ทุกคนก็เคยผ่านมันมาทั้งนั้นค่ะ . มีครั้งนึง พี่กิ่งต้องรายงาน test result ใน conference call เป็นภาษาอังกฤษตอนนั้นภาษาก็ยังไม่ดีเท่าไหร่ ไม่เคยพูดภาษาอังกฤษในที่ประชุมเลยด้วยซ้ำแต่ก็คิดว่าลองดูซักตั้ง ก็ไปเตรียมตัว เขียนโน้ตไว้ ซ้อมพูดกับคนอื่น สรุปว่าในมีตติ้ง ทุกคนคุยเรื่องอื่นกันจนหมดเวลา ไม่ได้มีจังหวะให้พูดเลยซักคำจบมีตติ้งนั้น ทั้งขำทั้งโล่ง แต่ก็ทำให้ได้รู้ว่า เราก็เตรียมได้นี่นา ถ้ามีครั้งหน้าอีกก็คงไม่กลัวเท่าเดิมแล้ว 💡 ความกลัว มันไม่ได้บอกว่าเราไม่เก่งพอแต่มันแค่บอกว่าเรื่องนี้สำคัญสำหรับเรา . และเรื่องแบบนี้ ก็เป็นสิ่งที่เกิดซ้ำๆ กับงานของเรามากมายจนนับไม่ถ้วน 🔸 เวลาต้องค้านใครซักคนในที่ประชุมไม่ว่าจะเป็น requirement ที่ไม่ได้คิดเรื่องเทสให้ดี หรือคุยเรื่องบั๊กที่เห็นไม่ตรงกัน “ถ้าพูดไปแล้วทีมจะมองเรายังไง”“ถ้าความเห็นเราผิด แล้วจะดูไม่ professional รึเปล่า” 🔸 มีเรื่องที่สงสัยอยากจะถามฟังคนอื่นคุยกันในที่ประชุมแล้วไม่เข้าใจเลย แต่ทำไมไม่มีใครถามอะไรเลยนะ “ถ้าเราถามไปแล้วจะดูโง่มั้ย”“หรือเป็นเราเองที่ตามไม่ทัน” 🔸

กลัว = สัญญาณว่ากำลังจะเติบโต Read More »

169 wordpress feature image (6)

เทสอันเดิมเดี๋ยวผ่าน เดี๋ยวไม่ผ่าน ผีหลอกหรือเปล่า

มาคุยเรื่อง Automation Test กันต่ออีกซักหน่อย กับอีกหนึ่งปัญหาที่ทำให้“เมื่อวานยังรันผ่านอยู่เลย ทำไมวันนี้เฟลอีกแล้ว ไม่มีใครแก้อะไรซักนิด” เคยเจอกันมั้ยคะเมื่อวาน pass วันนี้ fail ลอง rerun ดูซักหน่อย pass อีกแล้ว ยังไม่ได้แตะโค้ดสักบรรทัดอยากจะจับ Automation Test ของเรามาถามว่าเกิดอะไรขึ้น ทำไมผีเข้าผีออกทำอะไรตามใจแบบนี้ บอกเลยว่าคุณไม่ได้เจออยู่คนเดียว(ใช่ค่ะ พี่กิ่งก็เคยเจอ กว่าจะหาทางแก้ปัญหาได้ บางทีใช้เวลาเป็นเดือน) และส่วนใหญ่มันไม่ได้เกิดจาก tool ไม่ดี หรือ เราเขียนไม่ดีหรอกค่ะอีกหนึ่งในสาเหตุที่เจอบ่อยๆ คือ วิธีที่เราจัดการกับ test data วันนี้จะพาไปเจาะลึกอีกหนึ่งเรื่องที่มักจะทำให้เจอปัญหาบ่อยๆ ค่ะคือ Static Data กับ Dynamic Data . 🧊 Static Data คืออะไร คือค่าที่เรากำหนดไว้ตายตัวใน test เลย บางทีเราเรียกว่า hardcode ค่ะเช่น บอกไปเลยว่าใช้ username: “test01@test.com”

เทสอันเดิมเดี๋ยวผ่าน เดี๋ยวไม่ผ่าน ผีหลอกหรือเปล่า Read More »

169 wordpress feature image (5)

Shift-Left ยังไงในวันที่ทีมยังไม่พร้อม

เคยรู้สึกมั้ยคะว่าตัวเองเป็นคนสุดท้ายที่ต้องรับจบตลอด เวลาเกิดอะไรขึ้น 🐛 เจอบั๊กก่อนขึ้น production… ทำไมก่อนหน้านี้เทสไม่เจอ🐛 ลูกค้าเจอบั๊ก… QA เทสรึเปล่า ทำไมหลุด🐛 Requirement เปลี่ยนกลางคัน… ต้องเริ่มเทสใหม่หมด แต่ deadline ยังเป็นวันเดิม ทั้งๆ ที่บางทีปัญหามันก็เกิดมาตั้งนานแล้ว ก่อนจะมาถึงมือเราด้วยซ้ำแต่ทำไมถึงจะต้องมาพังเอาตอนท้ายๆ แล้วงานก็ดีเลย์ทุกที . พี่กิ่งเดาว่าหลายๆ คนที่อ่านอยู่ตอนนี้ ก็น่าจะเคยรู้สึกแบบนี้ใช่มั้ยคะQA แบบเรามักจะโดนถามเสมอ “เทสรึยัง ทำไมไม่เจอ” แล้วเราก็ “รับจบตลอด” ทั้งๆ ที่ปัญหามันเกิดขึ้นมาตั้งแต่ตอน design แล้วแล้วทำไมเราไม่ไปหามันให้เจอตั้งแต่ต้นทางไปเลยล่ะ! . ลองมาดูเคสตัวอย่างกันดีกว่าค่ะ สมมติว่าเรากำลังสร้างแอปช็อปปิ้งตัวนึงอยู่ แล้วก็ต้องเก็บข้อมูลวันที่ของออเดอร์นั้น แต่ไม่มีใครคุยกันว่าเราจะเก็บวันที่ใน timezone ไหน ทุกคนเข้าใจเอาเองว่าก็ต้องรู้อยู่แล้วว่าต้องเป็น timezone ที่เป็น local time สิ ไม่ใช่ UTC (ที่เป็นเวลาสากลคือ GMT+0) ก็เลยไม่มี requiremnt ตรงไหนพูดถึงเรื่องนี้ เพราะทุกคนคิดว่า “ก็น่าจะเข้าใจอยู่แล้ว”

Shift-Left ยังไงในวันที่ทีมยังไม่พร้อม Read More »

169 wordpress feature image (4)

วิธีเตรียมเทสให้พร้อมก่อนรัน ที่ทำให้ debug ง่ายขึ้น

มีคำถามที่พี่กิ่งได้ยินบ่อยมากตอนบอกให้ใครแตก e2e ยาวๆ ออกเป็น scenario ย่อยๆ คือ “แล้วเราจะรันสเต็ปเดิมซ้ำหลายรอบเหรอ”“แบบนี้เทสก็จะเพิ่มขึ้นเยอะเลย”“จะไม่เสียเวลารันนานเกินไปเหรอ” พี่กิ่งจะมาเล่าสิ่งที่เคยเจอให้ฟังค่ะ . ตอนที่พี่กิ่งเริ่มเขียน automation test ใหม่ๆ ก็เขียนเป็น flow ยาวๆ เหมือนกันค่ะคิดว่าไหนๆ ก็เทสแล้ว ก็ทำให้ครบไปทีเดียวเลย Login -> สร้าง product -> verify -> แก้ไข product -> verify -> ลบทิ้ง รันผ่านก็ดีใจ รันครั้งเดียว ไปใส่ result ว่าผ่านได้หลายข้อเลย แต่พอมันพังขึ้นมา… ก็งงว่ามันพังตรงไหนเสียเวลาไล่หาไปอีกเป็นวัน . รอบสอง “ฉันจะแยก” ทีนี้ก็ทำแบบที่เราคุยกันไปโพสก่อนหน้านี้ค่ะไปแตก test scenario ออกให้ย่อยลงไปอีก เพื่อให้มันเทสแค่อย่างเดียว ตอนนี้การ “แก้ไข product” ก็เลยมี test scenario แยกออกมาเป็นของตัวเองทำให้อ่านง่ายขึ้นมาก

วิธีเตรียมเทสให้พร้อมก่อนรัน ที่ทำให้ debug ง่ายขึ้น Read More »

169 wordpress feature image (3)

Requirement บอกต้อง “ทำงานถูกต้อง” แต่ถูกต้องของใครก็ไม่รู้!

เคยเจอมั้ยคะ ได้ Ticket มาแล้ว Requirement เขียนเอาไว้ว่า“ระบบต้องทำงานได้ถูกต้อง”“ระบบต้องคำนวณส่วนลดได้ถูกต้อง” ถูกต้อง ถูกต้อง ถูกต้อง BA อาจจะเข้าใจแบบนึงQA อ่านแล้วตีความไปอีกแบบนึงDev ก็ตีความไปคนละแบบ พอได้ของออกมา ทุกคน “งง” ทำไมไม่มีใครเข้าใจตรงกันเลยทั้งๆ ที่ทุกคนทำตาม Requirement ทั้งหมด เนี่ยแหละค่ะ บางทีสิ่งที่เราคิดว่าทุกคนน่าจะเข้าใจอยู่แล้วมันตีความได้ต่างกันหลายแบบ และแต่ละคนก็อาจจะเข้าใจไม่ตรงกัน Requirement ที่ไม่มี Example มันตีความได้หลายแบบ . 📌 มาลองดูตัวอย่างว่าทำไมตัวอย่างจริงถึงสำคัญ Requirement บอกว่า “ระบบต้องคำนวณส่วนลดและ VAT ให้ถูกต้อง” Dev อาจจะเข้าใจว่า คำนวณ VAT จากยอดสั่งซื้อก่อน แล้วค่อยหักคูปองส่วนลด(1000 + 0.07*1000) – 50 = 1020 บาท แต่สิ่งที่ business ต้องการคือ ให้หักส่วนลดก่อน ค่อยบวก VAT(1000 –

Requirement บอกต้อง “ทำงานถูกต้อง” แต่ถูกต้องของใครก็ไม่รู้! Read More »

169 wordpress feature image (1)

Scenario เดียวเช็คทุกอย่าง… แล้วก็พังหมด!!!

ใครเคยเขียน scenario แบบนี้บ้างคะ Scenario: ทดสอบการ checkoutGiven ผู้ใช้ login แล้วWhen เพิ่มสินค้าลงตะกร้าAnd กรอกที่อยู่จัดส่งAnd เลือกวิธีชำระเงินAnd กด confirm orderThen ระบบแสดงหน้า order successAnd ส่ง email ยืนยันAnd ตัดยอดบัญชีWhen ผู้ใช้ดู order historyThen เห็น order history ถูกต้อง . Scenario เดียว เทสมันให้หมดทุกอย่างไหนๆ ก็ทำไปแล้ว ก็เทสให้ครบไปเลย จะได้ไม่เสียเวลา พี่กิ่งเข้าใจความรู้สึกนี้มากๆ เลยค่ะเพราะเป็นคนนึงที่เคยทำแบบนี้มาก่อน! แล้วก็ต้องมาชดใช้กรรม หาวิธีแก้สิ่งที่ตัวเองทำไว้ 😅 เพราะจริงๆ scenario ด้านบน ถือว่าไม่ได้ทำตามหลักของ BDD แล้วค่ะ . ❌ ปัญหาคืออะไร? Scenario ที่ดี ต้องเทสแค่ 1 behavior

Scenario เดียวเช็คทุกอย่าง… แล้วก็พังหมด!!! Read More »

169 wordpress feature image

เขียน Scenario จนครบ แต่ Automation ก็ยังพังอยู่ดี

เขียน Automation Test Scenario เป็น Gherkin ไว้ 40 ข้อลองรันบนเครื่องก็ผ่านหมด ส่งขึ้นไปบน CI/CD ก็ผ่าน ทีมภูมิใจมาก เรามี Automation Test ที่ Test Coverage ดีเยี่ยม ครอบคลุมครบทุก requirement ผ่านไป 2 สัปดาห์ มีการอัพเดต UI เข้ามา 🔴 เทสพังไป 38 ข้อทีมต้องวิ่งวุ่นไปไล่อัพเดตจุดที่หน้า UI เปลี่ยน ปัญหาไม่ได้เกิดเพราะโค้ดพัง แต่เพราะเขียนผิดวิธีมาตั้งแต่แรก . เรื่องนี้เป็นอีกหนึ่งปัญหาที่เจอบ่อยมากๆ ในทีมที่เพิ่งทำ Automation Test ค่ะ วันนี้จะพาทุกคนไปรู้จักกับวิธีเขียน Scenario 2 แบบ คือ Imperative กับ Declarative กันค่ะและถ้าเลือกผิด ชีวิตอาจจะเปลี่ยนโดยไม่รู้ตัว . 📌 Imperative

เขียน Scenario จนครบ แต่ Automation ก็ยังพังอยู่ดี Read More »