คู่มือเริ่มต้นสำหรับการทดสอบ: ข้อผิดพลาดในการจัดการเคส Edge

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

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

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

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

การทดสอบทั้งหกมีดังนี้:

  • ศูนย์
  • หนึ่ง
  • สอง
  • สองถึงสูงสุด -1
  • สูงสุด
  • สูงสุด + 1

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

ศูนย์

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

หนึ่ง

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

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

สอง

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

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

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

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

ในตอนแรกสิ่งนี้มีพฤติกรรมตรงตามที่คาดไว้ อย่างไรก็ตามการทดสอบด้วยแนวคิดของ Two in mind จะเน้นประเด็นที่ลึกกว่าเกี่ยวกับโค้ด คุณจะทดสอบโดยเรียกมันสองครั้งและยืนยันว่าในทั้งสองกรณี mVar เท่ากับ 1

สองถึงสูงสุด -1

Two to max-1 คือการตรวจสอบความสมบูรณ์ คล้ายกับการทดสอบ One มาก แต่มีความแตกต่างเล็กน้อย นี่ควรเป็นกรณีการใช้งานโดยเฉลี่ยไม่ใช่วิธีที่ง่ายที่สุดหรือตรงไปตรงมาที่สุดหรืออ่านง่ายที่สุด เพียงแค่กรณีการใช้งานเฉลี่ยที่อาจจะไม่ง่ายโดยเฉพาะอย่างยิ่ง แต่ที่เป็นธรรมร่วมกัน

สูงสุด

Max ค่อนข้างตรงไปตรงมา: เพียงแค่ทดสอบขีด จำกัด ของแอปพลิเคชันของคุณโดยเฉพาะอย่างยิ่งเกี่ยวกับค่าคงที่สูงสุดที่กำหนดไว้

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

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

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

สูงสุด + 1

Max + 1 คือการทดสอบที่ส่วนใหญ่ใช้เพื่อตรวจสอบมาตรฐานหรือกฎเกณฑ์ที่โปรแกรมเมอร์กำหนดไว้ สิ่งนี้เกี่ยวข้องกับการทดสอบทุกอย่างจนถึงขีด จำกัด ทางทฤษฎี + epsilon

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

หากคุณมีขนาดอัปโหลดไฟล์สูงสุดที่ 2mb ให้ลองอัปโหลดไฟล์ที่มีขนาด 2mb + 1b หากคุณมีข้อ จำกัด เกี่ยวกับจำนวนรายการในแค็ตตาล็อกผู้ใช้ตรวจสอบให้แน่ใจว่าการตรวจสอบเกิดขึ้นทั้งฝั่งไคลเอ็นต์และฝั่งเซิร์ฟเวอร์

สรุป

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

การทดสอบมักถูกมองว่าเป็นกรณีที่มีขอบเขตหรือขอบ แต่สามารถกลับหัวที่น่าเกลียดในสถานที่ที่ไม่ชัดเจนได้