| توسعه نرم‌افزار |
| --- |
| فعالیت‌های اصلیدر مهندسی نرم‌افزار
* فرایند
* نیازمندی‌ها
* طراحی
* ساخت
* آزمون
* اشکال‌زدایی
* استقرار
* نگهداری
 |
| پارادایم‌ها و مدل‌ها
* چابک
* Cleanroom
* افزایشی
* پروتوتایپ
* مدل مارپیچی
* آبشاری
 |
| متدولوژی‌ها و چارچوب‌ها
* دواپس
* DSDM
* FDD
* IID
* Kanban
* Lean SD
* MDD
* MSF
* PSP
* توسعه سریع نرم‌افزارRAD
* SAFe
* Scrum
* SEMAT
* TSP
* RUP
* مدل وی
* XP
 |
| رشته‌های مورد حمایت
* رشته‌های مورد حمایت
مدیریت پیکربندی
* مستندسازی
* تضمین کیفیت (SQA)
* مدیریت پروژه
* تجربه کاربری
 |
| کاربردهای عملی
* توسعه آزمون محور
* BDD
* CCO
* CI
* CD
* DDD
* PP
* Stand-up
* TDD
 |
| ابزار
* کامپایلر
* اشکال‌زدا
* رخ‌نمانگار
* GUI designer
* مقایسه ابزارهای زبان مدل‌سازی یکپارچه
* محیط توسعه یکپارچه
* Build automation
* Release automation
* Infrastructure as Code
* آزمون
 |
| استانداردها و بدنه‌های دانش
* CMMI
* IEEE standards
* ایزو ۹۰۰۰
* ISO/IEC standards
* SWEBOK
* پم‌باک
* BABOK
 |
| واژه‌نامه‌ها
* Artificial intelligence
* Computer science
* Electrical and electronics engineering
 |
| رئوس مطالب
* Outline of software development
 |
| * ن
* ب
* و
 |

Planning and feedback loops in extreme programming (XP) with the time frames of the multiple loops.
**برنامه‌سازی مفرط** (به انگلیسی: extreme programming) که به اختصار XP نیز خوانده می‌شود، یک متدولوژی توسعه نرم‌افزار است که در آن هدف افزایش کیفیت نرم‌افزار و پاسخ‌گویی به نیازمندی‌های در حال تغییر کاربر است. به عنوان گونه‌ای از توسعهٔ نرم‌افزاری چابک (Agile software development) از انتشار (release)های متناوب در چرخه‌های کوتاه توسعه با هدف بهبود قابلیت تولید و معرفی نقاط کنترلی (Check Point) برای تطابق با نیازمندی‌های جدید کاربر، دفاع می‌کند.

برخی از ویژگی‌های این روش عبارت‌اند از:

* برنامه‌نویسی دونفره
* بازبینیِ کد
* آزمایش واحد (Unit testing)
* تا زمانی که به ویژگیِ خاصی نیازی نیست، آن ویژگی پیاده‌سازی نشود.
* تعامل زیاد با مشتری
* ساختارِ سازمانیِ مسطح (Flat organization)
* پاسخگویی به نیازهای دائماً در حال تغییر مشتری
* ارتباط مفید و سازنده میان برنامه‌نویس‌ها

نام «مفرط» در این روش به این دلیل گذاشته شده است که فعالیت های سودمند در روش‌های توسعه‌ی نرم‌افزاری پیشین در این روش به حد اعلای خود می‌رسند. برای نمونه بازبینیِ کد فعالیتی مفید است، انجام این کار به صورت پیوسته آن را به حدِ اعلای خود، که از اهداف برنامه‌نویسی مفرط است، می‌رساند.

ارزش‌های برنامه‌سازی مفرط
-------------------------

### ارتباط

برای محقق شدن ارتباطات صحیح بین مهندسان نرم‌افزار و سایر ذی‌نفع‌ها(stakeholders) باید همکاری نزدیک و غیررسمی (گفتاری) بین مشتری‌ها و تولیدکنندگان صورت بگیرد. همچنین باید نیازها در قالبی قابل فهم برای تمام طرفین درگیر اعم از مهندسین نرم‌افزار و مشتری‌ها بیان شود (metaphor). علاوه بر این باید از مستندسازی به شکل افراطی و در حجم زیاد اجتناب شود.

### سادگی

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

### بازخورد

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

### شجاعت

کنت بک از پایه‌گذاران این متدولوژی، عنوان می‌کند که انجام روش‌های برنامه‌سازی مفرط نیازمند شجاعت و نظم است. یک تیم نرم‌افزاری چابک (agile) باید شجاعت این را داشته باشد که برای نیازهای فعلی طراحی کند، نه برای نیازهای آینده.

### احترام

با پیروی از ارزش‌های ذکر شده، بین اعضای یک تیم چابک(agile) باید احترام متقابل شکل بگیرد.

فرایند برنامه‌نویسی مفرط
------------------------

### برنامه‌ریزی

روشی که در برنامه‌سازی مفرط برای جمع‌آوری نیازمندی‌ها وجود دارد **شنیدن** نام دارد. فعالیت برنامه‌ریزی در برنامه‌سازی مفرط نیز با شنیدن آغاز می‌شود. طی این فعالیت شنیدن چندین داستان کاربری(user story) ایجاد می‌شود که در آن‌ها خروجی‌ها، ویژگی‌ها و کارایی‌های سیستم توصیف می‌شود. هر داستان (مانند مورد استفاده) توسط مشتری نگاشته می‌شود و جزئیاتش روی یک کارت درج می‌شود. مشتری به هر یک از داستان‌های کاربری اولویتی اختصاص می‌دهد که این اولویت با توجه به میزان حیاتی بودن نقش آن داستان در کسب‌وکار تعیین می‌شود.

### طراحی

طراحی در برنامه‌سازی مفرط از اصل سادگی تبعیت می‌کند و یک طراحی ساده همواره بر یک طراحی پیچیده اولویت دارد.
طراحی دربرگیرندهٔ راهنمایی‌هایی برای نحوهٔ پیاده‌سازی داستان‌های کاربری است. در برنامه‌سازی مفرط طراحی کارایی‌های بیشتر از نیاز نیز مذموم است.

### برنامه‌نویسی

پس از نوشته شدن داستان‌های کاربری و طراحی اولیه، برنامه‌نویسی آغاز نمی‌شود بلکه آزمون‌های واحدی برای نرم‌افزار نوشته می‌شود که با توجه به داستان‌های کاربری و طراحی ساخته شده‌اند.
پس از این مرحله برنامه‌نویسی با تمرکز بر کد مورد نیاز برای گذراندن آزمون‌های واحد نوشته می‌شود و هیچ چیز دیگری به کد اضافه نمی‌گردد. یکی از مفاهیم کاربردی در مرحلهٔ پیاده‌سازی، برنامه‌نویسی دونفره است. در این روش دو نفر با یک کامپیوتر برنامه‌نویسی می‌کنند تا حل مسئله و کنترل کیفیت آسان‌تر شود.

### آزمون

آزمون‌های نرم‌افزار باید قبل از شروع پیاده‌سازی توسط چارچوبی که از آزمون خودکار(automated testing) پشتیبانی می‌کند نوشته شوند. استفاده از آزمون خودکار سبب می‌شود که هنگام تغییر کد - که در برنامه‌سازی مفرط زیاد رخ می‌دهد - آزمون رگرسیون بهتر انجام شود.

منابع
-----

* برنامه‌سازی مفرط در ویکی انگلیسی
* قواعد برنامه‌سازی مفرط

پانویس
------

1. ↑  Roger S. Pressman (۲۰۱۰)، *Software\_engineering*، McGraw-Hill، ص. p٫۷۲، شابک ۹۷۸-۰-۰۷-۳۳۷۵۹۷-۷
2. ↑  Don Wells (1999). "The Rules of Extreme Programming" (به انگلیسی). Don Wells. Retrieved 28 آگوست 2015. `{{cite web}}`: Check date values in: `|تاریخ بازدید=` (help)

|  |  |
| --- | --- |
|  | در ویکی‌انبار پرونده‌هایی دربارهٔ برنامه‌نویسی مفرط موجود است. |

| * ن
* ب
* و
مهندسی نرم‌افزار |
| --- |
| حوزه‌ها | تحلیل نیازمندی‌ها •  تحلیل سامانه‌ها •  طراحی نرم‌افزار •  برنامه‌نویسی •  روش‌های صوری •  وارسی مدل •  تست نرم‌افزار •  توسعه نرم‌افزار •  گسترش نرم‌افزار •  نگهداری نرم‌افزار |
| مفاهیم | مدل‌سازی داده •  معماری سازمانی •  مشخصات کاربردی •  زبان مدل‌سازی •  پارادایم برنامه‌نویسی •  نرم‌افزار •  معماری نرم‌افزار •  فرایند توسعه نرم‌افزار •  فرایند تولید نرم‌افزار •  کیفیت نرم‌افزار •  تضمین کیفیت نرم‌افزار •  Software archaeology •  تحلیل ساختمند |
| گرایشات | مدل چابک •  مدل طراحی جنبه‌گرا •  شیءگرایی •  آنتولوژی •  سرویس‌گرایی •  چرخه حیات توسعه سیستم‌ها |
| مدل‌ها | 

|  |  |
| --- | --- |
| مدل‌های توسعه | مدل چابک •  آریوپی  •  اسکرام •  مدل مارپیچی •  مدل آبشاری •  برنامه‌سازی مفرط •  مدل وی •  مدل تکراری و افزایشی •  پیش‌نمونه |
| مدل‌های دیگر | Automotive SPICE •  مدل بلوغ قابلیت یکپارچه •  مدل داده •  مدل تابع •  مدل اطلاعات •  فرامدل •  مدل شیءگرایی •  مدل‌سازی سیستم‌ها •  مدل نما |
| زبان‌های مدل سازی | IDEF •  زبان مدل‌سازی یکپارچه |

 |
| مهندساننرم‌افزار سرشناس | 
* ویکتور باسیلی
* کنت بک
* گریدی بوچ
* فردریک بروکز
* Barry Boehm
* وارد کانینگهام
* تام دی ماکرو
* ادسخر دیکسترا
* مارتین فولر
* تونی هور
* واتس هامفری
* مایکل ای. جکسون
* ایوار جاکوبسون
* Stephen J. Mellor
* برترند میر
* دیوید پارناس
* وینستون واکر رویس
* جیمز رامبا
* نیکلاوس ویرت
* Edward Yourdon
* Mohamed Fayad

 |
| حوزه‌های مرتبط | 
* علوم رایانه
* مهندسی کامپیوتر
* مدیریت پروژه
* مدیریت ریسک
* مهندسی سامانه‌ها

 |
|  •  رده  •  انبار |

|  |  |
| --- | --- |
| آیکون خرد | این یک مقالهٔ خرد رایانه است. می‌توانید با گسترش آن به ویکی‌پدیا کمک کنید. |