“Specification by Example” by Example
آن یکی شیر است که آدم میخورد
آن یکی شیر است که آدم میخورد
کان یکی شیر است اندر بادیه
کان یکی شیر است اندر بادیه
ابیات بالا منتسب به حضرت مولانا و از مجموعه داستان طوطی و بقال برگزیده شده.
اگر به اعجاز ابیات بالا نگاه کنیم میبینیم که کلمات شیر در دو مصرع اول، و بادیه(معنای کاسه) در دو مصرع دوم، چگونه به زیبایی بکار گرفته شده اند.
شاعر در اینجا به زیبایی از صنایع ادبی استفاده کرده و شاهکاری ادبی خلق کرده.
از زاویهای دیگر اما، با نگاهی دقیقتر به شعر بالا، این شعر بهمون نشون میده که برای جلوگیری از اشتباه و ابهام، باید مفاهیم رو دقیق و واضح تعریف کنیم. همونطور که "شیر" در این شعر دو معنی کاملاً متفاوت داره، ایضا “بادیه”، در تعریف ویژگیهای محصول باید از بکار بردن عمدی یا سهوی این صنایع ادبی جدا خودداری کنیم.
رویکرد Specification by Example با همین هدف به وجود اومده: به جای تعریفهای انتزاعی، با مثالهای ملموس و قابل فهم، رفتار سیستم رو مشخص میکنیم و نشون میدیم که دقیقاً چطور باید کار کنه تا از هرگونه ابهامی جلوگیری بشه. ما از با کمک ارائه مثالهای ملموس، ساده، و مشخص، ویژگی(specification) و بصورت کلی چیزی که در ذهن داریم رو مشخص میکنیم.
فرض کنید میخوایم یک ماشین حساب ساده را طراحی کنیم. اسم این ماشین حساب را "حسابچی" میذاریم. "حسابچی" باید عملیات اصلی ریاضی مثل جمع، تفریق، ضرب و تقسیم رو انجام بده.
برای تعریف دقیق نحوه عملکرد جمع در "حسابچی"، از رویکرد Specification by Example استفاده میکنیم. به این ترتیب، با ارائه مثالهای مشخص، انتظاراتمون رو از ویژگی جمع بیان میکنیم. این کار رو به صورت یک مکالمه بین دو نفر، تقی و نقی، نشون میدم:
مکالمه بین تقی و نقی:
تقی: خب، برای جمع تو "حسابچی" اول از یه چیز خیلی ساده شروع کنیم: ۲ + ۲، جوابش میشه ۴، درسته؟
نقی: آره، این که خیلی واضحه. جمع دو تا عدد صحیح و مثبت.
تقی: حالا یه کم بزرگترش کنیم: ۲ + ۱۰، میشه ۱۲.
نقی: اوکی، اینم مثل قبلیه. فقط اعداد بزرگتر شدن.
تقی: حالا ۲ + ۱۲۵۰ رو امتحان کن.
نقی: خب، اینم میشه ۱۲۵۲. پس "حسابچی" باید از اعداد صحیح بزرگ هم پشتیبانی کنه.
تقی: دقیقاً. حالا فرض کن بخوایم اعداد اعشاری رو هم جمع کنیم. مثلاً ۲ + ۱۰.۲.
نقی: خب، این میشه ۱۲.۲. پس "حسابچی" باید اعداد اعشاری رو هم در نظر بگیره.
تقی: عالیه. حالا یه کم پیچیدهترش کنیم. ۲ + ۱۰.۲ + ۲۵ چی؟ یعنی سه تا عدد رو با هم جمع کنیم.
نقی: این میشه ۳۷.۲. پس "حسابچی" باید بتونه چند تا عدد رو هم با هم جمع کنه، حتی اگه اعشاری باشن.
تقی: آفرین. حالا یه چیز دیگه. ۲ + ۲ + (۲ * ۲) رو حساب کن. اینجا یه عبارت ریاضی داریم که هم جمع داره و هم ضرب.
نقی: خب، طبق قواعد ریاضی، اولویت با ضربه، پس ۲ ضربدر ۲ میشه ۴، بعدش با ۲ و ۲ جمع میشه که میشه ۸. پس "حسابچی" باید از عبارات ریاضی (expressions) و تقدم عملگرها هم پشتیبانی کنه. یعنی بدونه اول ضرب رو حساب کنه بعد جمع رو.
تقی: دقیقاً همینطوره.
همانطور که مشاهده کردید، در این روش با ارائه مثالهای ملموس و گام به گام، ویژگیهای سیستم را مشخص کردیم.
هر مثال، بر پایه مثال قبلی بنا شده و جنبه جدیدی از رفتار سیستم رو آشکار کرد. همین کار باعث شد که که همگی ذینفعان درک مشترکی از چیزی که قرار تولید کنند داشته باشند. این مثالها همینطور حکم proof-of-work کار نهایی رو هم دارند.
یعنی قبل از پیادهسازی هر خط کدی ما مکانیزم نهایی اعتبار سنجی سیستم رو بهش دست پیدا کردیم.
>>Click here to continue<<