مثال حلشدهای که با محاسبهگر خودش اختلاف داشت
من سایتی برای محاسبهگرهای هزینه بازسازی خانه اداره میکنم.
هر صفحه هزینهها را در چهار بخش نشان میدهد:
- یک ویجت تعاملی.
- یک جدول مرجع ایستا.
- مثالهای نوشتاری در متن.
- یک بخش سوالات متداول (FAQ).
من یک باگ بزرگ پیدا کردم. یک مثال نوشتاری میگفت هزینه پروژه ۶۲,۳۰۰ دلار است. ویجت میگفت هزینه همان پروژه ۵۶,۷۷۹ دلار است.
یک اختلاف ۵,۵۰۰ دلاری وجود داشت.
اعداد تصادفی نبودند. آنها از فرضیات پنهان متفاوتی نشأت میگرفتند. متن نوشتاری فرض را بر یک واحد HVAC جدید گذاشته بود. ویجت فرض را بر این گذاشته بود که شما از سیستم موجود استفاده خواهید کرد. هر دو درست بودند، اما با هم ارتباطی نداشتند.
این یک شکست رایج است. وقتی یک حقیقت واحد را در دو نقطه ذخیره میکنید، آنها از هم فاصله میگیرند (ناهمگام میشوند). شما فقط محتوا را کپی نمیکنید، بلکه دارید دادهها را تکرار میکنید.
من این مشکل را با قانونی که آن را source-first (اول-منبع) مینامم، حل کردم. این قانون دو بخش دارد.
بخش اول: یک هزینه فقط در یک مکان وجود دارد.
من از تایپ کردن اعداد در متنها و جداول خود دست کشیدم. اکنون، تابع محاسبهگر تنها منبع است. جداول و مثالهای نوشتاری، اعداد خود را مستقیماً در طول فرآیند ساخت (build process) از آن تابع میگیرند. اگر تابع تغییر کند، تمام اعداد صفحه بهطور خودکار تغییر میکنند. دیگر امکان عدم تطابق وجود ندارد، زیرا اعداد دارای مقدار یکسانی هستند.
بخش دوم: هر عدد باید منشأ خود را نشان دهد.
دادههای هزینه، حقیقتی دائمی نیستند؛ آنها منقضی میشوند. من یک شیء دادهای (data object) کوچک به هر محاسبه اضافه کردم که موارد زیر را نشان میدهد:
- سناریوی استفاده شده.
- منبع داده.
- تاریخ دسترسی به داده.
- زمان بازبینی دادهها.
این کار باعث صداقت دادهها میشود. اگر دادههای منبع اشتباه باشند، کل سایت اشتباه خواهد بود؛ اما حداقل سایت یکپارچه (consistent) خواهد بود. کاربر بلافاصله متوجه تناقض میشود و این اعتماد را از بین میبرد.
درس ساده است:
- اگر دو بخش در یک صفحه یک عدد مشابه را نشان میدهند، یکی باید آن را وارد (import) کند. آن را دوباره تایپ نکنید.
- از فرآیند ساخت خود برای همگامسازی دادهها استفاده کنید. این کار یک مشکل انضباطی را به یک غیرممکنِ فنی تبدیل میکند.
- از نوشتن دستی اعدادی که یک تابع قبلاً آنها را محاسبه کرده است، دست بکشید.
من یک روز را به جای نوشتن اعداد، صرف پاک کردن آنها کردم. پایگاه کد (codebase) من کوچکتر شده و دیگر به کاربرانم دروغ نمیگوید.
Source: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9