ยินดีต้อนรับกลับ.
ลองทำแบบฝึกหัดสนุกๆ กันโดยทบทวนโค้ดที่เราเคยเขียนไว้ก่อนหน้านี้
จำเกมเดาตัวเลขสุ่มที่เราต้องเดาตัวเลขระหว่างหนึ่งถึงสิบหรือไม่?
ถ้าฉันเรียกใช้ไฟล์นี้ คุณเห็นไหม
มันขอให้ฉันเดา
สมมุติว่า หนึ่ง สอง สาม สี่ ห้า หก เจ็ด แปด เก้า
และในที่สุดฉันก็ได้หมายเลข
คุณคืออัจฉริยะ.
ตัวเลขคือเก้า
แล้วเราจะทดสอบโค้ดนี้ได้อย่างไร?
ทีนี้ สิ่งหนึ่งที่คุณจะสังเกตเห็นคือ เราไม่มีฟังก์ชันจริงๆ
และจำไว้เมื่อฉันบอกคุณเกี่ยวกับการเขียนโปรแกรมเชิงฟังก์ชันและการแยกแยะโค้ดของเราออกเป็นฟังก์ชันเล็กๆ
น้อยๆ ที่ทำสิ่งหนึ่งและสิ่งหนึ่งที่ดีจริงๆ โดยเฉพาะฟังก์ชันบริสุทธิ์
ข้อดีอย่างหนึ่งที่สำคัญของแนวคิดก็คือคุณสร้างโค้ดที่ทดสอบได้ง่ายจริงๆ
แทนที่จะใช้ตรรกะที่ซับซ้อนจริงๆ ในการทดสอบ เราสามารถให้ฟังก์ชันของเราได้รับอินพุตและคาดหวังผลลัพธ์ได้
และนี่คือเหตุผลที่เรามีการทดสอบหน่วย
และแนวคิดของการทดสอบหน่วยก็คือ เรากำลังทดสอบหน่วยแต่ละหน่วย
การทดสอบหน่วยเหล่านี้เป็นชิ้นส่วนเล็กๆ ที่ทดสอบฟังก์ชันง่ายๆ เหล่านี้
ดังนั้นความท้าทายของฉันสำหรับคุณคือการใช้โค้ดนี้และพยายามแยกออกเป็นฟังก์ชันง่ายๆ
ตอนนี้.
ในกรณีของเรา ฉันต้องการให้เราทดสอบโค้ดส่วนนี้ ซึ่งเป็นส่วนที่คาดเดา ซึ่งเราได้รับอินพุต
ซึ่งจะเป็นการเดาแล้วทดสอบกับคำตอบสุ่มที่เรามีและเราควรคาดหวังผลลัพธ์บางอย่าง
ดังนั้นเราจึงป้อนตัวเลข
ต้องเป็น 1 ถึง 10
และถ้าเราทำให้ถูกต้อง เราต้องได้เชือกมา
แต่สิ่งสำคัญในที่นี้คือ เราอาจต้องการย้ายสิ่งนี้ไปเป็นฟังก์ชันที่เราสามารถทดสอบได้
เราสามารถละเลยโลกภายนอกได้
และแบ่งสิ่งนี้ออกเป็นหน้าที่เล็กๆ น้อยๆ ของมันเอง
ดังนั้นให้หยุดวิดีโอที่นี่และลองดู
คุณจะต้องผ่านสิ่งกีดขวางบางอย่าง แต่มันจะเป็นการทดสอบความเข้าใจในการทดสอบของคุณจริงๆ
ฮ่า.
ตลก.
นั่นเป็นการเล่นสำนวน
หยุดวิดีโอชั่วคราว แล้วลองดู
มิฉะนั้นฉันจะไปหาคำตอบ
สิ่งแรกที่ฉันต้องการทำคือตั้งค่าการทดสอบอีกครั้ง
ฉันจะนำเข้าการทดสอบหน่วยและจะสร้างการทดสอบคลาสหลัก
หรือเรียกมันว่าสคริปต์ทดสอบในครั้งนี้หรือเกมทดสอบ
ฉันจะบอกว่าการทดสอบหน่วย
กรณีทดสอบ
นี่จะเป็นกรณีทดสอบของเรา
แล้วที่นี่ฉันจะสร้าง สมมุติว่า แค่การทดสอบง่ายๆ สมมุติว่า
อินพุตเกมหรือการทดสอบ
รับของเอง.
และสำหรับตอนนี้ ฉันจะผ่านสิ่งนี้ไปเพราะเราไม่ได้ทำอะไรเลยจริงๆ
สุดท้ายนี้ ผมจะบอกว่าถ้า
ชื่อเพราะสองหลักแล้วรันการทดสอบหน่วย
จุดหลัก.
นี่เป็นเพียงการตั้งค่าง่ายๆ ของเรา
ถ้าเราเรียกใช้ตอนนี้ สมมติว่า Python สาม
ทดสอบปี่
เราเห็นว่าเราทำการทดสอบหนึ่งครั้ง
ไม่เป็นไร.
นี่คือการตั้งค่าของเรา
ต่อไป สิ่งที่ฉันต้องการทำคือนำสิ่งนี้ออกจริง ๆ เพื่อที่ฉันจะได้ใช้มันในไฟล์ทดสอบของฉันโดยแยกมันออกมาเป็นฟังก์ชัน
ผมจะพูดที่ด้านบนนี้เท่านั้น
ฉันจะนิยามการเดาของเรา
เกมหรือเรียกมันว่ารัน
เดา.
ที่จะรับข้อมูลเข้า
หรือสมมุติว่ามันจะรันโค้ดนี้
มาทำกัน
ฉันจะพาไป
โค้ดชิ้นนี้
แบบนี้.
และเพียงแค่วางลงในนี้
ตอนนี้การเดาที่ผิดจะต้องใช้ตัวแปรคำตอบด้วย
ผมจะให้คำตอบพารามิเตอร์ตัวที่สองแก่มัน
แบบนี้.
เพื่อที่ตอนนี้ฉันสามารถเข้าไปข้างในได้
เรียกใช้ฟังก์ชันนี้ด้วยการเดาและคำตอบ
เป็นแบบนั้น.
ให้บันทึกที่นี่และเรียกใช้การทดสอบนี้ หรือให้เรียกใช้ไฟล์จริงเพื่อให้แน่ใจว่ายังทำงานอยู่
โอ้และเราได้รับการเยื้องที่นั่น
ดังนั้นเราต้องตรวจสอบให้แน่ใจว่าการเยื้องของเราถูกต้อง
เพราะจำใน Python นั่นหมายถึงบางอย่าง
ไม่เป็นไร.
ตอนนี้เรามีปัญหา
เรามีตัวแบ่งนอกวงเพราะในขณะที่เรากำลังใช้คำสำคัญตัวแบ่งและตอนนี้เราอยู่นอกวง
สิ่งหนึ่งที่เราทำได้คือเราสามารถพูดได้ว่ากลับมาที่นี่
ลองเรียกใช้อีกครั้ง
และเดาชื่อต่อไป
หรือตัวเลข
และที่นั่นคุณไป
นี้ยังคงทำงาน
ฉันสามารถใช้ return ได้ที่นี่เพราะว่าบ่อน้ำนี้กำลังจะวิ่งกลับ
แต่ตอนนี้เรายังอยู่ในเกม
ดังนั้นบางทีเราอาจจะกลับมาก็ได้
จริง.
และบอกว่าถ้า
วิ่งเดา
มันเป็นความจริง.
เรากำลังจะแตกออกจากสิ่งนี้
อีกครั้ง.
มาเริ่มเกมของเรากันเถอะ
ฉันจะเคลียร์สิ่งนี้และเปิดเกมอีกครั้ง
หนึ่งสองสามสี่.
และที่นั่นคุณไป
ฉันได้ป้อนหมายเลข
ฉันเป็นอัจฉริยะ
เราเพิ่งจบเกม
ลองทำให้เล็กกว่านี้หน่อยเพื่อให้คุณเห็น
ดังนั้นเราจึงมีการวิ่งของเรา
เดาว่าฉันได้แก้ไขรหัสเล็กน้อย
แต่สิ่งสำคัญคือฉันได้แยกหน่วยการทำงานออกมาเพื่อที่ฉันจะได้ทดสอบบางอย่างเช่น
Run
เดา.
ดูเหมือนว่าฉันได้แก้ไขโค้ดของเราแล้ว แต่โค้ดยังทำงานอยู่
ตอนนี้ มาเริ่มทดสอบฟังก์ชันเดารันของเรากัน
ไปที่นี่กันเถอะ
และเริ่มนำเข้าสคริปต์ของเรา
และในนี้ทำบางสิ่ง
อันดับแรก ฉันต้องการคำตอบ สมมุติว่า เท่ากับห้า
และการเดาจะเท่ากับห้า
ดังนั้นเราจึงต้องการให้แน่ใจว่าหากการเดาและคำตอบตรงกัน แขกที่ไม่ถูกต้องจะต้องอ่านคำสั่ง
if และพิมพ์ออกมาว่าคุณเป็นอัจฉริยะหรือไม่ใช่กรณีและปัญหากลับมาเป็นจริง
สมมุติว่า self dot ยืนยัน
เท่ากัน.
สคริปต์นั้นหรือครั้งแรกจริง ๆ เรามารันมันกันเถอะ
ให้ได้ผลเท่ากับสคริปต์ดอท
มันคืออะไร?
วิ่งเดา
วิ่ง.
เดา.
และให้คำตอบมัน
และคาดเดา
และเราคาดหวังผลที่จะ
กลับ.
จริง.
เราจึงพูดได้เพียงว่า
ผลที่ได้คือความจริง
ถ้าตอนนี้ฉันเรียกใช้สิ่งนี้
โอ้เราเริ่มเกมจริงๆ
แล้วเราจะแก้ไขได้อย่างไร?
เราสามารถปิดสิ่งนี้และเพิ่มชื่อ if ได้จริง
ในนี้.
ลงตรงนี้เลย
เราจะบอกว่า เฮ้ เรียกใช้สิ่งนี้ก็ต่อเมื่อไฟล์นี้เป็นไฟล์หลักที่รันในลักษณะนั้น
ถ้าฉันกลับไปทดสอบที่นี่และเรียกใช้อีกครั้ง
ไม่เป็นไร.
ตอนนี้ใช้งานได้ แต่ฉันได้รับวัตถุทดสอบข้อผิดพลาดในการยืนยันไม่มีแอตทริบิวต์ยืนยันจริงเพราะ
ก็ฉัน.
สะกดผิดว่า
ลองอีกครั้ง
ไม่เป็นไร.
ดูเหมือนว่าการทดสอบครั้งเดียวและทุกอย่างดี
เรายังเห็นว่ามันพิมพ์ออกมา
คุณคืออัจฉริยะ.
ดีมาก ดีมาก
ฉันกำลังแสดงให้คุณเห็นวิธีการทดสอบนี้ เพราะนี่คือสถานการณ์ในชีวิตจริง
คุณทำลายสิ่งต่าง ๆ คุณทำผิดพลาดอยู่เสมอ จากนั้นคุณพยายามแก้ไขและแก้ไขรหัสของคุณ
และคุณจะเห็นว่าโค้ดของเราดูดีขึ้นเรื่อยๆ เพียงแค่รันการทดสอบเหล่านี้
ตกลง.
เราทำอะไรได้อีกบ้าง?
เอาเป็นว่าที่นี่
ที่เราจะคัดลอกสิ่งนี้
และเพื่อให้สิ่งต่าง ๆ สั้นลง ผมจะใส่พารามิเตอร์ตรงนี้โดยตรง
เป็นแบบนั้น.
สมมติว่าอินพุต สมมติว่าไม่ถูกต้อง
หรือ.
เดาผิด.
สมมุติว่าคำตอบคือห้า และฉันเดาว่าศูนย์
เราเลยอยากยืนยันว่านี่จะเท่ากับเท็จ
ดังนั้นถ้าฉันเรียกใช้สิ่งนี้
เพื่อทดสอบการผ่านของพวกเขา
ที่น่ากลัว.
เราสามารถทดสอบอะไรได้อีกที่นี่
ไม่เป็นไร.
เราต้องการทดสอบว่าถ้าการเดาไม่ได้อยู่ระหว่างศูนย์ถึงสิบหรือระหว่างหนึ่งถึงสิบ
ในกรณีนั้นเราต้องการพิมพ์ของ
เฮ้ โบโซ
ผมบอกว่า 1 ถึง 10
ฉันสามารถทดสอบได้อีกครั้ง
ว่าถ้าฉันเดาผิด
ตัวเลข.
สมมุติว่าคำตอบคือห้า แต่ฉันให้ 11
เราต้องการที่จะยืนยัน
ตอนนี้เรากำลังพิมพ์และไม่ได้ทำอะไรเลย
บางทีเราควรคืนค่าเท็จเพื่อให้มีความสอดคล้องกันที่นี่
อีกครั้งถ้าฉันทำอย่างนั้นแล้ววิ่ง
ไปเลย
สามการทดสอบกำลังผ่าน
ที่ที่ดี
และยังมีการทดสอบอีกมากมายที่เราเขียนได้
มาทำแบบทดสอบกันอีกอันหนึ่งซึ่งก็คือการทดสอบ
เกิดอะไรขึ้นถ้าอินพุตเป็นสตริง?
ถ้าฉันเรียกใช้สิ่งนี้
โอ้.
และทำให้แน่ใจว่าผิด
พิมพ์ที่นี่.
ตรวจสอบให้แน่ใจว่าชื่อต่างกัน
และฉันมีการทดสอบสี่แบบที่ทำงานอยู่
เพราะนี่จะไม่ผ่านและมันจะคืนค่าเท็จ
ตอนนี้ยังมีอีกหลายสิ่งที่เราสามารถทำได้ที่นี่
แต่คุณสามารถเห็นพลังของการทดสอบได้ในขณะนี้
หากคุณมีการทดสอบที่แตกต่างจากฉัน ก็ไม่เป็นไร ทุกคน
กรณีทดสอบแตกต่างกัน
จุดรวมของการทดสอบคือเพียงแค่
ดูโค้ดของเราแล้วดูว่าเราจะปรับปรุงได้อย่างไร เราจะทำลายโค้ดของเราได้อย่างไร เราจะลดความซับซ้อนของโค้ดได้อย่างไรโดยแบ่งเป็นหน่วยย่อย
หน่วยเล็กกว่าที่สามารถทดสอบได้ และแก้ไขข้อผิดพลาดบางอย่างที่เราอาจต้องคิด .
ในตอนนี้ ยังมีอีกหลายสิ่งที่เราสามารถทำได้ แต่คุณจะสังเกตเห็นว่าแนวคิดในการทำงานชิ้นเล็กๆ ในแต่ละครั้งเป็นอย่างไร
ลองทดสอบดู จากนั้นเราอาจดูส่วนนี้ของโค้ดหรือลองและยอมรับบางส่วนของโค้ดก็ได้
และนี่คือสิ่งที่
เมื่อคุณทำงานให้กับบริษัท ฉันขอยืนยันว่ามีการทดสอบมากมายที่คุณสามารถทำได้
คุณสามารถมีหลายร้อยบรรทัดที่นี่เพื่อทดสอบโค้ดของคุณเป็นบิต
แต่เพียงเพราะว่าคุณกำลังทดสอบหลายครั้ง ไม่ได้ช่วยให้การทดสอบของคุณดี
อย่างที่ฉันพูดไป มีการทดสอบมากมายที่คุณสามารถเขียนได้
แนวคิดคือการเขียนเพื่อทดสอบคุณภาพที่ดีซึ่งครอบคลุมกรณีส่วนใหญ่ของคุณ
แต่ในที่สุด คุณจะมีผลตอบแทนลดลง ซึ่งคุณต้องแลกมาระหว่างการเขียนโค้ดกับการเขียนแบบทดสอบ
และบางครั้ง คุณอาจต้องให้ความสำคัญกับการทดสอบมากขึ้นและเน้นโค้ดน้อยลง ทั้งนี้ขึ้นอยู่กับว่างานต้องการอะไร
หรือบางครั้งคุณอาจต้องก้าวให้เร็วและไม่มีเวลาเขียนแบบทดสอบ
และอีกครั้ง ขึ้นอยู่กับความต้องการทางธุรกิจ นั่นอาจเป็นกรณีเช่นกัน
แต่ในส่วนนี้ ฉันหวังว่าคุณจะเข้าใจหลักการบางอย่างหลังจากการทดสอบในการพัฒนาซอฟต์แวร์
นั่นคือข้อบกพร่องมักจะเกิดขึ้นในโค้ดของเรา
และเราสามารถใช้แสงช่วยเราในเรื่องนี้ได้
แต่วิธีที่ดีที่สุดวิธีหนึ่งเพื่อให้แน่ใจว่าโค้ดของเราทำงานอย่างถูกต้องคือการทดสอบ
และยิ่งการทดสอบมากเท่าไรก็ยิ่งทำให้โค้ดของเรามีเสถียรภาพมากขึ้นเท่านั้น
เจอกันใหม่ตอนหน้าค่ะ
ลาก่อน.