مثالی که با ماشینحساب خودش همخوانی نداشت
من وبسایتی دارم که ماشینحسابهای محاسبه هزینه بازسازی خانه را ارائه میدهد.
هر صفحه، یک هزینه مشابه را در چهار جای مختلف نشان میدهد:
- یک ویجت تعاملی.
- یک جدول مرجع ایستا.
- مثالهای متنی.
- بخش سوالات متداول (FAQ).
متوجه یک باگ شدم. در یک مثال متنی آمده بود که هزینه پروژه ۶۲,۳۰۰ دلار است، اما ویجت ماشینحساب میگفت هزینه همان پروژه ۵۶,۷۷۹ دلار است.
اختلاف ۵,۵۰۰ دلار بود.
این خطا به این دلیل رخ داد که من اعداد را دستی تایپ کرده بودم. من برای متن از فرضیاتی استفاده کرده بودم که با فرضیات بهکاررفته در کد متفاوت بود. در متن فرض بر این بود که یک واحد HVAC جدید خریداری میشود، اما در کد فرض بر این بود که سیستم از قبل موجود است. هر دو درست بودند، اما با هم مطابقت نداشتند.
این یک شکست رایج است. وقتی یک حقیقت واحد را در دو جای مختلف ذخیره میکنید، آنها از هم فاصله میگیرند.
من این مشکل را با دو قانون حل کردم.
قانون ۱: منطق اولویت با منبع.
تابع ماشینحساب تنها جایی است که یک عدد در آن متولد میشود. من دیگر اعداد را در جداول یا پاراگرافها تایپ نمیکنم. در عوض، از آن تابع استفاده میکنم تا جداول و مثالها را در زمان ساخت (build time) تولید کند.
اگر تابع تغییر کند، کل صفحه تغییر میکند. جدول و ویجت همیشه با هم همخوانی خواهند داشت، زیرا از منطق یکسانی استفاده میکنند.
قانون ۲: افزودن منشأ.
یک عدد تنها زمانی مفید است که بدانید از کجا آمده است. اکنون هر محاسبه شامل موارد زیر است:
- سناریوی خاص استفاده شده.
- منبع داده.
- تاریخ دسترسی به داده.
- تاریخ انقضای دادهها.
دادههای هزینه یک حقیقت دائمی نیستند، بلکه حقیقتی گذرا هستند. افزودن تاریخ بازبینی به من یادآوری میکند که دادهها را پیش از آنکه اشتباه شوند، بهروزرسانی کنم.
داشتن یک «منبع واحد حقیقت» (Single source of truth) شما را منسجم میکند. افزودن «منشأ» (Provenance) شما را صادق میکند.
اگر یک عدد را در دو جا نشان میدهید، دوباره آن را تایپ نکنید؛ بلکه آن را وارد (Import) کنید. اجازه دهید فرآیند ساخت (build process) شما، مدیریت تکرار را بر عهده بگیرد.
منبع: https://dev.to/mark_b5f4ffdd8e7cd58/the-worked-example-that-disagreed-with-its-own-calculator-4cp9