วันที่ที่ควรทดสอบ
ซอฟต์แวร์ไม่พังในวันอังคารธรรมดา มันพังในวันสุดท้ายของไตรมาส ในวันที่ 29 กุมภาพันธ์ ในวินาทีที่ปีเปลี่ยน และหนึ่งวินาทีหลังไลเซนส์หมดอายุ วันที่เหล่านี้คือวันที่ค้นพบบั๊กพวกนั้น - 14 วันมาพร้อมเป็นสถานการณ์ที่ตั้งชื่อไว้
ขอบเขตของช่วงเวลา
อะไรก็ตามที่ปิดงวด ใส่เลขเอกสารตามปี หรือสะสมถึงวันตัดยอด จะผิดพลาดกับวันเหล่านี้เป็นอันดับแรก
- วันสุดท้ายของเดือน - การปิดบัญชีสิ้นเดือนและการสะสมงวดทำงานถูกต้องในวันสุดท้ายของเดือนหรือไม่?
- วันสุดท้ายของไตรมาส - การปิดบัญชีและการรายงานสิ้นไตรมาสทำงานถูกต้องในวันสุดท้ายของไตรมาสหรือไม่?
- วันสุดท้ายของปีงบประมาณ - แอปปิดปีงบประมาณในวันที่ถูกต้องหรือไม่ คือวันก่อนที่ปีงบประมาณใหม่เริ่ม?
- ปีเปลี่ยนแบบสด ๆ - การใส่เลขเอกสาร ปีในชื่อ และการรายงานประจำปีรับมือกับการเปลี่ยนปีขณะที่มันเกิดขึ้นได้หรือไม่ แทนที่จะต้องรีสตาร์ตหลังจากนั้น?
ข้อสุดท้ายเป็นข้อที่คนมักทดสอบไม่ได้เลย เพราะต้องให้นาฬิกาข้ามเที่ยงคืนของวันที่ 31 ธันวาคมขณะที่แอปกำลังรันอยู่ ซึ่งเป็นงานสิบวินาทีเมื่อใช้นาฬิกาที่เร่งความเร็ว
ขอบของปฏิทินและการแทนค่า
- 29 กุมภาพันธ์ - วันอธิกวารที่มีทุกสี่ปีเท่านั้น และโค้ดตรวจสอบจำนวนมากอย่างน่าประหลาดใจปฏิเสธมันตั้งแต่ต้น
- ศูนย์ของเอพอก Unix - แอปถือว่า 1 มกราคม 1970 เป็นวันที่จริง หรือเป็นค่าว่างที่ควรปฏิเสธไม่ให้เก็บ?
- ขอบปี 2038 - ช่วงเวลาที่
time_tแบบมีเครื่องหมาย 32 บิตหมดลง ที่2038-01-19T03:14:07Zอีกหนึ่งวินาทีต่อมาตัวนับจะล้นไปเป็นปี 1901
ไลเซนส์ ช่วงทดลองใช้ และการติดตั้ง
สิ่งเหล่านี้ไว้ทดสอบระบบไลเซนส์ของคุณเอง ซึ่งเป็นกรณีที่มันถูกเขียนขึ้นมาเพื่อ
- วันสุดท้ายของช่วงทดลองใช้ - แอปยังทำงานได้ในวินาทีสุดท้ายของช่วงทดลองใช้หรือไม่?
- วันแรกหลังช่วงทดลองใช้สิ้นสุด - แอปปฏิเสธการเข้าถึงทันทีที่ช่วงทดลองจบหรือไม่ และทำอย่างไร? ด้วยข้อความที่สมเหตุสมผล หรือด้วยสแตกเทรซ?
- ไลเซนส์หมดอายุไปเมื่อหนึ่งปีก่อน - แอปรับมือกับไลเซนส์ที่หมดอายุไปนานแล้วได้หรือไม่ ไม่ใช่แค่เมื่อวาน?
- วันที่ก่อนการติดตั้ง - แอปทำงานถูกต้องหรือไม่เมื่อนาฬิกาถูกตั้งไว้ก่อนวันที่ติดตั้งของมันเอง? ข้อนี้อ่านวันที่ของไฟล์โปรแกรมเป้าหมายเอง จึงไม่ต้องใช้พารามิเตอร์
กฎทางธุรกิจและพฤติกรรมของนาฬิกา
- ครบกำหนดชำระ +N วันทำการ - การชำระที่ครบกำหนดในอีก N วันทำการตกในวันที่ถูกต้องหรือไม่ โดยข้ามสุดสัปดาห์และวันหยุดของประเทศที่ถูกต้อง? เป็นสถานการณ์เดียวที่ต้องใช้ปฏิทิน และคำตอบต่างกันไปตามตลาด
- ขอบของอายุบรรลุนิติภาวะ - แอปรับคนที่อยู่ที่ขอบพอดี และปฏิเสธคนที่ขาดไปหนึ่งวันหรือไม่?
- นาฬิกาคลาดเคลื่อน +90 s - แอปรับมือได้หรือไม่เมื่อนาฬิกาของมันเดินเร็วกว่าเวลาจริงเก้าสิบวินาที? นี่คือกรณีที่ทำให้รหัสผ่านใช้ครั้งเดียวที่อิงเวลาและการตรวจสอบโทเค็นพัง
วิธีใช้
สถานการณ์คือนิพจน์วันที่ที่ตั้งชื่อไว้ เครื่องคิดเลขคำนวณว่ามันหมายถึงอะไร และการแทนที่เวลารันแอปที่วันนั้น - ใช้ชื่อเดียวกันทั้งสองที่
# วันนี้คือวันที่เท่าไร และวันนั้นทดสอบอะไร? chrono calc --preset month-end # รันแอปที่วันนั้น chrono run "C:\apps\test.exe" --preset year-rollover --report session.txt # สถานการณ์ช่วงทดลองใช้ดึงวันเริ่มจากวันที่ของไฟล์โปรแกรมเป้าหมายเอง chrono run "C:\apps\test.exe" --preset trial-first-day-after
ในหน้าต่างโปรแกรมมันเป็นชิปอยู่เหนือช่องวันที่ - คลิกครั้งเดียวก็กรอกให้ แต่ละอันมีประโยคของตัวเองบอกว่ามันจับอะไร ซึ่งเป็นส่วนที่เครื่องคิดเลขวันที่ออนไลน์ไม่มีทางให้คุณได้
สิ่งที่ไม่มีอยู่ที่นี่
การเปลี่ยนผ่านของเวลาออมแสง การบังคับให้แอปผ่านขอบของการเลื่อนนาฬิกาไปข้างหน้าหรือถอยหลังตามฤดูกาลเป็นการทดสอบที่มีประโยชน์จริง และมันไม่มีอยู่โดยตั้งใจ เพราะเขตเวลาของเซสชันเป็นออฟเซ็ตคงที่ที่ไม่มีเวลาออมแสง - ยังไม่มีการเปลี่ยนผ่านให้จำลอง การให้สถานการณ์ที่เงียบ ๆ ไม่ทำอะไรเลยจะแย่กว่าการไม่ให้
มันจะกลับมาพร้อมแบบจำลองของกฎเขตเวลา เขตเวลาทำอะไรได้และทำอะไรไม่ได้ →