03Apr, 2024
Language blog :
Thai
Share blog : 
03 April, 2024
Thai

เทคนิคการเขียน Unit Test

By

2 mins read
เทคนิคการเขียน Unit Test

สำหรับชาว Dev นั้น Unit Test มีความจำเป็นอย่างมากในการพัฒนาซอฟต์แวร์ เหมาะกับการทำงานทั้งกับโปรเจกต์เล็กรวมไปถึงโปรเจกต์ใหญ่ Unit Test ได้เข้ามามีส่วนช่วยในการทดสอบการทำงานของซอฟต์แวร์ในแต่ละส่วน (การทำงานที่เล็กที่สุดที่สามารถตรวจสอบได้) ซึ่งในบทความนี้เราจะมากล่าวถึง Unit Test เบื้องต้นกัน

 

Unit Test คืออะไร

Unit Test คือวิธีการทดสอบซอฟต์แวร์ที่ใช้ทดสอบส่วนที่เล็กที่สุดของ Code เช่น Method/Function, Module เพื่อแสดงให้เห็นว่า Code ทำงานได้ถูกต้องตามเงื่อนไขที่ Dev เขียนไว้

 

ทำไมต้องทำ Unit Test ?

Michael Cohn’s testing pyramid model

 

จากรูปพีระมิดนี้แสดงถึงโมเดลของการเขียน Automated Test ในอุดมคติที่เราควรใช้ในการเทสซอฟต์แวร์ ดังนั้นเราควรจะมี Unit Tests หรือการเทสที่ระดับล่างสุดเป็นฐานราก ตามด้วย Service Tests และ UI Tests ซึ่งเป็นการเทสที่ระดับสูงขึ้นมีการเชื่อมต่อระหว่างหลาย Component เป็นตัวที่ต่อยอดขึ้นมาเป็นรูปพีระมิด

 

ที่ฐานล่าง เราควรมีจำนวนเทสที่เป็น Unit Tests มากที่สุด ก็เพราะเป็นการเขียนที่ทำได้ง่าย สามารถรันเทสได้รวดเร็ว มีความเสถียร ไม่มีปัจจัยอื่นมาทำให้เทส Failed ได้ง่าย ในขณะที่การเทสระดับบนจะสามารถรับรองว่าการเชื่อมต่อระหว่างแต่ละส่วนทำงานร่วมกันได้ถูกต้อง แต่ก็มีหลายปัจจัยที่สามารถกระทบทำให้เทสของเรารันไม่ผ่านได้เยอะกว่า และใช้เวลาในการรันนานกว่า นี่เป็นเหตุผลว่าทำไมเราจึงต้องทำ Unit Test

 

Unit Testing ที่ดีต้องมีอะไรบ้าง

Unit Test ที่ดีควรมีคุณสมบัติอยู่ 4 ข้อ :

 

       1. Protection against regressions

การเขียน Unit Test จะต้องสามารถหา Bug ได้  เมื่อเรามีการแก้ไข Code หรือเพิ่ม Feature ใหม่เข้าไปแล้วทำให้เกิด Bug ใน Feature เดิมนั้น มันก็ควรจะถูกตรวจจับได้โดย Unit Test ของเราก่อนเป็นอันดับแรก

      2. Resistance to refactoring

เทสเคสที่ดีจะต้องมีความทนทานต่อการ Refactor Code เมื่อเราเปลี่ยนโครงสร้างหรือการทำงานของโปรแกรม Unit Test ที่ดีไม่ควรที่จะพัง ซึ่งการเทสที่ดีควรจะสนใจแค่สิ่งที่เราส่งเข้าไปและผลลัพธ์สุดท้ายที่ได้ออกมา โดยไม่ไปผูกกับสิ่งที่อยู่ข้างใน หรือสนใจผลลัพธ์ระหว่างทาง (Black-box testing)

      3. Fast feedback

Unit Test ที่ดีจะต้องทำงานได้อย่างรวดเร็ว เพื่อให้ได้ Feedback ที่เร็ว และนำมาปรับแก้ได้ไว

    4. Maintainability

Unit Test ที่ดีควรจะอ่านง่ายและสามารถเข้าใจได้ง่าย 



ประโยชน์ของ Unit Testing 

 

Early Bug Detection :

ช่วยระบุและตรวจจับจุดบกพร่อ งหรือข้อบกพร่องในระยะแรกของการพัฒนา ซึ่งช่วยลดต้นทุนและความพยายามที่จำเป็นในการแก้ไขปัญหา

 

Isolation of Issues :

การทดสอบหน่วยแยกหน่วยหรือส่วนประกอบเฉพาะของโค้ด ทำให้ง่ายต่อการระบุและแก้ไขปัญหาในลักษณะที่เป็นเป้าหมาย

 

Code Quality Improvement :

การเขียน Unit Test มีส่วนช่วยให้คุณภาพของโค้ดดีขึ้น มีโครงสร้างที่ดี และง่ายต่อการบำรุงรักษา ส่งเสริมแนวทางปฏิบัติด้านวิศวกรรมซอฟต์แวร์ที่ดี

 

Facilitates Refactoring :

ให้ความมั่นใจในการ Refactor หรือปรับโครงสร้างโค้ดใหม่ นักพัฒนาสามารถทำการเปลี่ยนแปลงเพื่อปรับปรุงโค้ดได้โดยไม่ต้องกลัวว่าจะทำลายฟังก์ชันการทำงานที่มีอยู่เดิม ตราบใดที่ผลการทดสอบยังคงผ่าน

 

Continuous Integration (CI) Support :

Unit Test มักจะรวมเข้ากับระบบ CI ทำให้สามารถทดสอบการเปลี่ยนแปลงโค้ดอัตโนมัติโดยเป็นส่วนหนึ่งของ Pipeline การพัฒนาและการปรับใช้

 

Increased Developer Productivity :

ช่วยให้นักพัฒนาสามารถตรวจจับปัญหาได้ตั้งแต่เนิ่นๆ และวนซ้ำโค้ดได้อย่างมั่นใจ กระบวนการทำซ้ำนี้สามารถนำไปสู่ประสิทธิภาพการผลิตที่เพิ่มขึ้นและการพัฒนาที่เร็วขึ้น

 

Improved Collaboration :

Unit Test เป็นพื้นฐานทั่วไปสำหรับนักพัฒนาในการทำความเข้าใจพฤติกรรมที่คาดหวังของโค้ด ความเข้าใจร่วมกันนี้สามารถปรับปรุงการทำงานร่วมกันระหว่างสมาชิกในทีมได้

 

Enhanced Code Maintainability :

Unit Test มีส่วนช่วยในการบำรุงรักษาโค้ดโดยทำให้แน่ใจว่าการเปลี่ยนแปลงและการอัปเดตจะไม่ทำให้เกิดพฤติกรรมที่ไม่คาดคิด สิ่งนี้มีประโยชน์อย่างยิ่งในโค้ดเบสขนาดใหญ่และซับซ้อน

 

Supports Test-Driven Development (TDD) :

Unit Test เป็นแนวทางปฏิบัติพื้นฐานในการพัฒนา TDD โดยที่ Unit Test จะถูกเขียนก่อนโค้ดจริง TDD ช่วยในการออกแบบซอฟต์แวร์โดยเน้นที่ข้อกำหนด

 

สรุป

การเขียน Unit Test เป็นสิ่งที่ขาดไม่ได้สำหรับชาว Dev เพราะจะช่วยให้เราทำงานได้ราบรื่นขึ้น เจอบัคน้อยลง รวมถึงคุณภาพการเขียนโค้ดของเรายังดีขึ้นตามไปด้วย และการเขียน Unit Test ก็ไม่ใช่เรื่องยากอีกต่อไป ถ้าเราเข้าใจว่าโค้ดส่วนไหนที่ควรจะเขียนเทสหรือส่วนไหนที่สามารถเก็บไว้ทำ Integration Test ได้ หรือโค้ดส่วนไหนที่ต้องทำการ Refactor ก่อนถึงจะเขียนเทสได้ง่ายขึ้น  

 

หากต้องการทราบ Software Testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม ตามไปอ่านได้ที่ Blog - Software testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม (sennalabs.com) หวังว่าบทความนี้จะเป็นประโยชน์กับผู้อ่านทุกท่านไม่มากก็น้อยค่ะ 




แหล่งที่มา

The Practical Test Pyramid

Unit Test ที่ดีควรจะเป็นยังไง?

Software testing มีกี่ประเภท และวิธีการเลือกใช้ให้เหมาะสม

Black box testing and white box testing

Written by
Nan
Nan

Subscribe to follow product news, latest in technology, solutions, and updates

- More than 120,000 people/day visit to read our blogs

Other articles for you

05
May, 2024
JS class syntax
5 May, 2024
JS class syntax
เชื่อว่าหลายๆคนที่เขียน javascript กันมา คงต้องเคยสงสัยกันบ้าง ว่า class ที่อยู่ใน js เนี่ย มันคืออะไร แล้วมันมีหน้าที่ต่างกับการประกาศ function อย่างไร? เรามารู้จักกับ class ให้มากขึ้นกันดีกว่า class เปรียบเสมือนกับ blueprint หรือแบบพิมพ์เขียว ที่สามารถนำไปสร้างเป็นสิ่งของ( object ) ตาม blueprint หรือแบบพิมพ์เขียว( class ) นั้นๆได้ โดยภายใน class

By

4 mins read
Thai
05
May, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
5 May, 2024
15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G
ผู้ให้บริการเครือข่ายในสหรัฐฯ ได้เปิดตัว 5G ในหลายรูปแบบ และเช่นเดียวกับผู้ให้บริการเครือข่ายในยุโรปหลายราย แต่… 5G มันคืออะไร และทำไมเราต้องให้ความสนใจ บทความนี้ได้รวบรวม 15 สิ่งที่ทุกธุรกิจต้องรู้เกี่ยวกับ 5G เพราะเราปฏิเสธไม่ได้เลยว่ามันกำลังจะถูกใช้งานอย่างกว้างขวางขึ้น 1. 5G หรือ Fifth-Generation คือยุคใหม่ของเทคโนโลยีเครือข่ายไร้สายที่จะมาแทนที่ระบบ 4G ที่เราใช้อยู่ในปัจจุบัน ซึ่งมันไม่ได้ถูกจำกัดแค่มือถือเท่านั้น แต่รวมถึงอุปกรณ์ทุกชนิดที่เชื่อมต่ออินเตอร์เน็ตได้ 2. 5G คือการพัฒนา 3 ส่วนที่สำคัญที่จะนำมาสู่การเชื่อมต่ออุปกรณ์ไร้สายต่างๆ ขยายช่องสัญญาณขนาดใหญ่ขึ้นเพื่อเพิ่มความเร็วในการเชื่อมต่อ การตอบสนองที่รวดเร็วขึ้นในระยะเวลาที่น้อยลง ความสามารถในการเชื่อมต่ออุปกรณ์มากกว่า 1 ในเวลาเดียวกัน 3. สัญญาณ 5G นั้นแตกต่างจากระบบ

By

4 mins read
Thai
05
May, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
5 May, 2024
จัดการ Array ด้วย Javascript (Clone Deep)
ในปัจจุบันนี้ ปฏิเสธไม่ได้เลยว่าภาษาที่ถูกใช้ในการเขียนเว็บต่าง ๆ นั้น คงหนีไม่พ้นภาษา Javascript ซึ่งเป็นภาษาที่ถูกนำไปพัฒนาเป็น framework หรือ library ต่าง ๆ มากมาย ผู้พัฒนาหลายคนก็มีรูปแบบการเขียนภาษา Javascript ที่แตกต่างกัน เราเลยมีแนวทางการเขียนที่หลากหลาย มาแบ่งปันเพื่อน ๆ เกี่ยวกับการจัดการ Array ด้วยภาษา Javascript กัน เรามาดูตัวอย่างกันเลยดีกว่า โดยปกติแล้วการ copy ค่าจาก value type ธรรมดา สามารถเขียนได้ดังนี้

By

4 mins read
Thai

Let’s build digital products that are
simply awesome !

We will get back to you within 24 hours!Go to contact us
Please tell us your ideas.
- Senna Labsmake it happy
Contact ball
Contact us bg 2
Contact us bg 4
Contact us bg 1
Ball leftBall rightBall leftBall right
Sennalabs gray logo28/11 Soi Ruamrudee, Lumphini, Pathumwan, Bangkok 10330+66 62 389 4599hello@sennalabs.com© 2022 Senna Labs Co., Ltd.All rights reserved.