Videos → Better testing with Vue application
Description
คุณปุ๋ย หรือคุณสมเกียรติ จะมาแชร์ประสบการณ์และมุมมองเกี่ยวกับการทดสอบ (test) ใน Vue.js และ Nuxt.js พบกับเรื่องราวความสนุกปนขมขื่นของชีวิตนักพัฒนาที่ต้องเผชิญกับ deadline และ bug คุณปุ๋ยจะชวนคิดถึงปัญหาที่มักเกิดขึ้นในการพัฒนาซอฟต์แวร์ เช่น การ refactor โค้ด การจัดการ environment และความสำคัญของการ test พร้อมทั้งนำเสนอแนวคิดและเทคนิคการ test เช่น end-to-end test, isolated test และการ mock รวมถึงการใช้เครื่องมืออย่าง Vitest, Playwright และ Cypress มาเรียนรู้วิธีสร้างความเชื่อมั่นในโค้ด และเตรียมรับมือกับการเปลี่ยนแปลงในโลกของการพัฒนาซอฟต์แวร์ไปพร้อมกัน
Chapters
- เปิดงานและแนะนำตัว: คุณปุ๋ยกับเรื่องราวการ Test ใน Vue 0:00
- ความจริงของ Dev: เสร็จแล้ว...แต่ Test ล่ะ? 0:40
- คุณภาพ vs. ปริมาณ: เลือกอะไรเมื่อ Deadline มาถึง? 1:21
- Refactor = เขียนใหม่? ความมั่นใจในการเปลี่ยนแปลงโค้ด 2:24
- ความเชื่อมั่นในการ Coding: แก้ Bug ทีเสียวทั้งองค์กร 4:00
- ระบบงานมีชีวิต: การ Test เพื่อความมั่นใจในการเปลี่ยนแปลง 5:01
- สร้างความเชื่อมั่นด้วยการ Test: Manual vs. Automation 6:33
- ไหว้พระก่อน Deploy: เมื่อ Environment ไม่ตรงกับ Production 7:50
- Test Pyramid, Test Cupcake, Test Rocket: เลือกแบบไหนดี? 9:56
- Regression Test: ทำไมไม่ทำ? (เพราะ Deadline) 12:17
- การ Test ใน Vue: Web Application และ Nuxt 13:31
- Test ที่ดีเป็นอย่างไร: เร็ว อิสระ รันซ้ำได้ ตรวจสอบได้ เข้าใจง่าย 14:01
- มรดกเลือด: เมื่อโค้ดที่เราเจอไม่ใช่โค้ดที่เราเขียน 16:52
- Test First, Test Later, Test Last: คุณอยู่ทีมไหน? 17:12
- โครงสร้างโปรเจค Vue และ Nuxt: ง่ายต่อการ Test ไหม? 17:47
- Feature-based Modules: ทางออกของ Build Time ที่นานเกินไป 19:07
- การ Test Vue หลายระดับ: End-to-End, Isolated Test 21:00
- Flaky Test: ปัญหาโลกแตกของการ Test 23:06
- Decoupling from Framework: หลีกเลี่ยงการผูกมัดกับเครื่องมือ 24:19
- Custom Driver: เปลี่ยน Test Framework ได้ง่ายๆ 26:54
- Test ID: ยืดหยุ่นต่อการเปลี่ยนแปลง UI/UX 28:22
- Test ที่เข้าใจง่าย: Maintain ได้ ไม่เป็นมรดกเลือด 29:16
- Make it Work, Make it Right, Make it Fast: อย่าหยุดแค่ Make it Work 30:01
- คุณภาพ vs. ปริมาณ: คุณเลือกอะไร? 30:38
Transcript
คำบรรยายต่อไปนี้อาจไม่ถูกต้องทั้งหมด หากคุณพบข้อผิดพลาดใดๆ คุณสามารถช่วยแก้ไขข้อผิดพลาดได้บน GitHub
เปิดงานและแนะนำตัว: คุณปุ๋ยกับเรื่องราวการ Test ใน Vue0:00
ครับ วันนี้เรียกว่าเป็นโอกาสดีที่เราได้เจอพี่ปุ๋ย ในงาน Vue นะครับผม ครับ ก็ขอมอบเวทีนี้ให้กับพี่ปุ๋ย ครับผม ครับ ขอบคุณมากครับ ครับ โอเค ขอบคุณมากครับผม
ชนก่อนนะฮะ
นะครับ โอเคนะครับเนาะ ก็เมื่อกี้แนะนำตัวไปแล้วเนาะ ดูแก่มากเลยนะฮะ โอเคนะครับ ก็ผมชื่อสมเกียรตินะฮะ นะครับ เรียกว่าปุ๋ยแล้วกันนะครับ จะมาพูดเรื่องของการ test เนาะ นะครับ การ test ตัว Vue เนาะ นะครับ ว่าเรา test ยังไงบ้าง เอ่อ ในนี้ คำถามเดิมเนาะ ใครเขียน Vue น ะ สวยละ 2 เซสชั่นมานะฮะ เขียน Vue ใช่ป่ะ
ความจริงของ Dev: เสร็จแล้ว...แต่ Test ล่ะ?0:40
ใครเขียน test บ้างฮะ
สวยละ เอ้า อย่างงี้เป็น dev ทุกคนใช่ป่ะ แล้วบอกว่าเสร็จอ่ะ ทำไมบอกว่าเสร็จอ่ะ
ใช่ป่ะ เห็นนะ ทำไมบอกว่าเสร็จใช่ป่ะ โกหกชัดๆ ใช่ป่ะ นะฮะ เพราะเราต้องเสร็จก่อนเลยนะ deadline ใช่ป่ะ ถ้าไม่เสร็จโดนด่าใช่ป่ะ แต่ถ้าเสร็จแล้วมีบั๊ก ก็แก้ไงใช่ป่ะ เนี่ย เออเนาะ เออ ถูกป่ะ กล้าเจอบั๊ก กล้าแจ้ง เราก็กล้าแก้ใช่ป่ะ เนาะ ซึ่งเวลาแก้บั๊ก ไม่ตก KPI ไง ใช่ป่ะ เพราะฉะนั้นเห็นนะ ดู make sense มั้ย ไม่ make sense นะฮะ เออเนาะ แต่เป็นอย่างงี้ใช่ป ่ะ
คุณภาพ vs. ปริมาณ: เลือกอะไรเมื่อ Deadline มาถึง?1:21
ความสนุกเนาะ เพราะฉะนั้นมาดูกันนะฮะ
ถามว่า Vue ผมเขียนเยอะมั้ยนะฮะ คำตอบคือไม่ค่อยเขียนนะฮะ เออเนาะ เหมือนกับ Vue Thailand News อะไรซักอย่างอ่ะ นะครับเนาะ แนะนำตัว Vue ใช่ป่ะ เขียนอะไรนะ จะ react เออ แล้วประมาณ นะ เหมือน react angular vue เราเลือกอะไรครับ react ใช่ป่ะ เออเนาะ ถูกป่ะ แต่ถ้า enterprise หน่อยจะเลือก angular ใช่ป่ะ เนาะ แต่พอมาที่นี่ต้องบอกว่า Vue โอเคนะฮะ
ดังนั้นนะฮะ ผมกำลังพูดถึงเรื่องของการ test แล้วกัน นะครับเนาะ มันเป็นเค้าเรียก rare item นะฮะ แปลว่าจะไม่มีใครทำนะครับเนาะ นะครับ ดังนั้นนะฮะ ระหว่างคำว่า quality คือคุณภาพใช่ป่ะฮะ กับ quantity คือปริมาณ เราเลือกอะไรครับ
deadline อยู่ข้างหน้าใช่ป่ะเนี่ย วันนี้มาใช่ป่ะ ต้อง deploy วันนี้มั้ย ใช่ป่ะ เออเนาะเนี่ย ต้อง deploy มั้ย ใช่ป่ะ เออเนาะ นะ
Refactor = เขียนใหม่? ความมั่นใจในการเปลี่ยนแปลงโค้ด2:24
มันจะมีอารมณ์คือนะฮะ โค้ดที่เราเขียนไปเนาะ มันดีมั้ยฮะ
ดีนะ ดู เสียงสูงเนี่ย โอเคเนาะ นะ วันดีคืนดีคือ มี lead เดินมาใช่ป่ะ ผมรู้สึกว่าโค้ดคุณไม่ค่อยดีใช่ป่ะ เรา refactor กันหน่อยมั้ย ทุกคนจะมองว่าไงฮะ refactor ใช่ป่ะ คิดในใจคือ แม่งเขียนใหม่นะฮะ refactor คือแปลเป็นไทยคืออะไรฮะ ปรับปรุงโครงสร้างให้ดีขึ้นนี่ อันนี้คือจาก basic มันเลย จาก original เลยนะ นะ แต่คำว่า refactor คือ เขียนใหม่ใช่ป่ะ โอเคป่ะ แต่ตอนที่หัวหน้าเราพูดใช่ป่ะ ไป present น่ะ ต้องบอกว่าอะไรฮะ อื้อ ใช่ป่ะ refactor ใช่มั้ย ถูกป่ะ เออเนาะ เพราะว่า refactor คุณจะทำได้ก็ต่อเมื่อคุณมั่นใจว่า สิ่งที่คุณเปลี่ยนมันยังทำงานเหมือนเดิม
เอาเหมือนเดิม ใช่ป่ะ เพิ่มเติมคือขอเปลี่ยนเวอร์ชั่นใช่ป่ะ จาก Vue เวอร์ชั่น 2 ไปเป็นเวอร์ชั่น 3 มี migration guide ให้ด้วยใช่ป่ะ migrate ได้มั้ย นี่ใช่ป่ะ เออเนาะ แต่หัวหน้าเรา migrate ได้สิ เพราะเค้ามี migration guide ใช่ป่ะ เออเนาะ จริงมั้ยไม่แน่ใจนะฮะ เออเนาะ ดังนั้นนะฮะ ตรงนี้ก็เป็นความสนุกใช่ป่ะ เออเนาะ ในของผม ผมเรียกว่าทุกครั้งที่เรา change เรามั่นใจไปว่ามันยังคงเลยฮะ โอเค มีอยู่แค่นี้ฮะ นะ ถ้าเรามั่นใจ นั่นคือความเชื่อมั่นเรา ความเชื่อมั่นเราสูงใช่ป่ะ เอาง่ายๆ ตอนเนี้ย อยากเปลี่ยนโค้ดใช่ป่ะ
ความเชื่อมั่นในการ Coding: แก้ Bug ทีเสียวทั้งองค์กร4:00
ตอนนี้เนาะ มันจะมีคำพูดนึง แก้โค้ดแค่บรรทัดเดียวใช่ป่ะ เสียวทั้งองค์กรใช่ป่ะ มีมั้ย มีมั้ย นะฮะ มั่นใจใช่มั้ยว่าครั้งนี้จะเอาขึ้นแล้วไม่มีปัญหา มีใครเคยพูดมั้ยครับ ผมมั่นใจมากครับ หนูมั่นใจมากค่ะ นะฮะ คืนนี้เจอกัน ใช่ป่ะ
แล้วไม่พอเนาะ คืนนี้ยันเช้า ส่งแจ้งใช่ป่ะ พรุ่งนี้ต่อกันอีกใช่ป่ะ อยู่นานสุดกี่วันฮะ วันเดียวก็พอนะ เพราะเราไม่ไหว ต้องมีไม้สองใช่ป่ะ อะไรประมาณนั้นนะครับ ดังนั้นนะ ที่ผมพูดตรงนี้ก็คือ เรากำลังพูดถึงเรื่องอะไรฮะ ความเชื่อมั่นถูกป่ะ เพราะว่าการพัฒนา software คือการเปลี่ยนแปลงนะ มีระบบไหนมั้ยฮะ ที่เราพัฒนาแล้ว ทำแล้วทิ้ง เหมือนกระดาษทิชชู่ตรงห้องน้ำเนี่ย เออเนาะ มีมั้ย ทำแล้วทิ้ง ถ้าทำแล้วทิ้งไม่ต้องพูดถึงนะ ก็ไม่ต้อง test อะไร ถูกป่ะ ให้ user test แทนเรา โอเคมั้ยฮะ แต่เรากำลังทำ product ใช่มั้ยฮะ เราต้องเพิ่มหรือแก้ไขไปเรื่อยๆ
ระบบงานมีชีวิต: การ Test เพื่ อความมั่นใจในการเปลี่ยนแปลง5:01
ยกตัวอย่างเช่น ตอนนี้ ระบบงานที่เราดูแลอยู่ฮะ วันดีคืนดี feature นี้อยากเอาทิ้งใช่ป่ะ โค้ดเราลบมั้ยฮะ comment ใช่ป่ะ ใช้ git ใช่ป่ะ add commit comment this feature ถูกป่ะ เออเนาะ
แล้วไปเขียนบนโค้ดด้วย don't delete this code เพราะว่า because in future ใช่ป่ะ
อะไรประมาณนี้ใช่ป่ะ เออ คุณๆ มั้ย ใครทำบ้างฮะ
ดังนั้นผมกำลังพูดถึงเรื่องของระดับความเชื่อมั่น ของระบบเรา หรือโค้ดเราว่า ทุกครั้งที่มี change เรามั่นใจมั้ยนะครับเนาะ ดังนั้นนะ คำถามคือเราจะทำยังไงให้มั่นใจ มันมีเยอะมากใช่ป่ะนะ ยกตัวอย่างเช่น อย่างของผมเนาะ คือการ test ใช่ป่ะนะ มันมีคำพูดนึงนะ ก็คือถ้าเราเชื่อมั่นในโค้ดเราเนาะ หรือประวัติเราดีใช่ป่ะ 2 ปีที่ผ่านมา เขียนโค้ดเอาขึ้น production ไม่เคยมี bug เลย ใช่ป่ะ เราจะทำ test มั้ย เราจะเขียน test มั้ย
อันนี้คือประวัติฮะ ถ้าประวัติดี ถูกป่ะ แต่ชีวิตจริงคืออะไรฮะ ใช่ป่ะ แค่กูหายใจใช่ป่ะ ใครเคยเจอบ้างฮะ เข้าไปบริษัทครั้งวันแรกเลย กูเพิ่งเปิดเครื่อง มี bug แจ้งมาด้วย ให้กูแก้ มีใครเคยเจอมั้ย คำถามคือ เพิ่งๆ มานั่ง ใช่ป่ะ แล้วเพิ่งๆ pull โค้ดลงมา เพิ่ง clone ลงมาเลย แล้วมึงแจ้ง bug ให้กู มึงต้องการอะไร
อันนี้เป็นเรื่องตลกที่คุยกันหน้าเซเว่นนะฮะ ตอนกินเบียร์ เขาจะพูดกันประมาณนี้นะ
สร้างความเชื่อมั่นด้วยการ Test: Manual vs. Automation6:33
ดังนั้นนะ 1 ในการสร้างความเชื่อมั่นคือ เรื่องของการ test ตอนนี้เอาเรื่องของ dev เนาะ dev คนไหนที่ test เองบ้างฮะ
ต้องยกมือทุกคนสิฮะ test เองบ้าง ถูกป่ะ เพราะว่าเรากำลังจะบอกว่า เฮ้ย งานของเราเรียบร้อย เราต้อง test เนาะ แต่เรา test แบบของเราอ่ะ บางคนบอก test แบบบ้านๆ ใช่ป่ะ สมมุติเราทดสอบอะไรฮะ สมมุติมี 3 หน้า มีคนแจ้ง bug มาว่า bug หน้า 2 เราทำไงฮะ
กู start มากดหน้า 1 แล้วให้มันเด้งมาหน้า 2 ใช่ป่ะ bug ใช่มั้ย กูแก้หน้า 2 แล้ว refresh แม่งใช่ป่ะ แ ล้วกด next ต่อ ผ่านปุ๊บ เสร็จแล้วครับ มีใครทำแบบนี้มั้ย ใครเค้าจะทำนะ แบบนี้ใช่ป่ะ เราเป็น professional ใช่ป่ะ programmer developer ทำมั้ยฮะ ทำ โอเคป่ะ ไม่ทำเนาะ
ดังนั้นนะครับ เรื่องของการ test ผมว่าทุกคนทำ แต่ทำ manual หรือ automation ถูกๆ มั้ยฮะ เพราะว่าอะไรฮะ ระบบงานของเรามีชีวิต feature เพิ่มเรื่อยๆ นะ แก้ feature ใหม่ของเดิม กระทบมั้ยฮะ ไม่เหลือ หรือไม่รู้ หรือก็วัดกันใช่ป่ะ
ไหว้พระก่อน Deploy: เมื่อ Environment ไม่ตรงกับ Production7:50
ดังนั้นตอนก่อน deploy เราต้องอะไรฮะ ไหว้ๆ พระใช่ป่ะ หน้าตึกนะ ตอนทำไม่ไหว้นะ แต่ก่อนจะ deploy มึงไหว้กูจัง อันนี้คือมุมมองของพระนะ เออเ นาะ มึงต้องการอะไรกับกูวะ อะไรประมาณนี้ เราคงไม่ทำเนาะ ใช่ป่ะ เพราะฉะนั้นเรื่องของ test ไม่ว่า manual หรือ automation ผมไม่มีประเด็นนะ ถูกป่ะ แต่เราทำรึเปล่า แล้วเราทำซ้ำๆ อยู่ตลอดเวลามั้ยนะครับเนาะ แล้วเรามั่นใจรึเปล่านะ ดังนั้นไอ้เรื่องของพวกนี้นะ เราชอบแบบนี้มั้ย เนี่ยฮะ ใครๆ ชอบบ้างฮะ bug เนาะ
bug 1 ตัวชอบเรียก bug หลายๆ ตัวมาใช่ป่ะ อันนี้ก็จะเป็นสิ่งที่เกิดขึ้น หรือนะ เรามีหลายๆ environment ใช่ป่ะ อย่างที่บริษัทมีกี่ environment ฮะ environment คือมี dev ใช่ป่ะ มี local ใช่ป่ะ work on my machine มีอะไรอีกนะ มี test ใช่ป่ะ เพราะเห็นคุยข้างหลังมีอะไรอ่ะ บอกว่า อ๋อ ที่บริษัทเรามี QA ใช่ป่ะ เป็นเกมแล้ว ตีปิงปองใช่มั้ย กูเสร็จด้วย มึงไม่เสร็จ กูเสร็จด้วย มึงไม่เสร็จใช่มั้ย วนไปอย่างนี้นะ เออเนาะ คำถามก็คือเรามี environment ที่หลากหลายใช่ป่ะ ผ่านหมดทุก environment เนาะ ยกเว้น…?
เพราะฉะนั้นเราต้องอะไรฮะ คนจริงฮะ ต้องอะไรฮะ อ้าว ฉิบหายแล้วงานนี้นะ เออเนาะ เพราะอะไรฮะ มีที่เดียวที่บอกความจริงใช่ป่ะ เพราะที่เหลือผ่านหมดใช่มั้ย คุณๆ มั้ย มีการ sign นะ มีการเซ็น มีคนเทสต์ มีอะไร อย่างเช่นอะไรฮะ ผมไปเจอที่นึงเนาะ เค้ามี UAT ใช่มั้ย U U ย่อมาจากอะไรฮะ ใครเทสต์
อ่า user เออ ใช่ป่ะ หรือมันต้องเป็น BAT ป่ะ
business เป็นอะไรฮะ BAT แบตใช่ป่ะ หรือเป็น CAT เป็น customer ป่ะ อ่า หรือเป็น UAT คือ user สุดท้ายคือกูนี่แหละ เทสใช่ป่ะ อ่าเนาะ ดังนั้นไอ้ตรงนี้มันจะเป็นอะไรฮะ บางคนสนใจ process ใช่ป่ะ ให้ทำ แต่ชีวิตจริงคือคุณ คุณภาพใช่ป่ะ มันได้ไหมฮะ ไม่รู้ ถูกป่ะ เออเนาะ ดังนั้นไอ้ตรงนี้เป็นอะไรฮะ เป็นปัญหาเนาะ ที่ผมให้เห็นก่อนว่าในการพัฒนาซอฟต์แวร์เป็นยังไง
Test Pyramid, Test Cupcake, Test Rocket: เลือกแบบไหนดี?9:56
แล้วก็หลายๆ คนชอบพูดถึงเนาะ การเทสมีแบบไหนบ้างวะ เนี่ยมันจะอะไรฮะ ในการพัฒนาซอฟต์แวร์มันชอบมีสามเหลี่ยมใช่ไหม คุณๆ มะ