การทดสอบหน่วยการเขียนที่อยู่ตรงกลาง


14

หน่วยทดสอบเป็น 100% หรือไม่ที่ทุกประเภท?

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

ฉันจำเป็นต้องเขียนการทดสอบหน่วยสำหรับชั้นเรียนก่อนหน้านี้ทั้งหมดและไม่ต้องกังวลเลยหรือไม่เป็นไรที่จะเขียนเฉพาะการทดสอบหน่วยสำหรับสิ่งใหม่ที่ฉันเพิ่ม

คำตอบ:


14

การทดสอบหน่วยใด ๆ จะดีกว่าไม่มี ดังนั้นจึงไม่ใช่ข้อตกลงทั้งหมดหรือไม่มีอะไร

ในกรณีของคุณเนื่องจาก Test Driven Development ไม่ได้เป็นบรรทัดฐาน - คุณจะสงสัยว่าการทดสอบนั้นมีประโยชน์อย่างไร

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

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

เพิ่มลงในเครื่องมือครอบคลุมรหัสเช่นเอ็มม่าและคุณสามารถตรวจสอบการปรับปรุงการครอบคลุมการทดสอบโดยรวมได้อย่างต่อเนื่อง


3

ฉันได้ทำงานกับฐานรหัสที่มีขนาดใหญ่มากซึ่งในขั้นต้นไม่มีการทดสอบหน่วย โดยทำตามแนวทางปฏิบัติสองสามข้อในขณะนี้เรา (หลังจากผ่านไปหลายปี) มีฐานรหัสส่วนใหญ่ที่ครอบคลุมโดยการทดสอบ

รหัสใหม่ทั้งหมดจะต้องมีการทดสอบหน่วย

รหัสที่เปลี่ยนแปลงทั้งหมดจะต้องมีการทดสอบหน่วยเพิ่มเข้าไป

วิธีที่เราเพิ่มการทดสอบอย่างปลอดภัยไปยังโค้ดเก่าโดยไม่ทำลายมันคือการใช้วิธีการพื้นฐานต่อไปนี้:

เลือกรหัสขนาดเล็กที่คุณต้องการเปลี่ยนการทำงานของ

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

    พยายามทำให้น้อยที่สุดเกี่ยวกับการเปลี่ยนแปลงที่จำเป็นเพื่อแบ่งการพึ่งพาที่ป้องกันไม่ให้คุณเพิ่มการทดสอบ

  3. เขียนการทดสอบไปจนถึงเท่าที่เป็นไปได้ครอบคลุมการทำงานของรหัสที่คุณจะเปลี่ยน เช็คอินเป็นประจำและตรวจสอบการเปลี่ยนแปลงทั้งหมด
  4. ทดสอบการเขียนสำหรับการเปลี่ยนแปลงการทำงาน / ฟังก์ชันการทำงานใหม่
  5. ใช้งานฟังก์ชั่น (นี่เป็นวัฏจักร TDD ปกติของคุณ)
  6. ตรวจสอบให้แน่ใจว่าได้ทำการปรับปรุงพื้นที่ที่คุณครอบคลุมโดยการทดสอบ (แดง - เขียว - refactor)

เราพบว่ายิ่งเราทำสิ่งนี้มากเท่าไหร่ก็ยิ่งได้รับมากเท่านั้น ทุกครั้งที่คุณกลับไปที่ฐานของรหัสมันจะดีกว่านิดหน่อย

เราได้เห็นจำนวนแมลงที่ลดลงอย่างมากผ่านเครื่องทดสอบ QA ของเรา ด้วยการลดฟังก์ชันการทำงานที่แทบจะไม่เคยได้ยินดังนั้นฉันคิดว่ามันคุ้มค่ากับความพยายามของเรา


2

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


2

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


+1 "ชิ้นส่วนใหม่เป็นชิ้นส่วนที่มีแนวโน้มที่จะมีข้อบกพร่อง"
MIA

ขึ้นอยู่กับความซับซ้อนของโครงการ "ทำงานได้ดี" มักจะหมายถึง "ไม่ได้ขาดเร็ว ๆ นี้" หรือ "ไม่แตกในแบบที่ทุกคนพูดถึง" ... ไม่แนะนำให้คุณเขียนหน่วยทดสอบสำหรับรหัสที่มีอยู่ แต่ไม่คิด มันทำงานได้อย่างถูกต้องหรือตามที่ตั้งใจไว้
Dave DuPlantis

1

คุณสามารถเริ่มครอบคลุมรหัสปัจจุบันของคุณและถ้าคุณมีเวลาใช้จ่ายเริ่มครอบคลุมการทำงานหลักของรหัสเก่า นอกจากนี้คุณสามารถขอให้ PM ของคุณมีเวลาเพิ่มสำหรับ =)


0

หน่วยทดสอบเป็น 100% หรือไม่ที่ทุกประเภท?

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

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.