التواريخ الجديرة بالاختبار
لا تتعطل البرمجيات في أيام الثلاثاء العادية. إنما تتعطل في آخر يوم من الربع، وفي 29 فبراير، وفي اللحظة التي تنقلب فيها السنة، وبعد ثانية واحدة من انتهاء الترخيص. هذه هي التواريخ التي تكشف تلك الأعطال - ويأتي 14 منها ضمن سيناريوهات مسمّاة.
حدود الفترات
كل ما يُقفل فترة، أو يرقّم مستندًا بالسنة، أو يستحق حتى موعد قطع، يخطئ في هذه أولًا.
- آخر يوم في الشهر - هل يسلك إقفال نهاية الشهر واستحقاق الفترة سلوكًا صحيحًا في آخر أيام الشهر؟
- آخر يوم في الربع - هل يسلك إقفال نهاية الربع وإعداد التقارير سلوكًا صحيحًا في آخر يوم من الربع؟
- آخر يوم في السنة المالية - هل يُقفل التطبيق السنة المالية في اليوم الصحيح، أي اليوم السابق لبدء السنة المالية؟
- انقلاب السنة، مباشرةً - هل يتعامل ترقيم المستندات والسنة في الاسم والتقارير السنوية مع الانقلاب وهو يحدث، بدل أن يُعاد تشغيلها بعده؟
والأخير هو ما لا يستطيع الناس اختباره عادةً، لأنه يتطلب أن تعبر الساعة منتصف ليل 31 ديسمبر والتطبيق قيد التشغيل. وهذا عمل عشر ثوانٍ مع ساعة مُسرَّعة.
حواف التقويم والتمثيل
- 29 فبراير - اليوم الكبيس الذي يوجد مرة كل أربع سنوات فقط، والذي يرفضه عدد مدهش من شيفرات التحقق رفضًا تامًا.
- الصفر في حقبة Unix - هل يعامل التطبيق 1 يناير 1970 تاريخًا حقيقيًا، أم قيمة فارغة كان ينبغي أن يرفض تخزينها؟
- حدّ 2038 - اللحظة التي ينفد فيها
time_tالمُوقَّع بطول 32 بت، عند2038-01-19T03:14:07Z. وبعد ثانية واحدة يفيض العدّاد إلى عام 1901.
التراخيص والفترات التجريبية والتثبيت
هذه لاختبار ترخيصك أنت، وهي الحالة التي كُتبت من أجلها.
- آخر يوم في التجربة - هل ما يزال التطبيق يعمل في آخر لحظة من الفترة التجريبية؟
- أول يوم بعد انتهاء التجربة - هل يمنع الوصول لحظة انتهاء التجربة، وكيف؟ برسالة معقولة، أم بتتبّع للمكدّس؟
- ترخيص انتهى قبل سنة - هل يتعامل مع ترخيص انتهى منذ زمن بعيد، لا منذ أمس فقط؟
- تاريخ قبل التثبيت - هل يسلك سلوكًا صحيحًا عندما تُضبط الساعة قبل تاريخ تثبيته هو؟ وهذا يقرأ تاريخ ملف الهدف نفسه، فلا يحتاج إلى معامل.
قواعد العمل وسلوك الساعة
- استحقاق دفعة، بعد N من أيام العمل - هل تقع الدفعة المستحقة بعد N من أيام العمل في اليوم الصحيح، متخطيةً عطلات نهاية الأسبوع وعطلات البلد الصحيح؟ وهو السيناريو الوحيد الذي يحتاج إلى تقويم، ويختلف جوابه بين الأسواق.
- حدّ سن الرشد - هل يقبل التطبيق من هو عند الحد بالضبط، ويرفض من ينقصه يوم واحد؟
- انحراف الساعة، بمقدار 90 ثانية - هل يتدبّر التطبيق أمره عندما تسبق ساعته الوقت الحقيقي بتسعين ثانية؟ وهذه الحالة هي التي تكسر كلمات المرور لمرة واحدة المعتمدة على الوقت والتحقق من الرموز.
كيف تستخدم واحدًا منها
السيناريو تعبير تاريخ مسمّى. تحسب الحاسبة معناه، ويشغّل الاستبدال تطبيقًا عنده - بالاسم نفسه في الموضعين.
# أي تاريخ هذا، وماذا يختبر ذلك التاريخ؟ 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
في النافذة تظهر شرائح فوق حقل التاريخ - نقرة واحدة تملؤه. ويحمل كل منها جملته التي تقول ما يكتشفه، وهذا ما لا تستطيع حاسبة تواريخ على الإنترنت أن تمنحك إياه.
ما ليس موجودًا هنا
انتقالات التوقيت الصيفي. إجبار تطبيق على عبور حدّ التقديم الربيعي أو التأخير الخريفي اختبار مفيد حقًا، وهو غائب عمدًا، لأن المنطقة الزمنية للجلسة إزاحة ثابتة بلا توقيت صيفي - فلا انتقال يمكن محاكاته بعد. وإصدار سيناريو لا يفعل شيئًا بصمت أسوأ من ألا يُصدر.
وسيعود مع نموذج لقواعد المناطق الزمنية. ما تفعله المنطقة الزمنية وما لا تفعله ←