Videos → All about testing from 0 to 7 (คิดก่อนทำ หรือ ทำแล้วค่อยคิด .. ที่จะ Test)
Description
ปัญหาโลกแตกของนักพัฒนา! ทำไมเขียนโค้ดเสร็จแล้ว แต่ยังไม่เสร็จสักที? มาร่วมหาคำตอบกับคุณสมเกียรติ ในหัวข้อ JavaScript testing 0-7 หรือ everyday ที่เจาะลึกเรื่องการทดสอบ JavaScript ตั้งแต่ปัญหาพื้นฐานอย่าง quality vs. quantity ความสำคัญของ cost of bug ไปจนถึงการเลือกใช้กลยุทธ์การทดสอบที่เหมาะสม ไม่ว่าจะเป็น manual test, automation, end-to-end test, contract test รวมถึงการใช้เครื่องมือยอดนิยมอย่าง Playwright, Supertest และ Pact คุณสมเกียรติจะมาแชร์ประสบการณ์และมุมมองเกี่ยวกับการสร้างความเชื่อมั่นในโค้ด ลดปัญหา bug และเพิ่มประสิทธิภาพในการทำงาน
Chapters
- เริ่มการบรรยายและแนะนำตัว 0:00
- คำถามเกี่ยวกับการทดสอบซอฟต์แวร์และความสำคัญ 0:24
- การเลือกระหว่างคุณภาพและปริมาณในการพัฒนาซอฟต์แวร์ 1:04
- ต้นทุนของข้อผิดพลาดและความสำคัญของการทดสอบ 1:55
- ความสำคัญของคุณภาพและการทดสอบในการพัฒนาซอฟต์แวร์ 3:25
- รูปแบบการทดสอบแบบต่างๆ และการเลือกใช้ 4:34
- การทดสอบเป็นระดับของความเชื่อมั่น 6:06
- การทดสอบควรเป็นกิจกรรมต่อเนื่องตลอดกระบวนการพัฒนา 7:11
- การทดสอบที่ดีควรมีคุณสมบัติอะไรบ้าง 8:56
- การเลือกระหว่าง Test First และ Test Last 10:01
- การพัฒนาแบบ Iterative และ Incremental 12:03
- การทดสอบแบบ Feature-based และการพัฒนาทีละขั้นตอน 13:51
- การทดสอบใน JavaScript: เครื่องมือและวิธีการ 15:49
- ความท้าทายในการทดสอบระบบ Frontend และ Backend แยกกัน 17:58
- การแยกทดสอบ Frontend และ Backend อย่างอิสระ 20:54
- การใช้ Playwright สำหรับการทดสอบ Frontend 22:42
- การทดสอบ Backend ด้วย Supertest และการ Mock 24:21
- การใช้ Contract Testing เพื่อรักษาความสอดคล้องระหว่าง Frontend และ Backend 26:42
- ประโยชน์ของ Contract Testing และการใช้ Pact Broker 29:04
- ความสำคัญของการทดสอบทางธุรกิจและการเพิ่มมูลค่าโดยนักพัฒนา 30:37
- สรุปและคำแนะนำสุดท้ายเกี่ยวกับการทดสอบ 31:57
Transcript
คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub
เริ่มการบรรยายและแนะนำตัว0:00
พี่ปุ๋ยพร้อมมั้ยครับ โอเคพร้อมแล้วครับผม ขอเรียนเชิญเลยครับผม ขอส่งไมค์ให้กับพี่ปุ๋ยเลยนะครับ โอเคนะครับ เดี๋ยวจับเวลาแป๊บนึงนะครับ ครับผม สวัสดีทุกท่านนะครับ ก็ชื่อสมเกียรตินะครับ ก็วันนี้นะครับเรามาพูดเรื่อง testing นะ JavaScript testing เนาะก็ 0-7 อะไรก็ไม่รู้ ก็คือ everyday นั่นเองนะครับ ก็มาดูกันเนาะ เขียน blog อะ จบละนะครับ
คำถามเกี่ยวกับการทดสอบซอฟต์แวร์และความสำคัญ0:24
เริ่มที่คำถามเนาะ พอดีเพิ่งมีคำถามที่สมาคมโปรแกรมเมอร์ นี่ใช่ไหม คำถามนี้ ตอบไงดีครับ
อันนี้ใครตอบอะไรบ้างครับ ที่บริษัททำกันมั้ยครับ มีคำถามนี้มั้ย เป็นคำถามอะไรเค้าเรียกว่าอะไรนะ ไก่กับไข่ใช่มั้ย ไม่รู้จะตอบอะไรดีนะครับ ผมว่าแต่ละที่ แต่ละ business เนาะ มีคำตอบที่อาจจะเหมือนหรือแตกต่างกันก็ว่าไปนะครับ แต่ผมว่าเห็นก่อนว่านี่คือคำถามที่ในองค์กรจะถามนะครับ แต่ถ้ามีปัญหา เค้าจะไม่ถามละ เค้าจะถามว่า ทำไมมี bug ใช่ไหม ถูกไหมนะครับ ก็ลองดูเนาะ นะครับ เราจะทำอย่างไรนะครับ
การเลือกระหว่างคุณภาพและปริมาณในการพัฒนาซอฟต์แวร์1:04
ประเด็นคือ ผมจะถามเสมอคือ ระหว่าง quality กับ quantity เราเลือกอะไรครับ ปัจจุบันที่บริษัทเรา quality คือคุณภาพนะครับ quantity คือทำให้เสร็จมากที่สุดเท่าที่ทำได้ เค้าเรียกว่าอะไรครับ มีเวลาสร้างเนาะ แต่ไม่มีเวลาทำให้ดี ใช่ไหม เพราะอะไรครับ เราจะสร้างให้เสร็จเพื่อตรงเวลาใช่ไหม นะครับ เสร็จแล้วก็เราจะมีเวลามาแก้ bug ใช่ไหม แต่ไม่มีเวลาทำให้ดี นะครับ มันดูขัดแย้งใช่ไหม เค้าเรียกว่า ขว้างงูไม่พ้นคอ เนาะ อันนี้ นะครับ ก็ลองดูนะครับ ดังนั้น หลายๆ คนจะเป็นคนกลุ่มนี้ไหม ใคร We Love Bug บ้างครับ ใครชอบครับ ใครรัก
ใครไม่เคยเจอ bug บ้าง ยกมือ แสดงว่าทุกคนเจอใช่ไหม ถูกไหม ดังนั้นเราอยู่กับมันใช่ไหม นะครับ ประเด็นคือ เราจะใช้ชีวิตกับมัน อย่างไรบ้างนะครับ นี่คือเป็นสิ่งนึงเนาะ นะครับ
แล้วที่สำคัญคือเรื่อง bug เนาะ นะครับ
ต้นทุนของข้อผิดพลาดและความสำคัญของการทดสอบ1:55
มันมีคำว่า cost of bug เนาะ นะครับ คือ bug นะครับ มันมีค่าใช้จ่าย คำถามก็คือ bug ปัจจุบันเราเจอที่ไหนเยอะสุดครับ เจอที่ dev เนาะ ใช่ไหมครับ ส่วน production ไม่ค่อยเจอหรอก แต่พอเจอปุ๊บ บรรลัยใช่ไหม ถูกไหมครับ เพราะอะไรครับ ถึงแม้คุณจะมี bug น้อย แต่ bug นั้นอาจจะก่อให้เกิดเค้าเรียกว่าค่าใช้จ่ายมหาศาล ถูกไหม แล้วก็จะโดนด่าเนาะว่า ทำไมงานขึ้นเร็วใช่ไหม แต่ bug เยอะ มีคุ้นๆ มั้ย time to market ใช่ไหม แต่พอ time to market ดีปุ๊บ bug ก็เยอะ ใช่ไหม อันนี้ก็ต้อง trade off เนาะ แต่ในแง่ของการจัดการเนาะ เราอยากได้อะไรครับ คุณภาพดีเนาะ เร็ว แล้วก็คุณภาพดี เร็ว แล้วก็ถูก ใช่ไหม นะครับ
ไปหาได้ที่ไหนครับ มีใครคุ้นๆ มั้ย นะครับ ไม่ค่อยเจอ นะครับ ดังนั้นเราก็ต้องเลือกนะครับ ใครเพิ่งขึ้นโปรเจคเมื่อคืนบ้างครับ เพิ่งขึ้นใช่ไหมนะ เยี่ยมมั้ย นะครับ ขั้นตอนแรกก่อนเอาขึ้น production ต้องทำอะไรครับ ไหว้พระนะครับเนาะ หน้าตึก ใช่ไหมครับ นะครับ ตอนทำไม่ถาม ตอนทำไม่ขอใช่ไหม แต่จะขึ้น ขอจังใช่ไหม ว่าอะไรครับ ระบบ deploy แล้วไม่มีปัญหาเนาะ จากที่ผ่านมาทุกครั้งเป็นไงครับ ประวัติดีมาก ม ีปัญหาทุกรอบ ใช่ไหม ดังนั้น ลองดูนะครับว่าเราเรียนรู้หรือเปล่า ประเด็นคือ กลับมาที่ของเราเนาะ ผมกำลังพูดถึงก็คือเรื่องของคุณภาพ
ความสำคัญของคุณภาพและการทดสอบในการพัฒนาซอฟต์แวร์3:25
หนึ่งในคุณภาพคือเรื่องของอะไรครับ เรื่องของ testing เนาะ ของเราเป็นอะไรครับ JavaScript นะครับ เราจะพูดถึงเรื่องของ JavaScript testing นะครับว่า ในแง่ของการเทส ที่เซคชั่นก่อนหน้าพูดถึงเรื่องของพวก pyramid testing เนาะ
ใครยังทำแบบรูปนี้บ้าง ยกมือครับ manual เยอะๆ automate น้อยๆ
ใครทำอยู่บ้างครับ ไม่ทำเนาะ ที่นี่ไม่น่าทำนะครับเนาะ ใครจะบ้ามานั่งกดๆๆ ทุกวันใช่ไหม คงไม่มีใครบ้าขนา ดนั้น เราก็ต้องเริ่มเปลี่ยนใช่ไหม ว่าทำแบบนี้ไม่ค่อยสนุกเนาะ
ในองค์กรใหญ่ๆ ชอบรูปนี้ อะไรหวานๆ จะไม่ค่อยดีใน software development เนาะ ลองดูนะครับ อันนี้ pyramid เนาะ ไม่ค่อยมีใครทำ นี่เราชอบทำแบบนี้ใช่ไหม นะครับ เรามี manual test เรามีนักพัฒนา ใช่ไหมครับ เรามีอะไรครับ automation ดังนั้นมี 3 ทีมเลยใช่ไหม ทดสอบเคสเดียวกันนี่แหละ 3 ทีม จะได้ไม่ฮั้วกันนะครับเนาะ แล้วพอผ่าน 3 ทีมปุ๊บ ทุกอย่างผ่านหมด ยกเว้น production ใช่ไหม แล้วค่าใช้จ่ายคูณ 3 เป็นหรือเปล่า ไม่แน่ใจ หลังๆ มา ผมชอบรูปนี้เนาะ
รูปแบบการทดสอบแบบต่างๆ และการเลือกใช้4:34
นี่คุ้นๆ มั้ย ผมเรียกว ่าแปลเป็นไทยคือ ทดสอบจนได้ถ้วย ใช่ไหม ประเด็นคือเค้ากำลังโฟกัสที่อะไรครับ integration กับ end-to-end ให้มากเนาะ เพราะว่าระบบงานของเราเนาะ ใช่ไหมครับ ที่นี่ใครเขียน unit test บ้าง ยกมือหน่อย การันตีไหม ว่ารวมแล้วจะ work นะครับ coverage 100% ใช่ไหม ที่ไหนมีบ้างครับ coverage เราต้อง 100% ใช่ไหม ก็ 100% นะ แต่เขียนไม่ครบใช่ไหม เขียนโค้ดไม่ครบ requirement ถูกไหม เออเนอะ แต่เทส แต่ coverage 100% ก็มี bug ใช่ไหม ถูกไหม เออเนอะ ดังนั้น ตรงนี้แหละนะครับ คุณเขียน unit ปุ๊บ มันคือเร็วใช่ไหม แต่เราไม่การันตีว่ามันจะเวิร์กหรือเปล่า ดังนั้น ในการ deliver ซอฟต์แวร์
หรือว่าทดสอบซอฟต์แวร์ จำเป็นจะต้องมี การเทสที่หลากหลาย level แต่ละจำนวนก็แล้วแต่เรา ถูกไหมครับ เออ นี่คือมุมมองเนอะ ประเด็นคือ เรากำลังการเทสนะครับเนอะ ผมไปฟังที่นึงมาเนอะ เค้าบอกว่าการเทสคืออะไรครับ level ของความเชื่อมั่น ง่ายๆ เลย ทุกคนส่วนใหญ่เป็นนักพัฒนาเนอะ ความเชื่อมั่นของเราต่อบริษัทดีไหมครับ
วันดีคืนดีนะ ยกตัวอย่างเนอะ เรากำลังแก้โค้ดบรรทัดเดียวใช่ไหม องค์กรเราเสียไหม ทุกครั้งที่ deploy จะเกิดอะไรขึ้นบ้าง คำตอบคือ เดี๋ยวก็รู้ใช่ไหม deploy ไปก่อน เดี๋ยวก็รู้ ใครรู้คนแรกครับ คนใช้งาน ทีมพัฒนารู้เป็นคนสุดท้าย ไม่น่าใช่เนอะ อันนี้เป็นเรื่องตลกร้ายใช่ไหม