مثال حل‌شده‌ای که با محاسبه‌گر خودش اختلاف داشت

من سایتی برای محاسبه‌گرهای هزینه بازسازی خانه اداره می‌کنم.

هر صفحه هزینه‌ها را در چهار بخش نشان می‌دهد:

من یک باگ بزرگ پیدا کردم. یک مثال نوشتاری می‌گفت هزینه پروژه ۶۲,۳۰۰ دلار است. ویجت می‌گفت هزینه همان پروژه ۵۶,۷۷۹ دلار است.

یک اختلاف ۵,۵۰۰ دلاری وجود داشت.

اعداد تصادفی نبودند. آن‌ها از فرضیات پنهان متفاوتی نشأت می‌گرفتند. متن نوشتاری فرض را بر یک واحد HVAC جدید گذاشته بود. ویجت فرض را بر این گذاشته بود که شما از سیستم موجود استفاده خواهید کرد. هر دو درست بودند، اما با هم ارتباطی نداشتند.

این یک شکست رایج است. وقتی یک حقیقت واحد را در دو نقطه ذخیره می‌کنید، آن‌ها از هم فاصله می‌گیرند (ناهمگام می‌شوند). شما فقط محتوا را کپی نمی‌کنید، بلکه دارید داده‌ها را تکرار می‌کنید.

من این مشکل را با قانونی که آن را source-first (اول-منبع) می‌نامم، حل کردم. این قانون دو بخش دارد.

بخش اول: یک هزینه فقط در یک مکان وجود دارد.

من از تایپ کردن اعداد در متن‌ها و جداول خود دست کشیدم. اکنون، تابع محاسبه‌گر تنها منبع است. جداول و مثال‌های نوشتاری، اعداد خود را مستقیماً در طول فرآیند ساخت (build process) از آن تابع می‌گیرند. اگر تابع تغییر کند، تمام اعداد صفحه به‌طور خودکار تغییر می‌کنند. دیگر امکان عدم تطابق وجود ندارد، زیرا اعداد دارای مقدار یکسانی هستند.

بخش دوم: هر عدد باید منشأ خود را نشان دهد.

داده‌های هزینه، حقیقتی دائمی نیستند؛ آن‌ها منقضی می‌شوند. من یک شیء داده‌ای (data object) کوچک به هر محاسبه اضافه کردم که موارد زیر را نشان می‌دهد:

این کار باعث صداقت داده‌ها می‌شود. اگر داده‌های منبع اشتباه باشند، کل سایت اشتباه خواهد بود؛ اما حداقل سایت یکپارچه (consistent) خواهد بود. کاربر بلافاصله متوجه تناقض می‌شود و این اعتماد را از بین می‌برد.

درس ساده است:

من یک روز را به جای نوشتن اعداد، صرف پاک کردن آن‌ها کردم. پایگاه کد (codebase) من کوچک‌تر شده و دیگر به کاربرانم دروغ نمی‌گوید.

Source: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9