การทดสอบซอฟต์แวร์

บทช่วยสอนการทดสอบหน่วยสำหรับผู้เริ่มต้น

30 ตุลาคม 2564

การทดสอบหน่วยเป็นวิธีการทดสอบที่ทำกับโมดูลที่เล็กที่สุดเท่าที่จะเป็นไปได้ของโปรแกรมเพื่อให้แน่ใจว่าเหมาะสมกับการใช้งาน หน่วยในรูปแบบของส่วนของรหัสได้รับการทดสอบเพื่อดูว่าสามารถใช้ร่วมกับส่วนอื่น ๆ ของรหัสได้หรือไม่ (เช่น ฟังก์ชัน เมธอด และตัวแปร)

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

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

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

หากการทดสอบหน่วยล้มเหลว จะถือเป็นข้อผิดพลาดหรือโค้ดที่แก้ไขในการทดสอบเอง

การทดสอบหน่วย

สารบัญ

ระดับการทดสอบ :

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

เหตุใดการทดสอบหน่วยจึงมีความสำคัญ

วิธีการทดสอบที่รวดเร็วและมีประสิทธิภาพยิ่งขึ้น:

การทดสอบหน่วยเป็นกระบวนการในการเขียนโค้ด ทดสอบ แล้วทำการทดสอบอื่นๆ โดยอัตโนมัติ เป็นวิธีที่เร็วกว่าในการทดสอบลอจิกของโปรแกรม เนื่องจากการทดสอบหน่วยจะใช้เวลาน้อยกว่าการทดสอบด้วยตนเองหรือการทดสอบแบบบูรณาการที่ดำเนินการโดยทีม QA

ควบคุมคุณภาพ:

ชุดการทดสอบมาตรฐานช่วยให้มั่นใจว่าการเปลี่ยนแปลงในอนาคตจะไม่ทำให้คุณภาพลดลง การทดสอบหนึ่งหน่วยขึ้นไประบุถึงพฤติกรรมที่คาดหวังของรหัสหน่วยและการนำไปใช้ เพื่อสร้างวินัยในการพัฒนาการทดสอบหน่วย - โปรแกรมเมอร์ควรแนะนำชุดการทดสอบสำหรับหน่วยต่างๆ

ทำให้รหัสสามารถจัดการได้และสะดวกสบายมากขึ้นในการแก้ไข:

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

เป็นธรรมชาติมากขึ้นในการระบุปัญหา:

จุดประสงค์ที่สำคัญอีกประการของการทดสอบหน่วยคือการให้ข้อมูลเชิงลึกเกี่ยวกับผลกระทบของการเปลี่ยนแปลงในกระบวนการพัฒนา เช่น การเปลี่ยนแปลงในอินเทอร์เฟซผู้ใช้หรือการใช้งานคุณลักษณะใหม่ ตามความล้มเหลวของกรณีทดสอบ Unit Test Framework ยังช่วยหยุดการทดสอบที่เกี่ยวข้องอีกด้วย

ข้อดีของการทดสอบหน่วย :

  • แม้แต่นักพัฒนาที่มีประสบการณ์มากที่สุดก็ยังเห็นด้วยว่าควรฝึกการทดสอบหน่วย การทดสอบหน่วยช่วยให้โปรแกรมเมอร์คำนวณรหัสอีกครั้งในภายหลังและทำให้โมดูลทำงานได้
  • ข้อดีที่สำคัญที่สุดอย่างหนึ่งของการทดสอบหน่วยคือนักพัฒนาสามารถใช้เครื่องมือทดสอบและเฟรมเวิร์กได้
  • การทดสอบหน่วยทำให้การรีเฟรชโค้ดปลอดภัยและสะดวกสบายมากขึ้น เนื่องจากมีการแนะนำการทดสอบที่ทำให้มั่นใจได้ว่าการปรับโครงสร้างใหม่จะทำงานได้อย่างราบรื่นหรือไม่มีการหยุดชะงัก
  • การทดสอบหน่วยยังนำไปสู่ซอฟต์แวร์ที่ง่ายต่อการบำรุงรักษาตลอดวงจรชีวิตของซอฟต์แวร์ และมีแนวโน้มที่จะเกิดข้อผิดพลาดน้อยลงเมื่อมีการเพิ่มคุณสมบัติใหม่หรือการอัปเดต
  • การทดสอบหน่วยให้คำอธิบายที่ชัดเจนและรัดกุมเกี่ยวกับการออกแบบและข้อกำหนดของผลิตภัณฑ์หรือบริการในรูปแบบของการดำเนินการ ด้วยการใช้การทดสอบหน่วยสำหรับข้อกำหนดการออกแบบ เราจึงมีความเข้าใจถึงสิ่งที่ต้องตรวจสอบการนำไปใช้งานและสิ่งที่จะใช้ในการทดสอบได้ดีขึ้น
  • การทดสอบหน่วยใช้เวลาไม่สมส่วนเมื่อเทียบกับโค้ดที่ทดสอบ ตัวอย่างเช่น หากค่าใช้จ่ายในการเขียนการทดสอบหน่วยเท่ากับ 2 นาที แต่ค่าใช้จ่ายในการดำเนินการแทบจะเป็นศูนย์ หรือราคาของการทดสอบโค้ดด้วยตนเองคือ 1 นาที ให้ทำลายจุดคุ้มทุนหากนักพัฒนาทำการทดสอบ สองครั้ง. การใช้การทดสอบหน่วยแทนการตรวจสอบฐานรหัสทั้งหมดด้วยตนเองหมายความว่านักพัฒนาจะลดต้นทุนโดยรวมของโครงการ
  • โค้ดที่เขียนไม่ดีอาจเป็นไปไม่ได้หรือยากต่อการทดสอบหน่วย ดังนั้นการทดสอบหน่วยจึงสามารถบังคับให้นักพัฒนาจัดโครงสร้างฟังก์ชันและอ็อบเจ็กต์ได้ดีขึ้น การทดสอบหน่วยทำให้โค้ดสมบูรณ์แบบที่สุดเท่าที่จะทำได้ นักพัฒนาซอฟต์แวร์เขียนการทดสอบหน่วยก่อน สังเกตว่าล้มเหลว จากนั้นจึงเขียนการทดสอบครั้งที่สองเพื่อให้ผ่าน และวงจรจะทำซ้ำจนกว่าจะมีการส่งมอบฟังก์ชันการทำงานที่ต้องการ

ข้อเสียของการทดสอบหน่วย :

  • ข้อเสียเปรียบหลักของการทดสอบหน่วยคือไม่สามารถตรวจสอบเส้นทางการดำเนินการทั้งหมดได้ และไม่สามารถดูดซับข้อผิดพลาดที่สำคัญของระบบหรือข้อผิดพลาดในการผสานรวมได้
  • การเขียนแบบทดสอบหน่วยอาจเป็นเรื่องยาก และกระบวนการนี้อาจใช้เวลานาน
  • ข้อผิดพลาดของมนุษย์ในการทดสอบหน่วยอาจส่งผลกระทบต่อทั้งระบบ
  • มันไม่ใช่ข้อพิสูจน์ที่สมบูรณ์อย่างที่หลายคนกล่าวไว้ เมื่อโมดูลถูกรวมเข้าด้วยกัน อาจมีจุดบกพร่องใหม่ที่ตรวจไม่พบโดยการทดสอบหน่วย

เทคนิคการทดสอบหน่วย :

    เทคนิคกล่องดำ: กล่องดำ เทคนิคเป็นวิธีการทดสอบหน่วยที่ มทส. (ซอฟต์แวร์ที่กำลังทดสอบ) เป็นฟังก์ชันของแอปพลิเคชันโดยไม่ต้องมองเข้าไปในการใช้งาน โครงสร้างภายใน หรือโค้ด เทคนิคกล่องดำเน้นที่อินพุตและเอาต์พุตมากกว่าโค้ดภายในหรือความรู้เทคนิคกล่องขาว:ใน กล่องขาว เทคนิค ผู้ทดสอบทราบถึงส่วนภายในของโค้ด โครงสร้างในวิธีนี้ โครงสร้างภายใน และการทำงานของโค้ด ไม่ใช่ฟังก์ชัน โดยเฉพาะอย่างยิ่ง ผู้ทดสอบควรมีทักษะการเขียนโปรแกรมที่ยอดเยี่ยมตามมุมมองภายในของโมดูล และทักษะการเขียนโปรแกรมจะถูกนำไปทดสอบเทคนิคกล่องสีเทา: กล่องสีเทา เทคนิคมีความรู้บางส่วนของรหัส การทดสอบนี้จะปรับปรุงโครงสร้างโค้ดที่ไม่เหมาะสมหรือการใช้งานแอปพลิเคชันที่ไม่เหมาะสม เป็นการผสมผสานระหว่างเทคนิคขาวดำ เป็นวิธีการทดสอบหน่วยที่มีประสิทธิภาพ

เครื่องมือทดสอบหน่วย :

  • Nunit : หนึ่งในตระกูลของตระกูล xunit Nunit คือการทดสอบหน่วยโอเพนซอร์สที่ออกแบบมาสำหรับ . สุทธิ และ Mono framework เป็นเครื่องมือที่ใช้มากที่สุดสำหรับการเขียน unit test case
  • Jmockit : JMockit เป็นไลบรารีซอฟต์แวร์โอเพ่นซอร์สอื่น ประกอบด้วย API สำหรับการเยาะเย้ย การปลอมแปลง และการทดสอบการรวม และเครื่องมือครอบคลุมโค้ด ไลบรารีจะต้องใช้ร่วมกับเฟรมเวิร์กการทดสอบ เช่น JUnit หรือ Nunit
  • จูนิท: เช่นเดียวกับ Nunit มันคือการทดสอบหน่วยโอเพนซอร์ซ แต่ออกแบบมาสำหรับ Java ก็มาจากตระกูล Xunit เช่นกัน ใช้สำหรับนักพัฒนาในการเขียนการทดสอบที่ทำซ้ำได้ มีพื้นฐานที่แข็งแกร่งสำหรับการทดสอบหน่วย
  • พิมพ์จำลอง : TypeMock สามารถจำลองเกือบทุกอย่างผ่านอินเทอร์เฟซ ยิ่งไปกว่านั้น มันเป็นไปได้ที่จะจำลองวิธีการและคลาสแบบคงที่ที่เครื่องมือโอเพนซอร์ซมาตรฐานไม่สามารถจำลองได้ รูปแบบของการจัดเรียง การแสดง การยืนยัน และการทดสอบถูกนำไปใช้ และฉนวนถูกสร้างขึ้นจากรูปแบบเหล่านี้
  • Embunit : Embedded Unit Test Framework Embunit เป็นเฟรมเวิร์กใหม่สำหรับระบบฝังตัว ได้รับการออกแบบให้เป็นกรอบการทดสอบสำหรับแอปพลิเคชันซอฟต์แวร์ที่เขียนด้วยภาษา C /C++ และรองรับภาษาเครือข่ายทั้งหมด เฟรมเวิร์กนี้มีจุดประสงค์เดียวกันกับ JUnit ใน Java แต่มีเป้าหมายที่แตกต่างกัน: เพื่อทำหน้าที่เป็นเฟรมเวิร์กการทดสอบข้ามแพลตฟอร์มแบบโอเพนซอร์ส

เคล็ดลับการทดสอบหน่วย:

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

หัวข้อที่เกี่ยวข้อง

การทดสอบบูรณาการ การทดสอบระบบ การทดสอบการยอมรับ