جمعه ۷ اردیبهشت ۱۴۰۳ |  عضویت / ورود

بزرگ‌ترین مشکلی که در برنامه نویسی پروژه‌های بزرگ با آن مواجه می‌شوید


از زمان ارائه نمرا و تستا ۳، یک مشکل کم‌کم دارد خودش را نشان می‌دهد و آن اینکه:

کاربران به دلخواه خود و یا با سفارش به برنامه‌نویسان، تغییرات دلخواهشان را روی کدهای سیستم اعمال می‌کنند. این موضوع زمانی به معضل تبدیل می‌شود که ما بخواهیم یک آپدیت جدید برای سیستم ارائه کنیم!

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

این معضل در تمام پروژه‌های برنامه‌نویسی که به صورت عمومی عرضه می‌شود وجود دارد. حتی در ویندوز و سیستم عامل‌های گوشی‌ها.

روش‌های برخورد با این مشکل؟

- روش WordPress: جداسازی هسته از پوسته:

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

اما اگر یک کاربر به هر حال بخواهد تغییرات اساسی در سیستم بدهد، باز هم مجبور می‌شود در هسته دست ببرد که در این حالت وردپرس مفهوم Plugin را مطرح کرده است. پلاگ‌این‌ها می‌توانند هر تغییری در حیطه خودشان بدهند اما هرگز امکان تغییر در هسته را ندارند. مثلاً می‌توانند یک جدول به دیتابیس اضافه کنند اما نمی‌توانند جداول اصلی سیستم را حذف کنند یا تغییر دهند.

این روش طبیعتاً بهترین روش است اما معایبی هم دارد:
- پیاده‌سازی این ایده بسیار سخت است. باید هسته آنقدر قدرتمند طراحی شده باشد که هرگز نیاز به تغییر توسط کاربر برای انجام کارهایش نداشته باشد.
- به هر حال، باز هم گاهی برخی تغییرات از عهده پلاگ‌این خارج است و باید نهایتاً دست در هسته برد.

- روش Apple در iOS: کلاً دسترسی به هسته، ممنوع باشد و کاربران محدود شوند:

می‌توان مثل Apple که در iOS این کار را کرده است، دسترسی کاربران به هسته سیستم را ممنوع کرد تا همیشه مطمئن بود که کدهای هسته‌ی کاربر دستکاری نشده و با خیال راحت آپدیت عرضه کرد و مطمئن بود که تمام کاربران هم با خیال راحت سیستم را آپدیت می‌کنند.

چند روز پیش، اپل کنفرانس WWDC2013 را برگزار کرد. اگر آن سمینار را دیده باشید، تیم‌کوک رئیس اپل این نمودار را نشان داد:

https://img.aftab.cc/news/92/ios_update.jpg

این نمودار نشان می‌دهد که ۹۳ درصد کاربران اپل از آخرین نسخه سیستم عامل iOS استفاده می‌کنند این در حالی است که فقط ۳۳ درصد کاربران آندروید به‌روز هستند و از آخرین نسخه استفاده می‌کنند.

این دقیقاً همین معضلی است که همه برنامه‌نویسان با آن مواجه هستند!

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

از طرفی، در پروژه‌های تحت وب مثل تستا و نمرا و وردپرس و امثالهم اصلاً امکان بستن دسترسی به هسته وجود ندارد!

- روش دیگر: ارائه Change Log

یکی دیگر از روش‌های برخورد با این مشکل این است که برای کسانی که هسته را تغییر نداده‌اند، آپدیت رسمی عرضه کرد که با خیال راحت آپدیت را نصب کنند و از امکانات و تغییرات بهره ببرند اما در کنار آن، یک Change Log هم ارائه کرد. Change Log را «لیست تغییرات» ترجمه کنیم. یعنی تیم پشتیبان پروژه باید یک جا بنویسد که چه تغییراتی در سیستم داده است؟ مثلاً باید بنویسید در فایل x.php در خط y فلان کد به کد z تغییر کرده است. در این صورت، کسانی که هسته سیستم را تغییر داده‌اند باید خودشان یکی یکی تغییرات جدید را اعمال کنند.

 

این مطلب را بیشتر برای این نوشتم که یک لیست داشته باشیم که بتوانیم یک Trade Off (سبک سنگین) بین گزینه‌های پیش رویمان انجام دهیم و یکی را برای آینده‌ی تستا و نمرا و دیگر سیستم‌ها انتخاب کنیم.

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

موفق باشید؛
حمید رضا نیرومند

کلمات کلیدی: برنامه نویسی، پروژه های برنامه نویسی، روش wordpress ،پلاگ، ویندوز، شرکت اپل، روش ارائه change log ، رفع مشکل در تستا و نمرا، مشکل بزرگ در برنامه نویسی

[ارسال شده در مورخه : شنبه، 25 خرداد، 1392 توسط Hamid]
[ #برنامه‌ نويسي]



بازدیدها از این مطلب: 4638 بار   امتیاز متوسط : 0  تعداد آراء: 0   امتیاز دهید:

نظرات طرح شده

نام: [ کاربر جدید ]
ایمیل:

نظر:


اجازه استفاده از تگهای HTML را ندارید


جمع عدد 6 با 9 را در كادر زیر وارد نمایید:
(این كار برای جلوگیری از فعالیت موتورهای اسپمر است)


* توجه: نظر شما بعد از بررسی، نمایش داده خواهد شد.

[بدون موضوع]                توسط amirhosein در مورخه : دوشنبه، 3 تیر، 1392(لینک نظر)
اگر بتوانید خودتان را از مهلکه خاص نویسی نجات دهید بسیار دردسرهایتان کمتر می شود. خیلی محکم بگویید همین است و چیز دیگری نیست! بجای آن سعی کنید انقدر انطاف سیستم را بالا ببرید که همه نیازها را پوشش بدهد. دریافت مزد برای توسعه خاص سیستم به دردسرهای بعدی و عدم ناسازگاری در نسخه های جدید نمی ارزد. در رخی موارد گیر مشتریانی می افتید که حاضر می شوید پولشان را پس بدهید. باز هم تاکید می کنم داشتن مشتریان کم با دردسر کمتر بهتر از مشتریان زیاد اما گرفتار شدن است.


[ ارسال جوابیه ]


وحید حیدری (امتیاز : 0)(لینک نظر)
توسط وحید حیدری در مورخه : چهارشنبه، 14 مهر، 1395
سلام.

گفتم شاید نظر منم بدردتون بخوره.

به نظر من اصلا سورس نرم افزارو به مشتریان ندید.

کل نرم افزارو روی یه سرور قدرتمند پیاده سازی کنید.

هر مشتری در سایت ثبت نام کنه و فقط یه دیتابیس جدید برای اون مشتری ساخته بشه.

هر مشتری هم که خواست امکانات بیشتری نسبت به بقیه داشته باشه فقط کافیه اون امکانو براش اضافه کنید و برای اون کاربر فقط قابل نمایش باشه.

برای اپدیت هم نیاز نیس به کاربراتون بگید دانلود کنن کافیه خودتون نرم افزارو ارتقا بدید.


[ ارسال جوابیه ]