برنامه نویسی مفرط یا افراطی چیست؟
تحریریه کدیاد
تاریخ انتشار : دوشنبه 11 بهمن 1400
احتمالا برای افرادی که با متدولوژی agile آشنا هستند عبارت برنامهنویسی مفرط آشنا به نظر میرسد ولی بسیاری از افراد مفهوم این سبک از برنامهنویسی را نمیدانند و همین عامل نیز باعث بروز مشکلات زیادی برای آنها میشود. شما باید با مفهوم افراطی در برنامهنویسی آشنا شوید و مزایا و معایبی که این روش دارد را بررسی کنید تا متوجه شوید که آیا این شیوه برنامهنویسی میتواند گزینه مناسبی برای شما باشد یا خیر؟ به همین علت نیز ما در این مطلب قصد داریم کمی بیشتر درباره این سبک از برنامهنویسی صحبت کنیم و اطلاعات جامع و کاملی را درباره آن در اختیار شما قرار دهیم. شاید نام این سبک از برنامهنویسی در ابتدا باعث شود تا بسیاری از افراد از انتخاب آن منصرف شوند ولی شما نباید به نام آن دقت کنید بلکه سعی کنید مطالبی که در این مطلب درباره این شیوه بیان میکنیم را بهخوبی و بادقت بالا مطالعه کنید و مزایا و معایب آن را بررسی کنید.
اطلاعاتی که ما در ادامه این مطلب در اختیار شما قرار خواهیم داد از بهترین منابع موجود در این حوزه جمعآوری شده است و در نتیجه شما میتوانید نهایت اطمینان را به کیفیت محتوای این مطلب داشته باشید. پس برای بهدستآوردن اطلاعات بیشتر در خصوص برنامهنویسی افراطی به شما پیشنهاد میکنیم حتما ادامه این مطلب را مطالعه کنید.
برنامهنویسی مفرط
هرآنچه که باید درباره چیستی برنامهنویسی مفرط بدانید
برنامهنویسی مفرط در واقع یک متدولوژی توسعه نرمافزار است که در واقع بهعنوان زیرمجموعهای از برنامهنویسی با استفاده از متدولوژی agile شناخته میشود و برخی از ویژگیهای آن را نیز به ارث برده است. این سبک از برنامهنویسی در واقع بر اساس ارزشها، اصول و عملکردهای مختلف ساخته شده است و هدف از آن نیز این است که به تیمهای کوچک تا متوسط برنامهنویسی اجازه دهد تا بتوانند نرمافزاری با بالاترین کیفیت ممکن را طراحی کرده و توسعه دهند. علاوه بر این باعث میشود تا قابلیت سازگاری و مقاومت در برابر تغییرات نیز در نرمافزارهای طراحی شده توسط این تیمها به میزان زیادی بهبود پیدا کرده و شرایط بهتری را برای این تیمهای نرمافزاری فراهم میکند. چیزی که باعث شده است تا این سبک از برنامهنویسی متمایز از سایر متدولوژیها باشد این است که این متدولوژی بیشتر بر جنبههای فنی توسعه نرمافزار تاکید دارد.
این متدولوژی به میزان زیادی روی نحوه کار مهندسان تمرکز کرده و دقت خود را در این زمینه افزایش میدهد چراکه پیروی از روشها و متدولوژیهای مهندسی باعث میشود تا تیمها بتوانند کدهای باکیفیتتری را در مدتزمان کوتاهتری نوشته و برنامههای خود را توسعه دهند. بهطورکلی میتوان گفت این متدولوژی برنامهنویسی در واقع شامل شیوهها و عملکردهای خوب است که تا حد افراطی تقویت پیدا کردهاند. بهعبارتدیگر این سبک بیانگر این است که اگر یک عملکرد خوب است بهتر است که همیشه آن را انجام داده و در تمام پروژههای خود از آن استفاده کنیم.
تاریخچه برنامهنویسی مفرط
تاریخچهای مختصر از برنامهنویسی مفرط
منشا این متدولوژی برنامهنویسی به دهه 90 میلادی بازمیگردد که Kent Beck (که بعدها بهعنوان یکی از نویسندگان Agile Manifesto شناخته شد) برای رهبری تیم Comprehensive Compensation System که برای Chrysler استخدام شد. این پروژه در سال 1993 شروع شده بود و تا سال 1996 پیشرفت چندانی نداشت. ازآنجاییکه Beck برای مدیریت یک تیم تازهکار استخدام شده بود بهترین اقدام برای او این بود که به اعضای تیمش تکنیکها و تمرینهایی که درگذشته برای او مفید بود را آموزش دهد. اعضای تیم او با موفقیت زیادی شروع به استفاده از روشهایی مانند برنامهنویسی زوجی (pair programming) و TDD کردند و نتیجه فوقالعادهای را نیز از انجام این کار دریافت کردند. در ادامه یکی دیگر از نویسندگان Agile Manifesto که اتفاقا یکی از دوستان Kent Beck بود نیز به این تیم اضافه شد تا تیم آنها تقریبا کامل شود.
در سال 1999 Kent Beck در کتاب خود با عنوان Extreme Programming Explained: Embrace Change تلاش کرد تا تمام اصول، روشها و ارزشهایی که در برنامهنویسی مفرط به دست آورده بود را فرمولبندی کرده و در اختیار توسعهدهندگان و تیمهای نرمافزاری قرار دهد. بهاینترتیب از همین سال بود که عبارت برنامهنویسی افراطی نیز وارد دنیای توسعه نرمافزار شد و در حال حاضر پس از گذشت سالها از آن زمان شاهد آن هستیم که بسیاری از تیمهای بزرگ و کوچک در سراسر دنیا از این روش استفاده کرده و از مزایای آن نهایت بهره را میبرند.
عملکرد برنامهنویسی مفرط
نحوه کار برنامهنویسی مفرط به چه شکل است؟
برنامهنویسی مفرط برخلاف سایر متدولوژیهای برنامهنویسی نسبت به مهندسان بسیار خوشبینتر عمل میکند و همین عامل نیز باعث محبوبیت آن در میان بسیاری از تیمهای توسعه نرمافزار شده است. علاوه بر این عملکرد باید بدانید که این سبک از برنامهنویسی بر اساس ارزشها و اصول توسعه نرمافزار ساخته شده است. این ارزشها در واقع اهداف را برای تیمها مشخص میکنند. آنها میتوانند بهاینترتیب بهعنوان یک تیم واحد کار کنند تا تصمیمات شما را در سطح بالایی عملی و اجرا کنند. بااینحال نباید فراموش کنید که مفاهیم انتزاعی که در این سبک از برنامهنویسی و توسعه نرمافزار وجود دارند ممکن است گاهی اوقات ابهاماتی را برای شما به وجود بیاورد. بهعنوانمثال گفتن این جمله که شما بهعنوان یک مدیر برای ارتباط بهتر ارزش زیادی قائل هستید ممکن است نتایج متفاوتی را به همراه داشته باشد.
عملکردها از برخی جهات دقیقا مخالف ارزشها عمل میکنند. عملکردها مشخص میکنند که دقیقا چه کاری باید توسط یک تیم انجام شود و علاوه بر این به اعضای تیم کمک میکنند تا خود را نسبت به ارزشهایی که در این متدولوژی تعریف شده است مسئول نگه دارند. اصول در این متدولوژی در واقع شامل دستورالعملهای خاصی است که شکاف بین عملکرد و ارزشها را پر میکند. در واقع اگر اصول در این سبک از برنامهنویسی وجود نداشته باشند احتمالا اعضای تیم در ارتباط برقرار کردن بین ارزشهای تعریف شده و همینطور عملکردهایی که وجود دارد مشکلات و چالشهای زیادی خواهند داشت.
ارزشها
ارزشها در برنامهنویسی مفرط
ارزش برنامهنویسی مفرط ارتباط، سادگی، بازخورد، شجاعت و احترام است. در ادامه قصد داریم درباره هریک از این موارد صحبت کنیم.
ارتباط: فقدان ارتباط مانع از جریان یافتن دانش در داخل یک تیم برنامهنویسی و توسعه نرمافزار میشود. اغلب زمانی که مشکلی در پروژه وجود دارد شخصی هست که بداند چگونه باید آن را حل کرد اما عدم ارتباط اعضای یک تیم با یکدیگر باعث جلوگیری از درک عمیق مشکل شده و در نتیجه از حل شدن آن نیز جلوگیری میکند.
سادگی: سادگی بیانگر این است که شما همیشه سعی کنید سادهترین کار را انجام دهید. دقت داشته باشید که سادگی باید بادقت همراه باشد و به این معنا نیست که شما از حل کردن مشکلات پیچیده خودداری کنید. علاوه بر این باید توجه داشته باشید که سادگی به میزان زیادی به زمینهای که در آن فعالیت دارید نیز بستگی دارد. آنچه که برای یک تیم ساده به نظر میرسد ممکن است ممکن است برای یک تیم دیگر نیازمند سطح مهارت و تجربه بالایی باشد.
بازخورد: بازخورد در این متدولوژی برنامهنویسی و توسعه نرمافزار دقیقا همان ویژگی است که در متدولوژی agile نیز مورداستفاده قرار گرفته و کاربرد دارد. به همین علت نیز شما باید توجه ویژهای به این مسئله داشته باشید. تیمهایی که از این متدولوژی استفاده میکنند تغییرات را راحتتر میپذیرند و بازخوردهای مثبت و منفی را در پروژههای خود دخالت میدهند.
شجاعت: Beck شجاعت را در واقع اقدام موثر در زمان مواجه شدن با ترس تعریف میکند. بهعنوان یک مهندس نرمافزار شما باید از مسائل مختلف نترسید و بدون ترس وارد چالشهای جدید شوید.
احترام: یک فرض بسیار کلیدی و مهم در این متدولوژی این است که تمامی افراد به کار خود احترام میگذارند و اهمیت میدهند. اگر دقت و احترام به وظایف و به یکدیگر در یک تیم وجود نداشته باشد حتی بالاترین سطح توان فنی نیز نمیتواند باعث موفقیت یک پروژه شود.
اصول برنامهنویسی مفرط
نکاتی مهم در خصوص اصول برنامهنویسی مفرط
اصول در این شیوه برنامهنویسی راهنمای خاصتری را درباره ارزشها به یک تیم برنامهنویسی و توسعه نرمافزار ارائه میدهند. آنها در واقع دستورالعملهایی هستند که ارزشها را واضح و روشن کرده و ابهاماتی که در آنها وجود دارند را از بین میبرند. بهعنوانمثال ارزش شجاعت ممکن است در نظر یک تیم اینچنین به نظر برسد که باید یکباره با یک مشکل بزرگ در پروژه مواجه شده و آن را تغییر دهیم درحالیکه اصل گامهای کوچک نشاندهنده این است که تغییرات بزرگ میتوانند خطرناک باشند و ما در برنامهنویسی مفرط باید این تغییرات را با گامهای کوچک انجام دهیم. یکی از مهمترین این اصول تعامل انسانی است. این انسانها هستند که با نرمافزارها در تعامل هستند و به همین علت نیز در تیمهای توسعه نرمافزار باید به طور کامل با رفتارهای انسانی آشنایی داشته باشید. اقتصاد یکی دیگر از اصول کلیدی و بسیار مهم در این سبک از برنامهنویسی است. تیمها دائما باید نیازهای پروژه و خطرات اقتصادی را بررسی کنند.
سود متقابل یک اصل بسیار مهم دیگر در این متدولوژی است که بر اساس آن شما باید از ارائه راهکارهایی که سود کردن یک سمت از پروژه در آن باعث ضرر دیدن طرف دیگر میشود خودداری کنید.
برنامهنویسی مفرط و Scrum
برنامهنویسی مفرط در مقایسه با Scrum
Scrum فریمورکی است که به تیمهای توسعهدهنده در توسعه نرمافزارهای پیشرفته و پیچیده کمک میکند که برای انجام این کار از یک روش تطبیقی استفاده میکند. یکی از نکات بسیار مهم در خصوص Scrum این است که نحوه انجام کار را به توسعهدهندگان دیکته نمیکند و این در حالی است که برنامهنویسی مفرط تاکید دارد که تنها از روشهایی که خوب هستند استفاده شود. یکی دیگر از نکات بسیار مهم این است که برنامهنویسی افراطی را تنها میتوان در پروژههای برنامهنویسی مورداستفاده قرار داد و از مزایای آن بهرهمند شد درحالیکه امروزه شما میتوانید از Scrum برای هر پروژهای که از یک رویکرد تکراری بهره میبرد استفاده کنید و هیچ محدودیتی در این زمینه برای شما وجود ندارد.
متدولوژی مفرط با تغییرات بسیار سادهتر برخورد میکند و حتی در مواقعی اعضای تیمها را تشویق میکند که عملکردها را بر اساس نیازهای خود در یک پروژه تغییر داده و به شکل متفاوتی از این متدولوژی در پروژههای مختلف استفاده کنند. این در حالی است که راهنمای Scrum بهوضوح در خصوص این موضوع بیان کرده است که اگر تنها بخشهایی از Scrum را در پروژه خود پیادهسازی کرده باشید و سایر بخشها را اعمال نکرده باشید در واقع شما از متدولوژی Scrum استفاده نکردهاید. توجه داشته باشید که Scrum تنها یک فریمورک است که شما باید عملکردها و شیوههای انجام کار را در آن پر کنید و به همین علت نیز شما میتوانید در یک پروژه بهصورت همزمان هم از Scrum و هم از متدولوژی مفرط استفاده کنید.
متدها و تکنیکها
متدها و تکنیکها در برنامهنویسی مفرط
متدها و تکنیکها در واقع همان عملکردها در برنامهنویسی مفرط هستند. بهطورکلی آنها را میتوان به سه گروه اصلی تقسیمبندی کرد که این سه گروه عبارتاند از مهندسی نرمافزار، محیط کار و مدیریت پروژه.
مهندسی نرمافزار
مهندسی نرمافزار شامل تکنیکهای مختلفی است که از جمله آنها میتوان به موارد زیر اشاره کرد:
- برنامهنویسی زوجی که در آن شما و همکارتان بهصورت دوتایی روی یک دستگاه کارکرده و نتایج را تجزیهوتحلیل میکنید.
- سرور ادغام پیوسته باید در 10 دقیقه ساخته شود تا شما مجبور باشید تستها را در سطح متوسط طراحی کنید.
- برنامهنویسی Test-First: در این شیوه شما باید ابتدا یک تست بنویسید، سپس کدی را بنویسید که بتواند این تست را بپذیرد و در ادامه سعی میکنید کد خود را به شکل تمیزتری بازنویسی کنید.
- TDD میتواند مزایایی از جمله بازخورد بهتر، کمک به برنامهنویسان برای ایجاد یک ریتم و چرخه بهتر کدنویسی و پوشش 100 درصدی کدها را برای شما به همراه داشته باشد.
- طراحی افزایشی به این معناست که شما باید هر روز روی طراحی اپلیکیشن و پروژه خود سرمایهگذاری کرده و آن را بهبود دهید.
محیط کار
- اعضای تیم باید در یک فضای باز بوده و ارتباط گرفتن با یکدیگر را تمرین کنند.
- هرکسی که در موفقیت یک پروژه دخیل بوده است بخشی از تیم به شمار میآید.
- شما باید با استفاده از یک محیط فیزیکی اطلاعاتی را درباره پروژه منتشر کنید که به کل اعضای تیم این اجازه را میدهد تا بتوانند از میزان پیشرفت پروژه مطلع شوند.
- شما باید تنها تا زمانی کار خود را ادامه دهید که مطمئن باشید تمام اعضای تیم باانرژی در حال کارکردن هستند.
مدیریت پروژه
- نیازهای کار باید در قالب داستانهایی بیان شود تا اعضای تیم روی آنها کار کنند.
- چرخههای سهماهه و هفتگی را برای توسعه پروژه جدی بگیرید.
- برگزاری جلسات کلیدی بین اعضای تیم از اهمیت زیادی برخوردار است.
- چرخههای هفتگی با یک جلسه در ابتدای هفته آغاز میشوند.