وقتی مهندسی نرم‌افزار اساسی میشه: روش‌های PBFD و PDFD رو بشناس!

Fall Back

خب بچه‌ها، امروز می‌خوام یه مقاله خفن رو براتون خلاصه کنم که درباره دو تا روش جالب و در واقع خیلی کاربردی توی دنیای توسعه نرم‌افزار حرفه‌ای حرف می‌زنه: PBFD و PDFD. اسم‌هاشون خیلی علمی به نظر میاد اما قول میدم سخت نیستن و می‌شه راحت توی زندگی واقعی فهمید به چه درد می‌خورن!

بذارین اول با اسم‌هاشون شروع کنیم. PBFD یعنی “Primary Breadth-First Development” و PDFD هم یعنی “Primary Depth-First Development”. حالا اینا چی هستن؟ در واقع این دوتا روش هستن که برای مهندسی نرم‌افزار در مقیاس بالا (یعنی سیستم‌های گنده و جدی) دقیقا مرحله به مرحله تعریف شده‌ان و حتی اعتبارسنجی‌شون هم با ابزارهای رسمی و حساب کتابی تایید شده.

ایده‌شون از اینجا میاد که خیلی وقت‌ها وقتی قراره یه نرم‌افزار خیلی بزرگ با تیم‌های پرجمعیت و کلی بخش درست بشه، کلی اشتباه و بی‌نظمی پیش میاد. به‌خصوص اگه فقط کار رو بسپریم دست برنامه‌نویس‌ها و امید داشته باشیم اتوماتیک همه چیز درست پیش بره، نتیجه معمولاً هیچی نمی‌شه! این دو روشی که حرفشون رو می‌زنیم، اومدن یه راه حل رسمی و ساختاری ارائه دادن.

چطوری این کار رو کردن؟ با استفاده از چیزی که بهش می‌گن «مدل‌سازی گراف» یا همون graph-theoretic modeling. یعنی ساختن یه مدل با استفاده از گراف (همون شکل‌های نقطه‌ای و خط‌داری که تو ریاضی داشتیم!) تا مراحل و اجزای نرم‌افزار مشخص و دقیق باشه. اینجوری می‌تونیم با خیال راحت بگیم ساختار کلی نرم‌افزارمون ایرادی نداره.

فرق PBFD و PDFD با روش‌های قبلی اینه که اینا با گراف‌های جهت‌دار و لایه‌ای کار می‌کنن – یه توضیح ساده: گراف جهت‌دار یعنی بین نقاطش (که همون بخش‌های مختلف نرم‌افزار باشن) مسیر رفت و برگشت تعریف شده است و لایه‌ای یعنی اجزا به صورت طبقه بندی شده کنار هم قرار می‌گیرن. این مدلسازی باعث میشه بشه همه چیز رو به‌صورت مرحله‌ای و بدون قاطی‌کاری جلو برد.

برای اینکه مطمئن بشیم روش‌ها درست و بدون اشکال کار می‌کنن، از چند ابزار رسمی استفاده کردن. یکی «ماشین حالت یکتا» (unified state machines) که یعنی هر بخش نرم‌افزار می‌دونه دقیقا تو چه حالتیه و چی باید انجام بده. دومی هم CSP هستش – Communicating Sequential Process که مثل یه فریم‌ورک ریاضی واسه نظم دادن به ارتباط بین قسمت‌های مختلف نرم‌افزار عمل می‌کنه.

یه چیزی هم که خیلی مهمه اینه که این روش‌ها خاصیت‌هایی مثل termination (یعنی اینکه یه جایی کارشون تموم میشه و بی‌پایان نمی‌مونن) و structural completeness (ساختار کامل و بی‌نقص) رو تضمین می‌کنن. این ویژگی‌ها خیلی واسه پروژه‌های بزرگ اهمیت دارن چون نمی‌خوایم پروژه‌مون نیمه‌کاره یا پر از ایراد بمونه!

حالا یه تکنیک باحال هم به اسم TLE معرفی کردن: Three-Level Encapsulation؛ این عبارت یعنی محصورسازی یا کاور کردن داده‌ها توی سه لایه که با استفاده از bitmask (یه جور کدینگ عددی خیلی کم‌حجم و سریع) باعث میشه به طور تضمینی عملیات آپدیت داده‌ها همیشه در زمان ثابت (constant-time) انجام بشه. یعنی هیچ وقت مهم نیست چند داده داری، سرعتت همیشه یکیه – خیلی خفن!

یکی از نتایج خیلی جذاب این بود که روش PBFD رو توی یه شرکت بزرگ توی بازه ۸ ساله استفاده کردن و فهمیدن سرعت توسعه از Salesforce OmniScript بیشتر از ۲۰ برابر بهتر بوده و سرعت Query گرفتن از دیتابیس هم حدود ۷ تا ۸ برابر سریع‌تر از مدل‌های معمولی رابطه‌ای! واقعا جای کف زدن داره.

همه این روش‌ها با MVPهای اوپن‌سورس پیاده‌سازی شدن. (MVP یعنی Minimum Viable Product – یه نسخه اولیه کاربردی از نرم‌افزاره که سریع و ساده فقط امکانات اساسی رو داره.) اینا رو کامل منتشر کردن که همه بتونن امتحان کنن و چک کنن، پس برای تحقیق و یا حتی استفاده صنعتی کاملاً بازن.

PDFD هم که نسخه فنی‌تر و باحال‌تر داستانه، نشون میده که رویکردشون از پایه به درستی طراحی شده و با تست‌های رسمی ثابت کردن کارش درست و اصولیه.

در نهایت، این دو روش عملاً اومدن یه شیوه قابل بازتولید و شفاف معرفی کردن که ترکیبشون میشه مهندسی نرم‌افزار سنگین ولی با تکیه بر تایید و آزمایش رسمی – حالا دیگه می‌تونیم با خیال راحت با پروژه‌هایی با مقیاس عظیم سر و کله بزنیم!

خلاصه که اگر دنبال یه راه تضمینی و سریع برای توسعه نرم‌افزار در سطح سازمانی هستین، این مدل‌ها واقعاً ارزش خوندن و حتی امتحان کردن رو دارن. جالب‌تر اینکه همه داکیومنت‌ها، کدها و دیتاهاشون رایگان رو نت هست و می‌تونین برای پروژه یا تحقیق بعدیتون استفاده کنین!

منبع: +